我想知道是否有可能获得神经网络的逆。如果我们将 NN 看作一个函数,我们能得到它的逆吗?
我尝试构建一个简单的 MNIST 架构,输入为 (784,),输出为 (10,),对其进行训练以达到良好的准确度,然后将预测值反转以尝试取回输入 - 但结果是离我开始的地方还差得很远。(我对 W 矩阵使用了伪逆矩阵。)
我的NN基本上是以下功能:
IE
def rev_sigmoid(y):
return np.log(y/(1-y))
def rev_linear(z, W, b):
return (z - b) @ np.linalg.pinv(W)
y = model.predict(x_train[0:1])
z = rev_sigmoid(y)
x = rev_linear(z, W, b)
x = x.reshape(28, 28)
plt.imshow(x)
^ 这应该是 5:
失败有什么原因吗?有没有可能得到NN的逆?
编辑:还值得注意的是,相反的做法确实会产生良好的效果。即从 y 开始(数字的 1-hot 编码)并使用它来预测图像(一个 784 字节的数组),使用相同的架构:输入(10,)和输出(784,)与 sigmoid。这并不完全等价于逆,因为在这里您首先进行线性变换,然后进行非线性变换。在逆过程中,您将首先执行(好吧,撤消)非线性,然后执行(撤消)线性。即784x10 矩阵折叠太多信息的说法对我来说似乎有点奇怪,因为确实存在一个 10x784 矩阵可以再现足够多的信息。