优化器optimizer

GD

θ t = θ t − 1 − α   ∂ L o s s ∂ θ t − 1 \theta_t=\theta_{t-1}-\alpha\ \frac{\partial Loss}{\partial \theta_{t-1}} θt=θt1α θt1Loss
有三种,sgd,bgd,mini-batch gd,s,b, gd分别指stochastic, batch, gradient descent。区别分别是每一步计算一项,一小批,全部数据。在实现的时候,dataloader的batchsize分别是1,num_mini_batch, len(data)。

Exponentially Weighted (Moving) Average

θ i \theta_i θi表示第 i i i天温度, β \beta β 是超参数设为0.9, v i v_i vi表示第 i i i天以及前面的 1 / ( 1 − β ) − 1 1/(1-\beta)-1 1/(1β)1天的一共 1 / ( 1 − β ) 1/(1-\beta) 1/(1β)天的指数加权移动平均(exponentially weighted moving average),简称关于 θ i \theta_i θi的移动平均数(moving average), 设 v 0 v_0 v0=0, 那么有:
v 0 = 0 v_0=0 v0=0
v 1 = 0.9 v 0 + 0.1 θ 1 v_1 = 0.9v_0+0.1\theta_1 v1=0.9v0+0.1θ1

v t = 0.9 v t − 1 + 0.1 θ t v_t = 0.9v_{t-1}+0.1\theta_t vt=0.9vt1+0.1θt
β \beta β分别取0.9,0.98,0.5分别表示10天,50天,2天的移动平均温度。
β \beta β取值过大,表示更多天的移动平均温度,拟合出来的线比真实的线有延迟,因为惯性太大。
过小表示更少天数的移动平均温度,拟合出来的线是锯齿状的,存在噪声,很不平滑,因为由过少的天数的温度决定,受局部的几天的温度影响很大,所以不稳定。
v 100 = 0.1 θ 100 + 0.9 v 99 = 0.1 θ 100 + 0.1 ∗ 0.9 θ 99 + 0.1 ∗ 0. 9 2 θ 98 + . . . + 0.1 ∗ 0. 9 9 θ 91 v_{100}=0.1\theta_{100}+0.9v_{99}=0.1\theta_{100}+0.1*0.9\theta_{99}+0.1*0.9^2\theta_{98}+...+0.1*0.9^{9}\theta_{91} v100=0.1θ100+0.9v99=0.1θ100+0.10.9θ99+0.10.92θ98+...+0.10.99θ91
指数加权体现在每一个 θ \theta θ前都有一个关于 β \beta β的指数的系数,比如上面的 v 100 v_{100} v100,每一个 θ \theta θ前都有一个关于0.9的指数的系数。

Bias Correction

由于一开始设定的 v 0 v_0 v0为0,导致初始阶段的v都很小,要迭代一段时间(warm up)后才能拟合的好。
偏差修正(bias correction)可以解决这个问题:
v t c o r r = v t 1 − β t v_t^{corr} = \frac{v_t}{1-\beta^t} vtcorr=1βtvt
一开始 t t t小, β t \beta^t βt大,分母小,v_t^corr大, 解决一开始 v t v_t vt小的问题
后面 t t t大, β t \beta^t βt接近0, v t v_t vt接近 v t c o r r v_t^{corr} vtcorr,解释了warm up 后不需要校正的现象。

Gradient Descent with Momentum

on iter t t t:
 compute d w dw dw, d b db db on current mini-batch
V d w = β V d w + ( 1 − β ) d w   ( 1 ) V_{dw}=\beta V_{dw} + (1-\beta)dw \ (1) Vdw=βVdw+(1β)dw (1)
V d b = β V d b + ( 1 − β ) d b   ( 2 ) V_{db}=\beta V_{db}+(1-\beta)db \ (2) Vdb=βVdb+(1β)db (2)
w = w − α V d w   ( 3 ) w=w-\alpha V_{dw} \ (3) w=wαVdw (3)
b = b − α V d b   ( 4 ) b=b-\alpha V_{db} \ (4) b=bαVdb (4)
(1),(2)是momentum, (3),(4)是gd。 V d w V_{dw} Vdw是关于 d w dw dw的指数加权移动平均。
momentum使得gd的过程更稳定,loss曲线更平滑,减少噪声。
β \beta β取0.9,通常不使用偏差修正(bias correction),因为epoch的个数足够,一开始的欠拟合不影响最终的结果。
V d w = 0 V_{dw}=0 Vdw=0,矩阵,和w的形状一样。
V d b = 0 V_{db}=0 Vdb=0,向量,和b的形状一样。
对于(1),(2),有人会去掉 ( 1 − β ) (1-\beta) (1β),去没去掉都work,推荐保留。

Gradient Descent with RMSProp

Momentum可以加快梯度下降的过程,RMSProp也可以。举例来说,假设水平方向是最快到达loss最低点的,但是由于竖直方向的梯度太大,水平方向的梯度太小,会导致竖直方向的步伐太大,水平方向的步伐太小,导致很慢到达loss最低点,RMSProp可以避免这种情况:
on iter t:
S d w = β S d w + ( 1 − β ) ( d w ) 2   ( 1 ) S_{dw}=\beta S_{dw}+(1-\beta) (dw)^2 \ (1) Sdw=βSdw+(1β)(dw)2 (1)
S d b = β S d b + ( 1 − β ) ( d b ) 2   ( 2 ) S_{db}=\beta S_{db}+(1-\beta)(db)^2 \ (2) Sdb=βSdb+(1β)(db)2 (2)
w = w − α d w S d w + ϵ   ( 3 ) w=w-\alpha \frac{dw}{\sqrt {S_{dw}}+\epsilon} \ (3) w=wαSdw +ϵdw (3)
b = b − α d b S d b + ϵ   ( 4 ) b=b-\alpha \frac{db}{\sqrt {S_{db}}+\epsilon} \ (4) b=bαSdb +ϵdb (4)
(1), (2)是关于 ( d w ) 2 (dw)^2 (dw)2的移动平均。
(3), (4)是在梯度下降的基础上,将导数除以了一个移动平均的开方。
当某个梯度很大,比如 d w dw dw很大,则 S d w S_{dw} Sdw很大,那么 α d w S d w + ϵ \alpha \frac{dw}{\sqrt {S_{dw}}+\epsilon} αSdw +ϵdw就小,避免因为 d w dw dw很大导致这个方向的步伐过大使得收敛变慢。
当某个梯度很小,比如 d b db db很小,则 S d b S_{db} Sdb很大,那么 α d b S d b + ϵ \alpha \frac{db}{\sqrt {S_{db}}+\epsilon} αSdb +ϵdb变大,避免因为 d b db db很小导致这个方向的步伐过小使得收敛变慢。

Adam

Adam是momentum 和RMSProp的结合:
V d w = 0 V_{dw}=0 Vdw=0, V d b = 0 V_{db}=0 Vdb=0
S d w = 0 S_{dw}=0 Sdw=0, S d b = 0 S_{db}=0 Sdb=0
on iter t:
 compute d w dw dw, d b db db on current mini-batch
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}+(1-\beta_2)(db)^2 Sdb=β2Sdb+(1β2)(db)2
V d w c o r r = V d w 1 − β 1 t V_{dw}^{corr}=\frac{V_{dw}}{1-\beta_1^t} Vdwcorr=1β1tVdw
V d b c o r r = V d b 1 − β 1 t V_{db}^{corr}=\frac{V_{db}}{1-\beta_1^t} Vdbcorr=1β1tVdb
S d w c o r r = S d w 1 − β 2 t S_{dw}^{corr}=\frac{S_{dw}}{1-\beta_2^t} Sdwcorr=1β2tSdw
S d b c o r r = S d b 1 − β 2 t S_{db}^{corr}=\frac{S_{db}}{1-\beta_2^t} Sdbcorr=1β2tSdb
w = w − α V d w c o r r S d w c o r r + ϵ w=w-\alpha \frac{V_{dw}^{corr}}{\sqrt{S_{dw}^{corr}}+\epsilon} w=wαSdwcorr +ϵVdwcorr
b = b − α V d b c o r r S d b c o r r + ϵ b=b-\alpha \frac{V_{db}^{corr}}{\sqrt{S_{db}^{corr}}+\epsilon} b=bαSdbcorr +ϵVdbcorr
α : \alpha: α:自己设定
β 1 : \beta_1: β1: 0.9   first moment
β 2 : \beta_2: β2: 0.999   second monent
ϵ : 1 0 − 8 \epsilon:10^{-8} ϵ:108
Adam:Adaptive moment estimate

Ref

吴恩达老师的视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值