七、改进神经网络的学习方法(3):过拟合及改进方法(正则化、Dropout)

本文深入探讨了神经网络的过拟合问题及其影响,介绍了增大训练数据量、减小网络规模和正则化(L2、L1、Dropout)等改进方法。通过实验,展示了正则化如何有效提升模型的泛化能力,减少过拟合。
摘要由CSDN通过智能技术生成

本博客主要内容为图书《神经网络与深度学习》和National Taiwan University (NTU)林轩田老师的《Machine Learning》的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。

1. 过拟合

  费米曾经表明:有大量自由参数的模型能够描述一个足够宽泛的现象。即使这样的模型与现有的数据吻合得很好,这也不能说它是一个好的模型。这仅仅只能说明,有足够自由度的模型基本上可以描述任何给定大小的数据集,但是它并没有真正地洞察到现象背后的本质。这就会导致该模型在现有的数据上表现得很好,但是却不能普及到新的情况上,这样的现象也就是今天的主角之一——“过拟合”。因此判断一个模型真正好坏的方法,是看其对未知情况的预测能力。

1.1 过拟合带来的问题

  下面让我们举例来突出过拟合问题的严重性。假设我们使用有30个隐藏神经元网络,其中含有23860个特征。但是不用全部的50000个 MINST 图像做训练,而仅仅使用前1000个。用较小的训练集能够使突出泛化的问题。此外,我们依然用交叉熵代价函数来训练模型,学习率为 η=0.5 ,mini-batch 的大小选为10。然而,与之前不同的是,我们将要迭代400次,由于使用了较少的训练实例,所以就要较多的训练次数。

  根据结果,我们能绘制训练集上代价函数随迭代次数的变化情况如图1所示


图1. 训练集上代价函数随迭代次数的变化情况

然而测试集上分类正确率随迭代次数的变化情况如图2所示


图2. 测试集上分类正确率随迭代次数的变化情况

在前200步(未显示)准确率上升到接近百分之82,然后学习的效果就逐渐放缓。最后,在280步附近,分类准确率几乎停止改善,之后的学习仅仅在 这个准确率附近有一些小的随机波动。与上一个图表对比,我们会发现,训练数据的代价函数值是持续下降的。如果我们只关注代价函数,模型似乎一直在“改进”。但测试精度结果表明:此时的改进只是一种错觉。因此称此时的网络是过拟合(overfitting)或过训练(overtraining)的。

  或许你会觉得用训练数据的代价函数和测试数据的分类正确率相互比较不是一个直接比较,那么下面将采用测试集上代价函数随迭代次数的变化情况与训练集上的相比,如图3


图3. 测试集上代价函数随迭代次数的变化情况

从图中可以看到,测试数据的代价在15步前一直在降低,之后它开始变大,然而训练数据的代价是在持续降低的。这是另外一个能够表明我们的模型是过拟合的迹象。

  此时,我们遇到了一个难题,到底哪一个才是发生过拟合的关键点,15步还是280步?解答这个问题首先需要回顾在《四、用简单神经网络识别手写数字(内含代码详解)》中提到的,神经元的输出层是10个神经元,把输出层神经元依次标记为 0 到 9,找到拥有最高的激活值的神经元,将它的标记作为神将网络的结果进行输出。举个例子,如果输出神经元的激活值为 a=[0.1,0.4,0.02,0.04,0.09,0.2,0.05,0.8,0.03,0.009] ,则最后的分类结果为 [0,0,0,0,0,0,0,1,0,0] ;假设实际的期望输出是 [0,0,0,0,0,0,0,1,0,0] ,则代价函数的计算公式如下

C(w,b)=\frac1{2n}\sum_x||y(x)-a||^2\tag{1}\label{1}

而计算正确率是计算分类正确的百分比。所以即使测试数据代价函数增加了,但是未必会改变正确率,所以测试数据的代价只不过是分类精度的附属品。因此,在我们的神经网络中,把280步视为模型开始过拟合的转折点。

  在训练数据的分类精度中也可以看到过拟合的迹象如图4所示


图4. 训练集上代价函数随迭代次数的变化情况

测试集上准确率一直上升到100% 。也就是说,网络能正确分类所有训练图像;而与此同时,测试准确率仅为82.27% 。所以我们的网络只是在学习训练集的特性,而不能完全识别普通的数字。就好像网络仅仅是在记忆训练集,而没有真正理解了数字能够推广到测试集上。

1.2 检测过拟合的方法

  在含有大量权重和偏差参数的神经网络中,过拟合是常常会遇到的问题,因此需要一种可以检测过拟合发生的技术。在实际中常常采用验证集来检测过拟合是否发生而不是采用测试集,这样做的目的主要有以下两点

  • 普遍使用
    通过validation_data来选择不同的超参数(例如训练步数、学习率、最佳网络结构等等)是一个普遍的策略。

  • 防止测试数据过拟合
    如果基于test_data的评估结果设置超参数,有可能我们的网络最后是对test_data过拟合。所以使用验证集检验模型过拟合并找到优秀的参数,在通过训练集评估精度,这样的方法训练出的神经网络往往具有更好的泛化能力,称这种验证数据与测试数据完全分开,并找到优秀参数的方法为分离法(hold out method)

  在确定使用什么样的数据之后就要确定使用什么样的指标来监控模型防止过拟合,从上文中可以看出,带选择的指标有四个,训练数据代价函数、训练数据分类正确率、验证数据代价函数、验证数据分类正确率。其中验证数据代价函数通过前文的分析,其与测试集的分类精度无直接关系且无法判断从哪一点开始过拟合,因此不予采用。其次训练数据代价函数常用来判断训练的速度,收敛情况,因此采用训练数据分类正确率和验证数据分类正确率作为检验模型是否过拟合的指标。在每一 步训练之后,计算validation_data的分类精度。一旦validation_data的分类精度达到饱和,就停止训练,这种策略叫做提前终止(early stopping)。然而在实践中,我们并不能立即知道什么时候准确度已经饱和。因为神经网络在训练的过程中有时会停滞一段时间,然后才会接着改善。取而代之,我们在确信精度已经饱和之前会一直训练 。

2. 改进方法

  避免过拟合的方法主要有三种,增大训练数据数量、减小网络规模和正则化技术。

2.1 增大训练数据数量

  正如图5所示,相比使用1000张训练实例,使用50000张训练实例的情况下,测试数据和训练数据的准确率更加接近。特别地,训练数据上最高的分类精度97.86%,仅仅比测试数据的95.53%高出1.53%,而之前有17.73%的差距!


图5. 增大数据量后训练集及测试集随迭代次数的变化情况

虽然过拟合仍然存在,但已经大大降低了。我们的网络能从训练数据更好地泛化到测试数据。一般来说,增加训练数据的数量是降低过拟合的最好方法之一。即便拥有足够的训练数据,要让一个非常庞大的网络过拟合也是比较困难的。不幸的是,训练数据的获取成本太高,因此这通常不是一 个现实的选择。

  因为扩充真实的训练数据是困难的,所以可以认为的扩展训练数据(又称上采样)。如对图像进行小的角度的旋转,除此之外,论文《Best Practices for Convolutional Neural Networks Applied to Visual Document Analysis》 (作者为Patrice Simard,Dave Steinkraus, John Platt , 2003 )中还转换和扭曲图像来扩展训练数据,甚至提出一种为了模仿手部肌肉的随机抖动的特殊的的图像扭曲方法,这些方法都起到了较好的扩充数据的目的。

  所以一般就是通过应用反映真实世界变化的操作来扩展训练数据,这往往是一个机理模型,一个可以被很好解释的模型。例如要构建一个 神经网络来进行语音识别,甚至可以在有背景噪声的情况下识别语音,即通过增加背景噪声来扩展训练数据,同样能够对其进行加速和减速来获得相应的扩展数据。 所以这是另外的一些扩展训练数据的方法。这些技术并不总是有用~——~例如,其实与其在数据中加入噪声倒不如先对数据进行噪声的清理,这样可能更加有效。

  我们将神经网络与SVM通过实验进行对比,图6是SVM模型和神经网络的性能随着训练数据集的大小变化的情况


图6 . SVM模型和神经网络的性能随着训练数据集的大小变化的情况

从上面的图像可以发现两条明显的结论,首先神经网络在每个训练规模下性能都超过了SVM;其次更多的训练数据可以补偿不同的机器学习算法的差距。所以需要记住的特别是在实际应用中,我们想要的是更好的算法和更好的训练数据。寻找更好的算法很好,不过需要确保你在此过程中,没有放弃对更多更好的数据的追求。

2.2 减小网络规模

  我们并不情愿减小规模,因为大型网络比小型网络有更大的潜力。

2.3 正则化

  对于固定的网络和固定的训练数据,也有避免过拟合的方法,这就是所谓的正则化(regularization)技术。在本小节将描述4种正则化技术,其中最常见的是权重衰减(weight decay)或叫 L2 正则化(L2 regularization),除此之外还有 L1 正则化、弃权(Dropout)。

2.3.1 L2 正则化

  • L2 正则化的定义

  把增加了 L2 正则化项的代价函数写成如等式 (2) 的形式

C=C0+λ2nww2
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值