正则化是深度学习最常用到的概念,那么首先,我们先了解一下,为什么要用正则化?
一、为什么要正则化?
看下图,引用吴恩达老师课程中的“房价预测问题”的曲线图,我们可以看到,左侧你和程度不是很好,也就是偏差较大;右图则过拟合,也就是曲线几乎穿过了每一个点,这样的结果是**“泛化”能力很差,泛化是指将当前模型引用于新模型时的表现力,过拟合其实也就是我们说的方差过大**;而中间的曲线则刚好,是我们想要的样子。
那么我们应该确保得到中间的那种刚好的曲线,在不知道线性回归的式子应该是几个变量的情况下?
这时有两个解决方案:
- 减少特征向量,使得式子变得简单。但是这样无疑会丢失一部分数据。
- 正则化。也许每个特征向量都有点用但是用处不一,那么我们通过正则化来使曲线会变得平滑,结果也可以减少过拟合。
二、如何做到的?
还以房价预测的曲线为例,现在我们发现曲线过于弯曲,因此给每个特征向量加上一个惩罚量,使得每个特征向量的作用刚刚好。如下式:
上式对线性回归的Loss函数加上惩罚项,因为,我们在梯度下降的过程中,是在尽可能的使得达到最小,而由于的正则化参数很大,那么我们只能使得尽可能的小。这样就达到了缩小特征向量的目的。
同理,当特征向量很多时,得到一般的正则化的函数:
三、L1和L2正则化
(1)式就是L2正则化的方法,L1正则化的公式如下:
我们通过一个例子形象理解一下L2正则化的作用,考虑一个只有两个参数w1和w2的模型,其损失函数曲面如下图所示。
从a可以看出,最小值所在是一条线,整个曲面看起来就像是一个山脊。那么这样的山脊曲面就会对应无数个参数组合,单纯使用梯度下降法难以得到确定解。但是这样的目标函数若加上一项,则曲面就会变成b图的曲面,最小值所在的位置就会从一条山岭变成一个山谷了,此时我们搜索该目标函数的最小值就比先前容易了。
所以L2正则化在机器学习中也叫做“岭回归”(ridge regression)。
加入了正则化,L2的梯度更新变为:
可以看出ω的系数使得权重下降加速,因此L2正则也称weight decay(caffe中损失层的weight_decay参数与此有关)。
L1 对应的梯度下降更新为:
符号函数在ω大于0时为1,小于0时为-1,在ω=0时|ω|没有导数,因此可令sgn(0)=0,在0处不使用L1正则化。
由此看来,L1更容易得到稀疏解,而L2更容易得到接近0但是不会等于0的平滑解,两者都能降低模型复杂度。
最后总结两者的特征:
L1正则化:
- L1惩罚权重的绝对值之和。
- L1有一个稀疏解
- L1生成的模型简单且可解释,但不能学习复杂的模式
- L1对异常值具有鲁棒性
L2正则化:
- L2正则化惩罚平方权重之和。
- L2有一个非稀疏解
- L2正则化能够学习复杂的数据模式
- L2没有特征选择
- L2对异常值不太好
四、Dropout
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络。
说的简单一点就是:我们在前向传播的时候,让某个神经元的**值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。
如图,原型是复杂的网络结构,在训练中,随机关闭得到后面的样子。
DropOut的流程:
1)首先随机关闭网络中一半的隐藏神经元,输入输出神经元保持不变
2)继续向前传播,并反向传播调整未被关闭的权重参数
3)恢复被关闭的神经元。
4)循环前三步①②③①②③…
优点:
使用dropout正则化的神经网络,不会过分依赖于某个或某些特征,使得权重分散。因为在每一轮迭代中隐藏层的任何一个结点都有可能被删除,那么原本属于它的权重就会被分配到其他结点上,多次迭代平均下来,就能降低对某个特征或者是某个结点的依赖了。
缺点:
损失函数在每一轮迭代中不一定是逐渐减小,因为此时的损失函数没有明确的定义。(因为每一轮都是随机选取结点关闭)
参考:
- https://zhuanlan.zhihu.com/p/38200980
- 吴恩达机器学习
- https://blog.csdn.net/fendouaini/article/details/80058137
- https://www.cnblogs.com/skyfsm/p/8456968.html