0
点赞
收藏
分享

微信扫一扫

深度学习优化器个人经验汇总

是她丫 2022-04-03 阅读 73

参考:https://zhuanlan.zhihu.com/p/32230623
仅用作个人记录

g t = ▽ f ( w t ) 根 据 l o s s 计 算 出 的 梯 度 值 m t = ϕ ( g 1 , g 2 , . . . , g t ) 根 据 过 去 梯 度 惯 性 和 当 前 梯 度 算 出 的 一 阶 动 量 V t = φ ( g 1 , g 2 , . . . , g t ) 根 据 过 去 梯 度 和 当 前 梯 度 算 出 的 二 阶 动 量 η t = α V t ∗ m t 根 据 一 阶 和 二 阶 动 量 以 及 学 习 率 α 计 算 需 要 更 新 的 梯 度 w t + 1 = w t − η t 更 新 梯 度 g_t = \triangledown f(w_t) \qquad \tiny{根据loss计算出的梯度值} \\ \normalsize{m_t = \phi (g_1, g_2, ..., g_t)} \qquad \tiny{根据过去梯度惯性和当前梯度算出的一阶动量} \\ \normalsize{V_t = \varphi (g_1, g_2, ..., g_t)} \qquad \tiny{根据过去梯度和当前梯度算出的二阶动量} \\ \normalsize{\eta_t = \frac{\alpha}{\sqrt{V_t}}*m_t} \qquad \tiny{根据一阶和二阶动量以及学习率\alpha计算需要更新的梯度} \\ \normalsize{w_{t+1} = w_t - \eta_t} \qquad \tiny{更新梯度} gt=f(wt)lossmt=ϕ(g1,g2,...,gt)Vt=φ(g1,g2,...,gt)ηt=Vt αmtαwt+1=wtηt

m t = g t , V t = 1 , η t = α ∗ g t , w t + 1 = w t − η t m_t = g_t, \quad V_t=1, \quad \eta_t = \alpha * g_t, \quad w_{t+1} = w_t - \eta_t mt=gt,Vt=1,ηt=αgt,wt+1=wtηt

缺点:没有考虑以往梯度的惯性,梯度下降速度慢。且容易陷入局部最优解

m t = β 1 ∗ m t − 1 + ( 1 − β 1 ) ∗ g t ,    β 1 = 0.9 m_t = \beta_1*m_{t-1} + (1-\beta_1)*g_t, \; \beta_1=0.9 mt=β1mt1+(1β1)gt,β1=0.9

特性:可以看到当前迭代的梯度下降绝大部分依托于以往的梯度惯性,额外考虑了些当前的梯度方向。
缺点:因额外增加了以往的惯性,容易导致梯度下降过猛导致震荡

g t = ▽ f ( w t − α V t ∗ m t − 1 ) g_t = \triangledown f(w_t - \frac{\alpha}{\sqrt{V_t}}*m_{t-1}) gt=f(wtVt αmt1)

V t = ∑ τ = 1 t g τ 2 , η t = α V t ∗ m t V_t=\sum_{\tau=1}^{t} g_{\tau}^2, \quad \eta_t=\frac{\alpha}{V_t}*m_t Vt=τ=1tgτ2,ηt=Vtαmt
V t V_t Vt对于经常更新的 g t g_t gt会更大,因此学习率会自动减小。然而由于 V t V_t Vt是单调递增函数,因此有可能使得学习率迅速下降接近于0,过早结束训练。

V t = β 2 ∗ V t − 1 + ( 1 − β 2 ) ∗ V t , β 2 = 0.999 V_t = \beta_2 * V_{t-1} + (1-\beta_2) * V_t, \quad \beta_2=0.999 Vt=β2Vt1+(1β2)Vt,β2=0.999

m t = β 1 ∗ m t − 1 + ( 1 − β 1 ) ∗ g t ,    β 1 = 0.9 V t = β 2 ∗ V t − 1 + ( 1 − β 2 ) ∗ V t , β 2 = 0.999 , w t + 1 = w t − α V t ∗ m t m_t = \beta_1*m_{t-1} + (1-\beta_1)*g_t, \; \beta_1=0.9 \\ V_t = \beta_2 * V_{t-1} + (1-\beta_2) * V_t, \quad \beta_2=0.999, \\ w_{t+1} = w_t - \frac{\alpha}{\sqrt{V_t}}*m_t mt=β1mt1+(1β1)gt,β1=0.9Vt=β2Vt1+(1β2)Vt,β2=0.999,wt+1=wtVt αmt
初始化:
m 0 = 0 , V 0 = 0 m_0 = 0, V_0 = 0 m0=0,V0=0
然而,按照上述计算公式,训练初期梯度都接近于0,不利于训练,所以需要对梯度进行修正:
m t ~ = m t 1 − β 1 t , V t ~ = V t 1 − β 2 t \widetilde{m_t} = \frac{m_t}{1-\beta_1^t}, \\ \widetilde{V_t} = \frac{V_t}{1-\beta_2^t} mt =1β1tmt,Vt =1β2tVt

举报

相关推荐

0 条评论