0

我正在尝试使用类似于以下的神经网络来模拟 XOR 门:

在此处输入图像描述

现在我明白每个神经元都有一定数量的权重和偏差。我正在使用一个sigmoid 函数来确定神经元是否应该在每个状态下触发(因为它使用的是 sigmoid 而不是阶跃函数,所以我在松散意义上使用触发,因为它实际上会吐出真实值)。

我成功运行了前馈部分的模拟,现在我想使用反向传播算法来更新权重并训练模型。问题是,对于 和 的每个值,x1都有x2一个单独的结果(总共 4 种不同的组合),并且在不同的输入对下,可以计算单独的误差距离(期望输出和实际结果之间的差异),然后计算出不同的最终将实现一组权重更新。这意味着我们将通过使用反向传播为每个单独的输入对获得 4 组不同的权重更新。

我们应该如何决定正确的权重更新?

假设我们对单个输入对重复反向传播,直到我们收敛,但是如果我们选择另一对输入,我们会收敛到不同的权重集怎么办?

4

1 回答 1

2

现在我明白每个神经元都有一定的权重。我正在使用 sigmoid 函数来确定神经元在每个状态下是否应该触发。

您并没有真正“决定”这一点,典型的 MLP 不会“开火”,它们会输出实际值。有些神经网络实际上会触发(如 RBM),但这是一个完全不同的模型。

这意味着我们将通过使用反向传播为每个输入对获得 4 组不同的权重更新。

这其实是一个特点。让我们从头开始。您尝试在整个训练集(在您的情况下 - 4 个样本)上最小化一些损失函数,其形式为:

L(theta) = SUM_i l(f(x_i), y_i)

其中l是一些损失函数,f(x_i) 是您当前的预测和 y_i 真实值。您通过梯度下降来做到这一点,因此您尝试计算 L 的梯度并与之相反

grad L(theta) = grad SUM_i l(f(x_i), y_i) = SUM_i grad l(f(x_i), y_i)

您现在所说的“单次更新”是grad l(f(x_i) y_i)针对单个训练对的(x_i, y_i)。通常你不会使用它,而是你会对整个数据集的更新求和(或取平均值),因为这是你真正的梯度。然而,在实践中,这在计算上可能是不可行的(训练集通常非常大),此外,经验表明,训练中的“噪声”越多通常越好。因此出现了另一种学习技术,称为随机梯度下降,简而言之,这表明在一些简单的假设下(如附加损失函数等),您实际上可以独立进行“小更新”,并且您仍然会收敛到局部最小值!换句话说-您可以按随机顺序“逐点”进行更新,并且您仍然会学习。它总是相同的解决方案吗?不,但这对于计算整个梯度也是正确的——非凸函数的优化几乎总是不确定的(你会找到一些局部解决方案,而不是全局解决方案)。

于 2016-06-05T20:57:36.070 回答