机器学习中的正则化(Regularization)

文中部分图片摘自吴恩达deeplearning课程的作业,代码及课件在我的github:
DeepLearning 课件及作业

关于本篇正则化的具体路径是:
正则化作业

正则化的概念及原因

简单来说,正则化是一种为了减小测试误差的行为(有时候会增加训练误差)。我们在构造机器学习模型时,最终目的是让模型在面对新数据的时候,可以有很好的表现。当你用比较复杂的模型比如神经网络,去拟合数据时,很容易出现过拟合现象(训练集表现很好,测试集表现较差),这会导致模型的泛化能力下降,这时候,我们就需要使用正则化,降低模型的复杂度。

正则化的几种常用方法

  • L1 & L2范数

首先介绍一下范数的定义,假设 x 是一个向量,它的 L^p 范数定义:
||x||_p = (\sum_{i}^{}{|x_i|^p})^\frac{1}{p}
在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:
\bar{J}(w, b) = J(w, b) + \frac{\lambda}{2m}\Omega(w)
式中, \frac{\lambda}{2m} 是一个常数, m 为样本个数, \lambda 是一个超参数,用于控制正则化程度。

L^1 正则化时,对应惩罚项为 L1 范数 :
\Omega(w)=||w||_1 = \sum_{i}^{}{|w_i|}
L^2 正则化时,对应惩罚项为 L2 范数:
\Omega(w)=||w||_2^2 = \sum_{i}^{}{w_i^2}
从上式可以看出,L^1 正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,而L^2 正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化。

两者都是通过加上一个和项来限制参数大小,却有不同的效果:L^1 正则化更适用于特征选择,而L^2 正则化更适用于防止模型过拟合

让我们从梯度下降的角度入手,探究两者的区别。
为了方便叙述,假设数据只有两个特征即 w_1,w_2 ,考虑L^1 正则化的目标函数:
\bar{J} = J +\frac{ \lambda}{2m} (|w_1| +|w_2|)
在每次更新 w_1 时:
w_1 :=w_1 - \alpha dw_1
=w_1-\frac{\alpha \lambda}{2m}sign(w_1)-\frac{\partial J}{\partial w_1}
w_1 为正数,则每次更新会减去一个常数;若 w_1 为负数,则每次更新会加上一个常数,所以很容易产生特征的系数为 0 的情况,特征系数为 0 表示该特征不会对结果有任何影响,因此L^1 正则化会让特征变得稀疏,起到特征选择的作用。

现考虑L^2 正则化的目标函数:
\bar{J} = J +\frac{ \lambda}{2m} (w_1^2 +w_2^2)
在每次更新 w_1 时:
w_1 :=w_1 - \alpha dw_1
=(1-\frac{\alpha \lambda}{m})w_1-\frac{\partial J}{\partial w_1}
从上式可以看出每次更新时,会对特征系数进行一个比例的缩放而不是像L^1 正则化减去一个固定值,这会让系数趋向变小而不会变为 0,因此L^2正则化会让模型变得更简单,防止过拟合,而不会起到特征选择的作用。
以上就是 L^1, L^2 正则化的作用以及区别。

下面来看一个课程中的例子,当不使用正则化,发生过拟合时:

overfitting

使用 正则化,正常拟合
在这里插入图片描述

在图中可以有比较直观的感受是,过拟合时,分类边界的起伏会更大,也就是在部分点斜率更大,而正常拟合时,分类边界更加平缓。这也是为什么在目标函数中加入“惩罚项”可以达到正则化的效果,“惩罚项”可以使每个参数趋向更小,在求导时斜率也会更小,等于变相的让模型更加简单了,更加简单的模型当然更加不容易过拟合。

训练集增强

更大数量的训练集是提升机器学习模型泛化能力最好的方法。做一个不可能的假设,如果你的训练集包含了所有的你需要测试的数据,那么该模型的泛化能力将是100%(开个玩笑)。在实际项目中,获取训练数据的成本会很高,这时候就需要我们自己来“创造”数据。希望在以后,GAN可以成功的应用到训练集增强领域。
对于一些特定的场景,“创造”数据其实是很简单的,例如图像识别。下面有一张6,我们可以对他采用小幅旋转,平移,放大,缩小甚至给图片加上波动等方法,他的标签实际还是6,但是我们已经多了很多的训练数据。需要注意的是不应做翻转操作,因为6会翻转成9,这会变成一个错误的样本。

6本来的样子
旋转20度
6翻了变成9

dropout

dropout 是一种计算方便但功能强大的正则化方法,适用于最近很火的神经网络。他的基本步骤是在每一次的迭代中,随机删除一部分节点,只训练剩下的节点。每次迭代都会随机删除,每次迭代删除的节点也都不一样,相当于每次迭代训练的都是不一样的网络,通过这样的方式降低节点之间的关联性以及模型的复杂度,从而达到正则化的效果。这点上有点类似 bagging,但是远比 bagging 来的简单。

直观理解:


dropout之前(左)与dropout之后(右)

说dropout简单是因为你只需要设置一个超参数 keep_prob,这个参数的意义是每层节点随机保留的比例,比如将 keep_prob 设置为 0.7,那么就会随机30%的节点消失,消失这个动作其实很简单,只是将这一层的参数矩阵与根据 keep_prob 生成的 {0, 1} 矩阵做 逐点乘积,当然前向传播与反向传播都需要做以上的操作。

dropout的缺点在于,需要将训练集分为不同子集输入每一次的迭代,这就需要较大的训练集,所以在训练集较小的情况下,dropout的效果可能并不好。我们上面也说过,增大数据集是最好的正则化方式,所以在增大数据集的情况下,使用 dropout 需要使用的计算代价可能会比他带来正则化效果更高,这需要我们在实际使用场景中做取舍。

earlystopping

提前终止可能是最简单的正则化方式,他适用于模型的表达能力很强的时候。这种情况下,一般训练误差会随着训练次数的增多逐渐下降,而测试误差则会先下降而后再次上升。我们需要做的就是在测试误差最低的点停止训练即可。
下面还是一个DL课程中的例子,分别展示了训练1500次与2500次时的训练误差与测试误差:

训练1500次,测试集上的正确率是82%
训练2500次,测试集上的正确率是80%

可以看出随着训练次数的增加,训练误差会一直下降,而训练2500次的测试误差要高于训练1500次的测试误差,所以我们在1500次的时候停止会更好。

以上就是机器学习中常用的几种正则化方式,正则化在机器学习中占了很重的地位,在《deep learning》中介绍了更多的正则化方法,有兴趣的同学可以深入研究。

如果你想用 Pytorch 做训练的话可以看看我的另一篇: 如何用 Pytorch 训练一个分类模型?

最后,求赞求关注,欢迎关注我的微信公众号[MachineLearning学习之路] ,深度学习 & CV 方向的童鞋不要错过!!

参考

《DeepLearning》
吴恩达-深度学习课程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • A 准确率(accuracy) 分类模型预测准确的比例。在多类别分类中,准确率定义如下: 在二分类中,准确率定义为...
    630d0109dd74阅读 1,294评论 0 3
  • https://developers.google.com/machine-learning/crash-cour...
    iOSDevLog阅读 2,645评论 1 11
  • 简书公式支持不太好,欢迎跳转到机器学习深度学习面试题总结GitHub看完整的总结,GitHub总结比较全,大多数是...
    MrMiaow阅读 3,780评论 1 8
  • 人与人的相处中把握距离很重要,这个距离可以是空间距离也可以是我们所说的尺度,只有掌握好这个距离友情和爱情才能更长久...
    蓝色满天星的斌斌阅读 255评论 0 4
  • 病史:男,10岁,两岁开始出现鼻炎,因得不到有效的治疗后面发展成鼻窦炎。主要症状有:晨起易流鼻血、鼻子不通气...
    叶树灿阅读 1,510评论 0 10