当我设置epsilon=10e-8
时,AdamOptimizer
不起作用。当我将其设置为 1 时,它工作得很好。
问问题
12421 次
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 回答