优化器
TensorFlow的优化类主要有以下几个:
- GradientDescentOptimizer:最普通的批量梯度下降,令学习速率为 η \eta η, t t t代表本次迭代, t + 1 t+1 t+1代表下次迭代,则梯度迭代公式如下:
θ 𝑡 + 1 = θ 𝑡 − η × ∂ l ( θ ) ∂ θ (1.1) \theta_{𝑡+1}=\theta_𝑡−\eta \times \frac{\partial l(\theta)}{\partial \theta} \tag{1.1} θt+1=θt−η×∂θ∂l(θ)(1.1)
- AdagradOptimizer:进行参数迭代的同时记录了每个参数每次迭代的梯度的平方和,下次迭代时梯度与累积平方和的平方根成反比。这样会对低频的参数做较大的更新,对高频的参数做较小的更新,对于稀疏数据表现的更好;但是由于学习速率越来越小,有可能没有到达最低点学习速率就变得很慢了,难以收敛。令 s s s为梯度累积平方和, ε \varepsilon ε为极小量,t代表本次迭代, t − 1 t-1 t−1代表上次迭代, t + 1 t+1 t+1代表下次迭代,梯度迭代公式如下:
s
t
=
s
t
−
1
+
(
∂
l
(
θ
)
∂
θ
)
2
(1.2)
s_t = s_{t-1}+(\frac{\partial l(\theta)}{\partial\theta})^2 \tag{1.2}
st=st−1+(∂θ∂l(θ))2(1.2)
θ
t
+
1
=
θ
t
−
η
s
t
+
ε
×
∂
l
(
θ
)
∂
θ
(1.3)
\theta_{t+1} = \theta_t-\frac{\eta}{\sqrt {s_t+\varepsilon}}\times \frac{\partial l (\theta)}{\partial\theta}\tag{1.3}
θt+1=θt−st+εη×∂θ∂l(θ)(1.3)
- RMSPropOptimizer:为解决AdagradOptimizer后期更新速率过慢的问题,RMSprop使用加权累积平方和替换累积平方和。令 m m m代表梯度加权累积平方和, ε \varepsilon ε为极小量, β \beta β为权重, t t t代表本次迭代, t − 1 t-1 t−1代表上次迭代, t + 1 t+1 t+1代表下次迭代,梯度迭代公式如下:
m
t
=
β
m
t
−
1
+
(
1
−
β
)
(
∂
l
(
θ
)
∂
θ
)
2
(1.4)
m_t = \beta m_{t-1}+(1-\beta)(\frac{\partial l(\theta)}{\partial\theta})^2 \tag{1.4}
mt=βmt−1+(1−β)(∂θ∂l(θ))2(1.4)
θ
t
+
1
=
θ
t
−
η
m
t
+
ε
×
∂
l
(
θ
)
∂
θ
(1.5)
\theta_{t+1} = \theta_t-\frac{\eta}{\sqrt {m_t+\varepsilon}}\times \frac{\partial l (\theta)}{\partial\theta}\tag{1.5}
θt+1=θt−mt+εη×∂θ∂l(θ)(1.5)
- MomentumOptimizer:多一个必须参数“动量速率”,每次迭代时参考前一次迭代的“动量”,在迭代中方向不变的维度做较大的更新,迭代中方向反复改变的维度做较小的更新。适用于在不同维度梯度差距很大的情况,更新不会在小梯度方向反复震荡。令 γ \gamma γ代表动量速率, t t t代表本次迭代, t − 1 t-1 t−1代表上次迭代, t + 1 t+1 t+1代表下次迭代,梯度迭代公式如下:
v t = γ × v t − 1 + η ∂ l ( θ ) ∂ θ (1.6) v_t=\gamma \times v_{t-1}+\eta \frac{\partial l (\theta)}{\partial\theta}\tag{1.6} vt=γ×vt−1+η∂θ∂l(θ)(1.6)
θ t + 1 = θ t − v t (1.7) \theta_{t+1}=\theta_t - v_t\tag{1.7} θt+1=θt−vt(1.7)
- AdamOptimizer:综合了MomentumOptimizer和RMSPropOptimizer,既包含动量(一次项)部分也包含衰减(两次项)部分。令f代表动量, g g g 代表衰减, β 1 , β 2 \beta_1,\beta_2 β1,β2为权重, t t t代表本次迭代, t − 1 t-1 t−1代表上次迭代, t + 1 t+1 t+1代表下次迭代:
f t = β 2 f t − 1 + ( 1 − β 2 ) ∂ l ( θ ) ∂ θ (1.8) f_t=\beta_2 f_{t-1}+(1-\beta_2)\frac{\partial l (\theta)}{\partial\theta}\tag{1.8} ft=β2ft−1+(1−β2)∂θ∂l(θ)(1.8)
g t = β 1 g t − 1 + ( 1 − β 1 ) ( ∂ l ( θ ) ∂ θ ) 2 (1.9) g_t=\beta_1 g_{t-1}+(1-\beta_1)(\frac{\partial l (\theta)}{\partial\theta})^2\tag{1.9} gt=β1gt−1+(1−β1)(∂θ∂l(θ))2(1.9)
注意此处第一次迭代的梯度值和速率值偏小,为了校正偏差,计算校正后的动量 f ′ f^\prime f′和衰减 g ′ g^\prime g′,再计算迭代公式:
f t ′ = f t 1 − β 1 (1.10) f^\prime_t=\frac{f_t}{1-\beta_1}\tag{1.10} ft′=1−β1ft(1.10)
g t ′ = g t 1 − β 2 (1.11) g^\prime_t=\frac{g_t}{1-\beta_2}\tag{1.11} gt′=1−β2gt(1.11)
θ t + 1 = θ t − η g t ′ + ε f t ′ (1.12) \theta_{t+1}=\theta_t-\frac{\eta}{\sqrt {g^\prime_t+\varepsilon}}f_t^\prime\tag{1.12} θt+1=θt−gt′+εηft′(1.12)