文章目录
- 1. 梯度下降算法
- 1.1 全量梯度下降(Batch gradient descent)
- 1.2 随机梯度下降(Stochastic gradient descent) SGD
- 1.3 小批量梯度下降(Mini-batch gradient descent)
- 1.4 梯度下降算法存在的问题与挑战
- 2. 梯度下降优化算法
- 2.1 梯度下降速率优化
- 2.1.1 SGDM
- 2.1.2 NAG
- 2.2 学习速率优化
- 2.2.1 Adagrad
- 2.2.2 Adadelta
- 2.2.3 RMSprop
- 2.2.4 Adam
- 2.3 参数优化
- 2.3.1 Batch normalization
- 2.4 训练时间优化
- 2.4.1 Early stopping
- 3. 参考资料
1. 梯度下降算法
1.1 全量梯度下降(Batch gradient descent)
介绍:每次学习都使用整个训练集
优点:
每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点)
缺点:
每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。
1.2 随机梯度下降(Stochastic gradient descent) SGD
介绍:随机梯度下降算法每次从训练集中随机选择一个样本来进行学习
优点:
- 每次的学习是非常快速的,并且可以进行在线更新。
- 对于类似盆地区域(即很多局部极小值点)那么这个波动的特点可能会使得优化的方向从当前的局部极小值点跳到另一个更好的局部极小值点,这样便可能对于非凸函数,最终收敛于一个较好的局部极值点,甚至全局极值点。
- 最终其会和全量梯度下降算法一样,具有相同的收敛性,即凸函数收敛于全局极值点,非凸损失函数收敛于局部极值点。
缺点:
- 每次更新可能并不会按照正确的方向进行,因此可以带来优化波动(扰动)
- 由于波动,因此会使得迭代次数(学习次数)增多,即收敛速度变慢。
1.3 小批量梯度下降(Mini-batch gradient descent)
介绍:Mini-batch梯度下降综合了batch梯度下降与stochastic梯度下降,在每次更新速度与更新次数中间取得一个平衡
优点:
- 相对于全量梯度下降,其提高了每次学习的速度。并且其不用担心内存瓶颈从而可以利用矩阵运算进行高效计算。
- 相对于随机梯度下降,其降低了收敛波动性,即降低了参数更新的方差,使得更新更加稳定。
缺点:*
1.4 梯度下降算法存在的问题与挑战
- 选择一个合理的学习速率很难。如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡。
- 学习速率调整(又称学习速率调度,Learning rate schedules)[11]试图在每次更新过程中,改变学习速率,如退火。一般使用某种事先设定的策略或者在每次迭代中衰减一个较小的阈值。无论哪种调整方法,都需要事先进行固定设置,这边便无法自适应每次学习的数据集特点。
- 模型所有的参数每次更新都是使用相同的学习速率。如果数据特征是稀疏的或者每个特征有着不同的取值统计特征与空间,那么便不能在每次更新中每个参数使用相同的学习速率,那些很少出现的特征应该使用一个相对较大的学习速率。
- 高度非凸的误差函数的优化过程,如何避免陷入大量的局部次优解或鞍点。
2. 梯度下降优化算法
2.1 梯度下降速率优化
2.1.1 SGDM
介绍:SGD+ Momentum。这里引入了一阶动量。从直观理解就是加入了一个惯性,在坡度比较陡的地方,会有较大的惯性,这是下降的多。坡度平缓的地方,惯性较小,下降的会比较慢。
优点:
- 每次学习过程中能够根据损失函数的斜率做到自适应更新来加速SGD的收敛。
- 可以获得更快的收敛速度与减少振荡。
缺点:*
2.1.2 NAG
介绍:在遇到倾斜向上之前应该减慢速度。
优点:每次学习过程中能够根据损失函数的斜率做到自适应更新来加速SGD的收敛。
缺点:*
2.2 学习速率优化
2.2.1 Adagrad
介绍:Adagrad也是一种基于梯度的优化算法,它能够对每个参数自适应不同的学习速率,对稀疏特征,得到大的学习更新,对非稀疏特征,得到较小的学习更新,
优点:
- 该优化算法适合处理稀疏特征数据。
- 它能够为每个参数自适应不同的学习速率,而一般的人工都是设定为0.01。
缺点:需要计算参数梯度序列平方和,并且学习速率趋势是不断衰减最终达到一个非常小的值。
2.2.2 Adadelta
2.2.3 RMSprop
2.2.4 Adam
2.3 参数优化
2.3.1 Batch normalization
为了方便训练,我们通常会对参数按照0均值1方差进行初始化,随着不断训练,参数得到不同程度的更新,这样这些参数会失去0均值1方差的分布属性,这样会降低训练速度和放大参数变化随着网络结构的加深。
Batch normalization在每次mini-batch反向传播之后重新对参数进行0均值1方差标准化。这样可以使用更大的学习速率,以及花费更少的精力在参数初始化点上。Batch normalization充当着正则化、减少甚至消除掉Dropout的必要性。
2.4 训练时间优化
2.4.1 Early stopping
在验证集上如果连续的多次迭代过程中损失函数不再显著地降低,那么应该提前结束训练
3. 参考资料