当模型可调节参数(自由度)过多时,容易学习到训练数据中的噪声,进而出现过拟合(训练集误差小、测试集误差大)。因此要对模型的参数引入某种限制,在训练过程中避免过拟合。

正则化通过在损失函数中加入参数惩罚项,约束参数规模,迫使模型优先学习数据的通用规律,而非噪声。

范数

在正式进入正则化的学习之前,先了解一下范数的概念。

范数的本质是对距离的抽象推广,一个函数 \|\cdot\| 是范数,必须满足以下条件:

  1. 非负性\|\mathbf{x}\| \geq 0
  2. 零向量特征\|\mathbf{x}\| = 0 \iff \mathbf{x} = \mathbf{0}\mathbf{0} 为零向量)
  3. 正齐次性\|\alpha \mathbf{x}\| = |\alpha| \cdot \|\mathbf{x}\|
  4. 三角不等式\|\mathbf{x} + \mathbf{y}\| \leq \|\mathbf{x}\| + \|\mathbf{y}\|

向量范数中 L_p 范数最为常见,定义为:

\|\mathbf{x}\|_p = \left( \sum_{i=1}^n |x_i|^p \right)^{\frac{1}{p}}

最常见的几种 L_p 范数有:

  • L1 范数,对应曼哈顿距离,是向量各个分量绝对值的和
\|\mathbf{x}\|_1 = \sum_{i=1}^n |x_i|
  • L2 范数,对应欧几里得距离,是向量各分量平方和的平方根。L2 范数应用最广,如果直接省略下标变成 \|x\| 的形式,一般是指 L2 范数
\|\mathbf{x}\|_2 = \sqrt{\sum_{i=1}^n x_i^2} = \sqrt{\mathbf{x}^\top \mathbf{x}}
  • L_\infty 范数,对应切比雪夫距离,是向量各分量绝对值的最大值
\|\mathbf{x}\|_\infty = \max_{1 \leq i \leq n} |x_i|
  • L0 范数,严格意义上不符合范数定义,所以应该叫 L0 伪范数,定义为向量中非零元素的个数
\|\boldsymbol{x}\|_0 = \sum_{i=1}^n \mathbb{I}(x_i \neq 0)

其中 \mathbb{I}(\cdot) 为指示函数,当 x_i \neq 0 时,\mathbb{I}(x_i \neq 0) = 1,否则为 0


正则化方法

常见的正则化方法:

  • Ridge Regression,也被称作 L2 Regression,通常作为默认的正则化手段使用
  • Lasso Regression,也被称作 L1 Regression
  • Elastic Net

上述正则化方法,都有一个正则项(regularization term)被添加到 cost function 中。

L2 Ridge Regression

在原有损失函数的基础上,加入参数的平方和惩罚项,惩罚项系数 \alpha 为正则强度。

cost function 就变成了:

J(\theta) = \text{MSE}(\theta) + \alpha \frac{1}{2} \sum_{j=1}^{p} \theta_j^2

其中 p 为特征权重数量,偏置项 \theta_0 通常不参与惩罚

Figure 1 多项式拟合加 L2 正则化

最小化损失函数时,正则项的存在要求参数 \theta 的 L2 范数越低越好,从而会限制其复杂度。因为 L2 范数的计算方式是向量所有元素的平方和相加,可以用于形容参数向量整体大小或复杂度,L2 范数越大,某些参数的绝对值越大,会导致模型过于依赖这些参数。核心逻辑就是压缩无用参数,降低模型复杂度

可以看出 \alpha 越大,拟合的曲线越平滑,因为 \alpha 对高维惩罚更严重;反之 \alpha 越小,曲线会更弯曲。

L1 LASSO Regression (Least Absolute Shrinkage and Selection Operator Regression)

正则项为参数的绝对值之和,cost function 为:

J(\theta) = \text{MSE}(\theta) + \alpha \sum_{j=1}^{p} |\theta_j|

其中 p 为特征权重数量,偏置项 \theta_0 通常不参与惩罚。

通过更激进的收缩方式:在最小化损失函数时,L1 正则项会让不重要的参数被直接压缩为 0,最终仅得到稀疏的参数向量,少量关键特征被保留。

Figure 2 L2 & L1 正则化约束对比

关于两种正则化形状的解释,注意一个前提,上图是在二维空间

L1 正则化:是权重向量各分量的绝对值之和,在二维情况下,权重向量为 w = (w_1, w_2),L1 正则项是 |w_1| + |w_2| = c

w_1 \geq 0, w_2 \geq 0 时,方程为 w_1 + w_2 = c

w_1 \geq 0, w_2 \leq 0 时,方程为 w_1 - w_2 = c

w_1 \leq 0, w_2 \geq 0 时,方程为 -w_1 + w_2 = c

w_1 \leq 0, w_2 \leq 0 时,方程为 -w_1 - w_2 = c

这四条直线构成了一个菱形,4 个顶点分别为 (c, 0)(0, c)(-c, 0)(0, -c)。损失函数的等高线(通常为椭圆形)与 L1 正则化约束区域(菱形)的交点更容易出现在顶点上,对应权重向量中有 0 出现的情况。

L2 正则化:是参数平方和的平方根,在二维情况下,表示为 \sqrt{w_1^2 + w_2^2} = c,平方后(等价的),在二维平面上就是圆的标准方程。损失函数的等高线与圆的交点更可能出现在圆周上,而不是在坐标轴上,因此不太可能出现权重向量中有 0 的情况。

至于为什么要找交点,回顾一下我们的优化目标,是最小化损失函数 + 正则项这个函数,可以理解为在满足正则化约束(正则项看成一个给定容量的可行域)条件下,找到使损失函数最小的参数向量 w。损失函数等高线表示损失函数值相同的 w,正则化区域边界表示 \|w\|_p = c 点的集合。

协助理解 L1 和 L2 正则化的模式

理解为行李装箱:

  • L1 正则化:强制丢弃不重要的物品,只保留最关键的物品
  • L2 正则化:压缩所有物品的尺寸,但不会丢弃物品

L1+L2 Elastic Net Regression

J(\theta) = \text{MSE}(\theta) + r\alpha \sum_{j=1}^{p} |\theta_j| + \frac{1-r}{2} \alpha \sum_{j=1}^{p} \theta_j^2

这种方法介于 L1 和 L2 之间。\alpha 控制正则化强度,r \in [0, 1] 控制 L1 与 L2 的混合比例。若 \alpha 极大,所有特征权重 \theta_j 将被压至 0,模型退化为仅由偏置项决定的常数预测。

模型的选择

  • Ridge 一般作为默认选项
  • 若特征较多,但是有用的较少,可以选择 LASSO 或者 Elastic
  • 特征高度相关或特征数 > 样本数时,Elastic Net 通常优于 LASSO,因为 L2 项能稳定相关特征的系数
  • 若特征数量 > 训练实例数,选择 Elastic Net

欠拟合与过拟合

训练损失和测试损失都较大,为欠拟合(underfitting)。

训练损失小而测试损失较大,为过拟合(overfitting)。

欠拟合

模型无法拟合数据中的重要模式,模式就是数据背后的规律。

欠拟合会导致预测精度低。

造成欠拟合的因素包括:

  • 模型复杂度太低,不具备学习复杂模式的能力
  • 迭代次数太少,没来得及学习数据的模式
  • 学习率太低,参数更新太慢或不充分

解决欠拟合的方法:

  • 提高模型复杂度,能够学习更复杂的模式
  • 增加迭代次数,欠拟合的训练和测试损失均未收敛,说明模型尚未完全学习数据中的重要模式,增加训练次数可以让模型充分拟合
  • 提高学习率,理由同上

过拟合

过度拟合了训练集数据中不具备普遍性的部分,在未观测到的数据中,预测效果会变差。

造成过拟合的因素包括:

  • 模型复杂度太高,导致训练损失小,但是预测损失大
  • 训练集的数据太少
  • 训练集噪声太多

解决过拟合的方法:

  • 筛选特征,如 PCA
  • 正则化约束
  • Dropout Layer
  • 数据增强,以及增加数据量
  • Early Stop
  • Ensemble Learning
  • 交叉验证

交叉验证 Cross Validation

在训练过程中,一般划分为 Training Set 和 Test Set,但是 Test Set 对于训练过程来说是未知的,因此常常采取人为构造 Test Set 的方法,划分出一部分 Validation Set。Validation 用于模型选择和调参,不用于最终评估。

Validation Set 不参与任何模型参数的更新,也就是说模型在训练过程中不应该用到任何 Validation Set 中的数据信息。如果 Test Set 和 Validation Set 的数据分布相同,那么可以认为二者是等效的。

与 Test Set 的区别见下表:

特性 验证集 测试集
作用 模型选择和调参 最终模型评估
使用频率 多次使用 仅使用一次
数据参与 不参与参数更新 完全不参与训练
评估目的 选择最佳模型 评估模型在真实场景的表现

要注意的是,虽然训练时不会用到 Validation Set 中的信息,但是如果预处理时用到了 Training Set 和 Validation Set 的共同统计信息,那么 Validation Set 的信息就可以泄露到模型,模型就学到了 Training Set 以外的信息。因此如果要对数据进行预处理,最好是先划分 Set。

在划分不同 Set 时,常采用随机划分的方式,常用的是交叉验证。

K 折交叉验证 K-Fold Cross Validation

将数据集随机划分为 K 个大小相等的子集,称为 Fold,每次使用 K-1 个子集作为 Training Set,剩余的 1 个子集作为 Validation Set。重复 K 次,每次使用不同的子集作为 Validation Set,最终取 K 次验证结果的平均值作为模型性能的估计。

数据集 → [1][2][3][4][5](K=5)
第1轮:训练集[2][3][4][5],验证集[1]
第2轮:训练集[1][3][4][5],验证集[2]
第3轮:训练集[1][2][4][5],验证集[3]
第4轮:训练集[1][2][3][5],验证集[4]
第5轮:训练集[1][2][3][4],验证集[5]

留一验证 Leave One Out Cross Validation

K-Fold 的极端情况,其中 K 等于数据集大小。每次只留一个样本作为 Validation Set,其余所有样本作为 Training Set。也就是说需要训练 n 次模型,n 为样本数。

分层 K 折交叉验证 Stratified K-Fold Cross Validation

在 K 折交叉验证的基础上,保证每个 Fold 中各类别样本的比例与原始数据集中的比例一致。特别适用于类别不平衡的数据集。

原始数据集:正类60%,负类40%
K=5的分层K折:
折1:正类60%,负类40%
折2:正类60%,负类40%
...
折5:正类60%,负类40%

优化器 Optimisers

优化器根据损失函数的梯度更新模型参数,不同算法在收敛速度、稳定性和内存开销上各有取舍。

SGD (Stochastic Gradient Descent)

每次用单个样本或小批量(mini-batch)估计梯度并更新参数,是深度学习中最基础的优化方法:

\theta \leftarrow \theta - \eta \nabla_\theta J(\theta)

Momentum

在 SGD 基础上引入动量项,累积历史梯度方向以加速收敛并抑制震荡:

v \leftarrow \gamma v + \eta \nabla_\theta J(\theta), \quad \theta \leftarrow \theta - v

AdaGrad

为每个参数维护自适应学习率,频繁更新的参数学习率自动减小,适合稀疏特征;但学习率会持续衰减,长期训练可能过早停止。

RMSprop

用梯度平方的移动平均归一化更新步长,缓解 AdaGrad 学习率单调递减的问题,在 RNN 等场景中表现稳定。

Adam (Adaptive Moment Estimation)

结合 Momentum 的一阶矩估计与 RMSprop 的二阶矩估计,为每个参数计算自适应学习率,收敛快、超参数不敏感,是目前深度学习的默认选择之一。