Appearance
Root Mean Square Normalization——用均方根归一化替代 LayerNorm,去掉均值计算,更快更简单。
为什么需要 RMSNorm
Transformer 中每层前向需要两次归一化(Attention 前、MoE/FFN 前)。LayerNorm 计算均值和方差,两轮遍历;RMSNorm 只计算均方根,一轮遍历,且不需要均值偏移。
核心原理
LayerNorm: y = (x - mean) / sqrt(var + ε) × γ + β
需要 mean 和 var 两个统计量,有可学习偏移 β
RMSNorm: y = x / rms(x) × γ
rms(x) = sqrt(mean(x²) + ε)
只有可学习缩放 γ,无偏移项RMSNorm 去掉了均值减法和偏移项,实验表明对 Transformer 效果几乎无影响。现代 LLM(LLaMA、DeepSeek、Mistral)都使用 RMSNorm。
在 ds4.c 中的实现
c
// RMSNorm(ds4.c 约 4577 行)
float rms = 0.0f;
for (int i = 0; i < n; i++) rms += x[i] * x[i];
rms = sqrtf(rms / n + DS4_RMS_EPS); // ε 默认 1e-6,从 GGUF 元数据加载
for (int i = 0; i < n; i++) out[i] = x[i] / rms * weight[i];每层前向调用两次 RMSNorm:一次在 Attention 前,一次在 MoE 前。