引言:正则化 (Regularization) 是机器学习中一种用于防止模子过拟合技术。核心头脑是通过在模子损失函数中添加一个惩罚项 (Penalty Term),对模子的复杂度举行约束,从而提升模子在新数据上的泛化能力。
一、正则化目的
- 防止过拟合:当模子过于复杂(比方神经网络层数过多、参数过多)时,容易在训练数据上“记忆”噪声或细节,导致在测试数据上体现差。
- 简化模子:正则化通过限制模子参数的大小或数量,迫使模子学习更通用的特征,而非过度依靠训练数据的细节。
二、正则化原理
正则化的本质是在损失函数(Loss Function)中添加一个 惩罚项,其形式为:
总损失 = 原始损失 + λ ⋅ 惩罚项 \text{总损失} = \text{原始损失} + \lambda \cdot \text{惩罚项} 总损失=原始损失+λ⋅惩罚项
- 原始损失:模子在训练数据上的偏差(如均方偏差、交叉熵等)。
- 惩罚项:对模子参数的约束,比方参数的大小或稀疏性。
- λ:正则化系数,控制惩罚项的强度。λ越大,惩罚越强,模子越简单。
三、 常见正则化方法
1. L1 正则化(Lasso 正则化):
- 界说:通过在损失函数中添加权重的 L1 范数惩罚项,使部分权重趋于零到达特征选择的结果。
- 算法原理:
在机器学习中,模子通过最小化损失函数举行训练。L1 正则化在原始损失函数中添加一个基于参数 L1 范数的惩罚项,优化目的变为:
J ( θ ) = L ( θ ) + λ ⋅ R ( θ ) J(\theta) = L(\theta) + \lambda \cdot R(\theta) J(θ)=L(θ)+λ⋅R(θ)
其中:
- J ( θ ) J(\theta) J(θ):总损失函数(带正则化的目的函数)。
- L ( θ ) L(\theta) L(θ):原始损失函数(比方均方偏差、交叉熵等),衡量模子预测与真实值的差距。
- R ( θ ) = ∥ θ ∥ 1 = ∑ i ∣ θ i ∣ R(\theta) = \|\theta\|_1 = \sum_{i} |\theta_i| R(θ)=∥θ∥1=∑i∣θi∣ 惩罚项:L1 正则化项,即参数绝对值之和。
- λ \lambda λ:正则化强度的超参数(惩罚系数),控制正则化的影响水平, λ ≥ 0 \lambda \geq 0 λ≥0。
- θ \theta θ:模子的参数(权重)。
通过最小化 J ( θ ) J(\theta) J(θ),模子不但要拟合数据,还要尽量减少参数的绝对值总和,这会导致部分参数被压缩到 0。
由于 L1 范数的绝对值函数在 0 点不可导,梯度更新需要利用次梯度(subgradient)。以一个权重 w w w 为例:
- 原始梯度更新(无正则化): w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} w←w−η∂w∂L。
- 带 L1 正则化的次梯度更新:
w ← w − η ( ∂ L ∂ w + λ ⋅ sign ( w ) ) w \leftarrow w - \eta \left( \frac{\partial L}{\partial w} + \lambda \cdot \text{sign}(w) \right) w←w−η(∂w∂L+λ⋅sign(w))
- η \eta η:学习率。
- ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L:原始损失对权重的梯度。
- sign ( w ) \text{sign}(w) sign(w):符号函数, w > 0 w > 0 w>0时为 1, w < 0 w < 0 w<0时为 -1, w = 0 w = 0 w=0时次梯度取值范围为 [ − 1 , 1 ] [-1, 1] [−1,1]。
当 w w w 的更新步长不足以抵消 λ ⋅ sign ( w ) \lambda \cdot \text{sign}(w) λ⋅sign(w) 时, w w w会被压缩到 0,从而产生稀疏性。
- 作用:
- 稀疏解:L1 正则化倾向于将不重要的参数直接置为 0,形成稀疏的权重向量。这使得模子只保留对预测最重要的特征。
- 特征选择:由于部分权重变为 0,L1 正则化可以自动识别和剔除不相关或冗余的特征,特别实用于高维数据。
- 防止过拟合:通过减少有效参数数量,L1 正则化低落了模子复杂度,从而提升了泛化能力。
- 优缺点:
- 长处:
- 特征选择能力: L1 正则化能够生成稀疏模子,自动筛选重要特征,实用于特征维度高或需要解释性的场景。
- 低落模子复杂度:通过剔除不必要参数,简化模子结构,减少计算开销。
- 对噪声鲁棒:忽略不相关特征后,模子对数据中的噪声更不敏感。
- 缺点:
- 不稳固性:当特征之间高度相关时,L1 正则化可能随机选择其中一个特征置为非 0,而忽略其他相关特征,导致结果不稳固。
- 优化难度:由于 L1 范数不可导,优化过程需要利用次梯度或近端梯度下降等方法,计算复杂度可能高于 L2 正则化。
- 依靠超参数 λ \lambda λ:正则化强度 λ \lambda λ 的选择至关重要,过大可能导致重要特征也被置为 0,过小则正则化结果不足。
- import numpy as np
- from sklearn.linear_model import LinearRegression, Lasso
- from sklearn.datasets import make_regression
- from sklearn.model_selection import train_test_split
- from sklearn.metrics import mean_squared_error
- # 1、生成模拟数据
- X, y = make_regression(n_samples=100, n_features=10, noise=0.1, random_state=42)
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- # 2、普通线性回归
- lr = LinearRegression()
- lr.fit(X_train, y_train)
- y_predict_lr = lr.predict(X_test)
- mse_lr = mean_squared_error(y_test, y_predict_lr)
- print(f"普通线性回归 MSE: {mse_lr:.4f}")
- # 3、L1 正则化(Lasso)
- lasso = Lasso(alpha=0.1) # alpha 是正则化强度,对应 λ
- lasso.fit(X_train, y_train)
- y_predict_lasso = lasso.predict(X_test)
- mse_lasso = mean_squared_error(y_test, y_predict_lasso)
- print(f"L1 正则化(Lasso) MSE: {mse_lasso:.4f}")
- # 4、查看权重
- print("普通线性回归权重:", lr.coef_[:10])
- print("L1 正则化权重:", lasso.coef_[:10])
复制代码- 普通线性回归 MSE: 0.0103
- L1 正则化(Lasso) MSE: 0.1824
- 普通线性回归权重: [16.7712358 54.13782324 5.18097686 63.64362199 93.61309994 70.63686589 87.0713662 10.43882574 3.15690876 70.90887261]
- L1 正则化权重: [16.68551572 54.04466658 5.03023843 63.54923618 93.45872786 70.54211442 86.95689868 10.27114941 3.06974112 70.78354482]
复制代码 2. L2 正则化(Ridge 正则化):
- 界说:在损失函数中添加权重的 L2 范数平方惩罚项,防止权重过大,促进模子的平滑性。
- 算法原理:
在机器学习中,模子通常通过最小化一个损失函数(比方均方偏差)来训练。L2 正则化通过在原始损失函数中添加一个额外的项,改变优化的目的。数学上,带 L2 正则化的损失函数可以表示为:
J ( θ ) = L ( θ ) + λ ⋅ R ( θ ) J(\theta) = L(\theta) + \lambda \cdot R(\theta) J(θ)=L(θ)+λ⋅R(θ)
其中:
- J ( θ ) J(\theta) J(θ):总损失函数(带正则化的目的函数)。
- L ( θ ) L(\theta) L(θ):原始损失函数(比方均方偏差、交叉熵等),衡量模子预测与真实值之间的差距。
- R ( θ ) = 1 2 ∥ θ ∥ 2 2 = 1 2 ∑ i θ i 2 R(\theta) = \frac{1}{2} \|\theta\|_2^2 = \frac{1}{2} \sum_{i} \theta_i^2 R(θ)=21∥θ∥22=21∑iθi2:L2 正则化项,即参数的 L2 范数平方,即参数权重平方和。
- λ \lambda λ:正则化强度的超参数(也叫惩罚系数),控制正则化的影响水平, λ ≥ 0 \lambda \geq 0 λ≥0。
- θ \theta θ:模子的参数(权重)。
优化目的变为同时最小化原始损失 L ( θ ) L(\theta) L(θ) 和正则化项 λ ⋅ R ( θ ) \lambda \cdot R(\theta) λ⋅R(θ),从而均衡模子的拟合能力和复杂性。
在梯度下降优化中,L2 正则化会影响参数的更新规则。以一个权重 ( w ) 为例:
- 原始梯度更新(无正则化): w ← w − η ∂ L ∂ w w \leftarrow w - \eta \frac{\partial L}{\partial w} w←w−η∂w∂L。
- 带 L2 正则化的梯度更新:
w ← w − η ( ∂ L ∂ w + λ w ) w \leftarrow w - \eta \left( \frac{\partial L}{\partial w} + \lambda w \right) w←w−η(∂w∂L+λw)
- η \eta η:学习率。
- ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L:原始损失对权重的梯度。
- λ w \lambda w λw: L 2 L2 L2 正则化的梯度贡献。
可以看到,L2 正则化在每次更新时额外引入了一个衰减项 λ w \lambda w λw,使得权重倾向于变小。因此,L2 正则化也被称为 权重衰减(weight decay)。
- 作用:
- 克制过拟合:只需在损失函数中添加一项即可,计算和优化都很直接。使参数值团体变小(但不会变为 0),克制参数过大导致过拟合。
- 提升模子的稳固性:通过限制权庞大小,L2 正则化使模子更能反抗数据中的非常值或噪声。 提升模子的稳固性(减少参数波动)。
- 广泛实用:可用于线性回归、逻辑回归、神经网络等多种模子。
- 范围性:
- 无法产生稀疏解:与 L1 正则化(Lasso)差别,L2 正则化不会将权重变为 0,因此不具备特征选择的能力。
- 依靠超参数 :正则化强度
|