优化算法
1. Mini-batch梯度下降 (Mini-batch gradient descent)
mini-batch梯度下降大小选择
- 如果训练集较小,直接使用 batch 梯度下降法,一般小于 2000 个样本
- 如果样本数目较大,一般的 mini-batch 大小为 64 到 512,即 2 n 2^n 2n大小
2. 指数加权平均数 (exponentially weighted averages)
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
{{v}_{t}}=\beta {{v}_{t-1}}+(1-\beta ){{\theta }_{t}}
vt=βvt−1+(1−β)θt
3. 动量梯度下降法 (Gradient descent with Momentum)
动量梯度下降法可以加快梯度下降速度,常被使用
在第 t t t次迭代中:
- 在当前的mini-batch中计算 d W dW dW, d b db db
- v d W = β v d W + ( 1 − β ) d W v_{dW}=\beta v_{dW}+(1-\beta)dW vdW=βvdW+(1−β)dW
- v d b = β v d b + ( 1 − β ) d b v_{db}=\beta v_{db}+(1-\beta)db vdb=βvdb+(1−β)db
- W = W − α v d W , b = b − α v d b W=W-\alpha v_{dW}, b=b-\alpha v_{db} W=W−αvdW,b=b−αvdb
超参数: α , β \alpha, \beta α,β,其中 β \beta β常用值是 β = 0.9 \beta=0.9 β=0.9
v d W v_{{dW}} vdW初始值是0,要注意到这是和 d W dW dW拥有相同维数的零矩阵,也就是跟 W W W拥有相同的维数, v d b v_{db} vdb的初始值也是向量零,所以和 d b db db拥有相同的维数,也就是和 b b b是同一维数。
4. RMSprop (root mean square prop)
可以加速梯度下降速度
在第 t t t次迭代中:
- 计算当下mini-batch的微分 d W dW dW, d b db db
- S d W = β S d W + ( 1 − β ) d W 2 S_{dW}= \beta S_{dW} + (1 -\beta) {dW}^{2} SdW=βSdW+(1−β)dW2,(平方是针对这一整个符号操作的)
- S d b = β S d b + ( 1 − β ) d b 2 S_{db}= \beta S_{db} + (1 - \beta){db}^{2} Sdb=βSdb+(1−β)db2,(平方是针对整个符号的操作的)
- 更新参数值, W : = W − a d W S d W W:= W -a\frac{dW}{\sqrt{S_{dW}}} W:=W−aSdWdW, b : = b − α d b S d b b:=b -\alpha\frac{db}{\sqrt{S_{db}}} b:=b−αSdbdb
要确保你的算法不会除以0,如果 S d W S_{dW} SdW的平方根趋近于0怎么办?为了确保数值稳定,在实际操练的时候,你要在分母上加上一个很小很小的 ε \varepsilon ε, 1 0 − 8 10^{-8} 10−8是个不错的选择
5. Adam优化算法 (Adam optimization algorithm)
初始化,
v
d
W
=
0
v_{dW} = 0
vdW=0,
S
d
W
=
0
S_{dW} =0
SdW=0,
v
d
b
=
0
v_{db} = 0
vdb=0,
S
d
b
=
0
S_{db} =0
Sdb=0
在第
t
t
t次迭代中:
- 用当前的mini-batch计算 d W dW dW, d b db db
- v d W = β 1 v d W + ( 1 − β 1 ) d W v_{dW}= \beta_{1}v_{dW} + ( 1 - \beta_{1})dW vdW=β1vdW+(1−β1)dW, v d b = β 1 v d b + ( 1 − β 1 ) d b v_{db}= \beta_{1}v_{db} + ( 1 -\beta_{1} ){db} vdb=β1vdb+(1−β1)db
- S d W = β 2 S d W + ( 1 − β 2 ) ( d W ) 2 S_{dW}=\beta_{2}S_{dW} + ( 1 - \beta_{2}){(dW)}^{2} SdW=β2SdW+(1−β2)(dW)2, S d b = β 2 S d b + ( 1 − β 2 ) ( d b ) 2 S_{db} =\beta_{2}S_{db} + \left( 1 - \beta_{2} \right){(db)}^{2} Sdb=β2Sdb+(1−β2)(db)2
- v d W corrected = v d W 1 − β 1 t v_{dW}^{\text{corrected}}= \frac{v_{dW}}{1 - \beta_{1}^{t}} vdWcorrected=1−β1tvdW, v d b corrected = v d b 1 − β 1 t v_{db}^{\text{corrected}} =\frac{v_{db}}{1 -\beta_{1}^{t}} vdbcorrected=1−β1tvdb (偏差修正)
- S d W corrected = S d W 1 − β 2 t S_{dW}^{\text{corrected}} =\frac{S_{dW}}{1 - \beta_{2}^{t}} SdWcorrected=1−β2tSdW, S d b corrected = S d b 1 − β 2 t S_{db}^{\text{corrected}} =\frac{S_{db}}{1 - \beta_{2}^{t}} Sdbcorrected=1−β2tSdb (偏差修正)
- W : = W − a v d W corrected S d W corrected + ε W:= W - \frac{a v_{dW}^{\text{corrected}}}{\sqrt{S_{dW}^{\text{corrected}}} +\varepsilon} W:=W−SdWcorrected+εavdWcorrected
- b : = b − α v db corrected S db corrected + ε b:=b - \frac{\alpha v_{\text{db}}^{\text{corrected}}}{\sqrt{S_{\text{db}}^{\text{corrected}}} +\varepsilon} b:=b−Sdbcorrected+εαvdbcorrected
超参数的选择:
- α \alpha α:需要调试
- β 1 = 0.9 \beta_{1}=0.9 β1=0.9 (缺省值),是 d W dW dW和 d b db db的指数加权平均数,是Momentum涉及的项
- β 2 = 0 、 999 \beta_{2}=0、999 β2=0、999 (缺省值),是 ( d W ) 2 {(dW)}^{2} (dW)2和 ( d b ) 2 {(db)}^{2} (db)2的指数加权平均值,是RMSprop涉及的项
- ε = 1 0 − 8 \varepsilon =10^{-8} ε=10−8 (缺省值)
6. 学习率衰减 (Learning rate decay)
拆分成不同的 mini-batch,第一次遍历训练集叫做第一代,第二次就是第二代,以此类推。
学习率衰减有以下几种:
- a = 1 1 + d e c a y _ r a t e ∗ e p o c h _ n u m a 0 a= \frac{1}{1 + {decay\_rate} * {epoch\_num}}a_{0} a=1+decay_rate∗epoch_num1a0 ( d e c a y _ r a t e {decay\_rate} decay_rate称为衰减率, e p o c h _ n u m {epoch\_num} epoch_num为代数, α 0 \alpha_{0} α0为初始学习率)
- a = 0.95 epoch-num a 0 a ={0.95}^{\text{epoch-num}} a_{0} a=0.95epoch-numa0 (指数衰减)
- a = k epoch-num a 0 a =\frac{k}{\sqrt{\text{epoch-num}}}a_{0} a=epoch-numka0 或者 a = k t a 0 a =\frac{k}{\sqrt{t}}a_{0} a=tka0( t t t为mini-batch的数字)
- 离散下降(discrete stair cease),即某个步骤有某个学习率,一会之后,学习率减少了一半,一会儿减少一半,一会儿又一半