机器学习系列(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中给出。

点击【蓝字链接】,github传送门了解一下。

觉得有帮助的话别忘了star

有时候,不追求完美,反倒是一种美,我知道你并非完美,但却瑕疵的那么可爱

-by LSayhi的神经网络


                                                                                

                                                    


猜你喜欢

转载自blog.csdn.net/LSayhi/article/details/81777296
今日推荐