您的位置:首页 > 运维架构

【深度学习理论】正则化方法:L1、L2、数据扩增、Dropout

2018-03-08 21:21 495 查看
原文链接:http://blog.csdn.net/u012162613/article/details/44261657

声明:本文在原文的极大参考下,添加部分细节。原文很棒,点个赞!

正则化

在训练数据不够多时,或者过度训练时,常常会导致
overfitting
(过拟合)。随着训练过程的进行,模型复杂度增加,在train data上的error渐渐减小,但是在验证集上的error却反而渐渐增大。因为训练出来的网络过拟合了训练集,对训练集外的数据却不不好。在大多数的实际情况中,训练集与测试集难以完全符合相同数据分布规律。



在实际数据中一般会划分为三个数据集:
train data
validation data
test data
。其中
train data
决定了模型的内部参数(梯度下降),根据
validation data
确定
early stop
batch
以及
learning  date
,而
test data
确定
accuracy
来判断模型鲁棒性。

L1-norm

<
12f81
/nobr>在原始的代价函数后面加一个代价项,这个代价项属于一范数,即全部权重w的绝对值的和,然后除以总数n,再乘以系数λ。



首先对权重求偏导,其中
sgn()
是符号函数,表示每一个权重项的正负。



权重更新过程为:



对于第二项ηλnsgn(w)ηλnsgn(w),当权值ww为负数的时候,第二项会导致式子变大,也就是趋于0;当权值ww为正数的时候,第二项会导致式子变小,也就是趋于0。总之使权重的绝对值尽量小。当权值为0的时候,ww是不可导的,所以会去除第二项然后对权值进行更新,因此只需要使
sgn(0)=0
即可。L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。原先的费用函数在x=0处导数不为0,那么L2正则项后的导数也不是0。但是L1正则项的系数只要大于原先原先费用函数在0的导数,更新后就会在0处变为极小值,从而使一部分参数的最优值变为0。(简单地说,L1可以惩罚到0)

L2-norm

L2正则化是在原始代价函数后面添加二范数,也叫做惩罚项,对权值进行控制。系数中的1/2是为了抵消在代价函数求导的时候的出现的系数2。



首先对上面的代价函数分别对权值ww和bb求偏导数:



因此L2正则化项只对权值的更新会产生影响。权值更新方程为:



如果设置λ=0λ=0,也就是不设置正则化项,那么权值系数为1,是没有影响,如果非0,那么ηλnηλn为正,则权重ww会变小。因此叫做权重衰减(weight decay)。对于
mini-batch
,如下:





L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。

为什么要减小权重来避免过拟合?

更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。过拟合的时候,拟合函数的系数往往非常大,如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。



Dropout

Dropout是通过修改神经网络本身来实现的,它是在训练网络时用的一种技巧。初始化网络结构如下:



然后在隐藏层进行随机遗忘,如下图:



运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

数据扩增方案

1.图像旋转对称变换

2.随机添加噪声

3.做弹性畸变

4.GAN生成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐