【学习笔记】深刻理解L1和L2正则化

article/2025/9/21 6:28:48

深刻理解L1和L2正则化

学习视频:BV1Z44y147xA、BV1gf4y1c7Gg、BV1fR4y177jP

up主:王木头学科学

L1、L2正则化即使用L1、L2范数来规范模型参数。

凡是减少泛化误差,而不是减少训练误差的方法,都可以称为正则化方法。

通俗来说,即凡是能减少过拟合的方法,都是正则化方法

补充概念

范数

可以理解为把空间中两个点的距离这个概念给拓展。

如权重W为一个高维的向量,或高维空间中的一个点。这个点到原点的距离

若为欧式距离,则为L2范数,其公式和图像如下:

L2范数图像

即使用高维的勾股定理计算距离。如果将L2范数相同的点都画出来,则会形成一个以原点为圆心,半径为L2范数的圆。

若为曼哈顿距离,即对坐标值直接取绝对值,则为L1范数,其公式和图像如下:

L1范数图像

将L1范数相同的点画出来,组成的图形为一个中心在原点且偏转45°的正方形。

在正则化中,通常只用到L1、L2范数,但还有其他范数,如Lp范数。

当 0<p<1 时,得到的集合为非凸集;当 p>=1时,得到的集合才是凸集

Lp范数

凸集

参考【学习笔记】直观理解拉格朗日函数中内容。

黑塞(Hessian)矩阵

黑塞矩阵(Hessian Matrix),又译作海森矩阵、海瑟矩阵、海塞矩阵等,是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。黑塞矩阵常用于牛顿法解决优化问题,利用黑塞矩阵可判定多元函数的极值问题。在工程实际问题的优化设计中,所列的目标函数往往很复杂,为了使问题简化,常常将目标函数在某点邻域展开成泰勒多项式来逼近原函数,此时函数在某点泰勒展开式的矩阵形式中会涉及到黑塞矩阵。

黑塞矩阵

为什么我们要引入L1、L2正则化?

image-20211214105431601

我们知道,通过训练迭代,一定能找到一组 W W W b b b 使得输出层的损失函数最小。但就算我们得到的损失值是相同的,其对应的 W W W b b b 也并不是唯一的,以下图为例:

image-20211214105646990

如果我们将隐藏层中的系数都增加到原来的两倍,则最后相当于输入层的输入里的变量系数增加了 2 l − 1 2^{l-1} 2l1 倍,我们同时将 W W W 缩小 2 l l − 1 2^{ll-1} 2ll1 倍,最后的结果依然是 z [ l ] z^{[l]} z[l],其对应的损失函数的值是不变的。

这就代表我们训练出来的 W W W b b b 的值非常依赖于他们的初始值。如果初始值较大,则最后达到损失函数最小值得出来的 W W W b b b 的值较大;而另一种情况,在损失函数收敛到相同的最小值时,可能得到的 W W W b b b 的绝对值相对来说较小。

如果我们得到的参数较大,那么神经网络在面对新数据时,将会得到一个较大的结果。新数据中的误差噪声经过大参数相乘以后将会被放大,这会严重影响最后的判断结果。所以我们才要将参数限定在一定的范围内。

由于神经网络模型主要由权重 W W W 所影响,所以正则化只关注权重而不关注偏置 b b b

拉格朗日乘数法角度

限制权重 W W W 的范围相当于是给参数规定可行域范围,而这正是拉格朗日乘数法所擅长的。

image-20211214111009861

image-20211214132004941

红色的 L ( W , λ ) L(W,\lambda) L(W,λ) 是我们熟知的L2正则化的公式。由于绿色的 L ( W , λ ) L(W,\lambda) L(W,λ) 和红色的 L ( W , λ ) L(W,\lambda) L(W,λ) 二者求梯度相同且需等于0,我们根据此来求 W W W 的值。虽然二者的最值可能不同(红色 m a x L ( W , λ ) max L(W, \lambda) maxL(W,λ) 不一定等于绿色 m a x L ( W , λ ) max L(W,\lambda) maxL(W,λ)),但是得到的参数 W W W 却是相同的。

所以 L2 正则化 和 用拉格朗日乘数法给 W W W 加一个约束范围 这两个问题是等价的。


直观理解,两个公式中的 C C C 即代表相同 L2 范数到原点的距离,即绿色圆的半径。可是在红色的 L ( W , λ ) L(W,\lambda) L(W,λ) 中我们消去了 C C C ,那么该如何控制绿色圆的半径呢?

答案就是通过 λ \lambda λ 来调节约束条件梯度的大小与方向,使得其与损失函数的梯度大小相等、方向相反,这样他们相加才能等于0,得到最后一行的公式,亦可知
λ = 损 失 函 数 的 梯 度 约 束 条 件 的 梯 度 \lambda = \frac{损失函数的梯度} {约束条件的梯度} λ=
得到了 λ \lambda λ ,就可以确定具体的极值点在哪里。


image-20211214142151775

由图像我们可以直观的看出,L1正则化的极值点多在坐标轴上,这也是L1正则化带来稀疏性的体现,在数值上,即 W W W 在某些项有值,而其他项均为0;在特征上,他将特征与特征之间的关系进行解耦,使得只有特定的特征起作用,让问题简化,减少了过拟合的可能。

image-20211214145201119

在神经网络中,最值不一定是一个点,而可能是一条路径。只要最终我们收敛在这条路径上任何一个点,都算是达到最值点了。

权重衰退角度

image-20211214144119854

在训练过程中,我们依靠梯度下降法对权重进行更新。引入正则化后,损失函数加入正则项 α 2 W T W \frac{\alpha}{2} W^TW 2αWTW (其与 λ ∥ W ∥ 2 \lambda \Vert W \Vert_2 λW2 等价),在梯度更新中也加入了正则项的梯度 η ⋅ α ⋅ W \eta \cdot \alpha \cdot W ηαW ,经过调整后得到红色框中的式子。

根据权重 W W W 的系数 ( 1 − η ⋅ α ) (1-\eta \cdot \alpha) (1ηα) 可以看出,在学习率和 α \alpha α 两个超参数相乘大于0小于1时,权重 W W W 在每次更新时,都会进行缩小,这便是权重衰减

image-20211214145502817

这时我们再去理解这两个式子,式(1)中 C C C 为超参数,相当于我们已经知道权重在哪个范围内取值比较好;

式(2)中 α \alpha α 为超参数,相当于我们不知道权重在哪个范围内取值较好,而是设定像学习率一样的衰减率,通过不断训练,一步一步学习,最后找到一个合适的范围。

总之,权重衰减即增加了一个惩罚项,在每次学习过程中不断惩罚权重,以保证权重不会取值太大。


L2正则化

L2正则化相对来说简单一些,我们先以它为例。

image-20211214154351876

损失函数 J ( W ) J(W) J(W) 经过泰勒展开得到第一行的式子。

其中 H H H 为黑塞矩阵,代表损失函数的二阶导数。 W ∗ W^* W 为损失函数的最值,故 ∇ W J ( W ∗ ) = 0 \nabla_W J(W^*) = 0 WJ(W)=0

image-20211214154956495

针对这个公式:
∇ w J ^ ( W ) = H ( W − W ∗ ) + α ⋅ W \nabla_w \hat J(W) = H(W-W^*)+\alpha \cdot W wJ^(W)=H(WW)+αW
假设 W = W ^ W=\hat W W=W^ 时,达到正则化后的损失函数的最值,即 ∇ w J ^ ( W ^ ) = 0 \nabla_w \hat J(\hat W) = 0 wJ^(W^)=0,则可推出:

image-20211214155958274

对于 W ∗ W^* W 前的系数 ( H + α ⋅ I ) − 1 H (H+\alpha \cdot I)^{-1}H (H+αI)1H 我们还需要进行变换,这里需要用到黑塞矩阵的性质。由于黑塞矩阵是对称矩阵,而所有对称矩阵都可以表示为 H = Q Λ Q T H = Q\Lambda Q^T H=QΛQT ,其中 Λ \Lambda Λ 是对角矩阵,而 Q Q Q 是正交基矩阵,即
Λ = [ λ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ λ n ] Q = [ e 1 0 ⋯ 0 0 e 2 ⋯ 0 ⋯ ⋯ ⋯ ⋯ 0 0 ⋯ e n ] Q T = Q − 1 ⇒ Q T Q = Q Q T = I \Lambda = \begin{bmatrix} \lambda_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \lambda_n \end{bmatrix} \\ Q = \begin{bmatrix} e_1 & 0 & \cdots & 0 \\ 0 & e_2 & \cdots & 0 \\ \cdots & \cdots & \cdots & \cdots \\ 0 & 0 & \cdots & e_n\end{bmatrix} \\ Q^T = Q^{-1} \Rightarrow Q^TQ = QQ^T = I Λ=λ100λnQ=e1000e2000enQT=Q1QTQ=QQT=I
image-20211214164137901

替换后可得以上式子。其中 Q Q Q 我们可以忽略,它只是表示你在哪个坐标系下进行表达。最总得到数量关系为:
W ^ i = λ i λ i + α W i ∗ \color{orange}\hat W_i \color{black} = \frac{\lambda_i}{\lambda_i + \alpha}\color{red}W^*_i W^i=λi+αλiWi

L1正则化

image-20211214170137324

我们的目的是要找到 J ^ ( W ) \hat J(W) J^(W) 的最值,但是第一行我们无法继续处理,所以我们需要一些简化,对此,我们假设如下:

image-20211215090131600

如下的推理为近似定量的结果。

image-20211215091551307

我们将括号内的式子放入 f ( W i ) f(W_i) f(Wi) 做一下简化,要求 J ^ ( W ) \hat J(W) J^(W) 的最值,就要求导求它的梯度,即

image-20211215091740860

其中 s i g n ( W ^ i ) sign(\hat W_i) sign(W^i) W ^ i \hat W_i W^i 的符号,他不和具体的 W ^ i \hat W_i W^i 的数值有关系。我们主要看最后一行的式子:

image-20211215091953537

对于 W ^ i \hat W_i W^i 的取值情况有三种:

image-20211215092124920

image-20211215092514346

对于 − α H i , i < W i ∗ < α H i , i -\frac{\alpha}{H_{i,i}} \lt W^*_i \lt \frac{\alpha}{H_{i,i}} Hi,iα<Wi<Hi,iα 的情况,我们设蓝色的 W i W_i Wi 为变量,红色的 W ∗ W^* W 为参数,在上述范围内,求橙色的 W ^ i \hat {W}_i W^i 的值。

最终我们将上述分析结果整理,得到以下式子:

image-20211215092851398

其中,这一部分很好的体现了L1正则化为什么能带来稀疏性,它将在此范围的的损失函数的最小值值强行拉至0这一点上。

image-20211215094630999

贝叶斯概率角度

有时间待补充…

总结

总的来说L1用于降维,将对分类影响最小的特征权重降为0。L2是对 W W W 各维度缩减,防止 W W W 不停按比例放大。


http://chatgpt.dhexx.cn/article/0drTueOF.shtml

相关文章

L1正则化和L2正则化(从解空间角度)

文章目录 一、什么是过拟合&#xff1f;二、为什么模型会过拟合&#xff1f;三、如何防止模型过拟合&#xff1f;四、L1正则和L2正则4.1 L1、L2的区别4.2 为什么正则化能够防止过拟合&#xff1f;4.3 为什么L1正则具有稀疏性或者说L1正则能够进行特征选择&#xff1f; 最后&…

机器学习之L1正则化和L2正则化(附源码解析)

前言 今天还是机器学习的基础知识内容&#xff0c;也是最基础的哈。首先说一下什么是正则化&#xff0c;其实它就是一个减少方差的策略。那么什么是方差呢&#xff1f;在这里也引入一个和方差相辅相成的概念--偏差。 偏差度量了学习算法的期望预测与真实结果的偏离程度&#…

L2正则化(Regularization)

正则化&#xff08;Regularization&#xff09; 深度学习可能存在过拟合问题——高方差&#xff0c;有两个解决方法&#xff0c;一个是正则化&#xff0c;另一个是准备更多的数据&#xff0c;这是非常可靠的方法&#xff0c;但你可能无法时时刻刻准备足够多的训练数据或者获取…

pytorch实现L2和L1正则化regularization的方法

pytorch实现L2和L1正则化的方法 目录 目录 pytorch实现L2和L1正则化的方法 1.torch.optim优化器实现L2正则化 2. 如何判断正则化作用了模型&#xff1f; 2.1 未加入正则化loss和Accuracy 2.1 加入正则化loss和Accuracy 2.3 正则化说明 3.自定义正则化的方法 3.1 自定…

L1正则化与L2正则化的区别

摘要 正则化的本质是在Cost Function中添加的p-范数。本文从正则化的本质p-范数入手&#xff0c;解释了L1正则化和L2正则化的区别。 正则化 在Cost Function上添加了正则化项&#xff0c;就能降低模型的过拟合程度&#xff0c;这就是正则化的作用。 关于正则化更细节的讲述&…

正则化的作用以及L1和L2正则化的区别

0 正则化的作用 正则化的主要作用是防止过拟合&#xff0c;对模型添加正则化项可以限制模型的复杂度&#xff0c;使得模型在复杂度和性能达到平衡。 常用的正则化方法有L1正则化和L2正则化。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些…

详解L1和L2正则化

大纲&#xff1a; L1和L2的区别以及范数相关知识对参数进行L1和L2正则化的作用与区别pytorch实现L1与L2正则化对特征进行L2正则化的作用 L1和L2的区别以及范数 使用机器学习方法解决实际问题时&#xff0c;我们通常要用L1或L2范数做正则化&#xff08;regularization&#xf…

L1正则化和L2正则化的详细直观解释

正则化&#xff08;Regularization&#xff09; 转自&#xff1a;此处 机器学习中几乎都可以看到损失函数后面会添加一个额外项&#xff0c;常用的额外项一般有两种&#xff0c;一般英文称作ℓ1ℓ1-norm和ℓ2ℓ2-norm&#xff0c;中文称作L1正则化和L2正则化&#xff0c;或者…

L1正则化和L2正则化讲解

L1正则化和L2正则化讲解 在机器学习实践过程中&#xff0c;训练模型的时候往往会出现过拟合现象&#xff0c;为了减小或者避免在训练中出现过拟合现象&#xff0c;通常在原始的损失函数之后附加上正则项&#xff0c;通常使用的正则项有两种&#xff1a;L1正则化和L2正则化。 L1…

L1正则化和L2正则化的区别

文章目录 前言一、L1和L2正则化是什么&#xff1f;二、区别三、其他问题 前言 在防止过拟合的方法中有L1正则化和L2正则化&#xff0c;那么这两者有什么区别呢&#xff1f; 一、L1和L2正则化是什么&#xff1f; L1和L2是正则化项&#xff0c;又叫做惩罚项&#xff0c;是为了限…

数据预处理之L1,L2正则化

一、L1、L2正则化概述 1. L1和L2的定义 L1正则化&#xff0c;又叫Lasso Regression 如下图所示&#xff0c;L1是向量各元素的绝对值之和 L2正则化&#xff0c;又叫Ridge Regression 如下图所示&#xff0c;L2是向量各元素的平方和&#xff0c;然后再求平方根 2.L1和L2的异同点 …

L1正则化和L2正则化

在机器学习以及深度学习中我们经常会看到正则化这一名词&#xff0c;下面就浅谈一下什么是正则化&#xff1f;以及正则化的意义所在&#xff1f; 一、什么是正则化&#xff1f; 正则化项 (又称惩罚项)&#xff0c;惩罚的是模型的参数&#xff0c;其值恒为非负 λ是正则化系数&…

【应用】【正则化】L1、L2正则化

L1正则化的作用&#xff1a;特征选择从可用的特征子集中选择有意义的特征&#xff0c;化简机器学习问题。著名的LASSO&#xff08;Least Absolute Shrinkage and Selection Operator&#xff09;模型将L1惩罚项和线性模型结合&#xff0c;使用最小二乘代价函数。L1正则化导致模…

机器学习中正则化项L1和L2的直观理解

文章目录 正则化&#xff08;Regularization&#xff09;稀疏模型与特征选择的关系 L1和L2正则化的直观理解正则化和特征选择的关系为什么梯度下降的等值线与正则化函数第一次交点是最优解&#xff1f; L2正则化和过拟合的关系 正则化参数的选择L1正则化参数L2正则化参数 Refer…

微信小程序自定义授权弹框

前言 最近微信获取用户信息的接口有调整&#xff0c;就是这货&#xff1a;wx.getUserInfo(OBJECT)&#xff0c;文档描述如下&#xff1a; 此接口有调整&#xff0c;使用该接口将不再出现授权弹窗&#xff0c;请使用 <button open-type"getUserInfo"></but…

微信小程序组件 - 中间底部弹出输入弹框

GitHub Demo 地址: jh-weapp-demo 实现一些常用效果、封装通用组件和工具类 小程序码 一、 jh-input-alert 中间输入弹框&#xff0c;可设置最大输入长度&#xff0c;单行多行显示 单行 <jh-input-alert title输入框标题 placeholder请输入 maxlength10 bind:cancelcancel …

微信小程序展示弹窗的几种方式

小程序中展示弹窗有四种方式&#xff1a;showToast、showModal、showLoading、showActionSheet 官方文档链接 效果图 wxml <!-- 1.消息提示框 --> <button size"mini" bindtap"handleShowToast">ShowToast</button><!-- 2.模态对话…

微信小程序——小程序自己的页面弹框

微信小程序——小程序自己的页面弹框 1. 页面样式: 2.代码块 在这里插入代码片 &#xff08;一&#xff09;.wxml文件中给一个触发事件 <image src"../../img/icon-delete.png" bindtapdeleteCar data-id{{car.platecard}} class"icon"></imag…

微信小程序底部弹出框

微信小程序的底部弹出框 wxml <!-- 弹出框 start --> <view class"dialog_screen" bindtap"hideModal" wx:if"{{showModalStatus}}"></view> <view animation"{{animationData}}" class"dialog_attr_bo…

【微信小程序】小程序中的各种弹窗API

前言&#xff1a;小程序中提供了很多种快捷方便的弹窗API供开发者使用&#xff0c;例如wx.showToast&#xff0c;wx.showModal&#xff0c;wx.showActionSheet&#xff0c;wx.showLoading还有wxml中的loading标签。 一、直接上代码 <!-- test.wxml --> <view class&q…