用 AI 记两步 Adam:这一步梯度为零,参数为何还在移动
如果让AI直接解释优化器,答案很容易停在“结合动量和自适应学习率”。可以给它一个只有一个参数的账本,要求把每次更新前后的状态列全。第二步故意提供零梯度,马上就能看出它是否保留了历史。
AI模型生成的概念插图:两份历史状态汇入下一次更新方向;不代表软件截图、真实实验或精确数据图。
从第一个更新步开始编号
设初始参数w₀=1,m₀=v₀=0,学习率为0.1,beta₁=0.9、beta₂=0.99,eps=1e-8,不使用权重衰减或AMSGrad。两步外部给定梯度为g₁=2、g₂=0。这里beta₂与学习率都是教学选择,并非声称采用框架全部默认参数。
按Adam规则,mₜ=beta₁mₜ₋₁+(1-beta₁)gₜ,vₜ=beta₂vₜ₋₁+(1-beta₂)gₜ²。第一步得到m₁=0.2、v₁=0.04。偏差修正分别除以1-0.9¹和1-0.99¹,得到m̂₁=2、v̂₁=4。t从1开始;若错从0开始,两个修正分母都会变成0。
参数更新量是0.1×m̂₁/(√v̂₁+eps),约0.0999999995,更新后w₁约0.9000000005。eps在平方根外相加;不能写成√(v̂₁+eps),两者在小量附近尤其不是同一公式。
零梯度没有清空历史状态
第二步输入g₂=0,得到m₂=0.9×0.2=0.18,v₂=0.99×0.04=0.0396。修正分母这次分别是0.19和0.0199,因此m̂₂约0.947368421,v̂₂约1.989949749。
第二步更新量约0.0671580143,w₂约0.8328419862。当前梯度虽然为0,之前留下的m和v并未消失,所以参数仍向原方向移动。这里是在显式零梯度下执行一次更新,不能把“根本没有梯度、优化器可能跳过该参数”的情况混进来。
再做一项反例:第一步若省略偏差修正,就用0.2和0.04直接相除,更新量也会接近0.1。这是本组beta偶然让首步比例相近,不足以证明修正无用。到了第二步,错误更新约0.090453399,而正确值约0.067158014,差别已经出现。
让AI交完整账本,不只交参数
可用提示词:“用w₀=1、m₀=v₀=0、lr=0.1、betas=(0.9,0.99)、eps=1e-8和固定梯度[2,0]手演Adam。逐步列t、g、m、v、两个偏差修正分母、修正后矩、更新量和w。eps放在√v̂之后。不使用权重衰减、AMSGrad或学习率调度;另算不做偏差修正的对照。”
验收应比较未舍入的内部值,再把展示结果统一截到合适位数。两步固定梯度没有对应一份完整训练任务,也不说明损失一定下降;这张账本只用于检查优化器状态流和公式实现。
资料核对日期:2026年10月2日。数值为原创教学设定,已用独立Python计算复核,不代表真实模型性能测试。


