梯度噪声尺度(Gradient Noise Scale)衡量的是梯度里“噪声”和“信号”的比例:采样带来的梯度抖动有多大,相对于真实梯度本身有多大。它的单位是样本数。
它在说什么
训练时,我们用一个小批量(batch)样本估计梯度。样本随机抽取,所以估出来的梯度总在真实值附近抖动,这就是梯度噪声。batch 越大,噪声越小;严格来说,估计误差的平方与 batch size 成反比。
但真实梯度本身也有大小。噪声相对信号有多大,就是噪声尺度关心的事。设真实梯度大小为 |G|,单样本梯度的方差为 tr(Σ),则
B_noise = tr(Σ) / |G|²
当 batch size 恰好等于 B_noise 时,梯度估计误差的大小已和真实梯度相当,信噪比约为 1。
打个比方:你在称一件行李。秤会抖,“真实重量”是信号,“抖动”是噪声。称一次不准,称十次取平均就稳;但行李有 20 公斤,当抖动降到几克,再称一万次也不会更接近真相,因为误差早就不由抖动决定了。噪声尺度就是“称多少次后,抖动降到和重量同一量级”的那个次数。
为什么它值钱
因为它是“还能把 batch 开多大”的经验上限。训练要走多少步,大致由 batch 与噪声尺度的比值决定:
- batch 远小于噪声尺度:噪声主导,batch 翻倍后步数大致减半,多卡并行几乎白赚。
- batch 远大于噪声尺度:信号主导,batch 翻倍后步数几乎不变,多出来的算力纯亏。
| batch 远小于噪声尺度 | batch 远大于噪声尺度 | |
|---|---|---|
| 梯度状态 | 噪声主导 | 信号主导 |
| batch 翻倍 | 步数约减半 | 步数几乎不变 |
| 学习率 | 可跟随放大 | 放大风险高、收益小 |
| 该做的事 | 加并行、加 batch | 加模型、加数据 |
和相邻概念的区别
噪声尺度是当前模型和数据分布共同决定的统计属性;临界批量大小(Critical Batch Size)是由它推出的可操作阈值,数量级相当。线性缩放规则(Linear Scaling Rule)——batch 翻 k 倍、学习率也翻 k 倍——只在 batch 还远小于噪声尺度时才成立。它也不同于“梯度裁剪”:后者限制单步更新幅度,跟信噪比没关系。另外,差分隐私里说的“往梯度里加噪声”是人为注入,和这里讨论的采样自带抖动不是一回事。
实际怎么用
- 扩大并行前先做估算。用两个不同 batch 各跑几步,比较梯度的均值与方差,就能大致估出噪声尺度相当于多少样本。
- 它会变。训练推进、梯度变小时,噪声尺度通常跟着上涨,所以一次测完不保证一直有效,阶段性重估更稳。
- 大 batch 偶尔会掉点,往往就发生在越过噪声尺度之后:噪声带来的隐式正则消失了,需要用别的手段补回来。
- 这个思路可以迁移:任何“靠多采样降低随机误差”的投入都有拐点,过了拐点再加资源,只是花钱买心安。
具体测量脚本和实现方式,以你所用框架的官方文档和原始论文为准。
