机器学习系列(3): 几分钟了解正则化及python实现
“ 咦?训练集上的表现很不错,测试集和开发集怎么就下降了?有请正...正...正则化,这里是机器学习系列第三篇,带你走进正则化,了解一下它是如何改善网络性能的吧。(文末有彩蛋哦)”
01 导言
深度学习可能会存在过拟合问题,也即有比较高的方差(variance),导致深度网络不能很好的泛化,针对这个问题,我们可以有不同的解决方式,比如采用正则化、增加数据集、减小网络规模、改变网络架构等,这个主题我们将讨论正则化。
申明
本文原理解释和公式推导均由LSayhi完成,供学习参考,可传播;代码实现的框架由Coursera提供,由LSayhi完成,详细数据和代码可在github中查询.
https://github.com/LSayhi/DeepLearning
微信公众号:AI有点可ai
02 常见正则化
2.1、 L2范数正则化
-
这种正则化方式是将原交叉信息熵代价函数
更改为
更改后的代价函数的第二部分中是范数,称为Frobenius norm,所以在书写时,矩阵
写为
或
,再代价函数增加的第二部分代价称为
正则化cost。那么在反相传播过程中,
,此处的
相较于没有正则化的方式更大了,更新后的
将更小,因此我们也称
范数正则化为权重减轻。
-
那么为什么正则化能够防止过拟合呢?直觉上可以这么认为,W越小,隐藏层神经元的影响越小,极端情况比如W=0,那么对应的神经元就没有发挥作用,神经元的数目越小,越不容易拟合,因此,如果之前是过拟合的情况,经过正则化可以降低方差,当然W的大小还与
有关,这就是一个可以调试的参数。
2.2、L1范数正则化:
-
L1正则化与L2正则化不同的是,将
改为
,记为
,称L1范数,L1正则化是将平方换成了绝对值。
-
L1和L2一样,都是引入对参数W的惩罚,“惩罚”意为降低W对网络的影响,极端情况就是使W中的某些值为0,降低网络的表达能力。
-
L1与L2不同的是,L1能够产生稀疏性,L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0(详细演绎待补充)
2.3、L0范数正则化
-
L0正则化, L0范数是指向量中非0的元素的个数。如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0。由此,L0正则化将更大程度上降低网络的表达能力,
在一定条件下,依概率1等价于
,但L0范数优化是个NP-hard问题,人们于是倾向于用L1,L2范数。
2.4、dropout正则化
-
这种正则化方式是将隐藏层的神经元随机消除,可以理解为随机抛弃了某些已经学习到的特征,以达到降低网络表达能力的效果。这和PCA有点类似,PCA是对输入层数据进行特征选择,而dropout是对隐藏层学习到的特征进行(随机)选择,不依赖于某一特征,这样可以降低网络对某些参数的过拟合。
2.5、Early stopping
-
提前停止,这种方式是通过迭代次数和代价两者的曲线,取一个中等大小的迭代次数,此时对应中等大小的W,可以防止过拟合。
2.6、数据扩增
-
如果数据量过少,则深度血虚可能会产生过拟合,那么通过人工产生新的数据,则可以扩大数据集,对于图像识别比如将图片翻转、裁剪等,对于数字识别将数字扭曲,旋转等,通过增加数据量减少过拟合。
03 效果展示
任务:假设现在我们有一些足球比赛数据,这些数据记录着当法国队守门员发球后,在足球场上不同地点是哪方头球接球成功。利用这些数据,用神经网络预测在不同位置,是哪个队的球员头球成功获得控球权。
训练集数据如下图
采用同样的网络结构,利用不同正则化方式,我们对比下效果:
未使用正则化:
L2正则化:
dropout正则化
result table
可以看出正则化方式减小了过拟合,提高了测试集预测正确率。
04 python实现
4.1 本文相应的代码及资料已经以.ipynb文件和.pdf形式在github中给出。
-
.ipynb文件在链接/Coursera-deeplearning深度学习/课程2/week1/
-
.pdf文件在链接/Coursera-deeplearning深度学习
点击【蓝字链接】,github传送门了解一下。
觉得有帮助的话别忘了star哦
有时候,不追求完美,反倒是一种美,我知道你并非完美,但却瑕疵的那么可爱
-by LSayhi的神经网络