在中间列中,上图展示了 Dropout 技术,即暂时丢弃一部分神经元及其连接的方法。随机丢弃神经元可以防止过拟合,同时指数级、高效地连接不同网络架构。一般使用了 Dropout 技术的神经网络会设定一个保留率 p,然后每一个神经元在一个批量的训练中以概率 1-p 随机选择是否去掉。在最后进行推断时所有神经元都需要保留,因而有更高的准确度。
Bagging 是通过结合多个模型降低泛化误差的技术,主要的做法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。而 Dropout 可以被认为是集成了大量深层神经网络的 Bagging 方法,因此它提供了一种廉价的 Bagging 集成近似方法,能够训练和评估值数据数量的神经网络。
最后,上图还描述了数据增强与提前终止等正则化方法。数据增强通过向训练数据添加转换或扰动来人工增加训练数据集。数据增强技术如水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转通常应用在视觉表象和图像分类中。而提前终止通常用于防止训练中过度表达的模型泛化性能差。如果迭代次数太少,算法容易欠拟合(方差较小,偏差较大),而迭代次数太多,算法容易过拟合(方差较大,偏差较小)。因此,提前终止通过确定迭代次数解决这个问题。
7. 最优化最优化是机器学习模型中非常非常重要的模块,它不仅主导了整个训练过程,同时还决定了最后模型性能的好坏和收敛需要的时长。以下两张信息图都展示了最优化方法需要关注的知识点,包括最优化的预备和具体的最优化方法。
以上展示了最优化常常出现的问题和所需要的操作。首先在执行最优化前,我们需要归一化输入数据,而且开发集与测试集归一化的常数(均值与方差)与训练集是相同的。上图也展示了归一化的原因,因为如果特征之间的量级相差太大,那么损失函数的表面就是一张狭长的椭圆形,而梯度下降或最速下降法会因为「锯齿」现象而很难收敛,因此归一化为圆形有助于减少下降方向的震荡。
后面的梯度消失与梯度爆炸问题也是十分常见的现象。「梯度消失」指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞。梯度爆炸指神经网络训练过程中大的误差梯度不断累积,导致模型权重出现很大的更新,在极端情况下,权重的值变得非常大以至于出现 NaN 值。
梯度检验现在可能用的比较少,因为我们在 TensorFlow 或其它框架上执行最优化算法只需要调用优化器就行。梯度检验一般是使用数值的方法计算近似的导数并传播,因此它能检验我们基于解析式算出来的梯度是否正确。
下面就是具体的最优化算法了,包括最基本的小批量随机梯度下降、带动量的随机梯度下降和 RMSProp 等适应性学习率算法。
小批量随机梯度下降(通常 SGD 指的就是这种)使用一个批量的数据更新参数,因此大大降低了一次迭代所需的计算量。这种方法降低了更新参数的方差,使得收敛过程更为稳定;它也能利用流行深度学习框架中高度优化的矩阵运算器,从而高效地求出每个小批数据的梯度。通常一个小批数据含有的样本数量在 50 至 256 之间,但对于不同的用途也会有所变化。
动量策略旨在加速 SGD 的学习过程,特别是在具有较高曲率的情况下。一般而言,动量算法利用先前梯度的指数衰减滑动平均值在该方向上进行修正,从而更好地利用历史梯度的信息。该算法引入了变量 v 作为参数在参数空间中持续移动的速度向量,速度一般可以设置为负梯度的指数衰减滑动平均值。
上图后面所述的 RMSProp 和 Adam 等适应性学习率算法是目前我们最常用的最优化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸情况下表现更好,它改变梯度累积为指数加权的移动平均值,从而丢弃距离较远的历史梯度信息。RMSProp 是 Hinton 在公开课上提出的最优化算法,其实它可以视为 AdaDelta 的特例。但实践证明 RMSProp 有非常好的性能,它目前在深度学习中有非常广泛的应用。