一、L2 范数是什么
L2 范数就是向量的欧几里得长度(直线距离):
∥x∥2=x12+x22+⋯+xn2\|\mathbf{x}\|_2 = \sqrt{x_1^2 + x_2^2 + \cdots + x_n^2}∥x∥2=x12+x22+⋯+xn2
图解:从原点到 (3, 4) 的距离
1 2 3 4 1 2 3 4 (3, 4) L2 = √(9+16) = 5 横走 3 竖走 4 L2 = 5 L1 = 7
二、Lp 范数家族
通用公式:
∥x∥p=(∣x1∣p+∣x2∣p+⋯+∣xn∣p)1/p\|\mathbf{x}\|_p = \left( |x_1|^p + |x_2|^p + \cdots + |x_n|^p \right)^{1/p}∥x∥p=(∣x1∣p+∣x2∣p+⋯+∣xn∣p)1/p
| 范数 | p 值 | 计算方式 | 直觉 |
|---|---|---|---|
| L1 | 1 | Σ|xᵢ| | 沿街道走(曼哈顿距离) |
| L2 | 2 | √(Σxᵢ²) | 直线飞过去(欧几里得距离) |
三、为什么范数要带绝对值
图解:正负抵消的问题
0 -100 +100 x1 = +100 x2 = -100 不加绝对值 100 + (-100) = 0 加绝对值 |100| + |-100| = 200 核心理解:范数本质是衡量大小,绝对值防止正负抵消。
⚠️ 易错点: 计算 L1 范数时忘记加绝对值
- 错误示范: 向量 (1, -2, 3) 的 L1 范数 = 1 + (-2) + 3 = 2 ❌
- 正确计算: 向量 (1, -2, 3) 的 L1 范数 = |1| + |-2| + |3| = 1 + 2 + 3 = 6 ✓
四、梯度裁剪(Gradient Clipping)
4.1 梯度爆炸问题
在 RNN 中,反向传播经过多个时间步,梯度会被反复相乘。如果每步乘以一个大于 1 的值,梯度就会指数级增长------这就是梯度爆炸。
4.2 解决方案:用 L2 范数裁剪梯度
if ‖ĝ‖ ≥ threshold:
ĝ = (threshold / ‖ĝ‖) × ĝ
4.3 图解:梯度裁剪的几何意义
阈值圆 (threshold=2) 原点 原始梯度 ||g||=10 裁剪后 ||g||=2 方向不变 ||g||=1.5 < 2 不裁剪,保持不变 裁剪规则: 超出圆的 → 缩到圆上 | 圆内的 → 不动 ⚠️ 易错点: 以为所有梯度都会被裁剪
- 错误理解: 梯度 L2 范数 = 1.5,阈值 = 2 → 也会被裁剪 ❌
- 正确理解: 1.5 < 2,不进入 if 分支,梯度保持不变 ✓
五、L1 正则化 vs L2 正则化
5.1 正则化是什么
在 loss 函数中加一个惩罚项,防止权重过大(过拟合):
L=原始loss+λ⋅权重的惩罚L = \text{原始loss} + \lambda \cdot \text{权重的惩罚}L=原始loss+λ⋅权重的惩罚
| 正则化类型 | 惩罚项 | 别名 |
|---|---|---|
| L1 正则化 | λΣ|wᵢ| | Lasso |
| L2 正则化 | λΣwᵢ² | Ridge / Weight Decay |
5.2 图解:L1 vs L2 对权重分布的偏好
A = (0.5, 0.5, 0.5, 0.5) 分散均匀 0.5 0.5 0.5 0.5 B = (0, 0, 0, 2) 集中在一个 0 0 0 2 L1 惩罚 = 2 L2 惩罚 = 1 L1 惩罚 = 2 L2 惩罚 = 4 ← 重罚! 结论:L1 对两者一视同仁(都是2) L2 重罚集中权重(4 vs 1),逼模型分散权重 ⚠️ 易错点: 混淆 L2 范数和 L2 正则项
B = (0, 0, 0, 2) 的:
- L2 范数 = √(0+0+0+4) = √4 = 2
- L2 正则项 (范数的平方)= 0+0+0+4 = 4
正则化用的是 Σwᵢ²(平方和),不是 √(Σwᵢ²)(范数本身)
六、为什么梯度下降需要对正则项求导
正则化写的是 loss 函数 ,但更新权重用的是梯度下降:
wnew=w−η⋅∂L∂ww_{\text{new}} = w - \eta \cdot \frac{\partial L}{\partial w}wnew=w−η⋅∂w∂L
所以必须对 loss(包括正则项)求导,才能得到更新方向。
| 正则项 | 对 wᵢ 求导后的梯度 | 说明 |
|---|---|---|
| λwᵢ² | 2λwᵢ | 幂函数求导:(x²)' = 2x |
| λ|wᵢ| | λ · sign(wᵢ) | 绝对值求导:正数→+1,负数→-1 |
注:有些教材把 L2 正则项写成 (λ/2)Σwᵢ²,求导后 2 和 1/2 抵消,梯度变为 λwᵢ。两种约定都对。
七、手算对比:L1 vs L2 更新权重
设定
- 两个权重:w₁ = 0.5,w₂ = 0.02
- 原始 loss 的梯度 = 0(只有正则项在推)
- 学习率 η = 0.1,正则化强度 λ = 1
L2 正则化更新
梯度 = 2λwᵢ(与权重大小成正比)
w₁: 梯度 = 2×1×0.5 = 1.0 → w₁_new = 0.5 - 0.1×1.0 = 0.4
w₂: 梯度 = 2×1×0.02 = 0.04 → w₂_new = 0.02 - 0.1×0.04 = 0.016
L1 正则化更新
梯度 = λ × sign(wᵢ)(固定大小,与权重无关)
w₁: 梯度 = 1×sign(0.5) = 1 → w₁_new = 0.5 - 0.1×1 = 0.4
w₂: 梯度 = 1×sign(0.02) = 1 → w₂_new = 0.02 - 0.1×1 = -0.08
⚠️ 易错点: 把 L1 的梯度算成 λ×wᵢ(跟 L2 搞混)
- 错误: L1 对 w₂ 的梯度 = 1 × 0.02 = 0.02 ❌
- 正确: L1 对 w₂ 的梯度 = 1 × sign(0.02) = 1 × 1 = 1 ✓
sign() 只看正负号,不看大小!正数永远给 +1,负数永远给 -1。
图解:L1 vs L2 对小权重 w₂ 的不同命运
w₂ = 0.02 经过一步更新后的命运 L2: 0 0.02 (原值) 0.016 (新值) 推力=0.04 (很小) L1: 0 0.02 -0.08 (穿过零!) 推力=1 (恒定!) 穿过零 → 截断为 0 L2: 推力与权重成正比,越小推越轻 | L1: 推力恒定,小权重直接被杀
八、实际应用场景:房价预测
100 个特征中只有 ~10 个真正有用,其余是噪声。
图解:训练后的权重分布
训练后权重分布对比 L2 正则化 有用特征 噪声(小但非0) 100个权重全部非零 "所有特征都有点用" 全局音量旋钮 L1 正则化 0 0 0 0 0 0 有用特征 噪声(全=0) 只剩 8-12 个非零权重 "自动选出重要特征" 自动特征选择器
九、一句话总结
- L2 正则化 = 全局音量旋钮(所有权重均匀缩小)
- L1 正则化 = 自动特征选择器(不重要的权重直接归零)
- 梯度裁剪 = 速度限制器(梯度太大时等比缩小,方向不变)