当我设置epsilon=10e-8
时,AdamOptimizer
无法正常工作。当我将它设置为1时,它可以正常工作。
答案 0 :(得分:3)
t< - t + 1
lr_t< - learning_rate * sqrt(1 - beta2 ^ t)/(1 - beta1 ^ t)
m_t< - beta1 * m_ {t-1} +(1 - beta1)* g
v_t< - beta2 * v_ {t-1} +(1 - beta2)* g * g
其中g是梯度
变量< - 变量 - lr_t * m_t /(sqrt(v_t)+ epsilon)
当梯度几乎为零时,epsilon应避免在上述等式中除以零误差。因此,理想情况下,epsilon应该是一个小值。但是,在分母中有一个小的epsilon将会进行更大的权重更新,并且随后的归一化,更大的权重将始终归一化为1.
所以,我想当你用小ε训练时,优化器会变得不稳定。
权衡是你制作epsilon(和分母)越大,重量更新越小,因此训练进度就越慢。大多数时候你希望分母能够变小。通常,大于10e-4的epsilon值表现更好。
一般来说,epsilon的默认值1e-8可能不是一个好的默认值。例如,在ImageNet上训练Inception网络时,当前的好选择是1.0或0.1。 check here