在给定输出的情况下查找神经网络输入

机器算法验证 机器学习 神经网络 人工智能
2022-03-24 05:29:37

我已经训练了一个具有两个输入的神经网络,一个具有两个神经元的隐藏层,以及一个使用双极 sigmoid 激活函数的输出。如果已知单个输入,我将如何确定第二个输入以创建所需的输出?

例如,假设神经网络经过训练以添加两个输入以产生输出。因此,如果 input_1 = 3 且 input_2 = 4,则输出将为 7,(3 + 4 = 7)。给定 input_1 = 3 且所需输出为 7,我想计算产生所需输出所需的第二个输入(答案应为 4)。

对于比基本加法更复杂且具有多个输入/输出的网络,我将如何做到这一点?例如,对于具有四个输入和两个输出的网络,在给定 input_1、input_2、output_1 和 output_2 的情况下,我将如何计算 input_3 和 input_4?

4个回答

答案很简单:反向传播。

假设您有一个训练有素的网络映射到一些,理想情况下您希望成为然后,您使用不同的损失,即从的偏差,例如:fxyzyz

C=||zy||22.

在反向传播中,您通常通过随机梯度下降遵循损失相对于权重的梯度。假设你有一个权重矩阵,那么你做: 其中是一些学习率。现在,要获得正确的以输出上的输入做同样的事情,进行几次迭代: 你已经初始化了LW

WWηLW
ηxzC
xxηCx,
x随机。由于这种优化通常是非凸的,因此您可能希望从不同的初始化开始。

实际上,您必须计算输入层的导数(例如大多数教科书中δ

我不是这方面的专家,所以我可能错了。因此,如果我错了,请纠正我。

考虑这个神经网络(我想它和你的一样):

A---H1
 \ /  \
  X    C
 / \  /
B---H2

考虑 H1、H2 和 C 的激活函数是双极 sigmoid,我们将其称为“bsig(x)”

另外,我们将连接命名如下:
A,H1:wa1;
A、H2:wa2;
B、H1:wb1;
B、H2:wb2;
H1,C:wh1;
H2,C:wh2

现在 H1、H2 和 C 的值可以定义为:

H1 = bsig(wa1 * A + wb1 * B)
H2 = bsig(wa2 * A + wb2 * B)
C = bsig(wh1 * H1 + wh2 * H2)

所以,C可以写成:

C = bsig(wh1 * bsig(wa1 * A + wb1 * B) + wh2 * bsig(wa2 * A + wb2 * B))

您需要做的就是根据未知值中的哪一个来求解这个方程,以便得到 B 或 A。

您可以使用重建错误并将您的第二个输入视为参数。假设您的固定输入是并且您的潜在输入是输出可以是:x1x2y

y=s(W1x1+W2x2+b)

s是你的双极乙状结肠。

然后,您使用解码器映射回重建z

z=s(Wy+b)

那么最小化的误差函数可能是平方误差:

L(xz)=||xz||2

您现在可以按照您想要的方式训练您的网络,其中是您的梯度参数。W1,W2,b,W,b x2

我同意反向传播。但是,如果问题更普遍,特别是对于更大的网络,您可以训练另一个网络,其中包含许多从原始网络生成的输入输出,并使用第二个网络近似反向传播。

希望能帮助到你