我有一个神经网络,输入层有10
个节点,一些隐藏层和一个只有1个节点的输出层。然后我在输入层放入一个模式,经过一些处理后,它会在输出神经元中输出一个从1
到10
的数字。训练后,这个模型能够根据输入模式得到输出。
现在,我的疑问是,是否有可能计算出逆模型:这意味着,我从输出端提供一个数字,(即使用输出端作为输入),然后从那10
个输入神经元中得到一个随机模式,(即使用输入作为输出端)。
我想这样做是因为我将首先基于模式的难度训练一个网络(输入是模式,输出是理解模式的难度)。然后我想给网络输入一个数字,让它基于难度创建随机模式。
回答:
我希望我正确理解了您的问题,所以我将用自己的话总结一下:您有一个给定的模型,并想确定产生给定输出的输入是什么。
假设这是正确的,我知道至少有一种方法可以近似地做到这一点。这种方法非常容易实现,但计算一个值可能需要一些时间——可能有更好的方法,但我不敢确定。(几周前在强化学习主题中我需要这种技术,并且没有找到比这更好的方法):假设您的模型将输入
映射到输出
。现在我们需要创建一个新的模型,我们称之为
:这个模型稍后将计算模型
的逆,使其给出产生特定输出的输入。为了构建
,我们将创建一个新的模型,它由一个普通的
Dense
层组成,该层具有与输入相同的维度m
。现在这个层将连接到模型的输入。接下来,您要使
的所有权重不可训练(这是非常重要的!)。
现在我们已经准备好寻找逆值了:假设您想找到对应于输出y
的输入(这里对应意味着它创建输出,但不是唯一的)。您需要创建一个新的输入向量v
,它是的单位。然后您创建一个由
(v, y)
组成的输入-输出数据对。现在您可以使用任何您希望的优化器,让输入-输出训练数据通过您的网络传播,直到误差收敛到零。一旦发生这种情况,您可以通过以下方式计算产生输出y
的实际输入:假设新输入层的权重称为w
,偏置称为b
,所需的输入u
是u = w*1 + b
(其中1
是)。您可能会问为什么这个方程成立,所以让我试着回答:您的模型将试图学习您的新输入层的权重,以便单位作为输入时可以创建给定的输出。由于只有新添加的输入层是可训练的,只有这些权重会被更改。因此,这个向量中的每个权重将代表所需输入向量的相应组件。通过使用优化器并最小化所需输出与我们的逆模型
的输出之间的
l^2
距离,我们最终将确定一组权重,这将为您提供输入向量的一个良好近似。