L1正则化,L2正则化与范数的关系?

本文介绍了L1和L2正则化在深度学习中的应用,以及它们与向量范数的联系。L1范数导致权重稀疏化,有助于特征选择,而L2范数通过降低所有权重但不使其归零来避免过拟合。正则化通过最小化权重范数促进模型简化,提高泛化能力。
摘要由CSDN通过智能技术生成

深度学习基础:L1正则化,L2正则化与范数的关系?

L 1 L1 L1 正则和 L 2 L2 L2 正则本质上用到的是范数这块的数学知识,向量的 L 1 L1 L1 范数和 L 2 L2 L2 范数。所以先看一下范数的概念:

范数的概念

通常我们用范数 (norm) 来衡量向量,向量的 L p L_p Lp 范数定义为:
∥ x ∥ p = ( ∑ i ∣ x i ∣ p ) 1 p , p ∈ R , p ≥ 1 \|\mathbf{x}\|_p = (\sum_i|x_i|^p)^{\frac{1}{p}},p\in\mathbb{R},p\geq1 xp=(ixip)p1,pR,p1

L 2 L^2 L2 范数,也称欧几里得范数 (Euclidean norm),是向量 x \mathbf{x} x 到原点的欧几里得距离。 有时也用 L 2 L^2 L2 范数的平⽅来衡量向量: x T x \mathbf{x}^T\mathbf{x} xTx 。事实上,平方 L 2 L^2 L2 范数(Squared L2 norm)在计算上更为便利,例如它的对 x \mathbf{x} x 梯度的各个分量只依赖于 x \mathbf{x} x 的对应的各个分量,而 L 2 L^2 L2 范数对 x \mathbf{x} x 梯度的各个分量要依赖于整个 x \mathbf{x} x 向量。
L2范数(L2 norm): ∥ x ∥ 2 = ∑ i ∣ x ∣ 2 平方L2范数(Squared L2 norm): ∥ x ∥ 2 2 = ∑ i ∣ x ∣ 2 \text{L2范数(L2 norm):}\quad\|\mathbf{x}\|_2 = \sqrt{\sum_i|x|^2}\\ \text{平方L2范数(Squared L2 norm):}\quad\|\mathbf{x}\|_2^2 = \sum_i|x|^2 L2范数(L2 norm:x2=ix2 平方L2范数(Squared L2 norm:x22=ix2

但是由于 L 2 L^2 L2 范数并不⼀定适用于所有的情况,比如它在原点附近的增长十分缓慢,因此不适用于需要区别 0 0 0 和非常小但是非 0 0 0 值的情况。 L 1 L^1 L1 范数就是⼀个比较好的选择,它在所有方向上的增长速率都是⼀样的,定义为:
∥ x ∥ 1 = ∑ i ∣ x i ∣ \|\mathbf{x}\|_1 = \sum_i|x_i| x1=ixi
它经常使用在需要区分 0 0 0 和非 0 0 0 元素的情形中。

有时我们也会想衡量⼀个矩阵,机器学习中通常使用的是 F 范数 (Frobenius norm),其定义为:
∥ A ∥ F = ∑ i , j A i , j 2 \|A\|_F = \sqrt{\sum_{i,j}A^2_{i,j}} AF=i,jAi,j2

范数如何与正则联系起来?

使用线性回归的例子,拿均方误差(Mean Squared Error,MSE)作为loss:
L ( w ) = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 \mathcal{L}(\mathbf{w}) = \frac{1}{m}\sum_{i=1}^m(y_i-\hat{y}_i)^2 L(w)=m1i=1m(yiy^i)2

y ^ i \hat{y}_i y^i表示的是对样本 x i x_i xi的预测输出:
y ^ i = w ′ x i \hat{y}_i = \mathbf{w^\prime x_i} y^i=wxi
然后咱们的目标就是最小化这个损失:
min w L ( w ) = min w 1 m ∑ i = 1 m ( y i − y ^ i ) 2 \mathop{\text{min}}\limits_{\mathbf{w}}\mathcal{L}(\mathbf{w}) = \mathop{\text{min}}\limits_{\mathbf{w}}\frac{1}{m}\sum_{i=1}^m(y_i-\hat{y}_i)^2 wminL(w)=wminm1i=1m(yiy^i)2

w \mathbf{w} w就是网络的权重,输入一定的情况下,损失就是权重的函数

为了避免过拟合,我们倾向于给较简单的函数添加一个偏移,也就是说,假如有两个函数都可以很好地拟合咱们的数据,我们会倾向于使用简单的那个。 这可以通过添加一个正则项来实现,通常就是添加 L 1 L1 L1 范数或者 L 2 L2 L2 范数:
L1范数(L1 norm): ∥ w ∥ 1 = ∑ i ∣ w i ∣ 平方L2范数(Squared L2 norm): ∥ w ∥ 2 2 = ∑ i ∣ w ∣ 2 \text{L1范数(L1 norm):}\quad\|\mathbf{w}\|_1 = \sum_i|w_i|\\ \text{平方L2范数(Squared L2 norm):}\quad\|\mathbf{w}\|_2^2 = \sum_i|w|^2 L1范数(L1 norm:w1=iwi平方L2范数(Squared L2 norm:w22=iw2
比如说我们给loss添加了平方 L 2 L2 L2 范数然后将其最小化,就可以得到岭(Ridge)回归:
min w L λ ( w ) = min w ( λ ∥ w ∥ 2 2 + 1 m ∑ i = 1 m ( y i − y ^ i ) 2 ) \mathop{\text{min}}\limits_{\mathbf{w}}\mathcal{L}_\lambda(\mathbf{w}) = \mathop{\text{min}}\limits_{\mathbf{w}}(\lambda\|\mathbf{w}\|_2^2+\frac{1}{m}\sum_{i=1}^m(y_i-\hat{y}_i)^2) wminLλ(w)=wmin(λw22+m1i=1m(yiy^i)2)
这里 λ \lambda λ是正则系数,表示我们想要正则化的程度。

如果添加的是 L 1 L1 L1正则项就被称为Lasso回归

为什么最小化权重的范数就可以实现正则化?

答案在于:最小化权重的范数可以让拟合函数变“简单”。 数学上讲, L 1 L1 L1 范数和 L 2 L2 L2 范数本质上都是对权重的大小的度量: L 1 L1 L1 范数是各权重绝对值的和,平方 L 2 L2 L2 范数是各权重平方的和。所以权重越大,它们的范数就越大,这也就意味着,最小化范数可以让网络的权重变小,继而得到一个“相对简单”的网络。

举个例子,把这个过程可视化出来,假设咱们有一组下面这样的数据:
在这里插入图片描述
我们应该给它选择什么样的拟合函数呢,实际中有很多选择,下面是三个例子:

在这里插入图片描述

上图包含一个二阶多项式拟合和两个不同的八阶多项式拟合,它们的公式如下:
 Figure a:  y ^ = 0.04 + 0.04 x + 0.9 x 2  Figure b:  y ^ = − 0.01 + 0.01 x + 0.8 x 2 + 0.5 x 3 − 0.1 x 4 − 0.1 x 5 + 0.3 x 6 − 0.3 x 7 + 0.2 x 8  Figure c:  y ^ = − 0.01 + 0.57 x + 2.67 x 2 − 4.08 x 3 − 12.25 x 4 + 7.41 x 5 + 24.87 x 6 − 3.79 x 7 − 14.38 x 8 \begin{aligned} &\text { Figure a: } \hat{y}=0.04+0.04 x+0.9 x^{2}\\ &\text { Figure b: } \hat{y}=-0.01+0.01 x+0.8 x^{2}+0.5 x^{3}-0.1 x^{4}-0.1 x^{5}+0.3 x^{6}-0.3 x^{7}+0.2 x^{8}\\ &\text { Figure c: } \hat{y}=-0.01+0.57 x+2.67 x^{2}-4.08 x^{3}-12.25 x^{4}+7.41 x^{5}+24.87 x^{6}-3.79 x^{7}-14.38 x^{8} \end{aligned}  Figure a: y^=0.04+0.04x+0.9x2 Figure b: y^=0.01+0.01x+0.8x2+0.5x30.1x40.1x5+0.3x60.3x7+0.2x8 Figure c: y^=0.01+0.57x+2.67x24.08x312.25x4+7.41x5+24.87x63.79x714.38x8

前两个(“简单”些的函数)看起来在新数据上有更好的泛化性,第三个(复杂的函数)明显在训练数据上过拟合了。它们的复杂度是如何在范数上面体现出来的呢?

在这里插入图片描述
可以看到,线[c]均方误差为0,但它的范数非常大,线[a],[b]虽然范数稍微大了一点,但其范数却小得多:

  • 线[a]的范数小是因为它跟[c]相比参数少得多
  • 线[a]的范数小是因为它跟[c]相比虽然参数个数相同,但所有的参数在数值上小得多

通过这个例子我们就可以总结出来,通过给我们的最小化目标函数添加 L 1 L1 L1 范数和 L 2 L2 L2 范数,可以促使网络拟合出权重较小的函数,这就带来了正则效应,使得我们的网络在新数据上泛化性更好。

L 1 L1 L1 范数和 L 2 L2 L2 范数 有什么区别?

通过上面的例子我们已经了解到,降低一个函数的复杂度有两种方法,可以直接舍弃掉某些权重(将他们设置为 0 0 0),或者使权重尽可能地小,这其实就是 L 1 L1 L1 L 2 L2 L2 的区别。

为了理解这两种操作的不同之处,我们先看看它们是如何随着权重变化的。
在这里插入图片描述
左图是给定权重 w w w L 1 L1 L1 范数和 L 2 L2 L2 范数值,右图是对应的范数斜率图,我们可以看到,两个范数都随着权重绝对值的增大而增大,但是, L 1 L1 L1 范数是以一个恒定的速度增加的,而 L 2 L2 L2 范数是以指数型的速度增加的。

这个区别很重要,因为在梯度下降的时候我们是基于损失函数的偏导数来更新权重的,所以如果我们在损失函数里面添加了范数项的话,该范数的导数会决定权重的更新速度。

可以看到, L 2 L2 L2 范数 的导数是随着 w \mathbf{w} w的减小而减小的,这也就意味着权重的更新速度会变得越来越慢。当权重接近 0 0 0的时候,这个斜率也会变得很小很小几乎可以忽略不计,所以权重基本上不会小到 0 0 0

另一方面,因为 L 1 L1 L1 范数 的斜率是固定的。随着 w \mathbf{w} w的减小,权重的更新速度并不会改变,这样我们就能获得权重持续变小的“效果”,所以 L 1 L1 L1 范数更有可能将某些权重减小到 0 0 0

简单总结一下

  • L 1 L1 L1 范数可以将某些权重减小至 0 0 0,可以使权重变得稀疏。这对于内存的高效利用或者某些需要特征选择(就是我们只想保留某些特定权重)的场景很有用的。
  • L 2 L2 L2 范数会减小所有的权重但不会将它们一直减小至 0 0 0。这不便于高效使用内存,但在我们想要保留所有参数的时候还是挺有用的。

参考:

[1] https://www.deeplearningbook.org/contents/linear_algebra.html
[2] https://towardsdatascience.com/visualizing-regularization-and-the-l1-and-l2-norms-d962aa769932

上文本人随手翻译笔记,表述不足或错误之处欢迎批评指正

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值