13

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

4

1 回答 1

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(和分母)越大,权重更新越小,因此训练进度会更慢。大多数时候,您希望分母能够变小。通常,大于 10e-4 的 epsilon 值表现更好。

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

于 2017-06-30T10:41:36.627 回答