epsilon 超参数如何影响 tf.train.AdamOptimizer?

hhb*_*994 12 machine-learning epsilon neural-network deep-learning

当我设置时epsilon=10e-8AdamOptimizer不起作用。当我将它设置为 1 时,它工作得很好。

Nan*_*esh 21

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 训练时,优化器会变得不稳定。

权衡是,epsilon(和分母)越大,权重更新越小,因此训练进度越慢。大多数情况下,您希望分母能够变小。通常,epsilon 值大于 10e-4 的性能更好。

epsilon 的默认值 1e-8 通常可能不是一个好的默认值。例如,在 ImageNet 上训练 Inception 网络时,当前的最佳选择是 1.0 或 0.1。在这里检查