mini-batch 梯度下降
1、为什么要使用mini-batch
和batch相比,mini-batch计算开销较小、计算速度快,适应与大批量的数据集,支持在线学下。
和 随机梯度下降相比,mini-batch更容易收敛,梯度下降的有效性较大。
batch梯度下降如下图:
momentum
1、为什么使用Momentum
mini-batch gradient 中,每一个小批量的数据集都是全部数据的子集,其分布不一定符合数据的整体分布,因此在梯度下降的时候会产生震荡,影响学习效率。因此使用momentum 消减mini-batch 梯度下降的震荡。
使用momentum 的更新规则:
L 表示第L层
v
d
W
[
l
]
=
β
v
d
W
[
l
]
+
(
1
−
β
)
d
W
[
l
]
v_{dW^{[l]}}=\beta v_{dW^{[l]}}+(1-\beta)dW^{[l]}
vdW[l]=βvdW[l]+(1−β)dW[l]
W
[
l
]
=
W
[
l
]
−
α
v
d
W
[
l
]
W^{[l]}=W^{[l]}-\alpha v_{dW^{[l]}}
W[l]=W[l]−αvdW[l]
Adam
adam 是一个比较强大的优化算法,
{
v
W
[
l
]
=
β
1
v
W
[
l
]
+
(
1
−
β
1
)
∂
J
∂
W
[
l
]
v
W
[
l
]
c
o
r
r
e
c
t
e
d
=
v
W
[
l
]
1
−
(
β
1
)
t
s
W
[
l
]
=
β
2
s
W
[
l
]
+
(
1
−
β
2
)
(
∂
J
∂
W
[
l
]
)
2
s
W
[
l
]
c
o
r
r
e
c
t
e
d
=
s
W
[
l
]
1
−
(
β
2
)
t
W
[
l
]
=
W
[
l
]
−
α
v
W
[
l
]
c
o
r
r
e
c
t
e
d
s
W
[
l
]
c
o
r
r
e
c
t
e
d
+
ε
\begin{cases} v_{W^{[l]}} = \beta_1 v_{W^{[l]}} + (1 - \beta_1) \frac{\partial J }{ \partial W^{[l]} } \\ v^{corrected}_{W^{[l]}} = \frac{v_{W^{[l]}}}{1 - (\beta_1)^t} \\ s_{W^{[l]}} = \beta_2 s_{W^{[l]}} + (1 - \beta_2) (\frac{\partial J }{\partial W^{[l]} })^2 \\ s^{corrected}_{W^{[l]}} = \frac{s_{W^{[l]}}}{1 - (\beta_2)^t} \\ W^{[l]} = W^{[l]} - \alpha \frac{v^{corrected}_{W^{[l]}}}{\sqrt{s^{corrected}_{W^{[l]}}}+\varepsilon} \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧vW[l]=β1vW[l]+(1−β1)∂W[l]∂JvW[l]corrected=1−(β1)tvW[l]sW[l]=β2sW[l]+(1−β2)(∂W[l]∂J)2sW[l]corrected=1−(β2)tsW[l]W[l]=W[l]−αsW[l]corrected+εvW[l]corrected
其中
β
1
、
β
2
\beta_1、\beta_2
β1、β2时两个超参数
可以在tensorflow 中使用:tf.train.AdamOptimizer
参考
https://www.coursera.org/learn/deep-neural-network?specialization=deep-learning
https://keras.io/zh/optimizers/