题目重点:动量、偏差修正与解耦衰减,区分SGD等价条件和自适应预条件下的差别。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 标准Adam的一阶m、二阶v按坐标更新,β1/β2固定;ε放在sqrt(vhat)外,本讨论明确该约定。
- 学习率η_t、衰减λ与需要衰减的参数组显式定义;题目未明确框架实现/超参数,不把名为weight_decay的API自动认作某公式。
解题路线
- 用真实loss梯度g更新m_t=β1m_(t−1)+(1−β1)g,v_t=β2v_(t−1)+(1−β2)g²;初始0时mhat=m/(1−β1^t)、vhat=v/(1−β2^t)。参数更新减ηmhat/(sqrt(vhat)+ε),各坐标不同缩放。
- L2若把λθ加进g,会同时影响m/v与预条件;AdamW把参数收缩(1−ηλ)θ与loss-gradient自适应更新分开。标准SGD无此自适应预条件时对应L2可等价,不能照搬到Adam。
- Adam常在梯度尺度差/稀疏特征时方便,但有额外状态、η/ε/β选择与泛化取舍;不保证总快或总比SGD差。RMSProp主要用二阶滑动估计,动量和bias-correction版本要明确。
- bias/LN等是否衰减是参数组选择,要按实验说明;不能先写“所有参数都不decay”又报告AdamW优势。schedule改变η时累计收缩也随之改变,checkpoint必须保留moments/步数。
- 混合精度optimizer状态精度和主参数影响稳定性/内存;比较算法保持预算与验证一致,记录loss、update norm和有效步数。不靠算法名字解释任何训练异常。
手动走一遍
自拟二维θ=(1,1),若当前预条件尺度分别1和10,把相同λθ当梯度会对两个坐标产生不同正则更新;解耦收缩则两者同乘1−ηλ。这个对比忽略moment演化用于说明区别,不是完整Adam一步数值。
规模与取舍
P参数每步O(P),Adam常需m/v各P状态,若float32仅两moment约8P字节;梯度、主参数、副本/分片另计。AdamW解耦收缩仍O(P),不因参数少改成无状态优化器。
易错点与追问
容易失分的边界
- Adam加L2就等同AdamW。
- 忘偏差修正。
- ε位置/参数组合同未说明。
- 只存θ恢复却清空moments。
- 不同预算归因optimizer。
继续深挖
- momentum SGD的衰减约定怎样核对?
- 梯度全为0时AdamW还会怎样更新?
- 参数组不decay如何验证?
- weight decay与learning-rate schedule如何共同消融?
技术参考
- AdamW 原论文:解耦衰减与自适应L2区别参考。
