引言
当神经网络模拟应用到机器学习时,往往会遇到下面两个问题
-
优化问题
- 全局最优解困难
- 训练效率通常比较低
- 梯度消失/爆炸问题
这导致神经网络的网络优化十分困难
-
泛化问题
- 模型复杂度高
- 拟合能力很强
- 容易产生过拟合问题
需要通过正则化方法提高泛化能力
网络优化
简介
网络优化指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,包括模型选择以及参数学习等
网络优化的难点主要在于:
- 神经网络的种类非常多
- 神经网络结构复杂
- 不同参数的作用差异很大
- 难以找到一种通用优化方法
- 网络的超参数一般较多
此外还有高维变量的非凸优化问题:
深度神经网络的参数非常多,参数学习是在非常高维空间中的非凸优化问题,在高维空间中,非凸优化的难点并不在于如何逃离局部最优点,而是如何逃离鞍点,因为在高维空间中,局部最小值要求在每一维度上都是最低点,概率通常是非常低的,随机梯度下降对于高维空间中的非凸优化问题十分重要,通过在梯度方向上引入随机性,可以有效的逃离鞍点
再介绍平坦最小值和局部最小解的等价性:
- 平坦最小值:损失函数在局部最小解附近通常是一个平坦的区域,在一个平坦最小值的邻域内,所有点对应的训练损失都比较接近
- 局部最小解的等价性:在非常大的神经网络中,大部分的局部最小解是等价的,局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失
附上平坦最小值和尖锐最小值的对比图:

改善网络优化的目标是:找到更好的局部最小值和提高优化效率
- 使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性
- 使用更好的参数初始化方法、数据预处理方法来提高优化效率
- 修改网络结构来得到更好的优化地形
- 优化地形:在高维空间中损失函数的曲面形状,好的优化地形通常比较平滑
- 可以使用ReLU激活函数,残差连接,逐一归一化等
- 使用更好的超参数优化方法
优化算法
最小批量梯度下降
在参数过程中可以使用最小批量梯度下降,在每一轮迭代中,基于部分训练数据计算梯度,在保证速度的同时,其结果也更接近最优解
注:这里先只介绍原理
批量大小选择
批量大小不影响随机梯度的期望,但是会影响随机梯度的方差
学习率通常要随着批量大小的增大而相应的增大
- 批量大小越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率
- 批量大小较小时,需要设置较小的学习率,否则模型不会收敛
学习率调整
简介
学习率是神经网络优化时的重要超参数,如果过大则不会收敛,如果过小则收敛速度太慢
为此可以采取以下方法
- 学习率衰减(Learning Rate Decay):开始保持大的学习率保证收敛速度,在收敛到最优点附近时要小些以减小震荡
- 学习率预热(Learning Rate Warmup):在最初的几轮训练迭代时先采用比较小的的学习率,逐步增大学习率至初始设置的学习率后再采用学习率衰减策略,因为初期使用了较小的学习率,模型在初期可以更好的适应数据,提高训练的稳定性和性能
- 周期性学习率调整:在训练过程中周期性地增大学习率,使得梯度下降法能够逃离鞍点或尖锐最小值
- 当参数处于尖锐最小值附近时,增大学习率有助于逃离尖锐最小值
- 当参数处于平坦最小值附近时,增大学习率依然有可能在该平坦最小值的吸引域内
- 可能短期内会使网络收敛的稳定性变差,但长期来看有助于找到更好的局部最优解
附上周期性学习率调整的两种常见的方法

AdaGrad、RMSprop和AdaDelta算法
AdaGrad(Adaptive Gradient Algorithm)借鉴L2正则化的思想,每次迭代时自适应地调整每个参数的学习率,如果某个参数的偏导数累计比较大,其学习率相对较小;相反,如果偏导数累积较小,其学习率相对较大
AdaGrad的缺点是在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点
RMSprop在AdaGrad的基础上把将累计方式变味了指数衰减移动平均,在迭代过程中,每个参数的学习率并不是呈衰减趋势,既可以变小又可以变大
AdaDelta算法进一步将RMSprop算法中的初始学习率改为动态计算,在一定程度上平抑了学习率的波动
梯度估计修正
动量法和NAG
动量法(Momentum Method)用之前累积的动量来代替真正的梯度,每次迭代的梯度可以看作是加速度,每个参数的实际更新差值取决于最近一段时间内的动量的加权平均,通过这种方式动量法减少了更新过程中的震荡

Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)是对动量法的改进,也称为Nesterov动量法
Adam算法和Nadam算法
Adam(Adaptive Moment Estimation Algorithm)可以看作动量法和RMSprop算法的结合,不但使用动量(来自动量法)作为参数更新方向,而且可以自适应调整学习率(来自RMSprop)
与之相比,Nadam算法将Adam中使用的动量换成了Nesterov加速梯度
Adam和Nadam在深度学习中是常用的算法
梯度截断
梯度截断是一种比较简单的启发式方法,把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断,主要分为按值(按个别参数)截断和按模截断
参数初始化
简介
神经网络的参数学习是一个非凸优化问题,当使用梯度下降来进行优化网络参数时,参数初值的选取十分关键,关系到网络的优化效率和泛化能力
主要分为:
- 预训练初始化:利用一个已经在大规模数据上训练过的模型提供一个好的参数初始值,之后再进行精调,预训练初始化通常具有更好的收敛性和泛化性,但是灵活性不够,不能在目标网络上任意地调整网络结构
- 随机初始化:对每个参数都随机初始化
- 固定值初始化:根据经验使用一个特殊的固定值来初始化
下面我们主要介绍随机初始化的方法
基于固定方差的参数初始化
从一个固定均值(通常为0)和方差的分布中采样来生成参数的初始值,关于分布可以使用正态分布、均匀分布等等
为了降低固定方差对网络性能以及优化效率的影响,基于固定方差的随机初始化方法一般需要配合逐层归一化(见下)来使用
基于方差缩放的参数初始化
基于方差缩放的参数初始化考虑参数的初始化区间应该根据神经元的性质进行差异化的设置,如果神经元输入连接多,每个输入连接上的全中间就应该小,以避免神经元的输出过大,即过饱和
初始化深度网络时,为了缓解梯度消失或爆炸的问题,方差缩放考虑尽可能保持每个神经元输入和输出的方差一致,根据神经元的数量来自适应的调整初始化分布的方差

数据预处理
数据尺度的影响
样本特征由于来源以及度量单位不同,尺度(即取值范围)往往差异很大,当不同输入特征的尺度差异比较大时,梯度下降法的效率会受到影响,为此,把数据归一化为相同的尺度,使得大部分位置的梯度方向近似于最优搜索方向,在梯度下降求解时,每一步梯度的方向都基本指向最小值,训练效率会大大提高
数据归一化
数据归一化泛指把数据特征转换为相同尺度的方法
数据归一化的方法主要有:
- 最大最小值归一化:通过缩放将每一个特征值归一化到[-1,1]之间
- 标准化:将每一个特征的所有值都调整为均值为0,方差为1
- 白化:经过白化处理后,特征之间的相关性较低,所有特征具有相同的方差,典型的方法就是PCA(主成分分析)

逐层归一化
简介
逐层归一化将传统的机器学习中的数据归一化方法应用到深度神经网络中,对隐藏层输入进行归一化,从而使得网络更容易训练
逐层归一化主要有以下的优点:
- 更好的尺度不变性
- 把每个神经层的输入分布都归一化为标准正态分布,可以使得每个神经层对其输入都有更好的尺度不变性,不论低层的参数如何变化,高层的输入保持相对稳定
- 尺度不变性可以使得我们更加高效地进行参数初始化以及超参选择
- 更平滑的优化地形
- 一方面可以使得大部分神经层的输入不饱和区域,从而让梯度变大,避免梯度消失问题
- 另一方面还可以使得神经网络的优化地形更加平滑,以及使梯度变得更加稳定,从而允许使用更大的学习率,并提高收敛速度
逐层归一化的方法主要有:批量归一化(Batch Normalization)、层归一化(Layer Normalization)
附上批量归一化和层归一化的区别

注:即批量归一化是针对每个特征的,层归一化是针对每个样本的
此外,还有针对神经网络连接权重的权重归一化
超参数优化 (重要)
简介
在神经网络中,除了可学习的参数之外,还存在很多超参数,对网络性能的影响也很大,不同的机器学习任务往往需要不同的超参数
超参数主要包括:(重要)
- 网络结构:神经元之间的连接关系、层数、每层神经元的数量,激活函数的类型等
- 优化参数:包括优化方法、学习率、小批量样本的数量等
- 正则化系数
超参数优化是一个组合优化问题,无法像一般参数那样通过梯度下降的方式优化,也没有一种通用的有效优化方法,评估一组超参数配置的时间代价非常高,从而导致一些优化方法在超参数优化中难以应用
下面介绍最简单的网格搜索和随机搜索,此外还有贝叶斯优化、动态资源分配、神经架构搜索等等,这里不再涉及
网格搜索
网格搜索(Grid Search)是一种尝试所有超参数的组合来寻找一组合适的超参数配置方法
随机搜索
随机搜索(Random Search)对超参数进行随机组合,然后选取一个性能最好的配置,在实践中更容易实现,一般会比网格搜索更加有效
网络正则化(重要)
简介
正则化在之前已经反复提到,不再做详细介绍,这里我们介绍一些常用的网络正则化方法
Lp范数正则化(L1、L2正则化)
这里我们在线性模型的笔记中已经涉及,不再介绍
权重衰减
权重衰减(Weight Decay)考虑在每次权重更新时,引入一个衰减系数,在标准的随机梯度下降中,权重衰减正则化和L1正则化效果相同,所以权重衰减一般使用L1正则化来实现
在较为复杂的优化方法(如Adam)中,权重衰减和L1正则化并不等价
提前停止
提前停止(Early Stop)是一种简单有效的正则化方法
由于深度神经网络的拟合能力非常强,比较容易在训练集上过拟合,使用梯度下降法进行优化时,可以用验证集上的错误来代替期望错误,当验证集上的错误率不再下降,就停止迭代
在实际操作中,验证集上的错误率变化曲线并不一定是平衡曲线,而是先升高再降低,因此提前停止的具体标准要根据实际任务进行优化

丢弃法
丢弃法(Dropout)是训练时随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合
一般是针对神经元进行随机丢弃,但也可以扩展到对神经元之间的连接进行随即丢弃,或每一层进行随机丢弃

当在循环神经网络上使用丢弃法时,只能在非时间维度的连接(即非循环连接)进行随机丢失
数据增强
在图像处理任务中,通过算法对图像进行转变引入噪声等方法来增加数据的多样性
标签平滑
在输出标签中添加噪声来避免模型过拟合
全部评论 (0)
暂无评论,快来抢沙发吧~