【问题标题】:Train neural network: Mathematical reason for Nan due to batch size训练神经网络:由于批量大小导致 Nan 的数学原因
【发布时间】:2018-08-09 05:44:09
【问题描述】:

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

将训练批次大小从 100 减少到 60 解决了这个问题。你能解释一下为什么太大的批量会导致交叉熵损失函数出现这个问题吗?还有没有办法克服这个问题以处理更高的批量大小(有一篇论文建议批量大小为 200 多张图像以获得更好的准确性)?

【问题讨论】:

    标签: tensorflow neural-network nan


    【解决方案1】:

    网络的较大权重(导致梯度爆炸)会在 soft max 层中产生倾斜的概率。例如,[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 的平均值。因此,梯度将取决于 mini-batch 大小 |B| 和学习率 η

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

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

    【讨论】:

    • 感谢我们的回答 Nipun (upvote)。我对批量大小的影响(数学上)特别感兴趣。你能提供更多的细节吗?
    • 我也面临增加batch size时梯度爆炸的问题。你的回答对我来说很有意义,但你对这篇文章的评论是什么:stackoverflow.com/questions/53033556/…,它建议将学习率设置为与批量大小成正比?
    猜你喜欢
    • 2012-03-15
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2017-02-04
    • 2011-04-07
    相关资源
    最近更新 更多