本文是基于余庭嵩对pytorch的讲解之后的学习笔记。
正则化之L1&L2
基础简介
正则化的含义:其实正则化就是减小方差的策略。那么什么是方差,为什么要减小方差?这里首先要提到误差的本质。
误差可以分解为偏差,方差以及噪声之和,具体如何分解可参考个人之前写的这篇笔记最后部分的推导。三者的意义可描述如下:
- 偏差:度量了学习算法的期望预测结果与真实结果的偏离程度,刻画了学习算法本身的拟合能力
- 方差:度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动造成的影响
- 噪声:在当前任务上所有学习算法能达到的期望泛化误差的下界
之前损失函数总结篇里面讲到了,目标函数就是代价函数+正则项。这里正则项就有L1正则和L2正则,L1正则就是权值绝对值之和,L2正则就是权值平方和,在讲这两种正则化方法的时候经常能看见下图:
这里俯视图片所在平面的方向就是损失值,一个个圈就是等值线,也就是说在一圈上面所有的loss值都相等,如果有两个权重,那么这两个权重组成了一个平面空间,空间任一点表示了所有权值的组合情况。不同权值组合对应着不同的loss值,体现在平面里就是等值线。
那图片里的正方形和圆形代表什么?这两个图形分别代表了L1和L2正则项,权值绝对值之和固定,其实在二维平面里就是方形等值线,权值平方和固定,在二维平面里也就是圆形等值线。
那么由于目标函数就是代价函数+正则项,并且代价函数和正则项同时由某组确定的权重值决定。所以,反映在上图就是,坐标点必定同时在正则项的等值线和代价函数的某个等值线上。这里就可以发现,其实正则项就是约束条件,让权值不能随意乱跑,必须在正则项规定的线上。
例如最后求得的解,在没有正则化项的情况下在损失值为1的等值线上,这时候加入正则项的话,在保证损失值为1的情况下(这里不合理但先这样理解),会寻找到符合L1/L2正则项约束的权重。如果是L1,交点还大概率会在轴上,所以L1会把无关特征的权重约束至0。这段例子中的说法是为便于理解的说法,实际上求解的时候,是把正则和损失Cost放在一起,求出让两者加和最小的权值解。
L2正则项
L2正则项其实就是令权值衰减,为什么这么说呢,可由下面公式得知。
添加L2正则项的目标函数为:
o b j = L o s s + λ 2 ∗ ∑ i N w i 2 \boldsymbol{o} \boldsymbol{b} \boldsymbol{j}=\boldsymbol{L} \boldsymbol{o s} \boldsymbol{s}+\frac{\boldsymbol{\lambda}}{2} * \sum_{i}^{\boldsymbol{N}} \boldsymbol{w}_{\boldsymbol{i}}^{2} obj=Loss+2λ∗i∑Nwi2
回忆一下,在没有正则项约束的时候,梯度下降法下权值的更新公式为:
w i + 1 = w i − ∂ o b j ∂ w i = w i − ∂ L o s s ∂ w i w_{i+1}=w_{i}-\frac{\partial o b j}{\partial w_{i}}=w_{i}-\frac{\partial L o s s}{\partial w_{i}} wi+1=wi−∂wi∂obj=wi−∂wi∂Loss