冯蓉珍 翟高粤
摘 要:在深度学习和机器学习的各种模型训练过程中,在训练数据不够多时,自己常常会遇到的问题就是过拟合(overfitting),过拟合就是模型过度接近训练的数据,使得模型的泛化能力降低,泛化能力降低表现為模型在训练集上测试的误差很低,但是真正在验证集上测试时却发现误差很大。过拟合的模型不是我们想要的模型,本文先简单介绍过拟合的概念和产生的原因,并提出几种对模型进行优化的方法,从而提高其泛化性能,使其在测试时模型表现更好。
关键词:机器学习;过拟合;正则化;Dropout;数据增强
机器学习的主要目的是从训练集上学习到数据的真实模型,从而能够在未见过的测试集上也能够表现良好,机器学习的这种能力叫做泛化能力。通常来说,训练集和测试集都采样自某个相同的数据分布p(x)。采样到的样本是相互独立的,但是又来自于相同的分布,这种假设叫做独立同分布假设(Independent Identical Distribution assumption,简称i.i.d.)。
模型的表达能力,也称之为模型的容量(Capacity)。当模型的表达能力偏弱时,比如单一线性层,它只能学习到线性模型,无法良好地逼近非线性模型(欠拟合);但模型的表达能力过强时,它就有可能把训练集的噪声模态也学到(过拟合),导致在测试集上面表现不佳的现象(泛化能力偏弱)。因此针对不同的网络模型和任务,设计合适容量的模型算法才能取得较好的泛化性能。
一、过拟合和欠拟合
(一)模型的容量
模型的容量或表达能力,是指模型拟合复杂函数的能力。一种体现模型容量的指标为模型的假设空间(Hypothesis Space)大小,即模型可以表示的函数集的大小。假设空间越大越完备,从假设空间中搜索出逼近真实模型的函数也就越有可能;反之,如果假设空间非常受限,就很难从中找到逼近真实模型的函数。
但是过大的假设空间无疑会增加搜索难度和计算代价。实际上,在有限的计算资源的约束下,较大的假设空间并不一定能搜索出更好的函数模型。同时由于观测误差的存在,较大的假设空间中可能包含了大量表达能力过强的函数,能够将训练样本的观测误差也学习进来,从而伤害了模型的泛化能力。因此挑选合适容量的学习模型是一个很大的难题。
(二)过拟合和欠拟合
由于真实数据的分布往往是未知而且复杂的,无法推断出其分布函数的类型和相关参数,因此人们在选择学习模型的容量时,往往会根据经验值选择稍大的模型容量。但模型的容量过大时,有可能出现在训练集上表现较好,但是测试集上表现较差的现象,如图1红色竖线右边区域所示;当模型容量过小时,有可能出现在训练集和测试集表现皆不佳的现象,如图1红色竖线左边区域所示。
当模型的容量过大时,网络模型除了学习到训练集数据的模态之外,还把额外的观测误差也学习进来,导致学习的模型在训练集上面表现较好,但是在未见的样本上表现不佳,也就是模型泛化能力偏弱,我们把这种现象叫作过拟合(Overfitting)。当模型的容量过小时,模型不能够很好地学习到训练集数据的模态,导致训练集上表现不佳,同时在未见的样本上表现也不佳,我们把这种现象叫作欠拟合(Underfitting)。
二、过拟合优化模型的设计
为了验证不同模型对过拟合的影响程度,首先把数据集划分为训练集和测试集,但为了挑选模型超参数和检测过拟合现象,一般需要将原来的训练集再次切分为新的训练集和验证集。训练集用于训练模型参数,测试集用于测试模型的泛化能力,测试集中的样本不能参与模型的训练,防止模型“记忆”住数据的特征,损害模型的泛化能力。训练集和测试集都是采样自相同的数据分布,比如MNIST手写数字图片集共有7万张样本图片,其中6万张图片用做训练集,余下的1万张图片用于测试集。训练集与测试集的分配比例可以由用户自行定义,比如80%的数据用于训练,剩下的20%用于测试。当数据集规模偏小时,为了测试集能够比较准确地测试出模型的泛化能力,可以适当增加测试集的比例。
(一)模型的设计
通过验证集可以判断网络模型是否过拟合或者欠拟合,从而为调整网络模型的容量提供判断依据。对于神经网络来说,网络的层数和参数量是网络容量很重要的参考指标,通过减少网络的层数,并减少每层中网络参数量的规模,可以有效降低网络的容量。反之,如果发现模型欠拟合,需要增大网络的容量,可以通过增加层数,增大每层的参数量等方式实现。
(二)正则化
通过设计不同层数、大小的网络模型可以为优化算法提供初始的函数假设空间,但是模型的实际容量可以随着网络参数的优化更新而产生变化。以多项式函数模型为例:
上述模型的容量可以通过n简单衡量。在训练的过程中,如果网络参数βk+1,…,βn均为 0,那么网络的实际容量退化到k次多项式的函数容量。因此,通过限制网络参数的稀疏性,可以来约束网络的实际容量。这种约束一般通过在损失函数上添加额外的参数稀疏性惩罚项实现,在未加约束之前的优化目标是
对模型的参数添加额外的约束后,优化的目标变为
其中Ω(θ)表示对网络参数θ的稀疏性约束函数。一般地,参数θ的稀疏性约束通过约束参数θ的L范数实现,即
其中‖θi‖l表示参数θi的l范数。
新的优化目标除了要最小化原来的损失函数(x,y)之外,还需要约束网络参数的稀疏性Ω(θ)),优化算法会在降低(x,y)的同时,尽可能地迫使网络参数θi变得稀疏,它们之间的权重关系通过超参数λ来平衡。较大的λ意味着网络的稀疏性更重要;较小的λ则意味着网络的训练误差更重要。通过选择合适的λ超参数,可以获得较好的训练性能,同时保证网络的稀疏性,从而获得不错的泛化能力。常用的正则化方式有L0、L1、L2 则化。本文这里不做详细介绍。
(三)Dropout
2012年,Hinton等人在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中使用了Dropout方法来提高模型性能。Dropout通过随机断开神经网络的连接,减少每次训练时实际参与计算的模型的参数量;但是在测试时,Dropou会恢复所有的连接,保证模型测试时获得最好的性能。
图2是全连接层网络在某次前向计算时连接状况的示意图。图(a)是标准的全连接神经网络,当前节點与前一层的所有输入节点相连。在添加了Dropout功能的网络层中,如图(b)所示,每条连接是否断开符合某种预设的概率分布,如断开概率为ρ的伯努利分布。图(b)中的显示了某次具体的采样结果,虚线代表了采样结果为断开的连接线,实线代表了采样结果不断开的连接线。
实验结果显示,在不添加Dropout层时,网络模型与之前观测的结果一样,出现了明显的过拟合现象;随着Dropout层的增加,网络模型训练时的实际容量减少,泛化能力变强。
(四)数据增强
除了上述介绍的方式可以有效检测和抑制过拟合现象之外,增加数据集规模是解决过拟合最重要的途径。但是收集样本数据和标签往往是代价昂贵的,在有限的数据集上,通过数据增强技术可以增加训练的样本数量,获得一定程度上的性能提升。数据增强(Data Augmentation)是指在维持样本标签不变的条件下,根据先验知识改变样本的特征,使得新产生的样本也符合或者近似符合数据的真实分布。
以图片数据为例,我们知道旋转、缩放、平移、裁剪、改变视角、遮挡某局部区域都不会改变图片的主体类别标签,因此针对图片数据,可以有旋转、缩放、平移、裁剪、改变视角、遮挡某局部区域多种数据增强方式。通过这些增强方式的处理可以增加训练样本的数量,从而使过拟合问题得到一定的优化和改善。
三、结论
现代深度神经网络中过拟合现象非常容易出现,主要是因为神经网络的表达能力非常强,训练集样本数不够很容易就出现了神经网络的容量偏大的现象,通过对模型采取上述防止过拟合的方法,实验结果显示,网络的层数和参数量是过拟合产生的很重要的参考指标,通过减少网络的层数,并减少每层中网络参数量的规模,可以有效降低网络的容量。反之,如果发现模型欠拟合,需要增大网络的容量,可以通过增加层数,增大每层的参数量等方式实现。防止过拟合具体的方法有正则化、Dropout和数据增强等。
参考文献:
[1] 张鹤凝等.基于seq2seq模型的心理咨询对话系统的研究[J],信息记录材料,2021(3).
[2] 董波等. 机器学习在解决过拟合现象中的作用[J],心理科学,2021(3).
[3] 闫涛. 深度学习算法实践 [M]. 电子工业出版社出版社,2020.
[4] 李恒基. 基于深度学习过拟合现象的分析[J],中国科技信息,2020(7).