人工智能正则化技术综述

170 阅读6分钟

前言

前几篇文章为大家详细讲解了人工智能深度学习中最重要最常见的几种激活函数,俗话说,激活函数用的好,模型效果跑不了,但是在模型训练和实际运用的过程中,正则化也是必不可少的一点,那么今天笔者就带大家来了解一下什么是人工智能算法模型中的正则化技术。

一、定义和简介

1. 定义

正则化是机器学习中用来防止模型过拟合的一种技术。过拟合是指模型在训练数据上表现得很好,但是在新的、未见过的数据上表现不佳的现象(泛化能力差)。这通常是因为模型学到了训练数据中的噪声和细节,而没有抓住数据的一般规律。正则化通过在模型的损失函数中添加一个额外的惩罚项来限制模型的复杂度,从而提高模型的泛化能力。(那么其实不同正则化方法的核心就是这个惩罚项不同)

2. 正则化的作用

  1. 防止过拟合:通过限制模型的复杂度,正则化减少了模型在训练数据上过度拟合的风险。
  2. 提高泛化能力:正则化有助于模型在新的、未见过的数据上表现更好,因为它鼓励模型学习更一般化的特征。
  3. 特征选择:一些正则化技术(比如我们经常接触的L1正则化)可以通过将不重要的特征的权重置为零来实现特征选择。特征选择的作用一个是可以有效减少噪音,加快训练速度,提高模型性能和泛化能力;二是可以减少过拟合风险,降低噪声数据对算法模型的影响。
  4. 减少复杂度,提高稳定性:正则化鼓励模型学习更简单的函数,这通常会导致更快的训练速度和更好的性能。并且可以减少模型对训练数据中噪声的敏感性,使模型更加稳定。

3. 正则化的数学表达(这里只列举L1和L2正则化)

假设我们有一个模型的损失函数 LdataL_{\text{data}},它衡量了模型预测值与真实标签之间的误差。正则化通过向这个损失函数添加一个惩罚项 R(w)R(w) 来工作,其中 ww 表示模型的权重。正则化的损失函数可以表示为:

Ltotal=Ldata(w)+λR(w)L_{\text{total}} = L_{\text{data}}(w) + \lambda R(w)

其中,λ\lambda 是一个正则化参数,用于控制惩罚项的强度。

  • 对于 L1正则化R(w)=i=1nwiR(w) = \sum_{i=1}^{n} |w_i|
  • 对于 L2正则化R(w)=i=1nwi2R(w) = \sum_{i=1}^{n} w_i^2

二、惩戒项的直观理解和示例讲解

其实这个惩戒项像什么呢 ? 它就像那个孙悟空的金箍棒,它加在损失函数的末尾,与损失函数有关,也会因损失函数而变化,具体是什么原理 ? 笔者在下面给出了一个线性回归模型的例子。

线性回归的损失函数(带L2正则化)

线性回归中常用的损失函数是均方误差(Mean Squared Error, MSE),当加入L2正则化项后,损失函数变为:

L(θ)=12mi=1m(hθ(x(i))y(i))2+λ2mj=1nθj2L(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} \theta_j^2

其中:

  • L(θ)L(\theta) 是损失函数。
  • mm 是训练样本的数量。
  • hθ(x(i))h_\theta(x^{(i)}) 是模型对于第 ii 个训练样本的预测值。
  • y(i)y^{(i)} 是第 ii 个训练样本的真实值。
  • θ\theta 是模型的参数(权重)。
  • λ\lambda 是正则化参数,控制正则化项的强度。
  • nn 是特征的数量。
  • θj\theta_j 是模型的第 jj 个参数。

第一项是模型预测误差的平方和,第二项是权重的L2范数的平方和,即权重的平方和。通过加入这个正则化项,可以防止模型的权重变得过大,从而避免过拟合。这就有点像啥,当你的损失函数较大时,说明你的模型的拟合效果是比较差的,那么相应的,你的惩戒项也会较大,这样的话你的损失函数在梯度下降的同时也要收到惩戒项的影响,防止你一下子下降过头无法到达损失最低值或者下降太慢迟迟不到最低点。

在我们的实际应用中,通过调整正则化参数 λ\lambda,我们可以控制模型在偏差和方差之间的权衡,以达到更好的泛化性能。

三、其他特点以及代码示例

1. 常见的几种正则化方法

  1. L1正则化(Lasso正则化):通过向损失函数添加模型权重的绝对值之和作为惩罚项。
  2. L2正则化(Ridge正则化):通过向损失函数添加模型权重的平方和作为惩罚项。
  3. Elastic Net正则化:结合了L1和L2正则化,同时添加L1和L2惩罚项。
  4. Dropout正则化:在训练过程中随机地丢弃网络中的神经元,以减少它们之间的共适应性。(像笔者在神经网络中就经常用它)
  5. 早停(Early Stopping):在验证集上的性能不再提升时停止训练,以避免过拟合。
  6. 数据增强(Data Augmentation):通过对训练数据进行变换来增加数据的多样性,减少过拟合的风险。
  7. 批量归一化(Batch Normalization):通过对每个批次的输入进行归一化来加速训练并减少过拟合。
  8. 权重衰减(Weight Decay):与L2正则化相同,通过在损失函数中添加权重的平方和来实现。

2. 如何选择和使用不同的正则化方法

选择哪种正则化方法以及正则化参数 λ\lambda 的值通常取决于具体问题和数据集。通常,通过交叉验证来确定最佳的正则化参数(其实也就是多次实验取最优)。正则化是一个权衡过程,需要在模型的拟合度和复杂度之间找到平衡点。

3. 正则化代码(这里我只列举L1和L2这两种)

当然,以下是一些常见正则化技术的示例代码,分别用Python和scikit-learn库实现:

L2正则化(Ridge正则化)

from sklearn.linear_model import Ridge
import numpy as np

# 假设 X 是特征矩阵,y 是目标变量
# X = ...
# y = ...

# 创建一个带有L2正则化的线性回归模型
ridge_reg = Ridge(alpha=1.0)  # alpha 是正则化强度
ridge_reg.fit(X, y)

# 使用模型进行预测
y_pred = ridge_reg.predict(X)

L1正则化(Lasso正则化)

from sklearn.linear_model import Lasso
import numpy as np

# 假设 X 是特征矩阵,y 是目标变量
# X = ...
# y = ...

# 创建一个带有L1正则化的线性回归模型
lasso_reg = Lasso(alpha=0.1)  # alpha 是正则化强度
lasso_reg.fit(X, y)

# 使用模型进行预测
y_pred = lasso_reg.predict(X)

总之,正则化技术是我们机器学习中提高模型泛化能力的重要技术,核心就是通过在损失函数中添加惩罚项来防止模型过拟合,从而提高模型在未知数据上的性能。

以上就是笔者关于人工智能正则化技术的综述,后续笔者将会为大家详细讲解一下我们常用的几种正则化方法,欢迎大家点赞,收藏,交流和关注,O(∩_∩)O谢谢!