Answers:
梯度下降不能完全按照您的建议进行,但可能会发生类似的问题。
我们不计算批次的平均损失,而是计算损失函数的平均梯度。梯度是损失相对于权重的导数,在神经网络中,一个权重的梯度取决于该特定示例的输入,还取决于模型中的许多其他权重。
如果您的模型有5个权重,并且最小批量大小为2,那么您可能会得到以下信息:
例子1.损失= 2,
示例2。损失= 3,
计算此迷你批次中的梯度平均值,分别为
对几个示例进行平均的好处是,梯度的变化较小,因此学习更加一致,并且对示例的具体要求更少。请注意,第三权重的平均梯度如何为,该权重不会更改此权重更新,但对于选择的下一个使用不同权重计算的示例,该权重可能非零。
根据评论进行编辑:
在我上面的示例中,计算了梯度的平均值。对于的小批量大小,我们为每个示例计算损失,我们的目标是获得损失相对于权重的平均梯度。
在示例中,我将其平均化的方式如下:
您在评论中链接到的教程代码使用Tensorflow来最大程度地减少平均损失。
Tensorflow旨在最小化
为了最大程度地减少这一点,它计算了相对于每个权重的平均损失的梯度,并使用了梯度下降来更新权重:
可以将微分带入总和内,因此它与我的示例中方法的表达式相同。
使用小批量的原因是要有大量的训练示例,以便通过平均效果来减少其可能产生的噪音,但是对于许多数据集来说,这并不是一个完整的批处理,可能需要大量的内存。一个重要事实是,您评估的误差始终是一个距离在您的预测输出和实际输出之间:这意味着它不能为负,因此您不能像您所说的那样将2和-2的误差抵消掉,但是它将变成4的误差然后,您可以评估误差相对于所有权重的梯度,因此您可以计算出权重中的哪些变化会最大程度地减少误差。一旦这样做,您将根据学习率alpha的大小朝该方向迈出“一步”。(这是基本概念,对于深度NN的反向传播,我不作详细介绍。)在您的数据集上运行了一定次数的训练后,如果您的学习步骤不太大,您可以期望网络收敛使它发散。您仍然可以达到本地最低要求,可以通过不同地初始化您的权重,使用差分优化器并尝试进行规范化来避免这种情况。