使用 RMSprop 时梯度爆炸
Gradient exploding when using RMSprop
我是深度学习领域的初学者。我正在尝试开发一个 CNN,它使用 VGG 16 架构作为底层,并且有一些层是我为最后的顶层开发的。
在使用 lr=0.01,alpha=0.99,eps=1e-6 的 RMSprop 仅更新一次网络后,激活值通过网络变得越来越大。例如,对于 conv2,值从 0.xx 变为十位数字。这导致最后一层为 NaN。
似乎 RMSprop 改变了 一些 参数值,例如,从 x*1e-3 到 x*1e-2(或 1e-2 到 1e-1)。
但是,我想知道如此小的变化是否真的会像第二段中解释的那样在深度学习中产生问题。人们是否称这种现象为梯度爆炸?
(最后一点,当我使用 SGD Nesterov 时,我的网络在更新期间保持稳定。)
您应该尝试将学习率设为 0.001。
问你一个问题,你为什么不使用在很多情况下似乎是最好的优化器的 Adam 优化器? (它甚至部分受到您使用的 RMSProp 的启发)
如果您对 SGD 优化感兴趣,我建议您阅读这篇对我有很大帮助的文章:http://sebastianruder.com/optimizing-gradient-descent/
我是深度学习领域的初学者。我正在尝试开发一个 CNN,它使用 VGG 16 架构作为底层,并且有一些层是我为最后的顶层开发的。
在使用 lr=0.01,alpha=0.99,eps=1e-6 的 RMSprop 仅更新一次网络后,激活值通过网络变得越来越大。例如,对于 conv2,值从 0.xx 变为十位数字。这导致最后一层为 NaN。
似乎 RMSprop 改变了 一些 参数值,例如,从 x*1e-3 到 x*1e-2(或 1e-2 到 1e-1)。
但是,我想知道如此小的变化是否真的会像第二段中解释的那样在深度学习中产生问题。人们是否称这种现象为梯度爆炸?
(最后一点,当我使用 SGD Nesterov 时,我的网络在更新期间保持稳定。)
您应该尝试将学习率设为 0.001。
问你一个问题,你为什么不使用在很多情况下似乎是最好的优化器的 Adam 优化器? (它甚至部分受到您使用的 RMSProp 的启发)
如果您对 SGD 优化感兴趣,我建议您阅读这篇对我有很大帮助的文章:http://sebastianruder.com/optimizing-gradient-descent/