7

我有一个具有 N 个输入节点和 N 个输出节点的神经网络,可能还有多个隐藏层和递归,但让我们先忘记这些。神经网络的目标是学习一个 N 维变量 Y*,给定 N 维值 X。假设神经网络的输出是 Y,学习后应该接近 Y*。我的问题是:是否有可能得到输出 Y* 的神经网络的逆?也就是说,我如何获得在放入神经网络时会产生 Y* 的值 X*?(或接近它的东西)

问题的一个主要部分是 N 非常大,通常在 10000 或 100000 的数量级,但是如果有人知道如何为没有重复或隐藏层的小型网络解决这个问题,那可能已经很有帮助。谢谢你。

4

5 回答 5

3

如果你可以选择神经网络使得每一层的节点数相同,并且权重矩阵是非奇异的,并且传递函数是可逆的(例如leaky relu),那么该函数将是可逆的。

这种神经网络简单来说就是矩阵乘法、偏置加法和传递函数的组合。要反转,您只需要以相反的顺序应用每个操作的反转。即取输出,应用逆传递函数,乘以最后一个权重矩阵的逆,减去偏置,应用逆传递函数,乘以倒数第二个权重矩阵的逆,以此类推向前。

于 2016-04-15T20:19:33.270 回答
2

这是一个可以用自动编码器解决的任务。您可能还对可以堆叠形成深度信念网络 ( DBN ) 的受限玻尔兹曼机 ( RBM )等生成模型感兴趣。RBM 构建数据 v 的内部模型 h,可用于重建 v。在 DBN 中,第一层的 h 将是第二层的 v,依此类推。

于 2013-02-28T10:03:31.820 回答
1

泽娜是对的。如果您使用双射(可逆)激活函数,您可以逐层反转,减去偏差并取伪逆(如果每层有相同数量的神经元,这也是精确的逆,在一些温和的规则条件下)。重复条件:dim(X)==dim(Y)==dim(layer_i), det(Wi) not = 0

示例: Y = tanh( W2*tanh( W1*X + b1 ) + b2 ) X = W1p*( tanh^-1( W2p*(tanh^-1(Y) - b2) ) -b1 ),其中 W2p和 W1p 分别表示 W2 和 W1 的伪逆矩阵。

于 2016-11-24T10:12:40.883 回答
1

获得期望的 x 并产生期望的 y 的另一种方法是从随机 x(或作为种子的输入)开始,然后通过梯度下降(类似于反向传播的算法,不同之处在于不是找到权重的导数和偏差,你会发现 x 的导数。此外,不需要小批量。)重复调整 x,直到它产生接近所需 y 的 y。这种方法的优点是它允许输入种子(如果不是随机选择,则从 x 开始)。另外,我假设最终的 x 与初始的 x(seed) 有一些相似性,这意味着该算法具有转置能力,具体取决于神经网络应用程序的上下文。

于 2018-05-25T15:01:22.177 回答
1

以下论文是对从神经网络中学习到的函数进行反演的案例研究。这是一个来自行业的案例研究,看起来是了解如何解决问题的良好开端。

于 2017-01-24T03:16:43.127 回答