目录
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
对于每一个参数都用相同的学习率进行更新。
但是在实际应用中,各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
σ
t
\sigma_t
σt: root mean square of the previous derivatives of parameter w,即参数w之前的导数的均方根。
即parameter dependent,每一个参数的learning rate都不一样
Contradiction
g
t
g_t
gt表明导数越大,参数越大
∑ y = 0 x ( g i ) 2 \sum^{x }_{y =0}{(g_i)^2} ∑y=0x(gi)2在分母上,表明导数越大参数越小
这是矛盾的。
How surprise it is?
直观解释
所以通过
∑
y
=
0
x
(
g
i
)
2
\sum^{x }_{y =0}{(g_i)^2}
∑y=0x(gi)2知道过去的gradient有多大,再相除,知道反差有多大。
更正式的解释
gradient值越大,离底部距离越大
但我们同时考虑多个参数时,以上论述就不一定成立了。
(注意:图中w1,w2没有标注错误)
二次微分2a在一次微分的分母上
分母上当然可以直接算二次微分,但是在很复杂的情况下,算二次微分花费的大量时间是不能承受的,所以Adagrad在没有增加任何额外运算的前提下,去估计二次微分的值。
Tip 2:Stochastic Gradient Descent(随机梯度下降法)
初始的式子其实是合理的,因为损失是整体训练的总和,但SGD想法不同,每次只拿一个
x
n
x_n
xn出来,只算对一个example的loss即可。
(注意:只是将最外侧的求和去掉)
这样做的好处是:
原来的Gradient Descent,看完所有example才update一次参数,这是稳定的,如左侧小图,其实就是按照Gradient建议的方向来走。
但是如果用SGD,每看到一个example就update一次。如果只对于一次example,步伐可能是小的而且是散乱的,与大趋势不见得是一致的,但是因为可以看很多个example,所以Gradient Descent走一步,SGD可能已走了20步,所以SGD反而比较快。
Tip 3:Feature Scaling(特征缩放)
本来在左图
x
2
x_2
x2的范围远比
x
1
x_1
x1大,那我们就把其缩小,变成右图的样子,即使不同的特征具有相同的缩放比例。
那么为什么这么做呢?
对于Feature Scaling前的左侧小图,可以看到,
w
1
w_1
w1变动对于y的影响很小,但
w
2
w_2
w2变动对于y会造成较大影响。
所以坐标轴上,
w
1
w_1
w1方向比较平缓,
w
2
w_2
w2方向上比较陡峭。
对于Feature Scaling后的右侧小图,在坐标轴上 w 1 w_1 w1和 w 2 w_2 w2影响力差不多。
对于未Feature Scaling的两个方向差很多,同一组learning rate 很难搞定,但是有Scaling变成正圆形会很容易,可以直接指向圆心走。
how to do?
Theory(数学原理)
Question
Formal Derivation
我们很难在所有范围内找到最小点,但给定一个点,我们很容易找到附近值最小的点,然后依次更新。
Taylor Series
s
i
n
x
sinx
sinx和一次的直线是很不吻合的,但在
π
/
4
\pi/4
π/4处趋势很像,而展开式高次影响很小,所以就只可以考虑
s
i
n
x
sinx
sinx展开式中一次的部分。
Back to Formal Derivation
在红圈范围内用泰勒级数对Loss函数做简化
泰勒展开在越小的范围内越精确,对应就是红色的圈圈要越小,而
η
\eta
η(Learning rate)与其半径成正比。故理论上,只有Learning rate无穷小,才能保证Loss越来越小,但实际上只要够小就可以了。
以上只考虑了泰勒展开的一次式,但考虑二次式,也是可以的,但这样的方法不见得更普及,因为要运算二次微分,会多很多运算,但这些运算在做Deep Learning时是无法承受的。
More Limitation of Gradient Descent
(1)会卡在Local minima,在Local minima参数的更新会停止。
(2)除此之外,在saddle point(鞍点)也会出现这样的问题.
但以上微分值为0的地方可能只是幻想,真正的问题在于,对于某一点,微分值很小,可能小于10-6,这已经很小了,你有可能就停下来了(因为很少真的算出微分为0),但是很小不见得接近Local minima,可能只是在一个plateau(高原)上,离Local minima其实很远。