神经网络优化——梯度下降常用算法:min-batch、随机梯度下降(SGD)、批量梯度下降、Momentum、move average、RMSprop、Adma
简介
- 梯度下降算法是应用于神经网络反向传播过程的计算梯度,然后更新参数,最终找到最优的位置。本博客主要介绍随机梯度下降、批处理梯度下降、Momentum、move average、RMSprop、Adma。也是对Andrew NG 的deeplearning.ai 课程的部分内容进行总结。
算法原理
-
1、 随机梯度下降和批量梯度下降都是基于min-batch的,他们区别是 batch size大小不一样。
- min-batch就是把数据分为
n
u
m
b
e
r
s
m
i
n
−
b
a
t
c
h
\frac{numbers}{min-batch}
min−batchnumbers组,
n
u
m
b
e
r
s
numbers
numbers代表样本总数目,每组里有
m
i
n
−
b
a
t
c
h
min-batch
min−batch个样本,随机梯度下降就是 min-batch size = 1。批处理是m-batch size >1,正常是
2
n
2^n
2n(64 128 256 512 1024 …),假设loss是Cross Entrophy, Cross Entrophy 公式里的
m
m
m就是等于min-batch size。按批次的计算梯度和loss,而不是所有样本处理完再计算,这样会加快训练速度.
上图左边图像就是没采用mini-batch策略的loss图,右侧是采用mini-batch策略,可以看出来右边曲线上下抖动,那是因为参数可能对有些batcn里面数据效果比较好或差,不过只要有下降趋势,效果还是比左侧图好并训练速度更快。
- min-batch就是把数据分为
n
u
m
b
e
r
s
m
i
n
−
b
a
t
c
h
\frac{numbers}{min-batch}
min−batchnumbers组,
n
u
m
b
e
r
s
numbers
numbers代表样本总数目,每组里有
m
i
n
−
b
a
t
c
h
min-batch
min−batch个样本,随机梯度下降就是 min-batch size = 1。批处理是m-batch size >1,正常是
2
n
2^n
2n(64 128 256 512 1024 …),假设loss是Cross Entrophy, Cross Entrophy 公式里的
m
m
m就是等于min-batch size。按批次的计算梯度和loss,而不是所有样本处理完再计算,这样会加快训练速度.
-
2、 move average
move average也称为指数加权平均算法。用前面一个优化后的值和当前值进行加权计算,优化当前值,让曲线更加平滑。
v t = β v t − 1 + ( 1 − β ) θ t ( 1 ) v_t = \beta v_{t-1} + (1-\beta) \theta_t \qquad(1) vt=βvt−1+(1−β)θt(1)
v t v_t vt:代表 t t t时刻优化后的 v v v,上图就是 t t t时刻优化后温度
v t − 1 v_{t-1} vt−1:代表 t − 1 t-1 t−1时刻优化后的温度。
β \beta β:代表权重,正常取0.8-0.999,正常取0.9.
θ t \theta_t θt:代表 t t t时刻的值,上图就是 t t t时刻的温度
利用 v t − 1 、 β 、 θ t v_{t-1}、 \beta、\theta_t vt−1、β、θt优化 v t v_{t} vt,优化后的曲线。
- move average 偏差纠正,由于
v
0
初
始
时
候
v
0
=
0
v_0初始时候 v_0=0
v0初始时候v0=0,所以
v
1
=
β
v
0
+
(
1
−
β
)
θ
1
=
(
1
−
β
)
θ
1
v_1 = \beta v_0 + (1- \beta)\theta_1 = (1-\beta)\theta_1
v1=βv0+(1−β)θ1=(1−β)θ1会造成刚开始时候
v
t
v_t
vt较小,很偏离
θ
t
\theta_t
θt,所以要进行偏差纠正。用公式(1)计算完后,再对
v
t
v_t
vt纠正偏差。
v t = v t 1 − β t ( 2 ) v_t = \frac{vt}{1-\beta^t}\qquad(2) vt=1−βtvt(2)
- move average 偏差纠正,由于
v
0
初
始
时
候
v
0
=
0
v_0初始时候 v_0=0
v0初始时候v0=0,所以
v
1
=
β
v
0
+
(
1
−
β
)
θ
1
=
(
1
−
β
)
θ
1
v_1 = \beta v_0 + (1- \beta)\theta_1 = (1-\beta)\theta_1
v1=βv0+(1−β)θ1=(1−β)θ1会造成刚开始时候
v
t
v_t
vt较小,很偏离
θ
t
\theta_t
θt,所以要进行偏差纠正。用公式(1)计算完后,再对
v
t
v_t
vt纠正偏差。
-
3、Momentum 梯度下降算法是结合move average的。在神经网络中,主要计算梯度 d W , d b dW,db dW,db, α \alpha α代表学习速率。这里就举例这两个。moment就是对 d W , d b dW,db dW,db进行优化。 v d W 、 v d b 初 始 化 为 0 , 维 度 和 W 、 b 相 同 vdW、vdb初始化为0,维度和W、b 相同 vdW、vdb初始化为0,维度和W、b相同
v d W = β ∗ v d W + ( 1 − β ) d W ( 3 ) vdW = \beta *vdW + (1-\beta)dW \qquad (3) vdW=β∗vdW+(1−β)dW(3)
v d b = β ∗ v d b + ( 1 − β ) d b ( 4 ) vdb = \beta *vdb + (1-\beta)db \qquad(4) vdb=β∗vdb+(1−β)db(4)
W : = W − α ∗ v d W ( 5 ) W := W - \alpha*vdW \qquad(5) W:=W−α∗vdW(5)
b : = b − α ∗ v d b ( 6 ) b := b - \alpha*vdb\qquad(6) b:=b−α∗vdb(6) -
4、RMSprop梯度下降优化算法
RMSprop和momentum区别就是对 d W d b dW db dWdb取平方,是整个矩阵平方。
s d W = β ∗ s d W + ( 1 − β ) d W 2 ( 7 ) sdW = \beta *sdW + (1-\beta)dW^2 \qquad (7) sdW=β∗sdW+(1−β)dW2(7)
s d b = β ∗ s d b + ( 1 − β ) d b 2 ( 8 ) sdb = \beta *sdb + (1-\beta)db^2 \qquad(8) sdb=β∗sdb+(1−β)db2(8)
W : = W − α ∗ d W s d W ( 9 ) W := W - \alpha*\frac{dW}{\sqrt {sdW}} \qquad(9) W:=W−α∗sdWdW(9)
b : = b − α ∗ d b s d b ( 10 ) b := b - \alpha*\frac{db}{\sqrt{sdb}}\qquad(10) b:=b−α∗sdbdb(10) -
5、Adam*梯度优化算法
Adam是把momentum和RMSprop结合起来,有个特点就是他的超参比较多。 β 1 、 β 2 、 α \beta_1、\beta_2、\alpha β1、β2、α,主要是调节参数 α \alpha α
v d W = β 1 ∗ v d W + ( 1 − β 1 ) d W ( 11 ) vdW = \beta_1 *vdW + (1-\beta_1)dW \qquad (11) vdW=β1∗vdW+(1−β1)dW(11)
v d b = β 1 ∗ v d b + ( 1 − β 1 ) d b ( 12 ) vdb = \beta_1 *vdb + (1-\beta_1)db \qquad(12) vdb=β1∗vdb+(1−β1)db(12)
s d W = β 2 ∗ s d W + ( 1 − β 2 ) d W 2 ( 13 ) sdW = \beta_2 *sdW + (1-\beta_2)dW^2 \qquad (13) sdW=β2∗sdW+(1−β2)dW2(13)
s d b = β 2 ∗ s d b + ( 1 − β 2 ) d b 2 ( 14 ) sdb = \beta_2 *sdb + (1-\beta_2)db^2 \qquad(14) sdb=β2∗sdb+(1−β2)db2(14)
W : = W − α ∗ v d W s d W ( 15 ) W := W - \alpha*\frac{vdW}{\sqrt {sdW}} \qquad(15) W:=W−α∗sdWvdW(15)
b : = b − α ∗ v d b s d b ( 16 ) b := b - \alpha*\frac{vdb}{\sqrt{sdb}}\qquad(16) b:=b−α∗sdbvdb(16)
总结
- 利用指数加权平均可以让梯度在纵轴方向上下抖动减小,加快训练和收敛。