AdaGrad 怎样记住稀疏梯度:第三步相同的输入,坐标步幅却不同
训练稀疏特征模型时,有些参数几乎每批都出现梯度,另一些只偶尔参与。AdaGrad为每个坐标保存自己的平方和。同一时刻共用一个学习率,并不意味着所有坐标都会按相同比例移动。理解这份历史,也能判断为什么只恢复模型权重还不足以继续原来的训练。
AI生成的概念示意图:两条轨道分别积累历史,并形成不同步幅;容器大小与步长不是正文数值图。
把公式固定到能逐步验收的版本
设参数θ从(0,0)开始,基础学习率η=1,累积量S从(0,0)开始。每步先做Sᵢ←Sᵢ+gᵢ²,再做θᵢ←θᵢ-ηgᵢ/√Sᵢ。这里每个坐标单独平方、累加、开方,没有对整条向量求一个公共范数。
为让数值简洁,本例把分母稳定项设为零,且第一步两个梯度都非零,之后分母始终为正。真实实现应保留明确的稳定项;它放在平方根里面或外面会产生不同公式。我们不使用学习率衰减、权重衰减或动量,避免把其他机制混进来。
三步梯度怎样留下不同历史
预先指定三步梯度为g₁=(3,4)、g₂=(3,0)、g₃=(3,4)。可以把每步目标写成对应梯度与θ的内积,因此这些梯度无需依赖参数位置;这只是检查更新器的教学序列,不是一份待收敛的训练数据。
第一步S=(9,16),两坐标都移动-1,参数成为(-1,-1)。第二步S=(18,16),第一坐标移动-1/√2,第二坐标不动,得到约(-1.707107,-1)。第二个坐标没有梯度,它的历史也不会因为另一坐标活跃而继续增加。
第三步S=(27,32)。第一坐标移动-1/√3,约-0.577350;第二坐标移动-1/√2,约-0.707107。最后参数约为(-2.284457,-1.707107)。第一步与第三步的梯度完全相同,移动量却不同,区别来自保留下来的平方和。
比较有效步幅时控制住条件
本例第二坐标只活跃两次,每次幅度都是4;第一坐标活跃三次,每次幅度都是3。对恒定非零幅度、零稳定项的情形,第k次活跃时的移动绝对值为η/√k。幅度在分子和分母中相消,因此第三步第二坐标走得更远。
这个结论有明确条件。若曾经出现一个很大的梯度,它的平方会长期留在历史中;“出现次数少”并不单独保证步幅大。后续全零梯度也不会令平方和衰减。第四步若输入(0,0),参数保持不变,不能凭此前有梯度就继续滑动。
恢复训练时一起保存平方和
假定第二步后保存模型,但漏掉S。恢复时从零累积,第三步会让两个坐标各移动-1,偏离应有的-0.577350与-0.707107。模型文件能载入、输出形状也正确,仍然可能接上了不同的优化轨迹。
让AI写检查脚本时,可要求它同时导出每步的梯度、更新前后S、分母和参数差;另跑连续三步与“运行两步、保存、恢复、再走一步”两条路线。比较的不只是最终权重,还包括优化器状态与步数。如果启用了学习率衰减,步数本身也影响下一次更新。
最后检查所有S坐标是否单调不减,并核对当前梯度平方已经计入本步分母。先更新参数再累加,会用到旧历史,首步甚至可能除零。通过这些小断言,读者能够把数学定义落实成可恢复、可解释的优化器行为,而不是仅凭算法名称猜测训练效果。
资料核对日期:2026年10月3日。本文数值为原创教学设定,已用本地程序复算,未进行真实网络训练或生产效果测试。
参考资料
Duchi等:Adaptive Subgradient Methods for Online Learning and Stochastic Optimization


