【ML】L1 和 L2 正则化解释、何时使用它们以及实际示例

  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

L1和L2正则化是机器学习和统计建模中常用的技术,用于防止过度拟合并提高模型的泛化能力。它们是正则化技术,为损失函数添加惩罚项,鼓励模型具有更小的参数值。

文章目录

什么是正则化?

正则化如何发挥作用?

正则化的类型

1.L1正则化

2.L2正则化

3. Elastic Net正则化,它是什么,它是如何结合L1和L2正则化的?

L1 和 L2 正则化有什么区别?

的优点和缺点

什么时候应该使用 L1 正则化而不是 L2 正则化,反之亦然?

深度学习中的 L1 和 L2 正则化

正则化的实际例子

使用正则化时需要避免哪些常见错误或陷阱?

从头开始使用 Python 进行 L2 正则化

总结


什么是正则化?

正则化是机器学习和统计建模中用于防止过度拟合并提高模型泛化能力的技术。当模型过度拟合时,它已经很好地学习了训练数据,并且可能无法在新的、未见过的数据上表现良好。

正则化在训练过程中对模型引入额外的约束或惩罚,旨在控制模型的复杂性并避免过度依赖训练数据中的特定特征或模式。通过这样做,正则化有助于在很好地拟合训练数据和很好地推广到新数据之间取得平衡。

最常用的正则化技术是 L1 正则化 (Lasso)、L2 正则化 (Ridge) 和弹性网络正则化。L1 正则化将模型系数的绝对值之和添加到损失函数中,从而鼓励稀疏性和特征选择。L2 正则化添加了模型系数的平方值之和,这使得系数更小但非零。最后,弹性网络正则化结合了 L1 和 L2 正则化。

正则化如何发挥作用?

正则化通常是通过在训练期间向损失函数添加正则化项来实现的。正则化项对某些模型参数进行惩罚并调整它们以最小化总损失,总损失由原始损失(例如均方误差或交叉熵)和正则化项组成。正则化的强度由正则化参数控制,该参数确定拟合数据和减少大系数影响之间的平衡。

正则化通过阻止可能适合训练数据中的噪声或不相关模式的复杂模型来帮助防止过度拟合。相反,它提倡更简单的模型,捕获底层模式并很好地推广到新数据。在处理有限数据、高维数据集或具有许多参数的模型时,正则化特别有用。

l1 和 l2 正则化促进了更简单的模型,可以捕获底层模式并很好地推广到新数据

L1 和 L2 正则化促进了更简单的模型,可以捕获底层模式并很好地推广到新数据

值得注意的是,正则化是引入模型的一种偏差形式。因此,正则化技术和正则化参数的选择必须根据具体问题和数据集仔细选择和调整,以在模型性能的偏差和方差之间取得适当的平衡。

正则化的类型

1.L1正则化

L1正则化也称为Lasso正则化,将模型系数的绝对值之和添加到损失函数中。它通过将一些系数缩小到精确为零来鼓励模型的稀疏性。这具有执行特征选择的效果,因为模型可以有效地忽略不相关或不太重要的特征。在处理具有所需特征选择的高维数据集时,L1 正则化特别有用。

从数学上来说,L1 正则化项可以写为:

L1 regularization = λ * Σ|wi|

这里,λ是控制正则化强度的正则化参数,wi代表各个模型系数,并对所有系数求和。

2.L2正则化

L2 正则化,也称为 Ridge 正则化,将模型系数的平方值之和添加到损失函数中。与 L1 正则化不同,L2 正则化不会强制系数恰好为零,而是鼓励系数变小。L2 正则化可以通过将单个特征的影响分散到多个特征来防止过度拟合。当输入特征之间存在相关性时这是有利的。

从数学上来说,L2 正则化项可以写为:

L2 regularization = λ * Σ(wi^2)

与L1正则化类似,λ是正则化参数,wi代表模型系数。对所有系数求和,并对系数的平方进行求和。

L1 和 L2 正则化的选择取决于具体问题和数据的特征。例如,L1 正则化生成稀疏模型,这在需要特征选择时非常有利。另一方面,L2 正则化鼓励使用较小但非零的系数,并且在特征之间存在强相关性时更适合。

在实践中,通常使用 L1 和 L2 正则化的组合(称为弹性网络正则化)来受益于这两种技术的优势。Elastic Net 正则化将 L1 和 L2 正则化项的线性组合添加到损失函数中,由两个参数控制:α 和 λ。这允许同时进行特征选择和系数收缩。

3. Elastic Net正则化,它是什么,它是如何结合L1和L2正则化的?

Elastic Net正则化是一种结合L1和L2正则化的技术,以实现特征选择和权值收缩之间的平衡。在模型训练期间,它在损失函数中结合了 L1 和 L2 正则化项。

弹性网络正则化项定义为:

Elastic Net regularization = λ1 * Σ|wi| + λ2 * Σ(wi^2)

这里,wi代表各个模型系数,并且对所有系数求和。λ1λ2是分别控制 L1 和 L2 正则化强度的正则化参数。

Elastic Net 正则化结合了 L1 和 L2 正则化的优点。L1 正则化项鼓励稀疏性和特征选择,将一些系数驱动到恰好为零。这有助于选择最相关的特征并降低模型的复杂性。另一方面,L2 正则化项鼓励使用较小但非零的系数,防止任何一个特征主导模型的预测并提高模型的稳定性。

λ1和的值λ2控制 L1 和 L2 正则化之间的平衡。较高的值 λ1强调稀疏性,促进特征选择,而较高的值则λ2强调权重收缩和整体复杂性控制。

在处理具有高维特征和强特征相关性的数据集时,弹性网络正则化特别有用。它提供了一种灵活的正则化方法,允许根据特定问题和模型的所需行为在特征选择和权重收缩之间进行权衡。

实现Elastic Net正则化涉及在模型训练期间修改损失函数和权重更新步骤,类似于L1和L2正则化。然而,专门的算法和库(例如scikit-learn)可以有效地实现 Elastic Net 正则化。

L1 和 L2 正则化有什么区别?

L1和L2正则化的主要区别在于训练期间添加到损失函数中的惩罚项。以下是 L1 和 L2 正则化之间的主要区别:

  1. 处罚条款:
  • L1正则化(Lasso):L1正则化将模型系数(权重)的绝对值之和添加到损失函数中。它可以表示为λ * Σ|wi|,其中wi代表各个系数,λ是正则化参数。L1 惩罚通过将一些系数精确为零来促进稀疏性,从而有效地执行特征选择。
  • L2 正则化(Ridge):L2 正则化将模型系数的平方值之和添加到损失函数中。它可以表示为λ * Σ(wi^2),其中wi代表各个系数,λ是正则化参数。L2 惩罚鼓励较小但非零的系数,防止任何一个特征主导模型的预测并促进整体权重收缩。
  1. 对系数的影响:
  • L1 正则化:L1 正则化倾向于通过将某些系数驱动为零来生成稀疏模型。它执行自动特征选择,因为模型实际上忽略了系数为零的特征。当处理高维数据集或需要特征选择和可解释性时,这可能是有利的。
  • L2 正则化:L2 正则化会导致所有特征的系数更小但非零。它减少了单个特征的影响,但不会将系数降至零。当处理强特征相关性或没有特定特征选择需求时,L2 惩罚是有效的,因为它允许所有特征对模型的预测做出贡献。
  1. 复杂性控制:
  • L1 正则化:L1 正则化促进稀疏性和特征选择,这可以通过忽略不相关或不太重要的特征来帮助控制模型复杂性。它导致模型具有更少的非零系数和更简单的表示。
  • L2 正则化:L2 正则化通过缩小所有系数的大小来控制模型复杂性。它在特征之间提供更均匀分布的权重收缩,防止任何一个特征主导模型的预测。L2正则化有效减少了过拟合,提高了模型的稳定性。
  1. 优化:
  • L1正则化:L1正则化项在零处不可微,这给优化带来了挑战。然而,次梯度方法可以通过 L1 正则化有效地优化损失函数。
  • L2 正则化:L2 正则化项是平滑且可微分的,使得使用标准的基于梯度的优化算法进行优化具有计算效率。

在实践中,L1 和 L2 正则化的组合(称为弹性网络正则化)通常用于利用这两种技术的优势,并在稀疏性和权重收缩之间找到平衡。L1 和 L2 正则化之间的选择取决于具体问题、数据特征以及模型所需的行为。

的优点和缺点

正则化技术优点缺点
L1(Lasso)正则化– 执行特征选择,将一些系数驱动为零– 可能导致高度稀疏,使模型难以解释
– 有助于处理高维数据集– 当特征之间存在很强的相关性时无效
– 可以处理不相关或不太重要的特征– 计算成本比 L2 正则化更昂贵
– 对于构建稀疏模型很有用
L2(Ridge)正则化– 有助于防止过度拟合并提高泛化能力– 不执行像 L1 正则化那样的特征选择
– 当特征之间存在很强的相关性时有效– 生成的模型可能仍包含许多小的非零系数
– 计算稳定的解决方案– 可能不适合高维数据集
– 计算效率高

什么时候应该使用 L1 正则化而不是 L2 正则化,反之亦然?

L1 和 L2 正则化具有不同的特性,它们之间的选择取决于具体问题和模型所需的行为。以下是有关何时使用 L1 或 L2 正则化的一些准则:

使用 L1 正则化(Lasso):

  1. 特征选择:当您拥有包含许多特征的高维数据集,并且希望通过将某些系数精确为零来执行特征选择时,L1 正则化是合适的选择。它鼓励稀疏性,有效地选择最相关的特征并忽略不相关或不太重要的特征。
  2. 可解释的模型:如果可解释性很重要,L1 正则化会很有帮助,因为它生成的稀疏模型仅包含具有非零系数的特征子集。这可以帮助了解模型预测中最有影响力的组成部分。

使用 L2 正则化(Ridge):

  1. 强特征相关性:当你的数据集包含高度相关的特征时,L2正则化比L1正则化更有效。L2 正则化在系数之间更均匀地分配相关特征的影响,防止任何一个特征主导模型的预测。
  2. 泛化性能:众所周知,L2 正则化可以通过减少过度拟合来提高模型的泛化性能。当没有特定的特征选择需要并且您想要控制模型的整体复杂性时,它通常是一个不错的选择。

有时,可以使用 L1 和 L2 正则化的组合,即 Elastic Net 正则化。Elastic Net 正则化平衡了特征选择(L1 正则化)和权重收缩(L2 正则化)。在处理具有高维特征和强特征相关性的数据集时,它非常有用。

值得注意的是,L1 和 L2 正则化之间的选择并不总是明确的,可能需要使用不同的正则化技术对模型的性能进行实验和评估。此外,必须仔细调整正则化参数,以找到模型中偏差和方差的正确平衡。

深度学习中的 L1 和 L2 正则化

L1和L2正则化也可以应用于深度学习中,以对抗过度拟合并提高神经网络模型的泛化能力。

在深度学习中,L1 和 L2 正则化通常通过将相应的惩罚项添加到损失函数中来纳入训练过程。正则化项乘以正则化参数 ( λ) 以控制正则化的强度。

  • 对于深度学习中的L1正则化,正则化项是神经网络中所有权重的绝对值之和。这鼓励模型中的稀疏性,有效地将一些权重设置为零并执行特征选择。L1 正则化有助于降低模型的复杂性并提高其可解释性。
  • 对于深度学习中的L2正则化,正则化项是神经网络中所有权重的平方值之和。它会惩罚较大的权重值并鼓励较小的权重,从而防止任何一种权重主导模型。L2 正则化有助于控制模型的容量并减少数据中噪声的影响。

具有正则化的深度学习模型的总损失函数是原始损失函数(例如交叉熵或均方误差)和正则化项的组合:

Total loss = Original Loss + λ * Regularization Term

正则化参数λ控制所应用的正则化量。较大的值 λ会增加正则化强度,从而导致权重收缩更多。

在实践中,常见的方法是结合使用 L1 和 L2 正则化,称为弹性网络正则化。这平衡了特征选择(L1 正则化)和权重收缩(L2 正则化)。

在深度学习中,L1 和 L2 正则化(或它们的组合)之间的选择取决于具体问题、数据特征和模型所需的行为。通常需要对正则化参数进行实验和调整才能获得最佳结果。

正则化的实际例子

以下是一些正则化技术(例如 L1 和 L2 正则化)如何应用于不同机器学习场景的实际示例:

  1. 线性回归:正则化通常用于线性回归模型以防止过度拟合。通过在损失函数中添加L1或L2正则化,可以控制模型具有较小的系数或将某些系数驱动为零。这有助于提高模型的泛化性能。在处理高维数据集或具有多重共线性的数据集时,正则化特别有用。
  2. 逻辑回归:逻辑回归模型还可以从正则化中受益,以防止过度拟合并提高泛化能力。与线性回归一样,L1或L2正则化可以应用于逻辑回归损失函数,以控制模型的复杂性并缩小系数值。当特征空间很大或可能存在相关特征时,这一点尤其重要。
  3. 神经网络:正则化技术对于训练神经网络至关重要,尤其是在处理复杂模型和大型数据集时。L2 正则化(在神经网络中称为权重衰减)通常应用于神经网络层的权重。它通过缩小权重来帮助防止过度拟合,使网络对输入数据的微小变化不那么敏感。Dropout 是另一种正则化技术,它在训练期间随机将一部分神经元输出设置为零,有效减少相互依赖性并防止神经元的共同适应。
  4. 支持向量机 (SVM):在 SVM 中,正则化是使用正则化参数 C 来实现的。C 值越高,正则化越少,从而使模型能够更紧密地拟合训练数据。相反,较低的 C 值会增加正则化强度,从而促进更宽的余量和更好的泛化。L1 正则化也可以应用于 SVM,通过将某些特征权重驱动为零来执行特征选择。
  5. 图像分类:正则化广泛应用于图像分类任务,特别是在训练卷积神经网络(CNN)等深度学习模型时。L2 正则化通常用于控制 CNN 模型的复杂性并防止过度拟合。它有助于提高泛化能力并提高模型在未见过的图像上的性能。

这些只是几个例子,但正则化技术适用于各种机器学习算法和任务。正则化的具体选择和应用取决于问题的性质、数据的特征和模型的期望行为。

使用正则化时需要避免哪些常见错误或陷阱?

使用正则化技术时,必须意识到可能影响模型有效性和性能的潜在错误和陷阱。以下是使用正则化时要避免的一些常见错误:

  1. 特征缩放不当:正则化假设所有特征都处于相似的尺度。如果某些特征未正确缩放,则某些特征可能会主导正则化项,从而导致有偏差的正则化效果。在应用正则化技术之前,请确保缩放您的特征。
  2. 正则化参数选择不正确:正则化参数(例如,λ在L1或L2正则化中)控制正则化的强度。选择不合适的值可能会导致正则化不足或过度。使用交叉验证或其他验证技术调整正则化参数以找到模型中偏差和方差之间的最佳平衡至关重要。
  3. 忽略特征交互:L1 或 L2 正则化等正则化技术独立处理每个特征。然而,在某些情况下,特征之间的交互可能对模型的性能很重要。忽略功能交互可能会导致次优结果。如果需要,请考虑特征工程技术或其他捕获特征交互的模型。
  4. 特征选择不充分:正则化可以帮助特征选择,但正确评估特征的相关性和重要性至关重要。盲目依赖正则化来选择特征而不考虑领域知识或彻底的特征分析可能会导致排除重要信息并影响模型的性能。
  5. 忽略正则化的其他来源:正则化只是防止过度拟合的一种工具。其他技术,例如提前停止、丢失或数据增强,也可能有利于提高模型的泛化能力。考虑使用正则化技术的组合来增强模型性能。
  6. 过度正则化:应用过多的正则化可能会导致欠拟合,即模型变得过于简单并且无法捕获数据中的潜在模式。平衡正则化和模型复杂性对于确保最佳性能至关重要。
  7. 缺乏可解释性:L1 正则化等正则化技术可能会将某些系数精确为零,从而导致模型稀疏。虽然在某些情况下稀疏性可能是可取的,但它也会牺牲可解释性。应用正则化时,请考虑模型可解释性和预测性能之间的权衡。
  8. 不评估正则化性能:应根据适当的验证或测试数据考虑和验证正则化参数和技术。简单地应用正则化而不评估其对模型性能的影响可能会导致次优结果。

总体而言,考虑具体问题、数据和所需的模型行为,仔细处理正则化至关重要。正则化应该是精心设计的建模管道的一部分,具有适当的特征工程、验证和评估技术,以实现最佳性能。

从头开始使用 Python 进行 L2 正则化

要在Python中从头开始实现L2正则化,必须在训练过程中修改损失函数和权重更新步骤。以下是如何为简单线性回归模型实现 L2 正则化的示例:

import numpy as np

# Generate sample data
np.random.seed(42)
X = np.random.rand(100, 1)  # Input features
y = 3 * X + 2 + np.random.randn(100, 1)  # Output labels with noise

# Add bias term to input features
X_b = np.c_[np.ones((100, 1)), X]

# Define regularization parameter
lambd = 0.1

# Initialize random weights
np.random.seed(42)
theta = np.random.randn(2, 1)

# Training loop
epochs = 1000
learning_rate = 0.1

for epoch in range(epochs):
    # Compute predictions
    y_pred = X_b.dot(theta)

    # Compute mean squared error loss
    mse_loss = np.mean((y_pred - y) ** 2)
    
    # Compute L2 regularization term
    l2_regularization = 0.5 * lambd * np.sum(theta[1:]**2)

    # Compute total loss (MSE loss + L2 regularization)
    total_loss = mse_loss + l2_regularization

    # Compute gradients
    gradients = 2 / len(X_b) * X_b.T.dot(y_pred - y)
    
    # Add L2 regularization term to weight gradients
    gradients[1:] += lambd * theta[1:]
    
    # Update weights
    theta -= learning_rate * gradients

    if epoch % 100 == 0:
        print("Epoch:", epoch, "Total Loss:", total_loss)

# Print final weights
print("Final Weights:")
print(theta)

此示例使用具有一个输入特征的简单线性回归模型。我们初始化随机权重并执行梯度下降,以通过附加的 L2 正则化项最小化均方误差损失。L2 正则化项在权重更新步骤中添加到梯度中,其中我们添加权重的符号乘以正则化参数。

请注意,这是从头开始的 L2 正则化的基本实现。在实践中,建议使用 scikit-learn 或 TensorFlow 等机器学习库,它们提供更优化、更高效的正则化技术部署。

总结

  • L1、L2正则化等正则化技术广泛应用于机器学习和统计建模中,以解决过拟合问题,提高模型的泛化能力。
  • L1正则化,也称为Lasso正则化,将模型系数的绝对值之和添加到损失函数中,促进稀疏性和特征选择。它有效地处理高维数据集,并可以帮助构建稀疏模型。然而,它可能会导致高度稀疏,从而使模型的可解释性降低。
  • L2 正则化,也称为 Ridge 正则化,将模型系数的平方值之和添加到损失函数中,鼓励较小但非零的系数。它有助于防止过度拟合,处理特征之间的强相关性,并产生稳定的解决方案。但是,它不像 L1 正则化那样执行特征选择。
  • L1 和 L2 正则化(或其组合,弹性网络正则化)之间的选择取决于具体问题、数据特征和模型所需的行为。L1正则化适用于需要进行特征选择的情况,而L2正则化则在处理强特征相关性时有效。弹性网络正则化结合了两种技术的优点。
  • 从头开始实现 L1 和 L2 正则化涉及在训练期间修改损失函数和权重更新步骤。然而,值得注意的是,在实践中,为了提高效率和稳定性,建议使用经过优化实现的机器学习库。
  • 正则化是提高模型性能和减少过度拟合的重要工具。尽管如此,它仍然需要仔细选择和调整正则化参数,以在模型性能的偏差和方差之间取得适当的平衡。

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
使用PyTorch实现L1L2正则化,可以通过在损失函数中添加相应的正则化项来实现。下面是一个简单的示例: ```python import torch import torch.nn as nn import torch.optim as optim # 定义模型 class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.linear = nn.Linear(10, 1) def forward(self, x): return self.linear(x) model = MyModel() # 定义损失函数和优化器 criterion = nn.MSELoss() optimizer = optim.SGD(model.parameters(), lr=0.01) # 定义正则化权重 l1_lambda = 0.01 l2_lambda = 0.01 # 训练循环 for epoch in range(num_epochs): for inputs, targets in data_loader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, targets) # 添加L1正则化 l1_reg = torch.tensor(0.) for param in model.parameters(): l1_reg += torch.norm(param, 1) loss += l1_lambda * l1_reg # 添加L2正则化 l2_reg = torch.tensor(0.) for param in model.parameters(): l2_reg += torch.norm(param, 2) loss += l2_lambda * l2_reg loss.backward() optimizer.step() ``` 在上述代码中,我们定义了一个`MyModel`类来表示我们的模型。然后,我们使用`nn.MSELoss()`作为损失函数,并使用`optim.SGD`作为优化器。在训练循环中,我们通过遍历模型的参数并计算其L1L2范数来计算正则化项。然后将正则化项加到损失函数中,通过调整`l1_lambda`和`l2_lambda`参数来控制正则化的强度。最后,我们进行反向传播和参数更新以完成训练。 请注意,这只是一个简单的示例实际应用中可能还会有其他细节需要考虑,如权重衰减(weight decay)等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值