视频 | PPT |
---|
李宏毅《机器学习》飞桨特训营(三)
梯度下降 Gradient Descent
1. 回顾
使参数向梯度相反的方向改变,改变的大小由学习率决定。
2. 梯度下降三个重点
2.1 学习率
该图展示了在不同的学习率下参数的更新情况:
- 当学习率过低时(蓝色),梯度下降非常缓慢,这是无法接受的。
- 当学习率偏大时(绿色),梯度下降会变快,但有可能卡在某个死区内导致无法下降。
- 当学习率过大时(黄色),loss有可能不降反升。
- 我们需要调整学习率到一个合适的值(红色),让损失以最快的速度到达最低点。
该图展示了在不同的学习率下损失的变化情况:
在训练时我们需要观察loss的变化情况,以确保我们取得了一个比较合适的学习率。
2.1.1 自适应学习率 Adaptive Learning Rates
最流行也是最简单的做法就是:在每一轮都通过一些因子来减小学习率。
- 最开始时,我们距离最低点很远,所以我们用较大的步长。
- 经过几轮后,我们接近了最低点,所以我们减少学习率。
- 比如: 1/t 衰减, η t η\mathop{{}}\nolimits_{{t}} ηt=η/ t + 1 \sqrt{{t+1}} t+1
学习率不能从一而终,要给不同的参数设置不同的学习率。
2.1.2 自适应梯度算法 Adagrad
Adagrad 的做法就是每一个参数的学习率都除上微分值的均方根值。
学习率更新过程详解:
化简后我们得到最终的参数更新公式:
Adagrad 存在的问题:
- 学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束。
- 需要设置一个全局的初始学习率。
2.1.3 多参数比较
当只有一个参数时,微分值的大小可以反应该点与最低点之间的水平距离。
当有多个参数时候,微分值大小则无法反映该点与最低点之间水平距离。如图中c点的微分值比a大,但是c点距离最低点更近,因此某个点到最低点的距离不仅与该点的微分值有关,还与其开口的大小有关,即二次微分。
因此参数更新的最佳步长为:
(一次微分值/二次微分值)×学习率
为了减小计算量,我们用一次微分的方根来代替二次微分,因此就得到了最终的学习率计算公式。
2.2 随机梯度下降 Stochastic Gradient Descent(SGD)
SGD 是批量梯度下降法 (Batch Gradient Descent, BGD) 的变种。批量梯度下降法通过进行N次迭代,直到目标函数收敛,或者到达某个既定的收敛界限。每次迭代都将对所有样本进行计算,计算量大。为了简便计算,SGD每次迭代仅对一个样本计算梯度,直到收敛。
优点:
- 加快参数更新速度。
缺点:
- 准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
- 可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
- 不易于并行实现。
2.3 特征归一化 Feature Scaling
特征归一化的目的是将数据的特征缩放到[0,1]或[-1,1]之间,期望特征分布为正圆。
归一化后可以大大提高参数更新的效率。
归一化方法为: