DL基本知识(三)各类深度学习优化器简介

sgd

假设有一个训练任务,其中样本构成为 { ( x ( i ) , y ( i ) ) } ∣ i = 1 m \{(x^{(i)}, y^{(i)})\}|^m_{i=1} {(x(i),y(i))}i=1m,其损失函数为
L ( θ ) = − l o g ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = − ∑ i = 1 m l o g p ( y ( i ) ∣ x ( i ) ; θ ) L(\theta)= -log\prod_{i=1}^{m}p\left ( y^{(i)}|x^{(i)} ;\theta \right ) = -\sum_{i=1}^{m}logp\left ( y^{(i)}|x^{(i)} ;\theta \right ) L(θ)=logi=1mp(y(i)x(i);θ)=i=1mlogp(y(i)x(i);θ)

对模型参数 θ \theta θ来说,其梯度为
g o r i g = ∂ L ( θ ) ∂ θ = − ∂ ∑ i = 1 m l o g p ( y ( i ) ∣ x ( i ) ; θ ) ∂ θ = − ∑ i = 1 m ∂ l o g p ( y ( i ) ∣ x ( i ) ; θ ) ∂ θ g_{orig}=\frac{\partial L(\theta)}{\partial \theta}=-\frac{\partial \sum_{i=1}^{m}logp\left ( y^{(i)}|x^{(i)} ;\theta \right )}{\partial \theta}=-\sum_{i=1}^{m}\frac{\partial logp\left ( y^{(i)}|x^{(i)} ;\theta \right )}{\partial \theta} gorig=θL(θ)=θi=1mlogp(y(i)x(i);θ)=i=1mθlogp(y(i)x(i);θ)

参数更新公式为:
θ : = θ − ϵ ∂ L ( θ ) ∂ θ = θ − ϵ g o r i g \theta :=\theta-\epsilon\frac{\partial L(\theta)}{\partial \theta}=\theta-\epsilon g_{orig} θ:=θϵθL(θ)=θϵgorig

其中 ϵ \epsilon ϵ是学习率。可以看出,每更新一次参数需要计算所有的样本,因而很耗费时间,而batch-sgd的思路为随机找batch_size个样本,仅利用这些样本就完成 θ \theta θ的一次参数更新,公式如下:
g = − ∑ i = 1 b a t c h _ s i z e ∂ l o g p ( y ( i ) ∣ x ( i ) ; θ ) ∂ θ g = -\sum_{i=1}^{batch\_size}\frac{\partial logp\left ( y^{(i)}|x^{(i)} ;\theta \right )}{\partial \theta} g=i=1batch_sizeθlogp(y(i)x(i);θ)

参数更新公式为:
θ : = θ − ϵ g \theta :=\theta-\epsilon g θ:=θϵg

注意BGD、SGD和MBGD的区别:

BGD:batch gradient descent,全量样本进行梯度更新。
SGD:stochastic gradient descent,随机找一个样本进行梯度更新。

momentum

根据<batch-sgd>中的讲述,参数每次更新 − ϵ g -\epsilon g ϵg,这个恒定值会带来很多麻烦,例如:

  1. 如果梯度下降过程中曲面太平坦,如果还按照上述步伐走,梯度下降地会比较缓慢,例如下图所示:
  1. 如果梯度下降过程中太陡峭,下降时会一直震荡,例如下图所示:

上述两种情况都没办法使损失稳定下降。针对上述缺点,momentum引入了 v v v,即梯度的改变量,参数更新为如下公式,其中 α \alpha α为衰减力度,代表的含义是原先的梯度对当前参数更新的影响程度:
v = α v − ε g θ = θ + v \begin{matrix} v=\alpha v - \varepsilon g\\ \theta = \theta+ v \end{matrix} v=αvεgθ=θ+v

多次迭代公式如下,其中 v 1 = − ε g 1 v_1=-\varepsilon g_1 v1=εg1

1 s t : θ = θ + v 1 = θ − ε g 1 2 n d : θ = θ + v 2 = θ + α v 1 − ε g 2 = θ − ε ( α g 1 + g 2 ) . . . \begin{matrix} 1st: \theta=\theta+v_1 = \theta-\varepsilon g_1\\ 2nd: \theta=\theta+v_2 = \theta + \alpha v_1 -\varepsilon g_2 = \theta -\varepsilon (\alpha g_1+g_2)\\ ... \end{matrix} 1st:θ=θ+v1=θεg12nd:θ=θ+v2=θ+αv1εg2=θε(αg1+g2)...

通过第二个公式可以得到:如果本次和上次梯度符号相同,损失则会加速下降(幅度变大),从而解决原先下降太慢的问题;如果符号相反,则这次更新和上次相互抑制,减缓震荡。

adagrad

momentum一个缺点在于对于 θ \theta θ的每一维数据,其学习率都是相同的,adagrad则对低频参数进行较大更新,高频参数进行较小更新,公式如下:
θ t + 1 , i = θ t , i − ϵ G t , i + σ g t , i \theta_{t+1,i}=\theta_{t,i}-\frac{\epsilon}{\sqrt{G_{t,i}+\sigma}}g_{t,i} θt+1,i=θt,iGt,i+σ ϵgt,i

其中 θ t , i \theta_{t,i} θt,i代表第t轮更新 θ \theta θ的第i维数据, G t , i = ∑ k = 1 t g t , i 2 G_{t,i}=\sum_{k=1}^tg_{t,i}^2 Gt,i=k=1tgt,i2 σ \sigma σ为平滑项,可以看出对于低频参数,其 G t , i G_{t,i} Gt,i较小,因而参数更新的幅度会大一些,反之则会小一些。

adadelta

adagrad的缺点在于在梯度更新的中后期,所有参数的 G t , i G_{t,i} Gt,i都会很大,从而阻挠梯度更新的进行,因而adadelta将梯度 G t , i G_{t,i} Gt,i改为 E [ g 2 ] t E[g^2]_t E[g2]t,具体公式如下所示,从而通过 γ \gamma γ控制梯度更新的过程。
E [ g 2 ] t = γ E [ g 2 ] t + ( 1 − γ ) g t 2 E[g^2]_t=\gamma E[g^2]_t+(1-\gamma)g^2_t E[g2]t=γE[g2]t+(1γ)gt2

RMSprop

adadelta的特殊情况,即 γ = 0.9 \gamma=0.9 γ=0.9时adadelta的梯度更新公式。

adam

g t 2 g^2_t gt2 g t g_t gt同时采用类似momentum的操作,公式如下所示,其中 m t m_t mt代表的是 g t g_t gt的momentum, v t v_t vt代表的是 g t 2 g^2_t gt2的momentum。
m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 \begin{matrix} m_t=\beta_1m_{t-1}+(1-\beta_1)g_t\\ v_t=\beta_2v_{t-1}+(1-\beta_2)g^2_t \end{matrix} mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)gt2

而为了防止每轮参数更新后 m t m_t mt v t v_t vt变得趋近于0,则认为对这两个参数进行放大,公式如下所示:
m t ^ = m t 1 − β 1 t v t ^ = v t 1 − β 2 t \begin{matrix} \hat{m_t}=\frac{m_t}{1-\beta_1^t}\\ \hat{v_t}=\frac{v_t}{1-\beta_2^t} \end{matrix} mt^=1β1tmtvt^=1β2tvt

参数更新公式如下所示,由于添加了两层momentum的保险,adam在实际使用过程中比其他的优化器效果都好,亲试有效!
θ t + 1 = θ t − ϵ v t ^ + σ m t ^ \theta_{t+1}=\theta_{t}-\frac{\epsilon}{\sqrt{\hat{v_t}+\sigma}}\hat{m_t} θt+1=θtvt^+σ ϵmt^

实践过程中,也可以为学习率添加decay_rate,即随着训练步数的变大学习率会变小,使参数学习过程变得更加稳定,不会在训练后期出现震荡的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值