Gradient Descent(机器学习之梯度下降法)

Tip 1: Tuning your learning rates

Learning Rate

如果learning rate 比较大,即如绿色曲线,在左侧曲线就会直接跳过谷底,反映到Loss曲线上就会呈现,开始下降速度快,但很快就会卡住,不在下降。
如果learning rate 超级大,即如黄线,会直接飞出去了。
要调整到Just make 时才能刚刚好。
所以右侧的Loss图一定要画出 。

Adaptive Learning Rate (适应性学习率)

靠近目标是要减小 learning rate ,让它收敛在最低点
但仅仅有公式不可以,最好Giving different parameters (参数)different learning rates

AdaGrad算法

AdaGrad

对于每一个参数都用相同的学习率进行更新。
但是在实际应用中,各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
Gradient Descent(机器学习之梯度下降法)

σt\sigma_t: root mean square of the previous derivatives of parameter w,即参数w之前的导数的均方根。
即parameter dependent,每一个参数的learning rate都不一样
Gradient Descent(机器学习之梯度下降法)
Gradient Descent(机器学习之梯度下降法)

Contradiction

Gradient Descent(机器学习之梯度下降法)
gtg_t表明导数越大,参数越大

y=0x(gi)2\sum^{x }_{y =0}{(g_i)^2}在分母上,表明导数越大参数越小

这是矛盾的。

How surprise it is?

直观解释
Gradient Descent(机器学习之梯度下降法)
所以通过y=0x(gi)2\sum^{x }_{y =0}{(g_i)^2}知道过去的gradient有多大,再相除,知道反差有多大。

更正式的解释
Gradient Descent(机器学习之梯度下降法)
gradient值越大,离底部距离越大
但我们同时考虑多个参数时,以上论述就不一定成立了。
Gradient Descent(机器学习之梯度下降法)
(注意:图中w1,w2没有标注错误)
Gradient Descent(机器学习之梯度下降法)
二次微分2a在一次微分的分母上
Gradient Descent(机器学习之梯度下降法)
Gradient Descent(机器学习之梯度下降法)
分母上当然可以直接算二次微分,但是在很复杂的情况下,算二次微分花费的大量时间是不能承受的,所以Adagrad在没有增加任何额外运算的前提下,去估计二次微分的值。

Tip 2:Stochastic Gradient Descent(随机梯度下降法)

Gradient Descent(机器学习之梯度下降法)
初始的式子其实是合理的,因为损失是整体训练的总和,但SGD想法不同,每次只拿一个xnx_n出来,只算对一个example的loss即可。
(注意:只是将最外侧的求和去掉)

这样做的好处是:
Gradient Descent(机器学习之梯度下降法)
原来的Gradient Descent,看完所有example才update一次参数,这是稳定的,如左侧小图,其实就是按照Gradient建议的方向来走。
但是如果用SGD,每看到一个example就update一次。如果只对于一次example,步伐可能是小的而且是散乱的,与大趋势不见得是一致的,但是因为可以看很多个example,所以Gradient Descent走一步,SGD可能已走了20步,所以SGD反而比较快。

Tip 3:Feature Scaling(特征缩放)

Gradient Descent(机器学习之梯度下降法)
本来在左图x2x_2的范围远比x1x_1大,那我们就把其缩小,变成右图的样子,即使不同的特征具有相同的缩放比例。

那么为什么这么做呢?
Gradient Descent(机器学习之梯度下降法)
对于Feature Scaling前的左侧小图,可以看到,w1w_1变动对于y的影响很小,但w2w_2变动对于y会造成较大影响。
所以坐标轴上,w1w_1方向比较平缓,w2w_2方向上比较陡峭。

对于Feature Scaling后的右侧小图,在坐标轴上w1w_1w2w_2影响力差不多。

对于未Feature Scaling的两个方向差很多,同一组learning rate 很难搞定,但是有Scaling变成正圆形会很容易,可以直接指向圆心走。

how to do?

Gradient Descent(机器学习之梯度下降法)

Theory(数学原理)

Question

Gradient Descent(机器学习之梯度下降法)

Formal Derivation

Gradient Descent(机器学习之梯度下降法)
我们很难在所有范围内找到最小点,但给定一个点,我们很容易找到附近值最小的点,然后依次更新。

Taylor Series

Gradient Descent(机器学习之梯度下降法)
Gradient Descent(机器学习之梯度下降法)
sinxsinx和一次的直线是很不吻合的,但在π/4\pi/4处趋势很像,而展开式高次影响很小,所以就只可以考虑sinxsinx展开式中一次的部分。

Gradient Descent(机器学习之梯度下降法)

Back to Formal Derivation

Gradient Descent(机器学习之梯度下降法)
在红圈范围内用泰勒级数对Loss函数做简化
Gradient Descent(机器学习之梯度下降法)
Gradient Descent(机器学习之梯度下降法)
Gradient Descent(机器学习之梯度下降法)
泰勒展开在越小的范围内越精确,对应就是红色的圈圈要越小,而η\eta(Learning rate)与其半径成正比。故理论上,只有Learning rate无穷小,才能保证Loss越来越小,但实际上只要够小就可以了。

以上只考虑了泰勒展开的一次式,但考虑二次式,也是可以的,但这样的方法不见得更普及,因为要运算二次微分,会多很多运算,但这些运算在做Deep Learning时是无法承受的。

More Limitation of Gradient Descent

Gradient Descent(机器学习之梯度下降法)
(1)会卡在Local minima,在Local minima参数的更新会停止。
(2)除此之外,在saddle point(鞍点)也会出现这样的问题.

但以上微分值为0的地方可能只是幻想,真正的问题在于,对于某一点,微分值很小,可能小于10-6,这已经很小了,你有可能就停下来了(因为很少真的算出微分为0),但是很小不见得接近Local minima,可能只是在一个plateau(高原)上,离Local minima其实很远。