二、Tips for Training: Batch and Momentum
1、Batch
(1)目标任务: θ ∗ = a r g min θ L \theta^*=arg\min \limits_\theta L θ∗=argθminL;
(2)操作:每次在所有的训练集中选取一个Batch然后进行梯度下降后更新参数,Epoch尾进行一次Shuffle:
g
i
=
∇
L
i
(
θ
j
)
u
p
d
a
t
e
θ
j
−
η
g
i
→
θ
j
+
1
{\color{green}g^i}=\nabla L^i(\theta^j) \qquad update \quad \theta^j-{\color{red}\eta \color{green}g^i}\to \theta^{j+1}
gi=∇Li(θj)updateθj−ηgi→θj+1
(3)为什么要使用Batch?
大的Batch训练梯度下降比较直接,小的则会比较Noisy,但是因为其训练的时候针对每个小Batch就会从每个局部最优跳来跳去,可以不会陷入局部最优,另外,小的Batch也对Testing的时候比较好;
我们认为局部最优解如果该点曲率比较小(平原上),则其是一个比较好的局部最优解;
所以,Batch Size是一个我们需要去调的超参数;
2、Momentum
(1)理解:一般的梯度下降中,我们只是向着梯度方向的反方向移动参数,但是添加了Momentum的时候,就变成了如下形式:
g
i
=
∇
L
i
(
θ
j
)
u
p
d
a
t
e
θ
i
+
λ
m
i
−
η
g
i
→
θ
i
+
1
,
{\color{green}g^i}=\nabla L^i(\theta^j) \qquad update \quad \theta^i+\lambda m^i-{\color{red}\eta \color{green}g^i}\to \theta^{i+1},
gi=∇Li(θj)updateθi+λmi−ηgi→θi+1,
其中,
m
i
m^i
mi为前一步移动的步长:
λ
m
i
−
1
−
η
g
i
−
1
\lambda m^{i-1}-\eta g^{i-1}
λmi−1−ηgi−1;
(2)优势:添加了Momentum会考虑前面计算到的所有梯度,而不是只有上一次的梯度;