You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Keras中Adam优化器代码的偏差修正与epsilon缩放疑问

Keras Adam优化器alpha计算代码的疑问解答

1. 该代码确实执行偏差修正

你提到的代码行:

alpha = lr * tf.sqrt(1 - beta_2_power) / (1 - beta_1_power)

本质是将Adam算法中的偏差修正逻辑合并到了学习率的缩放系数中。

原始Adam算法里,偏差修正针对一阶矩估计(m)和二阶矩估计(v)分别进行:

  • 修正后一阶矩:$\hat{m}_t = m_t / (1 - \beta_1^t)$
  • 修正后二阶矩:$\hat{v}_t = v_t / (1 - \beta_2^t)$

参数更新公式为:$\theta_{t+1} = \theta_t - \eta * \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)$($\eta$为原始学习率)

而Keras的写法,相当于把原始学习率$\eta$乘以$\sqrt{1 - \beta_2^t}/(1 - \beta_1^t)$,将两个修正项的影响整合到新的alpha中。后续参数更新时直接使用未修正的m和v计算,最终结果和原始算法完全等价。

2. 关于epsilon的隐式缩放

你的理解完全正确,这种写法确实对epsilon做了隐式的$\sqrt{1 - \beta_2^t}$因子缩放。

原始算法的更新项展开后是:
$$\frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} = \frac{m_t/(1-\beta_1t)}{\sqrt{v_t/(1-\beta_2t)} + \epsilon} = \frac{m_t * \sqrt{1-\beta_2t}}{(1-\beta_1t)(\sqrt{v_t} + \epsilon * \sqrt{1-\beta_2^t})}$$

Keras的更新逻辑代入alpha后是:
$$\text{alpha} * \frac{m_t}{\sqrt{v_t} + \epsilon} = \eta * \frac{\sqrt{1-\beta_2t}}{1-\beta_1t} * \frac{m_t}{\sqrt{v_t} + \epsilon} = \eta * \frac{m_t * \sqrt{1-\beta_2t}}{(1-\beta_1t)(\sqrt{v_t} + \epsilon)}$$

对比两者可见,Keras的写法相当于把原始算法中的$\epsilon$替换成了$\epsilon / \sqrt{1-\beta_2^t}$,也就是对epsilon进行了缩放。

正如你所说,由于epsilon本身是极小的常数(通常取1e-8量级),这种缩放在实际训练中几乎不会影响模型性能,它的核心作用始终是避免除零错误。

内容的提问来源于stack exchange,提问作者Yandle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:07:45