用神经网络模型依然存在一些难点问题:
(1) 优化问题
神经网络的损失函数是一个
非凸函数
,找到全局最优解通常比较困难;参数通常非常多,训练数据也比较大;存在梯度消失或爆
炸问题,导致基于梯度的优化方法经常失效。
(2) 泛化问题:
很容易在训练集上产生过拟合,因此在训练深度神经网络时,同时也需要通过一定的正则化方法来改进网络的泛化能力。
本章从
网络优化
和
网络正则化
两个方面来介绍这些方法.在网络优化方面,介绍一些常用的优化算法、参数初始化方法、数据预处理方法、逐层归一化方法和超参数优化方法.在网络正则化方面,介绍一些提高网络泛化能力的方法,包括ℓ1 和ℓ2 正则化、权重衰减、提前停止、丢弃法、数据增强和标签平滑。
7.1 网络优化
网络优化是指寻找一个神经网络模型来使得
经验(或结构)风险最小化
的过程,包括模型选择以及参数学习等。
7.1.1 网络结构多样性
神经网络的种类非常多,不同网络的结构也非常不同,很难找到一种通用的优化方法.不同优化方法在不同网络结构上的表现也有比较大的差异。
7.1.2 高维变量的非凸优化
基于梯度下降的优化方法会
陷入局部最优点
,因此在低维空间中非凸优化的主要难点是如何选择初始化参数和逃离局部最优点。
鞍点
在高维空间中,非凸优化的难点并不在于如何逃离局部最优点,而是如何逃离鞍点。鞍点:鞍点的梯度是0,但是在一些维度上是最高点,在另一些维度上是最低点。
在高维空间中,
局部最小值
(Local Minima)要求在每一维度上都是最低点,这种概率非常低。也就是说驻点为局部最小值可能性非常小,
在高维空间中大部分驻点都是鞍点
。基于梯度下降的优化方法会在鞍点附近接近于停滞,很难从这些鞍点中逃离,而
随机梯度下降
对于高维空间中的非凸优化问题十分重要,通过在梯度方向上引入随机性,可以有效地逃离鞍点。
平坦最小值
深度神经网络的参数非常多、有一定的冗余性,这使得每单个参数对最终损失的影响都比较小,因此会导致损失函数在局部最小解附近通常是一个平坦的区域,称为平坦最小值。
在一个平坦最小值的邻域内,所有点对应的训练损失都比较接近,因此,不需要精确地找到一个局部最小解,只要在一个局部最小解的邻域内就足够了。当一个模型收敛到一个平坦的局部最小值时,其鲁棒性会更好,即微小的参数变动不会剧烈影响模型能力。
局部最小解的等价性
局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失。
7.1.3 神经网络优化的改善方法
改善神经网络优化的目标是找到更好的
局部最小值
和
提高优化效率
。
(1) 使用
更有效的优化算法
(第7.2节)来提高梯度下降优化方法的效率和稳定性。
(2) 使用
更好的参数初始化方法
(第7.3节)、数据预处理方法(第7.4节)来提高优化效率。
(3) 修改网络结构来得到
更好的优化地形
(逐层归一化(第7.5节))。
(4) 使用
更好的超参数优化方法
(第7.6节)。
7.2 优化算法
目前,深度神经网络的参数学习主要是通过梯度下降法来寻找一组可以最小化结构风险的参数。可以分为:
批量梯度下降
、
随机梯度下降
以及
小批量梯度下降
三种形式。
在训练深度神经网络时,
训练数据的规模通常都比较大
;大规模训练集中的数据通常会非常冗余,也
没有必要在整个训练集上计算梯度
,因此,在训练深度神经网络时,经常使用
小批量梯度下降法
。
7.2.1 小批量梯度下降
第𝑡 次迭代(Iteration)时损失函数关于参数𝜃 的偏导数为:
其中ℒ(⋅)为可微分的损失函数,𝐾 称为批量大小(Batch Size)。
使用梯度下降来更新参数,其中𝛼 > 0为学习率
从上面公式可以看出,影响小批量梯度下降法的主要因素有:1)批量大小𝐾、2)学习率𝛼、3)梯度估计。
7.2.2 批量大小选择
批量大小越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率。而批量大小较小时,需要设置较小的学习率,否则模型会不收敛。
学习率通常要随着批量大小的增大而相应地增大.
一个简单有效的方法是
线性缩放规则
,当批量大小增加 𝑚倍时,学习率也增加 𝑚 倍。
迭代(Iteration):每一次小批量更新为一次迭代;
回合(Epoch):所有训练集的样本更新一遍为一个回合。
批量越大,越有可能收敛到尖锐最小值;批量越小,越有可能收敛到平坦最小值。
7.2.3 学习率调整
学习率是神经网络优化时的重要超参数。在梯度下降法中,学习率𝛼的取值非常关键,如果
过大
就
不会收敛
,如果
过小
则收敛
速度太慢
。常用的学习率调整方法包括
学习率衰减
、
学习率预热
、
周期性学习率调整
以及一些自适应调整学习率的方法,比如
AdaGrad、RMSprop、AdaDelta
等.自适应学习率方法可以针对每个参数设置不同的学习率。
7.2.3.1 学习率衰减
从经验上看,学习率在
一开始要保持大
些来保证收敛速度,
在收敛到最优点附近时要小些
以避免来回振荡。比较简单的学习率调整可以通过
学习率衰减
(Learning Rate Decay)的方式来实现,也称为学习率退火(Learning Rate Annealing)。
假设初始化学习率为𝛼0,在第𝑡 次迭代时的学习率𝛼𝑡.常见的衰减方法有以下几种:
分段常数衰减
即每经过 𝑇1, 𝑇2, ⋯ , 𝑇𝑚 次迭代将学习率衰减为原来的 𝛽1, 𝛽2, ⋯ , 𝛽𝑚 倍。分段常数衰减也称为
阶梯衰减
(Step Decay)。
逆时衰减
其中𝛽 为衰减率。
指数衰减
其中𝛽 < 1为衰减率
自然指数衰减
其中𝛽 为衰减率。
余弦衰减
其中𝑇 为总的迭代次数。
7.2.3.2 学习率预热
在刚开始训练时,由于参数是随机初始化的,梯度往往也比较大,再加上比较大的初始学习率,会使得训练不稳定。
为了提高训练稳定性,我们可以在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法称为
学习率预热
。
一个常用的学习率预热方法是
逐渐预热
:假设预热的迭代次数为𝑇′,初始学习率为𝛼0,在预热过程中,每次更新的学习率为:
当预热过程结束,再选择一种学习率衰减方法来逐渐降低学习率.
7.2.3.3 周期性学习率调整
为了使得梯度下降法能够逃离鞍点或尖锐最小值,一种经验性的方式是在训练过程中
周期性地
增大学习率。当参数处于尖锐最小值附近时,增大学习率有助于逃离尖锐最小值;当参数处于平坦最小值附近时,增大学习率依然有可能在该平坦最小值的吸引域(Basin of Attraction)内。
1、循环学习率
即让学习率在一个区间内周期性地增大和缩小。通常可以使用
线性缩放
来调整学习率,称为
三角循环学习率
假设每个循环周期的长度相等都为 2Δ𝑇,其中前 Δ𝑇 步为学习率线性增大阶段,后Δ𝑇 步为学习率线性缩小阶段.在第𝑡 次迭代时,其所在的循环周期数𝑚为:
其中⌊⋅⌋表示“向下取整”函数.第𝑡 次迭代的学习率为:
2、带热重启的随机梯度下降
是用
热重启
方式来替代学习率衰减的方法。
学习率每间隔一定周期后
重新初始化
为某个预先设定值,然后逐渐衰减。每次重启后模型参数不是从头开始优化,而是从重启前的参数基础上继续优化。
第𝑡 次迭代的学习率为
第 𝑚 次重启在上次重启开始第 𝑇𝑚 个回合后进行,𝑇𝑚 称为
重启周期
。𝑇𝑐𝑢𝑟 为从上次重启之后的回合(Epoch)数。𝑇𝑐𝑢𝑟 可以取小数。这样可以在一个回合内部进行学习率衰减.重启周期𝑇𝑚 可以随着重启次数逐渐增加。
7.2.3.4 AdaGrad算法
由于每个参数的维度上收敛速度都不相同,因此根据
不同参数
的收敛情况
分别设置学习率
。
AdaGrad算法
是借鉴ℓ2 正则化的思想,每次迭代时自适应地调整每个参数的学习率。
在第𝑡 次迭代时,先计算每个参数梯度平方的累计值
其中⊙为按元素乘积,𝒈𝜏 是第𝜏次迭代时的梯度。
AdaGrad算法的参数更新差值为:
其中 𝛼 是初始的学习率。
在 AdaGrad 算法中,如果某个参数的偏导数累积比较大,其学习率相对较小;相反,如果其偏导数累积较小,其学习率相对较大.但整体是随着迭代次数的增加,学习率逐渐缩小。
缺点
:在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。
7.2.3.5 RMSprop算法
RMSprop算法是一种自适应学习率的方法。可以在有些情况下避免 AdaGrad 算法中学习率不断单调下降以至于过早衰减的缺点。
RMSprop算法首先计算每次迭代梯度𝒈𝑡 平方的指数衰减移动平均:
其中𝛽 为衰减率,一般取值为0.9。
RMSprop算法的参数更新差值为:
其中𝛼是初始的学习率。
𝐺𝑡 的计算变成了指数衰减移动平均。在迭代过程中,每个参数的学习率并不是呈衰减趋势,既可以变小也可以变大。
7.2.3.6 AdaDelta算法
AdaDelta 算法通过梯度平方的指数衰减移动平均来调整学习率,AdaDelta算法还引入了每次参数更新差值Δ𝜃的平方的指数衰减权移动平均。
第𝑡 次迭代时,参数更新差值Δ𝜃 的平方的指数衰减权移动平均为:
其中𝛽1 为衰减率.此时Δ𝜃𝑡 还未知,因此只能计算到Δ𝑋𝑡−1。
AdaDelta算法的参数更新差值为:
其中𝐺𝑡 的计算方式和RMSprop算法一样。Δ𝑋2𝑡−1 为参数更新差值Δ𝜃 的指数衰减权移动平均。
7.2.4 梯度估计修正
在随机(小批量)梯度下降法中,如果每次选取样本数量比较小,损失会呈现振荡的方式下降。也就是说,随机梯度下降方法中每次迭代的
梯度估计
和整个训练集上的最优梯度并不一致,具有一定的
随机性
。
一种有效地缓解梯度估计随机性的方式是通过使用
最近一段时间内的平均梯度
来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度。
7.2.4.1 动量法
动量法是用
之前积累动量
来替代真正的梯度。每次迭代的梯度可以看作加速度。
实际的参数更新方向Δ𝜃𝑡 为上一步的参数更新方向Δ𝜃𝑡−1 和当前梯度的反方向−𝒈𝑡 的叠加。
在第𝑡 次迭代时,计算负梯度的“加权移动平均”作为参数的更新方向:
其中𝜌为动量因子,通常设为0.9,𝛼为学习率。
每个参数的实际更新差值取决于最近一段时间内梯度的加权平均值。当某个参数在最近一段时间内的
梯度方向不一致时
,其真实的
参数更新幅度变小
;相反,当在最近一段时间内的
梯度方向都一致时
,其真实的
参数更新幅度变大
,起到加速作用。一般而言,在迭代初期,梯度方向都比较一致,在迭代后期,梯度方向会不一致。
7.2.4.2 Nesterov加速梯度
Nesterov 加速梯度是一种对动量法的改进,也称为Nesterov动量法。
在动量法中,参数更新可分为两步:
其中梯度𝒈𝑡 为点𝜃𝑡−1 上的梯度,不太合理,更合理的更新方向应该为𝜃̂上的梯度。
其中𝔤𝑡(𝜃𝑡−1 + 𝜌Δ𝜃𝑡−1)表示损失函数在点𝜃 = 𝜃 ̂𝑡−1 + 𝜌Δ𝜃𝑡−1 上的偏导数。
7.2.4.3 Adam算法
Adam算法可以看作动量法和 RMSprop 算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率。
Adam 算法一方面计算梯度平方 g2𝑡 的指数加权平均(和 RMSprop 算法类似),另一方面计算梯度g𝑡 的指数加权平均(和动量法类似)。
其中𝛽1 和𝛽2 分别为两个移动平均的衰减率,通常取值为𝛽1 = 0.9, 𝛽2 = 0.99。
当𝛽1 和𝛽2 都接近于1时,偏差会很大.因此,需要对偏差进行修正:
Adam算法的参数更新差值为:
Adam 算法也可引入Nesterov加速梯度,称为
Nadam算法
。
7.2.4.4 梯度截断
在基于梯度下降的优化过程中,如果
梯度突然增大
,用大的梯度更新参数反而会导致其远离最优点(梯度爆炸)。为了避免这种情况,当梯度的模大于一定阈值时,就对梯度进行截断,称为
梯度截断
。
一般截断的方式有以下几种:
(1)按值截断
在第 𝑡 次迭代时,梯度为 𝒈𝑡,给定一个区间 [𝑎, 𝑏],如果一个参数的梯度小于𝑎时,就将其设为𝑎;如果大于𝑏时,就将其设为𝑏。
(2)按模截断
按模截断是将梯度的
模
截断到一个给定的截断阈值𝑏。
截断阈值 𝑏 是一个超参数,也可以根据一段时间内的平均梯度来自动调整。训练过程对阈值 𝑏 并不十分敏感,通常一个小的阈值就可以得到很好的结果。
7.2.5 优化算法小结
本节介绍的几种优化方法大体上可以分为两类:1)调整学习率,使得优化更稳定;2)梯度估计修正,优化训练速度。
7.3 参数初始化
参数初始化的方式通常有以下三种:
(1)
预训练初始化
:不同的参数初始值会收敛到不同的局部最优解。通常情况下,一个已经在大规模数据上训练过的模型可以提供一个好的参数初始值,这种初始化方法称为
预训练初始化
。
(2)
随机初始化
:对每个参数都
随机初始化
。使得不同神经元之间的区分性更好。
如果参数都为 0,在第一遍前向计算时,所有的隐藏层神经元的激活值都相同;在反向传播时,所有权重的更新也都相同,这样会导致隐藏层神经元没有区分性.这种现象也称为
对称权重现象
。
(3)
固定值初始化
:对于一些特殊的参数,我们可以根据经验用一个特殊的固定值来进行初始化。比如偏置。
虽然
预训练初始化
通常具有更好的
收敛性和泛化性
,但是灵活性不够,不能在目标任务上任意地调整网络结构。因此,好的
随机初始化方法
对训练神经网络模型来说依然十分重要。:基于固定方差的参数初始化、基于方差缩放的参数初始化和正交初始化方法。
7.3.1 基于固定方差的参数初始化
一种最简单的随机初始化方法是从一个
固定均值
(通常为 0)和
方差
𝜎2 的分布中采样来生成参数的初始值。基于固定方差的参数初始化方法主要有以下两种:
(1) 高斯分布初始化:使用一个高斯分布𝒩(0, 𝜎2)对每个参数进行随机初始化
(2) 均匀分布初始化:在一个给定的区间[−𝑟, 𝑟]内采用均匀分布来初始化参数。假设随机变量𝑥在区间[𝑎, 𝑏]内均匀分布,则其方差为
因此,若使用区间为 [−𝑟, 𝑟] 的均分分布来采样,并满足 var(𝑥) = 𝜎2 时,则 𝑟的取值为
在基于固定方差的随机初始化方法中,比较关键的是如何设置方差𝜎2.如果参数范围取的
太小
,一是会导致
神经元的输出过小
,经过多层之后信号就慢慢消失了;二是还会使得 Sigmoid 型激活函数丢失非线性的能力。
7.3.2 基于方差缩放的参数初始化
初始化一个深度网络时,为了缓解梯度消失或爆炸问题,我们尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应地调整初始化分布的方差,这类方法称为
方差缩放
。
7.3.2.1 Xavier初始化
假设在一个神经网络中,第 𝑙 层的一个神经元 𝑎(𝑙),其接收前一层的 𝑀𝑙−1 个神经元的输出。
𝑎(𝑙) 的方差为
也就是说,输入信号的方差在经过该神经元后被放大或缩小了𝑀𝑙−1 var(𝑤(𝑙)𝑖)倍,为了使得在经过多层网络后,信号不被过分放大或过分减弱,我们尽可能保持每个神经元的输入和输出的方差一致,令它们相等。
同理,为了使得在反向传播中,误差信号也不被放大或缩小,需要将 𝑤(𝑙)𝑖 的方差保持为
作为折中,同时考虑信号在前向和反向传播中都不被放大或缩小,可以设置
7.3.2.2 He初始化
当第𝑙 层神经元使用ReLU激活函数时,通常有一半的神经元输出为0,因此其分布的方差也近似为使用恒等函数时的一半.这样,只考虑前向传播时,参数𝑤(𝑙)𝑖 的理想方差为
7.3.3 正交初始化
7.4 数据预处理
归一化方法泛指把数据特征转换为相同尺度的方法。比如把数据特征映射到[0, 1]或[−1, 1]区间内。
几种在神经网络中经常使用的归一化方法:
(1)最小最大值归一化:是一种非常简单的归一化方法,通过缩放将每一个特征的取值范围归一到[0, 1]或[−1, 1]之间。
(2)标准化:也叫Z值归一化,来源于统计上的标准分数.将每一个维特征都调整为均值为0,方差为1。
先计算它的均值和方差:
然后,将特征𝑥(𝑛) 减去均值,并除以标准差,得到新的特征值 ̂𝑥(𝑛):
(3)白化:是一种重要的预处理方法,用来降低输入数据特征之间的冗余性。输入数据经过白化处理后,特征之间相关性较低,并且所有特征具有相同的方差.白化的一个主要实现方式是使用**主成分分析(PCA)**方法去除掉各个成分之间的相关性。
7.5 逐层归一化
逐层归一化:对神经网络中
隐藏层的输入
进行归一化,从而使得网络更容易训练。
逐层归一化可以有效提高训练效率的原因:
(1) 更好的尺度不变性;
(2) 更平滑的优化地形。
几种比较常用的逐层归一化方法:批量归一化、层归一化、权重归一化和局部响应归一化。
7.5.1 批量归一化
一般都是对净输入 𝒛(𝑙)进行归一化操作,即使得净输入 𝒛(𝑙) 的分布一致。
一般使用标准化将净输入𝒛(𝑙) 的每一维都归一到标准正态分布。
方差。因为目前主要的优化算法是
基于小批量的随机梯度下降法
,因此,𝒛(𝑙) 的期望和方差通常用当前小批量样本集的均值和方差近似估计。(对一个中间层的
单个神经元
进行归一化操作,要求小批量样本的数量不能太小)K为小批量样本集个数,z(k,l)为第k个样本的净输入。
但是减弱了神经网络的非线性性质,为了使得归一化不对网络的表示能力造成负面影响,可以通过一个附加的缩放和平移变换改变取值区间。
其中 𝜸 和 𝜷 分别代表缩放和平移的参数向量。
批量归一化操作可以看作一个特殊的神经层,加在每一层非线性激活函数之前,即
其中因为批量归一化本身具有平移变换,所以仿射变换 𝑾𝒂(𝑙−1) 不再需要偏置参数。
这里要注意的是,每次小批量样本的均值和方差是净输入𝒛(𝑙) 的函数,而不是常量,因此在计算参数梯度时需要考虑它们的影响。当训练完成时,用整个数据集上的均值𝝁和方差𝝈来分别代替每次小批量样本的均值和方差。
7.5.2 层归一化
层归一化是对一个中间层的
所有神经元
进行归一化。
对于一个深度神经网络,令第𝑙 层神经元的净输入为𝒛(𝑙),其均值和方差为
其中𝑀𝑙 为第𝑙 层神经元的数量。
层归一化定义为:
其中𝜸和𝜷 分别代表缩放和平移的参数向量,和𝒛(𝑙) 维数相同。
循环神经网络中的层归一化
层归一化可以应用在循环神经网络中,对循环神经层进行归一化操作,假设在时刻𝑡,循环神经网络的隐藏层为𝒉𝑡,其层归一化的更新为:
层归一化的循环神经网络可以有效地缓解循环神经层的净输入随着时间慢慢变大或变小,从而导致梯度爆炸或消失。
层归一化和批量归一化整体上是十分类似的,差别在于归一化的方法不同。一般而言,批量归一化是一种更好的选择。当小批量样本数量比较小时,可以选择层归一化。
7.5.3 权重归一化
是对神经网络的
连接权重
进行归一化,通过
再参数化
方法,将连接权重分解为
长度
和
方向
两种参数。
对于
我们将𝑾 再参数化为
7.5.4 局部响应归一化
是一种受生物学启发的归一化方法,通常用在基于卷积的图像处理上。
局部响应归一化是对邻近的特征映射进行局部归一化
其中除和幂运算都是按元素运算,𝑛, 𝑘, 𝛼, 𝛽 为超参,𝑛 为局部归一化的特征窗口大小。
局部响应归一化和层归一化都是对同层的神经元进行归一化,但是局
部响应归一化应用在
激活函数之后
,只是对邻近的神经元进行局部归一化,并且不减去均值。
局部响应归一化和生物神经元中的
侧抑制
现象比较类似,即活跃神经元对相邻神经元具有抑制作用。(如果一个神经元的活性值非常大,那么和它邻近的神经元就近似地归一化为 0,从而起到抑制作用,增强模型的泛化能力)
最大汇聚也具有侧抑制作用
,但最大汇聚是对同一个特征映射、邻近位置的神经元进行抑制,而局部响应归一化是对同一个位置的邻近特征映射的神经元进行抑制。
7.6 超参数优化
在神经网络中,除了可学习的参数之外,还存在很多超参数.这些超参数对网络性能的影响也很大,常见的超参数有以下三类:
(1) 网络结构,包括神经元之间的连接关系、层数、每层的神经元数量、激活函数的类型等.
(2) 优化参数,包括优化方法、学习率、小批量的样本数量等.
(3) 正则化系数.
超参数优化
主要存在两方面的困难:
1)是一个组合优化问题,无法通过梯度下降方法来优化;
2)评估一组超参数
配置
的时间代价非常高,从而导致一些优化方法在超参数优化中难以应用。
对于超参数的配置,比较简单的方法有
网格搜索、随机搜索、贝叶斯优化、动态资源分配
和
神经架构搜索
。
7.6.1 网格搜索
是一种通过尝试所有
超参数的组合
来寻址一组合适超参数配置的方法。
假设总共有𝐾 个超参数,第𝑘个超参数的可以取𝑚𝑘 个值.那么总共的配置组合数量为 𝑚1 × 𝑚2 × ⋯ × 𝑚𝐾。一般而言,需要根据超参数自身的特点进行离散化。
网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试这些模型在
开发集
上的性能,选取一组性能最好的配置。
7.6.2 随机搜索
不同超参数对模型性能的影响有很大差异
,在这种情况下,采用网格搜索会在不重要的超参数上进行不必要的尝试。
通过对超参数进行
随机组合
,然后选取一个性能最好的配置,这就是
随机搜索
。更容易实现,一般会比网格搜索更加有效。
但是,网格搜索和随机搜索都没有利用不同超参数组合之间的
相关性
,一般都
比较低效
。
下面介绍两种自适应的超参数优化方法:贝叶斯优化和动态资源分配。
7.6.3 贝叶斯优化
是一种自适应的超参数优化方法,
根据
当前已经试验的超参数组合,来
预测
下一个可能带来最大收益的组合。
一种比较常用的贝叶斯优化方法为
时序模型优化
。
贝叶斯优化过程是根据已有的 𝑁 组试验结果ℋ = {𝒙𝑛, 𝑦𝑛}(𝑦𝑛 为 𝑓(𝒙𝑛) 的观测值),来建模高斯过程,并计算 𝑓(𝒙) 的后验分布𝑝𝒢𝒫(𝑓(𝒙)|𝒙, ℋ)。
为了使得 𝑝𝒢𝒫(𝑓(𝒙)|𝒙, ℋ) 接近其真实分布,通过定义一个
收益函数
𝑎(𝑥, ℋ) 来判断一个样本是否能够给建模 𝑝𝜃(𝑓(𝒙)|𝒙, ℋ)提供更多的收益。收益越大,其修正的高斯过程会越接近目标函数的真实分布。
收益函数的定义有很多种方式,比如改善概率、高斯过程置信上界,一个常用的是
期望改善函数
。
假设𝑦∗是当前已有样本中的最优值,期望改善函数为:
期望改善是定义一个样本 𝒙 在当前模型 𝑝𝒢𝒫(𝑓(𝒙)|𝒙, ℋ) 下,𝑓(𝒙) 超过最好结果𝑦∗ 的期望。
贝叶斯优化的一个缺点:不能很好地处理高维情况
7.6.4 动态资源分配
在超参数评估时,如果我们可以在较早的阶段就估计出一组配置的效果会比较差,那么我们就可以中止这组配置的评估,将更多的资源留给其他配置。——–将超参数优化看作一种非随机的
最优臂问题
动态资源分配的关键是将有限的资源分配给更有可能带来收益的超参数组合。一种有效方法是
逐次减半
方法,假设要尝试 𝑁 组超参数配置,总共可利用的资源预算(摇臂的次数)为𝐵,我们可以通过
T轮逐次减半的方法来选取最优的配置。
7.6.5 神经架构搜索
上面介绍的超参数优化方法都是在
固定
(或变化比较小)的超参数空间 𝒳中进行最优配置搜索,而最重要的神经网络架构一般还是需要由有经验的专家来进行设计。
神经架构搜索
通过神经网络来
自动实现
网络架构的设计。利用元学习的思想,神经架构搜索利用一个控制器来生成另一个子网络的架构描述。
7.7 网络正则化
正则化:是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法。
7.7.1 ℓ1 和ℓ2 正则化
通过约束参数的ℓ1 和ℓ2范数来减小模型在训练数据集上的过拟合现象。
通过加入ℓ1 和ℓ2 正则化,优化问题可以写为
等价于
ℓ1 范数在零点不可导,因此经常用下式来近似:
其中𝐷 为参数数量,𝜖为一个非常小的常数。
弹性网络正则化
是同时加入 ℓ1 和 ℓ2 正则化。
7.7.2 权重衰减
在每次参数更新时,引入一个衰减系数:
𝛽 为权重衰减系数,一般取值比较小,比如 0.0005。
在标准的随机梯度下降中,权重衰减正则化和 ℓ2 正则化的效果同,因此,在一些深度学习框架中通过 ℓ2 正则化来实现,但是,在较为复杂的优化方法(比如 Adam)中,权重衰减正则化和 ℓ2 正则化并不等价。
7.7.3 提前停止
在使用梯度下降法进行优化时,我们可以使用一个和训练集独立的样本集合,称为
验证集
,并用验证集上的错误来代替期望错误.当验证集上的错误率不再下降,就停止迭代。
7.7.4 丢弃法
当训练一个深度神经网络时,我们可以
随机丢弃一部分神经元
(同时丢弃其对应的连接边)来避免过拟合,这种方法称为
丢弃法
。
最简单的方法是设置一个固定的概率 𝑝,对每一个神经元都以概率 𝑝 来判定要不要保留。
引入一个
掩蔽函数
mask(⋅) 使得 𝒚 =𝑓(𝑾mask(𝒙) + 𝒃).掩蔽函数mask(⋅)的定义为:
其中 𝒎 ∈ {0, 1}𝐷是
丢弃掩码
,通过以概率为 𝑝 的伯努利分布随机生成。
在
训练
时,激活神经元的平均数量为原来的𝑝倍.而在
测试
时,所有的神经元都是可以激活的,这会造成训练和测试时网络的输出不一致。为了缓解这个问题,在测试时需要将神经层的输入 𝒙 乘以 p。保留率 𝑝 可以通过验证集来选取一个最优的值。
一般来讲,对于
隐藏层的神经元
,其保留率 𝑝 = 0.5 时效果最好;对于
输入层的神经元
,其保留率通常设为更接近1的数,使得输入变化不会太大。
集成学习角度的解释
每做一次丢弃,相当于从原始的网络中采样得到一个子网络。如果一个神经网络有 𝑛 个神经元,那么总共可以采样出 2的n次方个子网络
贝叶斯学习角度的解释
7.7.4.1 循环神经网络上的丢弃法
(1)一种简单的方法是对非时间维度的连接(即非循环连接)进行随机丢失。,虚线边表示进行随机丢弃,不同的颜色表示不同的丢弃掩码。
(2)对参数矩阵的每个元素进行随机丢弃,并在所有时刻都使用相同的丢弃掩码.这种方法称为
变分丢弃法
。相同颜色表示使用相同的丢弃掩码。
7.7.5 数据增强
深度神经网络一般都需要大量的训练数据才能获得比较理想的效果。在数据量有限的情况下,可以通过
数据增强
来增加数据量,提高模型鲁棒性,避免过拟合。
数据增强还主要应用在图像数据上。
图像数据的增强主要是通过算法
对图像进行转变
,
引入噪声
等方法来增加数据的多样性
(1) 旋转;
(2) 翻转;
(3) 缩放;
(4) 平移;
(5) 加噪声。
7.7.6 标签平滑
给样本的
标签
引入一定的噪声来避免过拟合。
标签平滑:在输出标签中添加噪声来避免模型过拟合。
一个样本𝒙的标签可以用one-hot向量表示,即
这种标签可以看作
硬目标
。
引入一个噪声对标签进行平滑,即假设样本以 𝜖 的概率为其他类.平滑后的标签为
其中 𝐾 为标签数量,这种标签可以看作
软目标
。标签平滑可以避免模型的输出过拟合到硬目标上,并且通常不会损害其分类能力。
上面的标签平滑方法是给其他𝐾 − 1个标签相同的概率 ,没有考虑标签之间的相关性。一种更好的做法是按照类别相关性来
赋予其他标签不同的概率
。
比如先训练另外一个更复杂(一般为多个网络的集成)的
教师网络
,并使用大网络的输出作为软目标来训练
学生网络
,这种方法也称为
知识蒸馏
。