- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用与此类似的神经网络来模拟异或门:
现在我明白每个神经元都有一定数量的权重和偏差。我正在使用 sigmoid function确定神经元在每种状态下是否应该激发(因为这使用了 sigmoid 而不是阶跃函数,所以我在宽松的意义上使用激发,因为它实际上会输出真实值)。
我成功运行了前馈部分的模拟,现在我想使用backpropagation更新权重并训练模型的算法。问题是,对于 x1
和 x2
的每个值,都有一个单独的结果(总共 4 种不同的组合),并且在不同的输入对下,有单独的误差距离(可以计算期望的输出和实际结果,并且随后最终将实现一组不同的权重更新。这意味着我们将通过使用反向传播为每个单独的输入对获得 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.
你并没有真正“决定”这一点,典型的 MLP 不会“触发”,它们输出真实值。有些神经网络实际上会触发(如 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)
的grad l(f(x_i) y_i)
。通常您不会使用它,而是对整个数据集的更新进行求和(或取平均值),因为这是您的真实梯度。然而,实际上这在计算上可能是不可行的(训练集通常非常大),此外,经验表明训练中的“噪声”越多通常越好。因此出现了另一种学习技术,称为随机梯度下降,简而言之,它表明在一些简单的假设(如加性损失函数等)下,你实际上可以独立地进行“小更新”,并且你仍然会收敛到局部最小值!换句话说 - 您可以以随机顺序“逐点”进行更新,并且您仍然可以学习。它总是相同的解决方案吗?不。但这对于计算整个梯度来说也是如此 - 非凸函数的优化几乎总是不确定的(你会发现一些局部解决方案,而不是全局解决方案)。
关于machine-learning - 更新 2 层神经网络中的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37646589/
我是一名优秀的程序员,十分优秀!