0. 参考
1. 梯度下降法
需要计算训练集全部
n
n
n 个样本的损失
L
=
1
n
∑
i
=
1
n
l
o
s
s
(
y
i
,
y
^
i
)
L=\frac{1}{n}\sum_{i=1}^nloss(y_i, \hat{y}_i)
L=n1∑i=1nloss(yi,y^i),进行梯度下降法优化。
W
→
W
−
η
∇
L
(
W
)
W \to W-\eta \nabla L(W)
W→W−η∇L(W)
η
\eta
η 为学习率。
2. 随机梯度下降法(SGD)
由于梯度下降法每次把训练集全部样本计算损失,计算量太大,随机梯度下降法就是每次随机取一个数据近似损失,然后进行梯度下降。
虽然有噪音,但是对于凸问题来说,经过
k
k
k 次训练后,SGD 能达到的误差量级为
O
(
1
k
)
O(\frac{1}{\sqrt{k}})
O(k1);对于强凸问题误差量级为
O
(
1
k
)
O(\frac{1}{k})
O(k1)。
3. ★小批量随机梯度下降法(Mini-batch SGD)
随机挑小批量进行训练,充分利用硬件资源。
4. 冲量法(Momentum)
使用平滑过的梯度对权重更新
V
t
=
β
V
t
−
1
+
(
1
−
β
)
∇
L
(
W
t
−
1
)
W
t
=
W
t
−
1
−
η
V
t
V_t = \beta V_{t-1} + (1-\beta)\nabla L(W_{t-1}) \\ W_t = W_{t-1}-\eta V_t
Vt=βVt−1+(1−β)∇L(Wt−1)Wt=Wt−1−ηVt
第一个式子的方法叫指数加权移动平均法。
β
\beta
β 常取值
[
0.5
,
0.9
,
0.95
,
0.99
]
[0.5, 0.9, 0.95, 0.99]
[0.5,0.9,0.95,0.99]。
5.★ Adam(Adaptive Moment Estimation)
Adam 对梯度做平滑,而且对梯度的各个维度值做重新调整。
首先,计算梯度的指数移动平均数,
V
0
V_0
V0 初始化为
0
0
0,类似于Momentum算法,综合考虑之前时间步的梯度动量,
β
1
\beta_1
β1 为指数衰减率,控制权重分配(动量与当前梯度),通常取
0.9
0.9
0.9:
V
t
=
β
1
V
t
−
1
+
(
1
−
β
1
)
∇
L
(
W
t
−
1
)
V_t=\beta_1 V_{t-1}+(1-\beta_1)\nabla L(W_{t-1})
Vt=β1Vt−1+(1−β1)∇L(Wt−1)
其次,计算梯度平方的指数移动平均数,
S
t
S_t
St 初始化为
0
0
0。
β
2
\beta_2
β2 为指数衰减率,控制之前的梯度平方的影响情况,一般取
0.999
0.999
0.999:
S
t
=
β
2
S
t
−
1
+
(
1
−
β
2
)
∇
L
2
(
W
t
−
1
)
S_t = \beta_2 S_{t-1} + (1-\beta_2) \nabla L^2(W_{t-1})
St=β2St−1+(1−β2)∇L2(Wt−1)
第三,由于
V
0
V_0
V0 初始化为
0
0
0,会导致
V
t
V_t
Vt 偏向于
0
0
0,尤其在训练初期阶段。所以,此处需要对梯度均值
V
t
V_t
Vt 进行偏差纠正,降低偏差对训练初期的影响:
修
正
V
^
t
=
V
t
(
1
−
β
1
t
)
修正\hat{V}_t = \frac{V_t}{(1-\beta_1^t)}
修正V^t=(1−β1t)Vt
第四,与
V
0
V_0
V0 类似,因为
S
0
S_0
S0 初始化为
0
0
0 导致训练初始阶段
S
t
S_t
St 偏向
0
0
0,对其进行修正:
修
正
S
^
t
=
S
t
(
1
−
β
2
t
)
修正\hat{S}_t=\frac{S_t}{(1-\beta_2^t)}
修正S^t=(1−β2t)St
第五,更新参数,初始的学习率
α
\alpha
α 乘以梯度均值与梯度方差的平方根之比,
ϵ
\epsilon
ϵ 一般取一个很小的值防止除数为
0
0
0:
W
t
=
W
t
−
1
−
α
V
^
t
S
^
t
+
ϵ
W_t = W_{t-1} - \alpha \frac{\hat{V}_t}{\sqrt{ \hat{S}_t}+\epsilon}
Wt=Wt−1−αS^t+ϵV^t