神經網路的訓練過程是通過迭代更新超引數來最小化損失函式的過程,最終目標是找到使損失函式最小,最能準確**的超引數組合。而在更新迭代超引數時就需要用到不同的優化器,本文簡要介紹幾種常用的優化器。
①計算t時刻損失函式關於當前引數的梯度:
②計算t時刻的一階動量mt(與梯度相關的函式)和二階動量vt(與梯度平方相關的函式)
③計算t時刻下降梯度:
④更新t+1時刻引數:
各個優化器的基本步驟和原理都是這樣的,優化器的區別就是一階動量和二階動量的設計不同。
sgd優化器是最常用的一種梯度下降法,是沒有動量的,其一階動量直接使用梯度,二階動量為1,即:
因此將其帶入下降梯度計算式中可得:
因此引數更新公式為:
#sgd
w1.assign_sub
(lr*grads[0]
)b1.
assign_sub
(lr*grads[1]
)
這裡assign_sub是引數自更新的函式,grads是損失函式關於當前引數的梯度
sgdm是在sgd的基礎上增加了一階動量,二階動量仍為1,即:
因此將其帶入下降梯度計算式中可得:
因此引數更新公式為:
#sgdm
m_w=beta*m_w+(1
-beta)
*grads[0]
m_b=beta*m_b+(1
-beta)
*grads[1]
w1.assign_sub
(lr*m_w)
b1.assign_sub
(lr*m_b)
adagrad在sgd基礎上增加了二階動量,無一階動量,即:
因此將其帶入下降梯度計算式中可得:
)因為要求從開始到當前時刻的梯度的平方的累積和作為二階動量,所以首先計算這個累積值儲存到v_w和v_b
rmsprop是在sgd基礎上增加二階動量,無一階動量,即:
因此將其帶入下降梯度計算式中可得:
因此引數更新公式為:
#rmsprop
v_w=beta*v_w+(1
-beta)
*tf.
square
(grads[0]
)v_b=beta*v_b+(1
-beta)
*tf.
square
(grads[1]
)w1.
assign_sub
(lr*grads[0]
/tf.
sqrt
(v_w)
)b1.
assign_sub
(lr*grads[1]
/tf.
sqrt
(v_b)
)
adam優化器具有較好的魯棒性,它同時結合了sgdm一階動量和rmsprop的二階動量,並在此基礎上增加了兩個修正項,即:
修正一階動量的偏差為:
#adam
m_w=
0m_b=
0v_w=
0v_b=
0beta1=
0.9beta2=
0.999
delta_w=
0delta_b=
0global_step=
0m_w=beta1*m_w+(1
-beta1)
*grads[0]
m_b=beta1*m_b+(1
-beta1)
*grads[1]
v_w=beta2*v_w+(1
-beta2)
*tf.
square
(grads[0]
)v_b=beta2*v_b+(1
-beta2)
*tf.
square
(grads[1]
)m_w_correction=m_w/(1
-tf.
pow(beta1,
int(global_step)))
m_b_correction=m_b/(1
-tf.
pow(beta1,
int(global_step)))
v_w_correction=v_w/(1
-tf.
pow(beta2,
int(global_step)))
v_b_correction=v_b/(1
-tf.
pow(beta2,
int(global_step)))
w1.assign_sub
(lr*m_w_correction/tf.
sqrt
(v_w_correction)
)b1.
assign_sub
(lr*m_b_correction/tf.
sqrt
(v_b_correction)
)
深度學習優化器
深度學習演算法在許多情況下都涉及優化,我們經常使用解析優化去證明或設計演算法。在深度學習的諸多優化問題中,最難的是神經網路的設計,這其中的優化問題非常重要,代價也很高,因此研究者們開發了一組專門為此設計的優化技術,也就是我們本文中要介紹的 神經網路優化器。這些優化器主要關注一類特定的優化問題 尋找神...
深度學習常用優化器介紹
深度學習的優化演算法從sgd sgdm nag adagrad adadelta adam nadam這樣的發展歷程,理論知識參考這裡,下面我們依次介紹tensorflow中這些優化器的實現類,官方文件。優化器 optimizers 類的基類。這個類定義了在訓練模型的時候新增乙個操作的api。你基本...
深度學習之optimizer優化器
優化演算法通常只考慮最小化目標函式。其實,任何最大化問題都可以很容易地轉化為最小化問題。很多優化問題並不存在解析解,而需要使用基於數值方法的優化演算法找到近似解,即數值解。為了求得最小化目標函式的數值解,我們將通過優化演算法有限次迭代模型引數來盡可能降低損失函式的值。深度學習模型的目標函式可能有若干...