Neural Network and DeepLearning (3.2)改进神经网络的学习方法

Overfitting and regularization(过度拟合和规范化)

我们的网络在280迭代期后就不再能够推广到测试数据上。所以这不是有用的学习。我们说网络在280迭代期后就过度拟合(overfitting)过度训练(overtraining)了。

我们的网络实际上在学习训练数据集的特例,而不是能够一般的进行识别。我们的网络几乎是在单纯记忆训练集合,而没有对数字本质进行理解并泛化到测试数据集上。

一种检测过度拟合的明显方法:

跟踪测试数据集合上的准确率随训练变化情况。如果看到测试数据上的准确率不再提升,那我们就停止训练。

具体过程就是在每个迭代期的最后都计算在validation_data上的分类准确率。一旦分类准确率已经饱和,就停止训练。这个策略被称为提前停止(early stopping。可以将验证集看成是一种特殊的训练数据集,能帮助我们学习到好的超参数(hyper-parameters)。这种寻找好的超参数的方法有时候被称为hold out方法,因为validation_data是从training_data训练集中留出或者“拿出”的一部分。

 

规范化

L2规范化(也称为权重衰减)(L2 regularization)

L2规范化的想法是增加一个额外的项到代价函数上,这个项叫做规范化项。下面是规范化的交叉熵:

其中λ>0可以称为规范化参数,n就是训练集合的大小。(需要注意的是规范化项里面并不包含偏置)

当然对其他的代价函数也可以进行规范化,例如二次代价函数:

两者都可以写成这样:

其中C0是原始的代价函数。

规范化可以当作一种寻找小的权重最小化原始代价函数之间的折中。这两部分之间相对的重要性由λ的值来控制:λ越小,就越偏向于最小化原始代价函数,反之,倾向于小的权重

将随机梯度下降算法应用在一个规范化的神经网络上

对规范化的损失函数求偏导数:

可以看到偏置的梯度下降学习规则不会发生变化:

而权重的学习规则变成了:

这和正常的梯度下降学习规则相同,增加了一个因子重新调整了权重w。这种调整有时候被称为权重衰减

那么,随机梯度下降的权重的规范化学习规则就变成了:

偏置的规范化学习规则不变:

规范化让网络具有更好的泛化能力,显著减轻了过度拟合的影响。

备注:无规范化的网络会偶然被限制住,明显困在了代价函数的局部最优出。结果就是不同的运行会给出相差很大的结果。对比来看,规范化的网络能够提供更容易复制的结果。

为何规范化可以帮助减轻过度拟合

小的权重在某种程度上,意味着更低的复杂性,也就是对数据给出了一种更简单却更强大的解释,因此应该优先选择。

我们除非不得已应该追随更简单的解释。当我们找到一个简单模型似乎能够解释很多数据样本的时候,我们都会激动的认为发现了规律。模型必须表现出某些关于现象的内在真理。而线性模型加噪声肯定比多项式更加可能。我们会认为线性模型加噪声表达出了一些潜在的真理,而多项式仅仅是学习到了局部噪声的影响效果。所以尽管是多项式对于这些特定的数据点表现的很好。模型最终会在未知数据的泛化上面出现问题,所以噪声线性模型具有更大的预测能力。对于神经网络,更小的权重意味着网络的行为不会因为我们改变了一个输入而改变太大。这会让规范化网络学习局部噪声更加困难。相对的规范化网络学习去对整个训练集中经常出现的证据进行反映。对比看,大权重的网络可能会因为输入的微小改变而产生比较大的行为改变。所以一个无规范化的网络可以使用大的权重学习包含训练数据中的噪声的大量信息的复杂模型

总结:规范化网络受限于根据训练数据中常见的模式来构造相对简单的模型,而能够抵抗训练数据中的噪声的特性的影响。

所以规范化的神经网络往往比非规范化的神经网络的泛化能力更强。

在日常生活中,我们人类在泛化上表现很好。给一个儿童几幅大象的图片,他就能快速的学会认识其他的大象。当然他们也会偶尔搞错,很可能将一只犀牛误认为大象,但是一般来说这个过程会相当的准确。所以我们有一个系统---人的大脑---拥有超大量的自由变量。在受到仅仅少量的训练图像后,系统学会了在其他图像的推广。某种程度上我们大脑的规范化做的特别好!怎么做到的?现在还不得而知。我们期望若干年后,我们能够发展出更加强大的技术来规范化神经网络,最终这些技术会让神经网络甚至在小的训练集上也能学到强大的泛化能力。

规范化的其他技术

L1规范化(L1 regularization):这个方法是在为规范化的代价函数上加上一个权重绝对值的和:

对上面的式子求导:

sgn(w)表示w是正数时为+1,而w为负数时是-1。

对L1规范化的网络进行更新的规则就是:

对比L2规范化的更新规则:

在两种情况下,规范化都惩罚大的权重,但缩小权重的方式不同。在L1规范化中,权重通过一个向量向0进行缩小。在L2规范化中,权重通过一个和w成比例的量进行缩小的

所以,当一个特定的权重绝对值|w|很大时L1规范化的权重缩小的比L2规范化要小的多。相反,当一个特定的权重绝对值|w|很小时L1规范化的权重缩小的比L2规范化大的多。

最终结果就是:L1规范化倾向于聚集网络的权重在相对少量的高重要度连接上,而其他权重就会被驱使向0接近。

弃权(Dropout)

假设我们尝试训练一个神经网络:

假设我们有一个训练数据x和对应的目标输出y。通常我们会通过在网络中前向传播x,然后进行反向传播来确定对梯度的贡献。使用dropout时这个过程就改了。我们会从随机(这只是临时的)地删除网络中的一半隐藏神经元开始,同时让输入层和输出层的神经元保持不变。再次之后我们会得到最终如下线条所示的网络:

我们前向传播输入x,通过修改后的网络,然后反向传播结果,同样通过这个修改后的网络。在一个小批量数据小批量的若干样本上进行这些步骤后,我们对有关的权重和偏置进行更新。然后重复这个过程:首先重置弃权的神经元;然后选择一个新的随机的隐藏神经元的子集进行删除;估计对一个不同的小批量数据的梯度;然后更新权重和偏置;通过不断的重复,我们的网络会学到一个权重和偏置的集合。当然,这些权重和偏置也是在一半的隐藏神经元被弃权的情形下学到的。当我们实际运行整个网络时,是指两倍的隐藏神经元将会被激活。为了补偿这个,我们将从隐藏神经元出去的权重减半。

当我们弃权掉不同的神经元集合时,有点像我们在训练不同的神经网络。所以,弃权过程就如同大量不同网络的效果的平均那样。不同的网络会以不同的方式过度拟合,所以,弃权过的网络的效果会减轻过度拟合

人为扩展训练数据(Artificially expanding the training data

通过实验我们会发现分类准确率在使用更多的训练数据时提升了很大,而且提升会随着更多的数据而不断增加。这表明如果我们使用大量更多的训练数据,可能会得到更好的性能。获取更多的训练样本其实是很好的想法。不幸的是,这个方法的代价很大,在实践中常常是很难达到的。不过还有一种方法能够获得类似的效果,那就是人为扩展训练数据

例如我们使用一个5的mnist训练图像,

将其旋转,比如说15°:

这还是被设别为同样的数字的。但是在像素层级这和任何一幅在mnist训练数据中的图像都不相同。所以将这样的样本加入到训练数据中是很可能帮助我们的网络学会更多如何分类数字。而且,显然我们不限于只增加这幅图像。我们可以在所有的mnist训练样本上通过很多小的旋转扩展训练数据,然后使用扩展后的训练数据来提升我们网络的性能。当然不只是旋转,我们还可以通过转换,扭曲图像来扩展训练数据。

这个想法的变化形式也可以用在提升手写数字识别之外不同学习任务上的性能。一般就是通过应用反映真实世界变化的操作来扩展训练数据

 

posted @ 2017-03-15 13:55  zhoulixue  阅读(249)  评论(0编辑  收藏  举报