Regularization和Dropout
Regularization
增加训练集的量是减少overfitting的途径之一
减小神经网络的规模可以减小过拟合,但是更深层更大的网络潜在有更强的学习能力,即使对于固定的神经网络和固定的训练集,仍然可以减少overfitting:
Regularization原理
最常见的一种regularization:(weightdecay)L2regularization
在cross−entropy上进行改进
C=−n1xj∑[yjlnajL+(1−yj)ln(1−ajL)]+2nλw∑w2
增加了一项:权重之和(将所有神经网络里的权重相加)
- λ>0:regularization参数
- n:训练集包含实例的个数
其实,对于任何的Cost,都可以进行类似的改动,在后面加上权重的和
C=C0+2nλw∑w2
Regularization的Cost偏向于让神经网络学习比较小的权重w,除非第一项C0明显减少。λ用来调节两者的相对重要程度。
在进行Regularization后,对Cost求偏导,得到
∂w∂C=∂w∂C0+nλw
∂b∂C=∂b∂C0
可以发现,对于偏向,偏导数不变;对于权重,则多了后边一项。
因此更新权重的时候,变为
w→w−η∂w∂C0−nηλw=(1−nηλ)w−η∂w∂C0
偏向b仍然为
b→b−mηx∑∂b∂Cx
一些问题
Regularization网络鼓励更小的权重,在小权重的情况下,x的一些随机变化不会对神经网络的规模造成太大的影响,所以更小可能收到数据局部噪音的影响。Un-regularized神经网络,权重更大,容易通过神经网络模型比较大的改变来适应数据,更容易学习到局部数据噪声。
Regularization更倾向于学习简单的模型,理论支持还在研究中。
Dropout
描述
开始的时候,删除隐藏层随机选取的一半神经元,然后在剩余的神经元进行学习。
然后,恢复之前删除过的神经元,重新随机选择一半神经元进行删除,之后再次进行学习。
重复上面两步。
最后,学习出来的神经网络的每个神经元都是在一半神经元的基础上学习出来的,当所有神经元被恢复后,为了进行补偿,我们把隐藏层的所有权重都减半。
为什么dropout可以减少overfitting?
假设对于同一组训练数据,利用不同的神经网络来训练,训练完成后,求输出的平均值,这样可以减少overfitting
Dropout的道理跟这个类似,每次扔到一半隐藏层的神经元,相当于我们在不同的神经网络上训练了,减少了神经元的依赖性,也就是某个神经元不依赖某个或某几个神经元,迫使神经元与其他神经元联合起来更加健壮的特性。