【深度学习基础】梯度下降的优化算法
可以直接挑战博客:
常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
Mini-batch
1. 定义
**最速梯度下降法(Batch Gradient Descent, BSD)**是将所有训练集所有的梯度计算之后,再更新参数,这样大部分时间浪费在计算梯度上。
mini-batch是将训练集进行分组,分组之后,分别对每组求梯度,然后更新参数。
例如我们把100万样本分成1000份, 每份1000个样本, 这些子集就称为mini batch。然后我们分别用一个for循环遍历这1000个子集。 针对每一个子集做一次梯度下降。 然后更新参数w和b的值。接着到下一个子集中继续进行梯度下降。 这样在遍历完所有的mini batch之后我们相当于在梯度下降中做了1000次迭代。
1 epoch是指一次遍历了训练集,包括所有的mini-batch。
见下图,左边是full batch的梯度下降效果。 可以看到每一次迭代成本函数都呈现下降趋势,这是好的现象,说明我们w和b的设定一直再减少误差。 这样一直迭代下去我们就可以找到最优解。 右边是mini batch的梯度下降效果,可以看到它是上下波动的,成本函数的值有时高有时低,但总体还是呈现下降的趋势。 这个也是正常的,因为我们每一次梯度下降都是在min batch上跑的而不是在整个数据集上。 数据的差异可能会导致这样的效果(可能某段数据效果特别好,某段数据效果不好)。但没关系,因为他整体的是呈下降趋势的。
把下面的图看做是梯度下降空间。 图1是full batch的图2是mini batch。 就像上面说的mini batch不是每次迭代损失函数都会减少,所以看上去好像走了很多弯路。 不过整体还是朝着最优解迭代的。 而且由于mini batch一个epoch就走了5000步,而full batch一个epoch只有一步。所以虽然mini batch走了弯路但还是会快很多。
2. mini batch的超参
超参:batch size,指每一个mini batch中有多少个样本,也就是块大小,
随机梯度下降法(stochastic gradient descent, SGD):mini-batch size == 1,每个样本都是独立的mini-batch。永远不会收敛,在最小值周边波动。
由于SGD每次只使用一个样本进行迭代,若遇上噪声则容易陷入局部最优解。
3. mini-batch size的选择
我们一般设置为2的n次方。 例如64,128,512,1024. 一般不会超过这个范围。不能太大,因为太大了会无限接近full batch的行为,速度会慢。 也不能太小,太小了以后可能算法永远不会收敛。 当然如果我们的数据比较小, 但也用不着mini batch了。 full batch的效果是最好的。
4. 步骤
- 确定mini-batch size,一般有32、64、128等,按自己的数据集而定,确定mini-batch_num=m/mini-batch_num + 1;
- 在分组之前将原数据集顺序打乱,随机打乱;
- 分组,将打乱后的数据集分组;
- 将分好后的mini-batch组放进迭代循环中,每次循环都做mini-batch_num次梯度下降。
5. BGD, mini batch, SGD的算法收敛性
批梯度处理能够保证算法收敛到最小值(如果选择的学习速率合适的话),可以plot代价函数随迭代次数的曲线,如果曲线是总是下降的,则能够收敛,反之需要调整学习速率。
随机梯度下降并不能保证算法收敛到最小值,最终结果可能是在最小值附近来回游走,为了观察其收敛特性,可以plot每100(1000)次迭代时100个example代价函数函数的平均值,如果是下降趋势,则可以收敛,否则可能需要调整增大或者减小平均的example数(将100改为1000或者10等),减小或者增大学习速率。
指数加权平均
常见数学中的指数加权平均。
v
t
=
β
∗
v
t
−
1
+
(
1
−
β
)
∗
θ
t
v_t = \beta * v_{t-1} + (1-\beta) * \theta_t
vt=β∗vt−1+(1−β)∗θt
在样本的初始进行迭代更新的时候,采用偏差修正的公式进行计算迭代。
偏差修正(Bias correction)
v
t
1
−
β
t
\frac{v_t}{1 - \beta^t}
1−βtvt
动量梯度下降法(Momentum)
公式推导
在时刻t,计算
d
W
d_W
dW,
d
b
d_b
db在当前mini-batch的值:
v
d
W
=
β
∗
v
d
W
+
(
1
−
β
)
∗
d
W
v_{d_W} = \beta * v_{d_W} + (1 - \beta) * d_W
vdW=β∗vdW+(1−β)∗dW
d
d
b
=
β
∗
v
d
b
+
(
1
−
β
)
∗
d
b
d_{d_b} = \beta * v_{d_b} + (1 - \beta) * d_b
ddb=β∗vdb+(1−β)∗db
W
:
=
W
−
α
∗
v
d
w
,
b
:
=
b
−
α
∗
v
d
b
W := W - \alpha * v_{d_w}, b := b - \alpha * v_{d_b}
W:=W−α∗vdw,b:=b−α∗vdb
β
\beta
β常用值是0.9。
用微分进行替代,可以降低下降的速度。
RMSprop(root mean square prop)
在时刻t,计算
d
W
d_W
dW,
d
b
d_b
db在当前mini-batch的值:
S
d
W
=
β
∗
S
d
W
+
(
1
−
β
)
∗
[
d
W
]
2
S_{d_W} = \beta * S_{d_W} + (1 - \beta) * [d_W] ^ 2
SdW=β∗SdW+(1−β)∗[dW]2
S
d
b
=
β
∗
S
d
b
+
(
1
−
β
)
∗
[
d
b
]
2
S_{d_b} = \beta * S_{d_b} + (1 - \beta) * [d_b] ^ 2
Sdb=β∗Sdb+(1−β)∗[db]2
W
:
=
W
−
α
∗
d
W
S
d
W
2
,
b
:
=
b
−
α
∗
d
b
S
d
b
2
W := W - \alpha * \frac{d_W}{\sqrt[2]{S_{d_W}}}, b := b - \alpha * \frac{d_b}{\sqrt[2]{S_{d_b}}}
W:=W−α∗2SdWdW,b:=b−α∗2Sdbdb
Adam优化算法(Adaptive Moment Estimation)
Adam优化算法(Adaptive Moment Estimation),综合了Momentum和RMSprop算法,黄色框是Momentum,红色框是RMSprop。该算法在各种网络结构上的表现都较好。
参考