目标:
1. 分割数据集(使用mini_batch)
2. 优化梯度下降算法:
2.1 标准梯度下降算法(不优化)
2.2 分mini_batch的梯度下降
2.3 Momentum
2.4 Adam
数据集

标准梯度下降
W
[
l
]
=
W
[
l
]
−
α
d
W
W^{[l]} = W^{[l]} - \alpha~dW
W[l]=W[l]−α dW
b
[
l
]
=
b
[
l
]
−
α
d
b
b^{[l]} = b^{[l]} - \alpha~db
b[l]=b[l]−α db
分mini_batch
第一步:打算顺序
打乱训练集的顺序
第二步:分割
(这里取mini_batch_size = 64)
按照mini_batch_size大小,分割训练集
每个batch大小<=mini_batch_size
小批量梯度下降
就是在每个batch之后进行参数的更新
当mini_batch_size = 1时,
此时算法就是随机梯度下降(SGD)
小批量(mini-batch)梯度下降法:
- 每轮的迭代样本数量更少,能更快的更新参数
- 利用向量化加快每次迭代速度


第0次遍历整个数据集,当前误差值:0.690735512291113
第1000次遍历整个数据集,当前误差值:0.6852725328458241
第2000次遍历整个数据集,当前误差值:0.6470722240719002
第3000次遍历整个数据集,当前误差值:0.6195245549970402
第4000次遍历整个数据集,当前误差值:0.5765844355950943
第5000次遍历整个数据集,当前误差值:0.6072426395968575
第6000次遍历整个数据集,当前误差值:0.5294033317684576
第7000次遍历整个数据集,当前误差值:0.46076823985930115
第8000次遍历整个数据集,当前误差值:0.465586082399045
第9000次遍历整个数据集,当前误差值:0.4645179722167684
Accuracy: 0.7966666666666666
Momentum
包含动量的梯度下降
当前梯度变化,需要考虑上之前梯度的变化。使用【指数加权平均数】作为之前梯度的衡量值。
指数加权平均数
共有m个样本,则第i个样本的指数加权平均数 v i = β v i − 1 + ( 1 − β ) θ i v_i = \beta v_{i-1} + (1-\beta) \theta_i vi=βvi−1+(1−β)θi,其中 θ i \theta_i θi表示第i个样本的值。
由于 小批量梯度下降 只看到了一个子集参数的更新,所以 小批量梯度下降 将“震荡”地走向收敛(如果学习率learning_rate不变,将在收敛点徘徊)
使用 Momentum之后,可以平滑这些“震荡”
{ v d w [ l ] = β v d w [ l ] + ( 1 − β ) d W [ l ] W [ l ] = W [ l ] − α v d w [ l ] \left\{ \begin{aligned} v_{dw^{[l]}} &= \beta v_{dw^{[l]}} + (1 - \beta) dW^{[l]} \\ W^{[l]} &= W^{[l]} - \alpha v_{dw^{[l]}} \end{aligned} \right. {vdw[l]W[l]=βvdw[l]+(1−β)dW[l]=W[l]−αvdw[l]
{ v d b [ l ] = β v d b [ l ] + ( 1 − β ) d b [ l ] b [ l ] = b [ l ] − α v d b [ l ] \left\{ \begin{aligned} v_{db^{[l]}} &= \beta v_{db^{[l]}} + (1 - \beta) db^{[l]} \\ b^{[l]} &= b^{[l]} - \alpha v_{db^{[l]}} \end{aligned} \right. {vdb[l]b[l]=βvdb[l]+(1−β)db[l]=b[l]−αvdb[l]
注:
- 当beta = 0 时,算法相当于没有使用momentum的【标准梯度下降算法】
- beta越大,说明平滑作用越明显,(但不是越大越好,因为还要保留一部分正确的方向),通常取beta=0.9
- Momentum算法在一开始时,效果偏差较大,可以采用 v / = ( 1 − β t ) v /= (1 - \beta^t) v/=(1−βt) ,其中t(t>0)为当前迭代次数


第0次遍历整个数据集,当前误差值:0.6907412988351506
第1000次遍历整个数据集,当前误差值:0.6853405261267578
第2000次遍历整个数据集,当前误差值:0.6471448370095255
第3000次遍历整个数据集,当前误差值:0.6195943032076022
第4000次遍历整个数据集,当前误差值:0.5766650344073023
第5000次遍历整个数据集,当前误差值:0.607323821900647
第6000次遍历整个数据集,当前误差值:0.5294761758786997
第7000次遍历整个数据集,当前误差值:0.46093619004872366
第8000次遍历整个数据集,当前误差值:0.465780093701272
第9000次遍历整个数据集,当前误差值:0.4647395967922748
Accuracy: 0.7966666666666666
Adam
Adam算法是训练神经网络中,最有效的算法之一,它是RMSprop算法和Momentum算法的结合体
- 计算梯度【指数加权平均数】,v(偏差修正前), v c o r r e c t e d v^{corrected} vcorrected(偏差修正后)
- 计算梯度【平方的指数加权平均数】,s(偏差修正前), s c o r r e c t e d s^{corrected} scorrected(偏差修正后)
- 更新参数
{ v d W [ l ] = β 1 v d W [ l ] + ( 1 − β 1 ) d W [ l ] v d W [ l ] c o r r e c t e d = v d W [ l ] 1 − β 1 t s d W [ l ] = β 2 s d W [ l ] + ( 1 − β 2 ) ( d W [ l ] ) 2 s d W [ l ] c o r r e c t e d = s d W [ l ] 1 − β 2 t W [ l ] = W [ l ] − α v d W [ l ] c o r r e c t e d s d W [ l ] c o r r e c t e d + ϵ \left\{ \begin{aligned} &v_{dW^{[l]}} = \beta_1 v_{dW^{[l]}} + (1 - \beta_1)dW^{[l]} \\ &v_{dW^{[l]}}^{corrected} = {v_{dW^{[l]}} \over 1-\beta_1^t} \\ &s_{dW^{[l]}} = \beta_2 s_{dW^{[l]}} + (1 - \beta_2)(dW^{[l]})^2 \\ &s_{dW^{[l]}}^{corrected} = {s_{dW^{[l]}} \over 1-\beta_2^t} \\ &W^{[l]} = W^{[l]} - \alpha {v_{dW^{[l]}}^{corrected} \over \sqrt{s_{dW^{[l]}}^{corrected}}+\epsilon} \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧vdW[l]=β1vdW[l]+(1−β1)dW[l]vdW[l]corrected=1−β1tvdW[l]sdW[l]=β2sdW[l]+(1−β2)(dW[l])2sdW[l]corrected=1−β2tsdW[l]W[l]=W[l]−αsdW[l]corrected+ϵvdW[l]corrected
需要加上一个较小的 ϵ \epsilon ϵ是因为避免除以0,导致出错


第0次遍历整个数据集,当前误差值:0.6905522446113365
第1000次遍历整个数据集,当前误差值:0.18550136438550577
第2000次遍历整个数据集,当前误差值:0.1508304657525321
第3000次遍历整个数据集,当前误差值:0.0744543857099718
第4000次遍历整个数据集,当前误差值:0.1259591565133716
第5000次遍历整个数据集,当前误差值:0.10434443534245483
第6000次遍历整个数据集,当前误差值:0.10067637504120651
第7000次遍历整个数据集,当前误差值:0.031652030135115625
第8000次遍历整个数据集,当前误差值:0.11197273131244206
第9000次遍历整个数据集,当前误差值:0.1979400715246548
Accuracy: 0.94
总结
在本例中,
Momentum的效果 和 未使用优化的效果 差不多
Adam的效果就很明显,可以看到Adam优化后,损失函数收敛很快
由于学习率 α \alpha α比较小,且数据集比较简单,所以Momentum的效果不明显。
本文详细介绍了在深度学习中常用的几种优化算法,包括标准梯度下降、小批量梯度下降、Momentum以及Adam算法,并通过实验对比了它们在相同数据集上的表现。
342

被折叠的 条评论
为什么被折叠?



