Python与人工神经网络(7)——其他正则化方法

上期的文章详细说到了L2正则化方来减少过度拟合,我当时说既然有L2,就应该有L0,L1。我也确实说对了,然而没想到作者在这本书里面没有讲到L0,除了L1之外,作者还讲了两种方法,一种叫Dropout(我不知道怎么翻译,也没有查到),另一种是数据集扩增法。我们先从L1法开始吧。

L1

L1跟我们上期说的L2非常类似,只不过L2的成本函数是这样的:

而L1的成本函数是这样的:

所以其实功效跟L2是差不多的,Δw如下:

sng(w)是取w的符号,如果w为正,取1,反之取-1。另外上一篇文章的第二个版本中对w>0这个前提有提到,第一个版本因为写的仓促,中间有一些不明确甚至错误的地方,改了重新发了下。
所以这个也是放小了w,减少了过度拟合的情况。

Dropout

Dropout倒是跟L1和L2大不相同,他不改变成本函数,他改变这个神经网络本身。假设我们有如下一个神经网络:

使用dropout方法进行训练时,假设先随机临时去掉其中一半的隐藏神经元,所以就得到了这么一个神经网络。

我们就使用这个忘了训练一个选中的小数据集,得到相应的w和b值后,在新一轮训练时,将原来临时去掉的隐藏神经元恢复过来,然后又随临时去掉其中的一半,就这么一遍又一遍一遍又一遍的干,于是就得到了最后每个神经元上的b值和每条线上的w值。但是因为w(权重)值是在少了一半隐藏神经元的情况下得到的,所以我们将所有的w值除2,就得到了最终w值。
但是这种方法为什么能进行正则化呢。先把dropout丢一边,试想我们用五个神经网络同时训练一个数据集,这五个神经网络的初始w和b值可能不同,很明显他们训练的结果也不尽相同。那么当这五个神经网络的结果有矛盾时,就采取古老而有效的投票制度,比如对于某个图形,有三个网络认为他是0,两个网络认为他是8,那就认为他是0。这种平均法是减少过度拟合的有效方式,因为每个网络过度拟合的形式可能不同。那么再反过来看dropout方法,是不是与平均分如此相同。

数据集扩增法

数据集扩增法嘛,其实就比较容易理解了,因为之前说过大的训练数据集不容易出现过度拟合,那怎么扩增数据集呢?无中生有!
比如对我们的数字识别训练数据集,把图像顺时针转动个15度,就有了一个新的数据集。如果从0到15度每转1度都算一个新数据集,那我们的训练数据集的数据量就瞬间多了一个数量级。
比如声音识别的数据,把声音放慢成0.9倍。。
等等之类吧,虽然无中生有,但是效果显著,原书中提到某篇论文,做跟我们一样的事情,使用数据集扩增的方法,识别超过了98%。

补充

为什么有个补充呢,因为我们这两期主要讲过度拟合和正则化,涉及到的都是数据和权重,所以对这两方面做一个补充。
第一个是训练数据集的数据量和识别率的关系,用一张图说明吧:

其中的SVM是另一种机器学习方法,叫支持向量机。
另外这也引出一点需要注意的地方,以后比较两个神经网络甚至是不同的机器学习方法,都要基于相同的训练数据集比较,否则是没啥意义的。
第二个是初始权重的选择。我们之前说初始权重是采用正态分布随机选择的,而且之前看来表现良好。但是还有更好的初始权重选择方法。
设想有一个1000个输入神经元的神经网络,在算第二层的第一个神经元的时候:

我们简单的假设1000个输入神经元,其中500个的输入值是1,另外500个的输入值是0。对于z=Σw·x + b。因为500个wj和1个b是通过正态分布取得的,那么z也服从正态分布,其标准差为√501≈22.4(前面那个勾形的符号是根号),在正态分布中,标准差大,表示分布相分散,实际上其分布图如下:

从图中可以看出,z的取值相当分散,也就是|z|会比较大,对于z远远大于1或者远远小于-1,都会导致σ(z)接近于1或者0。这也就表面,我们这个神经元得到的值非常接近1或者0。然后再想想σ(z)的曲线形状,当σ(z)在0和1附近时,导数是不是相当小,也就是他因为w和b的变动的变化会相当小,也就会导致刚开始,训练就会很慢。
所以其实解决方式就比较简单了,就是要让z的分布曲线从矮胖变得高瘦,让他的分布集中在0周围。一般才用的方法是规定取w时的正态分布标准差为1/√n,这里的n表示输入神经元个数。对于我们上述的例子,就是1/√1000。那么对于z的分布标准差就是√(3/2)≈1.22,其分布曲线如图:

好了,这期相对轻松,因为所有的方法原理都没有取深入的证明,所以没有写几个公式。下期是个工程,我们这三期学习了交叉熵成本函数,学习了过度拟合和正则化,学习了如何初始化权重值,下期就得用代码实现他了。

欢迎关注我的微信公众号获取最新文章:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值