更新 2 层神经网络中的权重
Updating the weights in a 2-layer neural network
我正在尝试使用与此类似的神经网络来模拟 XOR 门:
现在我明白了每个神经元都有一定数量的权重和偏差。我正在使用 sigmoid function 来确定神经元是否应该在每个状态下触发(因为它使用的是 sigmoid 而不是阶跃函数,所以我在松散的意义上使用触发,因为它实际上会吐出真实值)。
我成功运行前馈部分的模拟,现在我想使用backpropagation算法来更新权重和训练模型。问题是,对于 x1
和 x2
的每个值都有一个单独的结果(总共 4 个不同的组合)并且在不同的输入对下,单独的误差距离(期望输出与实际输出之间的差异result) 可以计算出来,随后将最终实现一组不同的权重更新。这意味着我们将通过反向传播为每个单独的输入对获得 4 组不同的权重更新。
我们应该如何决定正确的权重更新?
假设我们对单个输入对重复反向传播直到收敛,但是如果我们选择另一对输入会收敛到一组不同的权重怎么办?
Now I understand that each neuron has certain weights. I am using a sigmoid function to determine a neuron should fire or not in each state.
你不会真的 "decide" 这个,典型的 MLP 不会 "fire",它们输出真实值。有些神经网络实际上会触发(如 RBM),但这是一个完全不同的模型。
This means we would get 4 different sets of weight updates for each input pairs by using back propagation.
这实际上是一个功能。让我们从头开始。您尝试最小化整个训练集的一些损失函数(在您的情况下 - 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)
对于单个训练对 (x_i, y_i)
,您现在所说的 "a single update" 是 grad l(f(x_i) y_i)
。通常你不会使用它,而是 sum(或取平均值)whole dataset 的更新,因为这是你的真实梯度。然而,在实践中,这可能在计算上不可行(训练集通常非常大),此外,经验表明训练中 "noise" 越多通常越好。因此出现了另一种学习技术,称为 随机梯度下降 ,简而言之,它表明在一些简单的假设(如附加损失函数等)下,您实际上可以做到 "small updates" 独立,你仍然会收敛到局部最小值!换句话说 - 您可以按随机顺序进行更新 "point-wise",您仍然可以学习。它会永远是相同的解决方案吗?不,但这对于计算整个梯度也是如此 - 非凸函数的优化几乎总是不确定的(你会发现 一些局部解决方案 ,而不是全局解决方案)。
我正在尝试使用与此类似的神经网络来模拟 XOR 门:
现在我明白了每个神经元都有一定数量的权重和偏差。我正在使用 sigmoid function 来确定神经元是否应该在每个状态下触发(因为它使用的是 sigmoid 而不是阶跃函数,所以我在松散的意义上使用触发,因为它实际上会吐出真实值)。
我成功运行前馈部分的模拟,现在我想使用backpropagation算法来更新权重和训练模型。问题是,对于 x1
和 x2
的每个值都有一个单独的结果(总共 4 个不同的组合)并且在不同的输入对下,单独的误差距离(期望输出与实际输出之间的差异result) 可以计算出来,随后将最终实现一组不同的权重更新。这意味着我们将通过反向传播为每个单独的输入对获得 4 组不同的权重更新。
我们应该如何决定正确的权重更新?
假设我们对单个输入对重复反向传播直到收敛,但是如果我们选择另一对输入会收敛到一组不同的权重怎么办?
Now I understand that each neuron has certain weights. I am using a sigmoid function to determine a neuron should fire or not in each state.
你不会真的 "decide" 这个,典型的 MLP 不会 "fire",它们输出真实值。有些神经网络实际上会触发(如 RBM),但这是一个完全不同的模型。
This means we would get 4 different sets of weight updates for each input pairs by using back propagation.
这实际上是一个功能。让我们从头开始。您尝试最小化整个训练集的一些损失函数(在您的情况下 - 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)
对于单个训练对 (x_i, y_i)
,您现在所说的 "a single update" 是 grad l(f(x_i) y_i)
。通常你不会使用它,而是 sum(或取平均值)whole dataset 的更新,因为这是你的真实梯度。然而,在实践中,这可能在计算上不可行(训练集通常非常大),此外,经验表明训练中 "noise" 越多通常越好。因此出现了另一种学习技术,称为 随机梯度下降 ,简而言之,它表明在一些简单的假设(如附加损失函数等)下,您实际上可以做到 "small updates" 独立,你仍然会收敛到局部最小值!换句话说 - 您可以按随机顺序进行更新 "point-wise",您仍然可以学习。它会永远是相同的解决方案吗?不,但这对于计算整个梯度也是如此 - 非凸函数的优化几乎总是不确定的(你会发现 一些局部解决方案 ,而不是全局解决方案)。