神经网络的局部逆



我有一个神经网络,有N个输入节点和N个输出节点,其中可能有多个隐藏层和递归,但我们先不考虑这些。神经网络的目标是学习一个n维变量Y*,给定n维值x,假设神经网络的输出是Y,学习后应该接近Y*。我的问题是:是否有可能得到输出Y*的神经网络的逆?也就是说,当我把X*放到神经网络中时,如何得到Y*的值?(或类似的东西)

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

如果可以选择每层节点数相同,权矩阵非奇异,传递函数可逆(如leaky relu)的神经网络,则该函数为可逆的。

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

这是一个任务,也许可以解决与自动编码器。你也可能对生成模型感兴趣,比如受限玻尔兹曼机(rbm),它可以堆叠形成深度信念网络(dbn)。rbm建立数据v的内部模型h,可用于重建v。在dbn中,第一层的h将是第二层的v,以此类推。

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的伪逆矩阵。

下面的论文是一个从神经网络学习的函数反转的案例研究。这是一个来自行业的案例研究,看起来是理解如何着手设置问题的良好开端。

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

最新更新