L1、L2正则化与稀疏性

禁止转载,谢谢!

1.正则化(Regularization)的基本概念

- 什么是正则化/如何进行正则化

  定义:在机器学习中正则化(regularization)是指在模型的损失函数中加上一个正则化项,也称为惩罚性(penalty term):
1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) \frac{1}{N}\sum^{N}_{i=1}L(y_i,f(x_i))+\lambda J{(f)} N1i=1NL(yi,f(xi))+λJ(f)
  其中L为损失函数,J为正则化项, λ ≥ 0 \lambda \ge 0 λ0是系数,用以权衡经验风险和模型复杂度。通常来说,正则化项往往是关于模型参数的1-范数或者2-范数;也有这两者的某种结合,例如sklearn的逻辑回归中的弹性网正则化项。

  • 参数向量的l2范数:
    1 N ∑ i = 1 N ( y i , f ( x i ; w ) ) 2 + λ 2 ∥ w ∥ 2 \frac{1}{N}\sum^{N}_{i=1}(y_i,f(x_i;w))^2+\frac{\lambda}{2}\parallel{w}\parallel^2 N1i=1N(yi,f(xi;w))2+2λw2
    ∥ w ∥ 2 \parallel{w}\parallel^2 w2表示向量参数w的l2范数。

  • 参数向量的l1范数:
    1 N ∑ i = 1 N ( y i , f ( x i ; w ) ) 2 + λ ∥ w ∥ \frac{1}{N}\sum^{N}_{i=1}(y_i,f(x_i;w))^2+\lambda \parallel{w}\parallel N1i=1N(yi,f(xi;w))2+λw
    ∥ w ∥ \parallel{w}\parallel w表示向量参数w的l1范数。

  • 为何需要正则化

  一般来说,正则化核心的作用是缓解模型过拟合倾向,此外,由于加入正则化项后损失函数的形体发生了变化,因此也会影响损失函数的求解过程,在某些时候,加入了正则化项之后会让损失函数的求解变得更加高效。如岭回归,其实就是在线性回归的损失函数基础上加入了w的1-范数,而Lasso则是加入了w的2-范数。并且,对于逻辑回归来说,如果加入 l 2 l2 l2正则化项,损失函数就会变成严格的凸函数。

正则化符合奥卡姆剃刀(Occam‘s razor)原理:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型;从贝叶斯估计的角度来看,正则化项对应于模型的先验概率,可以假设复杂的模型有较小的先验概率,简单的模型有较大的先验概率。

  • 正则化是如何缓解过拟合倾向

过拟合(over-fitting)是指学习时选择的模型所包含的参数过多,以至出现这一模型对已知数据预测得很好,但因为训练数据本身存在噪音,因存在对未知数据预测很差的现象。

  在构建损失函数求最小值的过程,其实就是依据以往经验(也就是训练数据)追求风险最小(以往数据误差最小)的过程,而在给定一组参数后计算得出的损失函数的损失值,其实就是经验风险。而所谓结构风险,我们可以将其等价为模型复杂程度,模型越复杂,模型结构风险就越大。而正则化后的损失函数在进行最小值求解的过程中,其实是希望损失函数本身和正则化项都取得较小的值,即模型的经验风险和结构风险能够同时得到控制。

  模型的经验风险需要被控制不难理解,因为我们希望模型能够尽可能的捕捉原始数据中的规律,但为何模型的结构风险也需要被控制?核心原因在于,尽管在一定范围内模型复杂度增加能够有效提升模型性能,但模型过于复杂可能会导致另一个非常常见的问题——模型过拟合,但总的来说,一旦模型过拟合了,尽管模型经验风险在降低、但模型的泛化能力会下降。因此,为了控制模型过拟合倾向,我们可以把模型结构风险纳入损失函数中一并考虑,当模型结构风险的增速高于损失值降低的收益时,我们就需要停止参数训练(迭代)。

  • L1正则化为什么使得模型参数具有稀疏性呢

稀疏性:模型的很多参数为0,相当于对模型进行了一次特征选择,只留下一下比较重要的特征,提高模型的泛化能力。降低过拟合的可能。

(1)解空间形状

  在二维的情况下,黄色的部分是L2和L1正则项约束后的解空间,绿色的等高线是凸优化问题中目标函数的等高线,由图可知,L2正则项约束后的解空间是圆形,而L1正则项约束的解空间是多边形,而多边形的解空间更容易在尖角处与等高线碰撞出稀疏解。
在这里插入图片描述

问题引入:为什么加入正则项就是定义了解空间呢?为什么L1和L2的解空间是不同的呢?

  事实上,“带正则项”和“带约束条件”是等价的,为了约束w的可能取值空间从而防止过拟合,在最优化问题加上一个约束,就是w的L2范数的平方不能大于m:
{ m i n ∑ i = 1 N ( y i − w T x i ) 2 s . t ∣ ∣ w ∣ ∣ 2 2 ≤ m \left\{ \begin{aligned} min \sum^N_{i=1}(y_i - w^Tx_i)^2 \\ s.t ||w||_2^2 \le m \end{aligned} \right. mini=1N(yiwTxi)2s.tw22m
为了求解带约束条件的凸优化问题,引入拉格朗日函数:
∑ i = 1 N ( y i − w T x i ) 2 + λ ( ∣ ∣ w ∣ ∣ 2 2 − m ) \sum^N_{i=1}(y_i - w^Tx_i)^2 + \lambda( ||w||_2^2-m) i=1N(yiwTxi)2+λ(w22m)
w ∗ w^* w λ ∗ \lambda^* λ分别是原问题和对偶问题的最优解,则根据KKT条件,它们用满足:
{ 0 = ∇ w ( ∑ i = 1 N ( y i − w ∗ T x i ) 2 + λ ∗ ( ∣ ∣ w ∗ ∣ ∣ 2 2 − m ) 0 ≤ λ ∗ \left\{ \begin{aligned} 0 = \nabla _w ( \sum^N_{i=1}(y_i - w^{*T}x_i)^2+ \lambda^*( ||w^*||_2^2-m) \\ 0 \le \lambda^* \end{aligned} \right. 0=wi=1N(yiwTxi)2+λ(w22m)0λ

由以上式子可得: w ∗ w^* w为带L2正则项的优化问题的最优解的条件,而 λ ∗ \lambda^* λ就是L2正则项前面的正则参数。L2正则化相当于为参数定义了一个圆形的解空间(因为必须保证L2范数不能大于m),而L1正则化相当于为参数定义了一个菱形的解空间。如果原问题目标函数的最优解不是恰好落在解空间内,那么约束条件下的最优解一定是在解空间的边界上,而L1棱角分明的解空间更容易与目标函数等高线在角点碰撞,从而产生稀疏解。

(2)贝叶斯先验 ( P ( x ∣ y ) = P ( y ∣ x ) ⋅ P ( x ) P ( y ) P(x|y) = \frac{P(y|x)\cdot P(x)}{P(y)} P(xy)=P(y)P(yx)P(x))

  从贝叶斯的角度来理解L1正则化和L2正则化,L1正则化相当与对模型参数w引入了拉普拉斯先验,L2正则化相当引入了高斯先验,而拉普拉斯先验使参数为0的可能性更大。

对于给定样本,目标是希望最大化后验概率,即从贝叶斯定理得:
w o p t i m = a r g m a x P ( w ∣ x , y ) = P ( y , x ∣ w ) ⋅ p ( w ) P ( x , y ) ∝ m a x p ( y , x ∣ w ) ⋅   p ( w ) \begin{aligned} w_{optim} &=argmax P(w|x,y) \\ &= \frac{P(y,x|w)\cdot p(w)}{P(x,y)} \\ & \varpropto_{max} p(y,x|w)\cdot\ p(w) \end{aligned} woptim=argmaxP(wx,y)=P(x,y)P(y,xw)p(w)maxp(y,xw) p(w)
假设样本统计独立:即
w o p t i m = a r g m a x [ ∏ i = 1 m P ( y i , x i ∣ w ) ] ⋅ P ( w ) 由 条 件 概 率 链 式 法 则 = [ ∏ i = 1 m P ( y i ∣ x i , w ) P ( x i ∣ w ) ] P ( w ) x 与 w 无 关 = [ ∏ i = 1 m P ( y i ∣ x i , w ) P ( x i ) ] P ( w ) P ( x i ) 为 常 数 = [ ∏ i = 1 m P ( y i ∣ x i , w ) ] P ( w ) = l n [ ∏ i = 1 m P ( y i ∣ x i , w ) ] + l o g P ( w ) = ∑ i = 1 m l n P ( y i ∣ x i , w ) + l n P ( w ) 令 G ( w ) = L ( w ) + l n π ( w ) \begin{aligned} w_{optim}&=argmax[\prod^m_{i=1}P(y^i,x^i|w)]\cdot P(w) \\ & 由条件概率链式法则 \\ &= [\prod^m_{i=1}P(y^i|x^i,w)P(x^i|w)]P(w) \\ & x与w无关\\ &= [\prod^m_{i=1}P(y^i|x^i,w)P(x^i)]P(w) \\ & P(x^i) 为常数\\ &= [\prod^m_{i=1}P(y^i|x^i,w)]P(w) \\ &= ln[\prod^m_{i=1}P(y^i|x^i,w)]+ logP(w) \\ &= \sum^m_{i=1}lnP(y^i|x^i,w)+ lnP(w) \\ &令G(w)= L(w) + ln\pi(w) \end{aligned} woptim=argmax[i=1mP(yi,xiw)]P(w)=[i=1mP(yixi,w)P(xiw)]P(w)xw=[i=1mP(yixi,w)P(xi)]P(w)P(xi)=[i=1mP(yixi,w)]P(w)=ln[i=1mP(yixi,w)]+logP(w)=i=1mlnP(yixi,w)+lnP(w)G(w)=L(w)+lnπ(w)
(1) 证明:视w为随机变量,假定其服从高斯分布 w ∼ G ( 0 , σ 2 ) w\thicksim G(0,\sigma^2) wG(0,σ2),即 P ( w ) = 1 2 π σ 2 e − w T w 2 σ 2 P(w) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{w^Tw}{2\sigma^2}} P(w)=2πσ2 1e2σ2wTw
l n π ( w ) = l n ∏ i = 1 m π ( w i ) = l n ∏ i = 1 m 1 2 π σ 2 e − w i 2 2 σ = l n ( 1 2 π σ ) m e − ∑ i = 1 m w i 2 2 σ 2 = − m l n 2 π σ − ∑ i = 1 m w i 2 2 σ 2 ≈ − ∑ i = 1 m w i 2 2 σ 2 \begin{aligned} ln\pi(w) &=ln\prod^m_{i=1}\pi(w_i)\\ &= ln\prod^m_{i=1}\frac{1}{\sqrt{2\pi\sigma^2}}e^{-{\frac{w^2_i}{2\sigma}}} \\ &=ln(\frac{1}{\sqrt{2\pi}\sigma})^me^{-\frac{\sum^m_{i=1}w^2_i}{2\sigma^2}}\\ &=-mln\sqrt{2\pi}\sigma -\frac{\sum^m_{i=1}w^2_i}{2\sigma^2}\\ &\approx -\frac{\sum^m_{i=1}w^2_i}{2\sigma^2}\\ \end{aligned} lnπ(w)=lni=1mπ(wi)=lni=1m2πσ2 1e2σwi2=ln(2π σ1)me2σ2i=1mwi2=mln2π σ2σ2i=1mwi22σ2i=1mwi2

G m i n ( w ) = m i n [ L ( w ) + l n π ( w ) ] = m i n J ( w ) + m i n [ 1 2 σ ∑ i = 1 m w i 2 + C ] = m i n J ( w ) + m i n [ 1 2 σ ∑ i = 1 m w i 2 ] → l 2 正 则 化 \begin{aligned} G_{min}(w)&= min[L(w) + ln\pi(w)]\\ &= minJ(w)+min[\frac{1}{2\sigma}\sum^m_{i=1}w^2_i+C] \\ &= minJ(w)+min[\frac{1}{2\sigma}\sum^m_{i=1}w^2_i] \to l2正则化\\ \end{aligned} Gmin(w)=min[L(w)+lnπ(w)]=minJ(w)+min[2σ1i=1mwi2+C]=minJ(w)+min[2σ1i=1mwi2]l2
(2)证明:w服从拉普拉斯分布 w ∼ l a ( 0 , β ) w\thicksim la(0,\beta) wla(0,β),即
P ( w ) = 1 2 β e − ∣ w ∣ β P(w) = \frac{1}{\sqrt{2\beta}} e^{-{\frac{|w|}{\beta}}} P(w)=2β 1eβw
G ( w ) = L ( w ) + l n π ( w ) G(w)= L(w) + ln\pi(w) G(w)=L(w)+lnπ(w)
l n π ( w ) = l n ∑ i = 1 m π ( w i ) = l n ∏ i = 1 m 1 2 β e − ∣ w ∣ β = l n ( 1 2 β ) m e − ∣ w i ∣ β = − m l n ( 2 β ) − 1 β ∑ i = 1 m ∣ w i ∣ \begin{aligned} ln\pi(w) &=ln \sum^m_{i=1}\pi(w_i)\\ &= ln\prod^m_{i=1} \frac{1}{\sqrt{2\beta}} e^{-{\frac{|w|}{\beta}}} \\ &=ln(\frac{1}{\sqrt{2\beta}})^me^{-\frac{|w_i|}{\beta}}\\ &=-mln(2\beta) - \frac{1}{\beta}\sum^m_{i=1}|w_i| \end{aligned} lnπ(w)=lni=1mπ(wi)=lni=1m2β 1eβw=ln(2β 1)meβwi=mln(2β)β1i=1mwi
所以armax lnG(w) = L ( w ) + l n π ( w ) = l ( w ) − [ 1 β ∑ i = 1 m ∣ w i ∣ + C ] L(w)+ln\pi(w)=l(w) - [\frac{1}{\beta}\sum^m_{i=1}|w_i|+C] L(w)+lnπ(w)=l(w)[β1i=1mwi+C]
则min [ L ( w ) + 1 β ∑ i = 1 m ∣ w i ∣ ] → l 1 正 则 化 [L(w)+\frac{1}{\beta}\sum^m_{i=1}|w_i|] \to l1正则化 [L(w)+β1i=1mwi]l1

由高斯分布图可见,在极值点(0点)处是平滑的,在认为w在极值点附件取不同的可能性是接近的,则l2正则化只会让w更接近0点,而不会等于0的原因。
由拉普拉斯分布曲线图可见,在极值点(0点)处是一个尖峰,所以认为拉普拉斯先验分布中w取值为0的可能性更高。
在这里插入图片描述

<think>嗯,用户现在想了解如何选择正则化参数来解决矩阵病态性问题,特别是在机器学习和数值计算中应用。用户之前已经得到了关于改善矩阵病态性的方法,包括Tikhonov正则化,现在需要更详细地了解正则化参数的选择方法。 首先,我得回顾一下之前的回答,里面提到了Tikhonov正则化,但参数λ的选择需要交叉验证或L曲线法。现在需要更详细地展开这些方法,可能还要补充其他方法,比如GCV、BIC/AIC准则、Morozov偏差原理等。用户提供的引用中提到过拟合和正则化的关系,可以联系起来,说明正则化参数如何平衡拟合程度和模型复杂度。 用户的问题涉及机器学习和数值计算,所以需要结合这两个领域的常见方法。例如,在机器学习中,交叉验证是标准做法,而在数值计算中,L曲线法或GCV可能更常用。需要区分不同方法的适用场景,比如小数据集和大数据集的处理差异。 还要注意用户可能的应用场景,比如是否是处理线性回归、图像处理还是其他领域,不同的场景可能偏好不同的参数选择方法。不过用户没有具体说明,所以需要保持通用性。 可能需要考虑如何实际实现这些方法,比如给出代码示例,尤其是L曲线法和交叉验证的Python实现,这样用户可以直接应用。同时,要解释每个方法的优缺点,帮助用户根据具体情况选择合适的方法。 另外,用户引用的内容中提到过拟合问题,正则化参数的选择和过拟合的关系需要进一步说明,强调λ如何影响偏差-方差权衡,较大的λ增加偏差但降低方差,防止过拟合,而较小的λ则相反。 最后,确保回答结构清晰,分点列出方法,每个方法有原理、步骤和实现示例,并在最后给出选择建议。还要生成相关问题,引导用户进一步学习,比如比较不同方法或处理高维数据的问题。</think>在机器学习和数值计算中,正则化参数$\lambda$的选择直接影响解的稳定性和精度。以下是5种核心方法及其实现逻辑: --- ### 一、L曲线法(权衡残差解范数) #### 原理 绘制正则化解的残差范数$\|Ax_\lambda - b\|_2$解范数$\|x_\lambda\|_2$的L形曲线,选择曲率最大的拐点对应$\lambda$[^1] $$ L(\lambda) = (\log \|Ax_\lambda - b\|, \log \|x_\lambda\|) $$ #### 步骤 1. 计算不同$\lambda$下的解$x_\lambda$ 2. 绘制双对数坐标系下的L曲线 3. 通过曲率计算确定最佳$\lambda$ $$ \kappa(\lambda) = \frac{\tilde{L}'\tilde{L}'' - \tilde{L}''\tilde{L}'}{(\tilde{L}'^2 + \tilde{L}''^2)^{3/2}} $$ 其中$\tilde{L}$为参数化后的曲线 **Python实现**: ```python import numpy as np import matplotlib.pyplot as plt lambdas = np.logspace(-6, 2, 50) residuals = [] norms = [] for l in lambdas: x = np.linalg.solve(A.T@A + l*np.eye(n), A.T@b) residuals.append(np.linalg.norm(A@x - b)) norms.append(np.linalg.norm(x)) # 计算曲率 d1 = np.gradient(np.log(residuals), np.log(lambdas)) d2 = np.gradient(np.log(norms), np.log(lambdas)) curvature = (d1 * np.gradient(d2) - d2 * np.gradient(d1)) / (d1**2 + d2**2)**1.5 opt_idx = np.argmax(curvature) lambda_opt = lambdas[opt_idx] ``` --- ### 二、交叉验证法(机器学习场景) #### 原理 将数据集分为训练集和验证集,通过最小化验证误差选择$\lambda$ $$ \lambda^* = \arg\min_\lambda \|A_{val}x_\lambda^{train} - b_{val}\|^2 $$ #### 实现要点 - 适用于样本量较大场景 - 5折交叉验证的典型选择 - 需避免过拟合正则化参数本身 **代码框架**: ```python from sklearn.model_selection import KFold from sklearn.linear_model import Ridge kf = KFold(n_splits=5) best_score = float('inf') lambda_candidates = np.logspace(-5, 3, 20) for l in lambda_candidates: scores = [] for train_idx, val_idx in kf.split(X): model = Ridge(alpha=l) model.fit(X[train_idx], y[train_idx]) score = model.score(X[val_idx], y[val_idx]) scores.append(score) if np.mean(scores) < best_score: best_lambda = l best_score = np.mean(scores) ``` --- ### 三、广义交叉验证(GCV) #### 核心公式 $$ GCV(\lambda) = \frac{\frac{1}{n}\|(I - A(A^TA + \lambda I)^{-1}A^T)b\|^2}{\left[\frac{1}{n}tr(I - A(A^TA + \lambda I)^{-1}A^T)\right]^2} $$ #### 优势 - 无需划分验证集 - 适用于中小规模问题 - 自动平衡残差解复杂度 --- ### 四、偏差-方差平衡准则 #### 参数选择逻辑 1. **BIC准则**: $$ \lambda^* = \arg\min_\lambda \left( n\ln(\|Ax_\lambda - b\|^2) + k\ln n \right) $$ 其中$k$为非零参数数量 2. **AIC准则**: $$ \lambda^* = \arg\min_\lambda \left( 2k + n\ln(\|Ax_\lambda - b\|^2) \right) $$ --- ### 五、Morozov偏差原理 #### 适用场景 当噪声水平$\delta$已知时,选择$\lambda$满足: $$ \|Ax_\lambda - b\| = \delta $$ #### 数值实现 通过牛顿迭代法求解非线性方程: $$ \phi(\lambda) = \|Ax_\lambda - b\|^2 - \delta^2 = 0 $$ --- ### 方法对比选择建议 | 方法 | 适用场景 | 计算成本 | 需要先验信息 | |-------------|-------------------------|----------|-------------| | L曲线法 | 中小规模问题 | 中 | 无需 | | 交叉验证 | 机器学习/大数据 | 高 | 无需 | | GCV | 中等规模矩阵 | 中 | 无需 | | Morozov原理 | 已知噪声水平 | 低 | 需噪声估计 | | BIC/AIC | 参数稀疏性要求 | 中 | 无需 | --- ### 工程实践建议 1. **数据规模**: - 超过$10^4$样本优先用交叉验证 - 小样本用L曲线法或GCV 2. **噪声特性**: - 高斯噪声:优先GCV - 脉冲噪声:建议L曲线法 3. **实时性要求**: - 在线计算用预计算L曲线表 - 离线分析可用精细搜索 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值