损失函数中正则项的作用

防止过拟合

深度学习模型实际上是在拟合一个函数 f(x1, x2, x3…),可以想象,特征x的系数越小,函数整体就越平滑,即模型对特征x越不敏感,这就是防止过拟合的基本原理。

已知损失函数f(x),求在使得w越小的条件下,f(x)的极小值,这就是约束条件下的极值问题,可以使用拉格朗日乘子法。

要使w小,即让其接近0,则可以设g(w)=|w|→0(L1正则) 或者 g(w)=w^2→0(L2正则),则求f(x)在约束条件g(w)下的极值就是求 \( f(x) + λg(w) \) 的极值。

上面说的就是L1正则和L2正则的基本思想,但实际上它们的效果还是有些不一样的。其实还有L0正则,它就是直接统计权重矩阵中0的个数,然后让0尽量多。

事实上,模型中常用的dropout也是正则化的一种,它等价于L2正则

防止梯度爆炸

梯度爆炸的根本原因还是梯度太大了,然后一层一层累积,梯度大就会引起权重大,而正则项可以让权重减小,从而减缓梯度爆炸的问题。

L1正则

L1正则侧重于让某些权重w变为0,这样相当于减少多项式的项数。也就是让模型只关注那些重要的特征

为什么L1正则让权重矩阵更稀疏?

所谓稀疏矩阵就是矩阵中有很多元素都是0的矩阵,也就是让一些w变为0,也就是在w取0时,损失函数取得极小值,怎么做呢?

加上L1正则后的损失函数为 \( f(x) + λ|w| \) (这里只是针对w矩阵中的一个w),其在w=0的左边导数为 f'(x)-λ,右边导数为 f'(x)+λ,故,如果λ比f'(x)大,就能让它在w=0处左右导数一个为正一个为负,即取得极小值。这样一来,就让这个w取为0了。不难看出,λ越大,权重矩阵中的0就越多,矩阵就越稀疏。

L2正则

L2正则更侧重于让所有的权重更小,即让整个激活函数更平滑,相当于权力的稀释。它的基本原理就是让权重在每一次迭代中都乘以一个小于1的数,然后再做梯度更新,以下为解释:

参考

https://blog.csdn.net/jinping_shi/article/details/52433975

https://www.zhihu.com/question/37096933/answer/70426653

https://zhuanlan.zhihu.com/p/306672638

https://www.zhihu.com/question/20700829

Leave a Comment