层归一化 vs 批归一化
神经网络里数值忽大忽小会让训练很难。归一化的办法是把一组数减去均值、再除以标准差,拉回“均值 0、方差 1”的标准区间。但“一组”是哪一组?批归一化(BatchNorm)对同一个特征、跨整批样本归一(竖着看,按列);层归一化(LayerNorm)对同一个样本、跨所有特征归一(横着看,按行)。一个跨样本、一个跨特征——切换下面的开关,看归一化沿哪个方向算、结果有什么不同。
上面是原始数据:每行一个样本,每列一个特征(注意各列的量纲差别很大)。下面是归一化后的结果。金色框圈出的是“一组”——BatchNorm 圈列、LayerNorm 圈行。
BatchNorm:跨样本
对每个特征、在整批样本上算均值方差。依赖批大小,序列/小批量时不稳。
LayerNorm:跨特征
对每个样本、在它自己的所有特征上算。与批无关,Transformer 标配。
都为稳训练
把数值拉回均值0方差1,梯度更平稳、收敛更快、对初始化更宽容。