训练神经网络:由于批量大小导致的数学原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了训练神经网络:由于批量大小导致的数学原因相关的知识,希望对你有一定的参考价值。

我正在训练CNN。我使用Googles预训练的inceptionV3替换最后一层进行分类。在训练期间,我遇到了很多问题,我的交叉熵损失变成了纳。在尝试了不同的事情(降低学习率,检查数据等)之后,结果证明训练批量太大了。

将培训批量从100减少到60解决了这个问题。您能否解释为什么过高的批量大小会导致交叉熵损失功能出现这个问题?还有一种方法可以解决这个问题,以适应更高的批量大小(有一篇论文建议批量大小为200+图像以获得更好的准确性)?

答案

网络的较大权重(导致爆炸的梯度)在软最大层中产生倾斜的概率。例如,[0 1 0 0 0]而不是[0.1 0.6 0.1 0.1 0.1]。因此,在交叉熵损失函数中产生数值不稳定的值。

cross_entropy = -tf.reduce_sum(y_*tf.log(y_))

当y_ = 0时,cross_entropy变为无穷大(因为0 * log(0))因此为nan。

权重变得越来越大的主要原因是爆炸梯度问题。让我们考虑渐变更新,

Δwij=-η∂Ei/∂wi

其中η是学习率,∂Ei/∂wij是损失w.r.t权重的部分推导。请注意,∂Ei/∂wi是小批量B的平均值。因此,梯度将取决于小批量大小| B |。和学习率η。

为了解决这个问题,您可以降低学习率。根据经验,最好将初始学习率设置为零,并且一次增加一个非常小的数字以观察损失。

此外,减小小批量大小会导致随机梯度更新的方差增加。这有时通过向梯度更新方向添加噪声来帮助减轻nan。

以上是关于训练神经网络:由于批量大小导致的数学原因的主要内容,如果未能解决你的问题,请参考以下文章

神经分割网络根据测试批量大小给出不同的输出

如何确定Keras ImageDataGenerator中测试数据集的最佳“步数”和“批量大小”?

使用python批量裁剪图片为目标大小

你都有哪些炼丹神器深度学习(rnn、cnn)调参的经验?

数学模型的过拟合和欠拟合

第十八节,TensorFlow中使用批量归一化