回顾笔记二中求参数 w , b w,b w,b用的梯度下降法。在此,我们讲几个问题。
- 小心地调节learning rate
如果learning rate太小,步伐太短,会需要很长时间才能到达极小值点,而如果步伐太大,会出现一直在极小值点附近振荡的情况,从而无法真正到达极小值点,甚至有可能会偏离极小值点,出现发散的情况,如图所示:
对于不同的参数使用Adagrad法设置不同的学习率会更好,具体做法是对于每一次迭代,都把前面计算的所有偏导数的均方根加入进去。比如说对
w
w
w而言
w
1
=
w
0
−
η
(
g
0
)
2
w^1=w^0-\frac{\eta}{(g^0)^2}
w1=w0−(g0)2η,其中,
g
0
=
∂
L
∂
w
∣
w
=
w
0
g^0=\frac{\partial L}{\partial w}|_{w=w^0}
g0=∂w∂L∣w=w0;
w
2
=
w
1
−
η
/
[
(
g
0
)
2
+
(
g
1
)
2
]
w^2=w^1-{\eta}/\sqrt{[(g^0)^2+(g^1)^2]}
w2=w1−η/[(g0)2+(g1)2],其中,
g
0
=
∂
L
∂
w
∣
w
=
w
0
,
g
1
=
∂
L
∂
w
∣
w
=
w
1
g^0=\frac{\partial L}{\partial w}|_{w=w^0},g^1=\frac{\partial L}{\partial w}|_{w=w^1}
g0=∂w∂L∣w=w0,g1=∂w∂L∣w=w1
⋯
⋯
\cdots\cdots
⋯⋯
w
t
+
1
=
w
t
−
η
/
∑
i
=
0
t
(
g
i
)
2
w^{t+1}=w^t-{\eta}/\sqrt{\sum\limits^t_{i=0}(g^i)^2}
wt+1=wt−η/i=0∑t(gi)2,其中,
g
0
=
∂
L
∂
w
∣
w
=
w
0
g^0=\frac{\partial L}{\partial w}|_{w=w^0}
g0=∂w∂L∣w=w0
⋯
⋯
\cdots\cdots
⋯⋯
g
t
=
∂
L
∂
w
∣
w
=
w
t
g^t=\frac{\partial L}{\partial w}|_{w=w^t}
gt=∂w∂L∣w=wt
当然,还有更多更好的方法,Adagrad法是比较简单实用的一种,实际上,许多设置参数学习率的方法是以Adagrad法为基础的。
随着优化过程的进行,对于已经下降很多的变量,则减缓学习率,对于还没怎么下降的变量,则保持一个较大的学习率。AdaGrad的缺点是虽然不同变量有了各自的学习率,但是初始的全局学习率还是需要手工指定。如果全局学习率过大,优化同样不稳定;而如果全局学习率过小,因为AdaGrad的特性,随着优化的进行,学习率会越来越小,很可能还没有到极值就停滞不前了。
- 随机梯度下降(Stochastic Gradient Descent,SGD)
图6 SGD
上面讨论的梯度下降算法每一次更新参数都将所有的训练集数据用上了,但是这样会使训练时间延长,所以提出了随机梯度下降算法,即每次随机选取一个训练数据,以此来对参数进行更新,SGD以震荡的方式趋向于最小值。
- 特征缩放
假设预测宝可梦的
c
p
cp
cp值的函数为
y
=
b
+
w
1
⋅
x
1
+
w
2
⋅
x
2
y=b+w_1\cdot x_1+w_2\cdot x_2
y=b+w1⋅x1+w2⋅x2当
x
1
,
x
2
x_1,x_2
x1,x2的分布相差很大的时候,比如
x
1
x_1
x1在
1
,
2
,
⋯
⋯
1,2,\cdots\cdots
1,2,⋯⋯附近,而
x
2
x_2
x2在
100
,
200
,
⋯
⋯
100,200,\cdots\cdots
100,200,⋯⋯附近的时候,如下图:
- 梯度下降理论
5. 梯度下降的局限
- 求出来是局部极小值
- 停留在导数为零的非极小值点
- 在平滑的地方更新及其缓慢