机器学习之正则化

在机器学习领域,模型的性能至关重要,而过拟合问题常常阻碍模型在实际应用中的表现。正则化技术应运而生,成为解决这一难题的有力武器。它主要分为参数正则化和经验正则化 两大类别,核心目的在于遵循奥卡姆剃刀定律,使模型在拟合数据时保持简洁,避免过度复杂,从而提升模型的泛化能力

一、参数正则化

(一)基本原理

参数正则化是对模型参数施加约束的一种策略。其实现方式是在经验风险的基础上添加一个正则化项(惩罚项),以此实现结构风险最小化。在这个过程中,模型的复杂度与正则化项的值呈现单调递增关系。参数正则化的常见形式为:( R_{emp}(w)+\lambda\Omega(w) )。其中,( R_{emp}(w) ) 代表经验风险,它反映了模型在训练数据上的平均损失或误差,体现了模型对训练数据的拟合程度。但单纯追求经验风险最小化,易导致模型过度拟合,在未见数据上表现欠佳。( \lambda\Omega(w) ) 是正则化项,( \lambda\geq0 ) 作为系数,用于调节经验风险与正则化项之间的平衡关系。

(二)范数与正则化

  1. 范数概念 :范数用于衡量向量的某种 "大小" 或 "长度",能理解为向量的投影大小,常见的有L1范数、L2范数等,抽象表示为Lp - norm,其公式为 ( \left | x \right |{p} = \left ( \sum{i=1}^{n}\left | x_{i} \right |^{p} \right )^{\frac{1}{p}} )。当将不同的p值代入,可得到不同类型的范数。
  2. L1范数(曼哈顿范数) :L1范数(L1 - norm)的表达式为 ( \left | x \right |{1} = \sum{i=1}^{n}\left | x_{i} \right | ),它是向量各元素绝对值之和,也被称为曼哈顿范数。这一别称源于它与在曼哈顿街区中,从一点到另一点沿街道行走距离的数学描述相似,能够反映向量在特定 "距离" 度量下的大小。
  3. L2范数(欧几里得范数) :L2范数(L2 - norm)的计算公式是 ( \left | x \right |{2} = \sqrt{\sum {i=1}^{n}x_{i}^{2}} ),即对向量元素先平方再求和,最后开平方根,又称为欧几里得范数。它类似于空间中两点间直线距离的计算方式,能够体现向量在空间中的实际大小。例如,在二维平面上,连接两点的直线距离对应L2范数,而通过折线行走的距离之和类似L1范数。最小二乘法便是L2范数在数据拟合和参数估计方面的典型应用,其目标是最小化残差(真实值与估计值之间的差)的平方和,即让模型预测值与真实值之间的L2范数(欧几里得距离)达到最小。

(三)常见的参数正则化方法

  1. L1正则化(Lasso回归):在回归模型中,L1正则化方法也被称为Lasso回归。它通过在损失函数中加入L1范数项(即系数的绝对值之和)作为惩罚项。这一做法会使得部分学习到的特征权值变为0,就像给模型进行了 "瘦身",使模型变得稀疏化,去除了不重要的特征,实现了特征选择。因此,在处理高维数据集时,L1正则化能够帮助模型聚焦于重要特征,提升模型性能。
  2. L2正则化(Ridge回归/权重衰减):在回归模型领域,L2正则化又被称作Ridge回归(岭回归)。其原理是在损失函数中添加L2范数项(即系数的平方和)作为惩罚项,该惩罚项能够限制估计系数,使其变小但不会变为0。这样一来,模型的稳定性得以增强,尤其适用于存在强相关性特征的数据集。在神经网络层的权重调整中,L2正则化也经常被使用,此时它还有一个名字叫权重衰减(weight decay)。通过缩小权重,模型能够有效防止过拟合,降低对输入数据变化的敏感度。在机器学习实践中,L2正则化常采用一种特殊形式,即使用L2范数的 ( \frac{1}{2} ) 乘以平方(不带平方根),表达式为 ( \frac{1}{2}\left | w \right |_{2}^{2} )。这种形式主要是为了在数学计算上的便利,在求导过程中,平方项前的2可以被消去,使结果更为简洁,并且特别适配梯度下降算法。在梯度下降过程中,我们依据损失函数对参数的梯度来更新参数,而L2正则项求导后即为参数本身,能够直接与损失函数对参数的梯度相加,实现对参数的惩罚效果,让优化过程更加平稳、稳定。
  3. 弹性网正则化 :Elastic Net Regularization融合了L1和L2正则化的优点,旨在在特征选择和权重缩减之间找到平衡。在模型训练阶段,将L1和L2正则化项同时添加到损失函数中,通过 ( \lambda_{1} ) 和 ( \lambda_{2} ) 来分别控制两种正则化的强度。在处理高维且具有强特征相关性的数据集时,弹性网正则化展现出特别出色的效果。

以Python的scikit - learn算法库为例,实现弹性网正则化的代码如下:

python 复制代码
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可以应用于任何非输出层之后,并且能够与L1或L2正则化方法结合使用,进一步提升模型的泛化能力。在测试阶段,为确保模型性能的稳定性,通常会将每个神经元的输出乘以保留概率(1 - dropout率),以此补偿训练时随机丢弃神经元所带来的影响。

使用Pytorch的torch.nn模块添加Dropout层的代码示例如下:

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

(二)早停法

早停法是在模型训练过程中,密切关注验证集上模型的表现。一旦发现模型在验证集上的性能经过多轮训练后没有明显提升,便停止训练,无需完成预定的所有训练轮次(Epochs)。这种方法既能节省时间,又能减少资源消耗。使用早停法的关键在于准确判断模型何时开始出现过拟合现象。这需要在整个训练过程中持续监控验证数据上损失函数的变化情况,或者观察准确率是否在一段时间内趋于稳定不再提升,以此作为判断是否应该停止训练的依据。

三、正则化的应用场景

(一)线性回归

当面临高维数据集,或者数据存在多重共线性问题时,正则化能够发挥重要作用。它可以帮助模型更好地处理复杂的数据关系,避免因维度灾难或共线性导致的过拟合问题,提高模型的预测准确性和稳定性。

(二)逻辑回归

在特征空间较大,或者特征之间可能存在相关性的情况下,正则化同样适用。通过对模型进行正则化处理,可以有效降低特征之间相关性对模型的影响,使模型更加稳健,提升模型在分类任务中的性能表现。

(三)神经网络

在处理复杂模型和大数据集时,正则化是防止过拟合的重要手段。由于神经网络的复杂性较高,容易对训练数据中的噪声和细节过度学习,正则化能够限制模型的复杂度,增强模型的泛化能力,确保神经网络在面对各种不同的数据时都能保持良好的性能。

(四)支持向量机SVM

正则化可以帮助支持向量机更好地调整模型的复杂度,优化模型的决策边界,从而提升模型的性能。通过合理设置正则化参数,能够使SVM在不同的数据集上都能找到最优的分类或回归效果。

(五)图像分类

尤其是在训练卷积神经网络(CNNs)进行图像分类时,L2正则化被广泛应用于提高模型的泛化能力。图像数据通常具有高维度和复杂的特征,L2正则化能够对模型的权重进行约束,防止模型过拟合,使训练出的CNN模型能够更好地识别不同类别的图像,在新的图像数据上也能保持较高的准确率。

相关推荐
紫雾凌寒1 小时前
计算机视觉应用|自动驾驶的感知革命:多传感器融合架构的技术演进与落地实践
人工智能·机器学习·计算机视觉·架构·自动驾驶·多传感器融合·waymo
安忘1 小时前
LeetCode 热题 -189. 轮转数组
算法·leetcode·职场和发展
sauTCc1 小时前
DataWhale-三月学习任务-大语言模型初探(一、二、五章学习)
人工智能·学习·语言模型
Y1nhl1 小时前
力扣hot100_二叉树(4)_python版本
开发语言·pytorch·python·算法·leetcode·机器学习
暴力袋鼠哥1 小时前
基于深度学习的中文文本情感分析系统
人工智能·深度学习
视觉语言导航2 小时前
RAG助力机器人场景理解与具身操作!EmbodiedRAG:基于动态三维场景图检索的机器人任务规划
人工智能·深度学习·具身智能
岱宗夫up2 小时前
《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
人工智能·aigc
訾博ZiBo2 小时前
AI日报 - 2025年3月12日
人工智能
龚大龙2 小时前
机器学习(李宏毅)——Auto-Encoder
人工智能·机器学习
曼诺尔雷迪亚兹2 小时前
2025年四川烟草工业计算机岗位备考详细内容
数据结构·数据库·计算机网络·算法