机器学习高频知识点——1. 正则化

📖概念

正则化是一种防止模型过拟合的有效策略,主要分为参数正则化和经验正则化。

正则化符合奥卡姆剃刀定律①,核心思想是降低模型复杂度。

🧩参数正则化

参数正则化主要通过对模型的参数进行约束来实现。

通过在经验风险②上加一个正则化项(也叫惩罚项),实现结构风险③最小化。模型越复杂,正则化项的值越大,二者关系单调递增。

参数正则化一般具有如下形式:

\min_{f\in\digamma}\frac{1}{N}\sum^{N}_{i=1}L(y_i,f(x_i))+\lambda J(f)

第一项是经验风险,第二项是正则化项,λ≥0为调整两者关系的系数。

🍋范数 norm

范数是向量的投影大小,用于衡量向量的距离。有L1范数、L2范数、L3范数、L4范数等,抽象表示为Lp-norm。公式写作:\|x\|_p = (\sum_i\left|x_i\right|^p)^{1/p},代入p值:

L1范数(L1-norm):\|x\|_1 = \sum^{n}_{i=1}\left|x_i\right| = \left|x_1\right|+\left|x_2\right|+...+\left|x_n\right|

,绝对值之和,也称为曼哈顿范数④,它反映了向量在某种“距离”度量下的“大小”或“长度”。

L2范数(L2-norm):\|w\|_2 = \sqrt{\sum^{n}_{i=1}w_i^2}

,对向量元素平方和的平方根,也称为欧几里得范数⑤,它反映了向量在空间中的“大小”或“长度”。

两个黑点间的绿线是L2-norm,其他3条线都是L1-norm

最小二乘法是L2范数在数据拟合和参数估计领域的一种具体应用,通过计算最小化残差⑥平方和,,使得模型预测值与真实值之间的L2范数(欧几里得距离)最小。

🎄L1正则化

L1正则化方法,在回归模型中也叫Lasso回归

通过在损失函数中添加L1范数项(即系数的绝对值之和)作为惩罚项,Lasso回归可以使部分学习到的特征权值缩减为0,从而达到稀疏化和特征选择的目的。适用于处理高维数据集。

解读:使用L1正则化时,将某些特征的系数归0 ,使他们被模型忽略,真正起作用的非零特征减少了,所以模型变得稀疏化;剩下的特征都是更关键的、被训练青睐的,也就相当于执行了特征选择,帮助模型集中注意力在这些更有信息量的特征上。

🎄L2正则化

L2正则化方法,在回归模型中也叫Ridge回归(岭回归)

通过在损失函数中添加了一个L2范数项(即系数的平方和) 作为惩罚项,用于对估计系数做出限制,使得系数更小,但不会达到0。起到增强模型稳定性的作用,适用于存在强相关性特征的数据集。

解读:使用L2正则化时,缩减整体权重的系数,更小的权值意味着模型的复杂度更低,对数据的拟合就不会过强。同时,权重的缩减将单一特征的影响分散到多个特征,防止单个特征主导模型的预测,避免过分依赖训练数据中的特定特征或模式,因此模型的训练更“均衡”。

L2正则化也被称为权重衰减(weight decay),经常应用于神经网络层的权重上。通过缩小权重来帮助防止过拟合,使网络对输入数据的变化不那么敏感。

L2范数的数学调整

在机器学习上下文中,L2正则化通常使用L2范数的1/2*平方(而不带平方根),即:\frac{1}{2}\sum^{n}_{i=1}w_i^2

这里,不带平方根和使用系数1/2主要是为了数学上的方便,这样在求导时会消去平方项前的2,得到简洁的结果。这样做尤其契合梯度下降算法,在梯度下降中,我们根据损失函数对参数的梯度来更新参数。由于L2正则项的导数就是参数本身,它可以直接与损失函数对参数的梯度相加,从而实现对参数的惩罚效果。这种形式的正则化项使得优化过程更加平滑和稳定。

🎄弹性网正则化

Elastic Net Regularization,结合了L1和L2正则化的优点,旨在达成特征选择和权重缩减之间的平衡。在模型训练期间,将L1和L2正则化项同时纳入损失函数中,用λ1和λ2控制两种正则化的强弱。

弹性网正则化在处理具有高维特征和强特征相关性的数据集时有不错的效果。


使用Python的scikit-learn算法库,可以有效实现弹性网正则化:

from sklearn.linear_model import ElasticNet
from sklearn.model_selection import train_test_split  
from sklearn.datasets import make_regression  
from sklearn.metrics import mean_squared_error

# 创建一个模拟的回归数据集  
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)  
  
# 将数据集分割为训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  
  
# 初始化ElasticNet模型,alpha控制正则化的强度,l1_ratio控制L1和L2正则化的比例  
enet = ElasticNet(alpha=0.1, l1_ratio=0.5) 

# 训练和预测
enet.fit(X_train, y_train)
y_pred = enet.predict(X_test)

# 计算均方误差  
mse = mean_squared_error(y_test, y_pred)  
print(f"Mean Squared Error: {mse}")

🧩经验正则化

经验正则化通过引入一些经验性的技巧或策略来改进模型的训练过程,从而提高模型的泛化性能。这些方法通常基于一些启发式或实验性的观察,而不是直接对模型参数进行约束。

🎄Dropout

神经网络中常用的正则化策略,它通过随机“关闭”一部分神经元的活动来防止过拟合。

在训练过程中,Dropout通过以一定的概率(如0.5)随机将一部分神经元的输出设为0,表示该神经元被丢弃。这种随机丢弃的操作相当于每次迭代都在使用不同的网络结构进行训练,可以被看作是对神经网络进行集成学习的一种近似。因为输入可能会被随机丢弃,模型不会过度依赖某些特定的神经元,有助于打破神经元之间的复杂共适应性,增强网络对新数据的适应性。Dropout可以在任何非输出层后使用。

Dropout可以与其他正则化方法结合使用,例如L1或L2正则化,进一步提高模型的泛化能力。

在测试阶段,为了保持模型的性能和一致性,通常会对每个神经元的输出乘以保留概率(1-dropout率),以补偿训练时随机丢弃神经元所带来的影响。

使用Pytorch的torch.nn模块,可以向模型添加Dropout层:

self.dropout = nn.Dropout(p=0.5)  # 在训练期间,每个神经元的输出有50%的概率被设置为0

🎄早停法

观测模型在验证集上的表现,当训练不再带来明显改进时,就停下来。不需要完成所有预定的训练轮次(Epochs)就能找到那个“刚刚好”的模型状态,节省时间和资源。

提前停止的关键是识别模型开始过拟合的区域,为此需要监控训练过程,记录验证数据上的损失函数(或者看准确率是否在一段时间内饱和)。

💫正则化的应用场景

正则化可以应用在多种机器学习场景中:

  • 线性回归:当处理高维数据集或存在多重共线性时;
  • 逻辑回归:当特征空间大或可能存在相关性时;
  • 神经网络:当处理复杂模型和大数据集时;
  • 支持向量机SVM;
  • 图像分类:特别是训练卷积神经网络(CNNs)时,通常采用L2正则化来控制,提高泛化能力;

文末注释

① 奥卡姆剃刀定律:“如无必要,勿增实体”。在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的才是最好的模型。

② 经验风险:指模型在训练数据上的平均损失或误差。可以视为对训练数据的拟合程度,是模型在已知数据上的表现。然而,仅仅追求最小化经验风险可能会导致模型过度拟合,即在训练数据上表现良好,但在未见过的数据上表现糟糕。

③ 结构风险:指模型在所有可能输入(包括训练数据和未知数据)上的平均损失或误差,它表示了模型的泛化能力,即模型在未见过的数据上的表现。结构风险是是对经验风险和期望风险的折中,在经验风险函数后增加正则化项获得,其整合了经验风险和模型决策函数的复杂度,以保证两者都达到最小化。

④ 曼哈顿范数:L1范数的别称,因为它与曼哈顿距离在二维空间中的数学描述相似

⑤ 欧几里得范数:L2范数的别称,因为它与欧几里得距离在二维空间中的数学描述相似

⑥ 残差:真实值与估计值(拟合值)之间的差。

参考资料

  1. 李航《机器学习方法》P20
  2. BB8 - 小红书
  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值