批归一化 BatchNorm
深层网络训练时有个麻烦:每一层的输入分布会随着前面层不断变化而漂来漂去——一会儿偏大、一会儿太散,后面的层就像在追一个移动的靶子,学得又慢又不稳。批归一化的办法很直接:在每一层,把这一批数据的激活值减去均值、除以标准差,强行拉回“均值 0、方差 1”的标准范围,再用两个可学习参数微调。于是每层拿到的输入都很规整,训练快得多也稳得多。拖动“原始均值”和“散布”制造糟糕的激活,看 BatchNorm 怎么把它拉回来。
灰点是进入这一层的原始激活(你可以把它调得又偏又散),蓝点是经过 BatchNorm 后的——总是乖乖落在中间、宽度归一的绿色稳定带里。
原始:μ=— σ=—
归一后:μ=— σ=—
减均值除标准差
把每批激活拉到均值 0、方差 1,后面的层总能拿到分布稳定的输入。
训练更快更稳
可以用更大的学习率,对初始化也没那么挑剔,深层网络更容易收敛。
还能微调
归一化后再乘 γ、加 β(可学习),让网络在需要时恢复表达力。LayerNorm 是它在 Transformer 里的近亲。