2.4 神经网络的优化方法
2.4.1 过拟合与规范化
物理学家费米曾说过,如果有四个参数,我可以模拟一头大象,而如果有五个参数,我还能让他卷鼻子。这里其实是说拥有大量的自由参数的模型能够描述特别神奇的现象。但是这样的模型能够很好的拟合已有的数据,但并不表示这是一个好的模型。因为这可能只是因为模型中有足够的自由度使得它可以描述几乎所有给定大小的数据集,但并没有真正洞察现象的本质。机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化(generalization)。
当我们使用机器学习算法时,我们不会提前固定参数,然后采样得到两个数据集。我们采样得到训练集,然后挑选参数去降低训练集误差,然后采样得到测试集。在这个过程中,测试误差期望会大于或等于训练误差期望。以下两点是用来评判一个机器学习算法好坏的因素:
1、对于原始输入数据训练误差较小。
2、训练模型产生的误差和测试模型产生的误差,这两者的差别要小。
这两个因素对应机器学习的两个主要挑战,即欠拟合和过拟合。欠拟合是指模型在训练集上学习时与标签数据产生的误差较大。过拟合的意思是指训练模型产生的误差和测试模型产生的误差,这两者的差别同样较大。
增加训练样本的数量是一种减轻过度拟合的⽅法。模型的容量代表了模型本身拟合各种函数的能力。一种可行的方式就是降低网络的规模。然而大的网络拥有比小网络更强的拟合能力,我们不能背离这个原则。
幸运的是,还有其他的技术能够缓解过度拟合,即使只有⼀个固定的网络和固定的训练集合,这种技术就是规范化。本节将会详细介绍L2规范化。L2作为一种最为常用的规范化方法,思路是在代价函数上增加额外的规范化项。公式(2-12)是规范化的代价函数:
(2-12)
其中第一项就是常规的交叉熵的表达式。第二项就是规范项,形式是权重的平方和。规范项中 是参数。下面讨论 的选择策略。
公式(2-13)和(2-14)是一个规范化的确减轻过度拟合的例子。首先需要弄清楚如何将随机梯度下降算法应用在规范化网络上。特别地,我们需要知道如何计算对网络中所有权重和偏置的偏导数,对方称(3-1)进⾏求偏导数得:
(2-13)
(2-14)
梯度可以通过反向传播计算,正如上一章中描述的那样。所以其实计算规范化的代价函数的梯度是很简单的:仅仅需要反向传播,然后加上 得到所有权重的偏导数。在加入了规范化项之后,权重的学习规则发生了变化:
(2-15)
由公式(2-15)得出,正则化因子 更新了权重w。加入正则化的更新使得权重变小。这样会导致权重会不断下降到0。但是实际不是这样的,因为如果在原始代价函数中造成下降的话其他的项可能会让权重增加。这就是梯度下降工作的原理。为什么规范化能够减小过拟合?通常的解释是,小的权重在某种程度上意味着更低的复杂性。小权重使得网络的行为更加健壮,不会因为随机改变一个输入而随之巨变。这只是一个实验事实。另一种解释是提高机器学习模型泛化的现代思想遵循一个简约原则,现在广泛被称为“奥卡姆剃刀”。该原则指出,在同样能够解释已知观测现象的假设中,我们应该挑选最简单的那个。
2.4.2 Dropout
Dropout (Srivastava et al., 2014) 提供了正则化的另一种方法,计算方便但功能强大。在一种近似的理论观点下,Dropout可以被认为是集成大量深层神经网络的实用方法。算法涉及训练多个模型,并在每个测试样本上评估多个模型。假如每个模型都很大时,这种操作很难行得通,显然训练和评估大网络代价太大。通常我们只能集成五至十个神经网络,超过这个数量就会迅速变得难以处理。Dropout机制模拟了一个简单的近似,使得训练和评估大量神经网络变得可能。
具体而言,Dropout训练的集成包括所有从基础网络除去非输出单元后形成的子网络,如图3-3所示。最先进的神经网络基于一系列仿射变换和非线性变换,只需将一些单元的输出乘以零就能有效地删除一个单元。这个过程需要对模型(如径向基函数网络,单元的状态和参考值之间存在一定区别)进行一些修改。为了简单起见,我们在这里提出乘零的简单Dropout算法,但是它被简单修改后,可以与从网络中移除单元的其他操作结合使用。我们定义k个不同的模型,从训练集有放回采样构造k个不同的数据集,然后在训练集i 上训练模型i。Dropout的目标是在指数级数量的神经网络上近似这个过程。具体来说,在训练中使用Dropout时,我们会使用基于小批量产生较小步长的学习算法,如随机梯度下降等。我们每次在小批量中加载一个样本,然后随机抽样应用于网络中所有输入和隐藏单元的不同二值掩码。对于每个单元,掩码是独立采样的。掩码值为1 的采样概率(导致包含一个单元)是训练开始前一个固定的超参数。它不是模型当前参数值或输入样本的函数。通常在每一个小批量训练的神经网络中,一个输入单元被包括的概率为0.8,一个隐藏单元被包括的概率为0.5。然后,我们运行和之前一样的前向传播、反向传播以及学习更新。
我们来描述一下弃权基本的工作机制。特别地,假设我们有一个训练数据x和对应的目标输出y。通常我们会通过在网络中前向传播x ,然后进行反向传播来确定对梯度的贡献。使用Dropout技术,这个过程就改了。Dropout机制会临时屏蔽掉每层中的一半数量的单元,并且保持其他单元不变。在此之后我们会得到最终如图2-14右边的网络。注意那些被弃权的神经元,即那些临时被删除的神经元,在图中被标为虚线。
我们前向传播输入x,通过修改后的网络,然后反向传播结果,同样通过这个修改后的网络。在一个小批量数据的若干样本上进行这些步骤后,我们对有关的权重和偏置进行更新。然后重复这个过程,通过不断地重复,我们的网络会学到一个权重和偏置的集合。当然,这些权重和偏置也是在一半的隐藏神经元被弃权的情形下学到的。当我们实际运行整个网络时,是指两倍的隐藏神经元将会被激活。为了补偿这个,我们将从隐藏神经元出去的权重减半。
这个弃权过程可能看起来奇怪,像是临时安排的。为什么我们会指望这样的方法能够进行规范化呢?想象一下标准的,没有弃权的训练方式。特别地,想象我们训练不同的网络,都使用同一个训练数据。网络可能不是从同一初始状态开始的,最终的结果也会有一些差异。出现这种情况时,我们可以使用一些平均或者投票的方式来确定接受哪个输出。例如,如果我们训练了五个网络,其中三个把一个数字分类成“3”,那很可能它就是“3”。另外两个可能就犯了错误。原因在于不同的模型因为各自的原因产生了过度拟合,将这些过拟合现象平均一下可能会帮助消除过度拟合问题。换句话说,如果将网络看做一个预测模型,弃权就可以在丢失信息的情况下仍保持一定的泛化性。Dropout和规范化有不少相似之处,这两种方法都是让模型学习小权重。Dropout技术已经成功应用在提升神经网络性能上。对我们来说,特别感兴趣的是他们应用弃权在大部分图像分类任务上,并使用了一个和我们之前介绍的那种普通的前向神经网络。的组合将其提高到98.7%。类似重要的结果在其他不同的任务上也取得了一定的成效,包括图像和语音识别、自然语言处理。弃权技术在训练大规模深度网络时尤其有用,这样的网络中过度拟合问题经常出现。
图2-14 全连接(左)与dropout(右)模型示意图
2.4.3 消失的梯度问题
一个深度网络可以使用隐藏层构建出多层网络。利用网络进行图像识别的研究,那么第一层识别像素点,第二层在像素的基础上增加线条,第三层将识别更加复杂的形状。多层抽象可以解决复杂问题,深层网络有更好的拟合能力。通常使用反向传播来训练网络会产生一系列的问题,尤其是前后层学习速度不一致的情况多次出现。那么我们就要深入理解是什么原因使得深度网络训练变得困难。实验表明,网络中不同层的梯度变化差异很大。能够清晰地观察到,后面层的梯度变化较大,先前的层次却在训练时变化很小,甚至没有变化。这种停滞并不是随机出现的,每一次实验都出现这种情况。根本原因是学习速度下降了。
我们继续做实验,构造一个包含两个隐藏层的神经网络,观察每个神经元在学习过程中改变的速度。网络随机初始化,可以观察到的现象是神经元学习的速度差异比较大,而且第二个隐藏层上的神经元基本都比第一个隐藏层上神经元的变化速度大。因此,后面层的神经元学习的更快。如果添加更多的隐藏层,结果还是一样的。
观察结果显示:训练过程中,中间层在反向传播的时候梯度变小了。事实上这种现象并非偶然发生,称为消失的梯度问题。
是什么导致了消失的梯度问题?为了弄清楚这个问题,构建一个有简单的网络,网络有三层,每层只有一个神经元。现在我们来研究一下第一个隐藏层神经元的梯度 ,下面给出具体的表达式:
(2-16)
假如对偏置 进行一个微调 ,这会导致网络中剩下的元素产生一系列的变化。最终会对代价函数产生 的变化,如下所示:
(2-17)
公式(2-16)中除了最后一项,其他是一系列形如 的乘积。S函数导数的图像是在 时达到最大值。标准化初始化网络中的权重保证所有的权重都会满足 。于是发现了梯度消失的原因: <0.25,最终多个项的乘积后,结果会产生飞速下降。
不稳定的梯度问题本质在于前面层的梯度与后面的梯度直接相关。唯一的方法是让所有的层都以大致相同的速度进行学习,即让所有这些项的乘积都能达到一个平衡。例如上一节讲的几种常见网络都是用了ReLU激活函数,该激活函数能确保各层间大致相同的学习速度。
2.5 本章小结
本章主要介绍神经网络的由来,原理以及结构,并着重介绍了神经网络是如何工作的。然后介绍了在计算机视觉方面大放异彩的卷积神经网络算法,详细讲述了其结构和原理。本章还详细讲述了一些经典的卷积网络结构,最后重点介绍了这些网络中用到的一些改进方法,以及这些改进能带来的效益。