我有一个神经网络,有N个输入节点和N个输出节点,可能还有多个隐藏层和重复,但让我们先忘掉它们。神经网络的目标是在给定N维值X的情况下学习N维变量Y *。假设神经网络的输出是Y,在学习之后应该接近Y *。我的问题是:是否有可能得到输出Y *的神经网络的逆?也就是说,如何将X *放入神经网络时产生Y *? (或接近它的东西)
问题的一个主要部分是N非常大,通常在10000或100000的数量级,但是如果有人知道如何为没有重复的小型网络或可能已经有用的隐藏层解决这个问题。谢谢。
答案 0 :(得分:3)
如果你可以选择神经网络使得每层中的节点数相同,并且权重矩阵是非单数的,并且传递函数是可逆的(例如,泄漏relu),那么该函数将是可逆的
这种神经网络只是矩阵乘法的组合,增加了偏差和传递函数。要反转,您只需要以相反的顺序应用每个操作的反转。即取输出,应用逆传递函数,将其乘以最后一个权重矩阵的倒数,减去偏差,应用逆传递函数,将其乘以倒数第二个权重矩阵的倒数,依此类推等等
答案 1 :(得分:2)
这是一项可以通过autoencoders解决的任务。您也可能对像Restricted Boltzmann Machines(RBMs)这样的生成模型感兴趣,这些模型可以堆叠形成深度信念网络(DBNs)。 RBM构建数据v的内部模型h,可用于重建v。在DBN中,第一层的h将是第二层的v,依此类推。
答案 2 :(得分:1)
zenna是对的。 如果您正在使用双射(可逆)激活函数,您可以逐层反转,减去偏差并采用伪逆(如果每层都有相同数量的神经元,在一些温和的规律条件下,这也是精确的逆)。 重复条件: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的伪逆矩阵。
答案 3 :(得分:1)
以下paper是反演从神经网络学习的函数的案例研究。这是一个来自行业的案例研究,看起来是理解如何设置问题的良好开端。
答案 4 :(得分:1)
接近获得期望的x的任务的另一种方式是产生期望的y将从随机x(或作为种子输入)开始,然后通过梯度体面(类似算法到反向传播,不同之处在于不是找到导数在权重和偏差中,您可以找到x的导数。此外,不需要迷你批处理。)重复调整x直到它产生接近所需y的y。这种方法的优点是它允许输入种子(如果没有随机选择,则开始x)。此外,我假设最终x与初始x(种子)有一些相似性,这意味着该算法具有转置的能力,具体取决于神经网络应用的上下文。