【深度學習】從對抗生成網絡出發的目標導向式優化器調參方法

前言

最近做對抗生成網絡實驗的過程中出現了模型無法收斂的問題,後來發現是優化器本身的問題,通過從效果較好的優化器數學表達式出發進行調整,最終包括SGD、SGDm、Adagrad、RMSprop和Adam在內的優化器都得到了收斂,特此總結一下調參經驗。

正文

(涉及的幾種優化器的數學表達式可參考:https://blog.csdn.net/Swocky/article/details/105681518)
對於本次對抗生成網絡實驗,事實證明,優化器如果不經更改的直接使用,或者按照之前實驗的經驗設置參數,那麼大多數無法收斂的,最終經過推導與嘗試成功地使上述所有的優化器都能夠收斂,這也是本次實驗花費時間較多的地方。
實驗初期,經過大量的epoch嘗試,無論對於哪一種除RMSprop以外的優化器都無法收斂,生成數據的分佈一直在振盪,且loss值也在不斷波動,這甚至令人懷疑優化器對於實驗結果有決定性作用。
儘管是以往表現比較好的Adam與SGDm也沒有收斂的跡象。考慮到出現這個問題的原因,大概是與GAN的問題特點有關,其目標是一個特殊的鞍點,或者說優化器與產生器某種意義上的平衡位置,與一般的凸優化有所不同。
這裏容易想到,既然RMSprop能夠優化,那麼是否可以通過修改參數使Adam的優化公式接近於RMSprop呢?從這個角度出發最終其實是可以使上述所有的自適應優化器的手鍊問題得到解決,也是本次實驗的突破口。
經過對比,相對於RMSprop,Adam在梯度一階矩採用了動量機制,通過之前的梯度與當前的梯度加權得到新的梯度。如果要儘可能接近RMSprop,可以從參數的角度出發,即將Adam的參數b1控制的很小,當爲0的時候便幾乎退化回了RMSprop。通過查看PyTorch中Adam的源碼,在默認情況下b1爲0.9,顯然這就是導致它與RMSprop結果大爲不同的原因。最終將b1設置爲0.01,Adam成功得到了收斂。
從這個角度出發,也可以去解決同爲自適應梯度的Adagrad。經過查看公式,可以發現Adagrad沒比較明顯的內部參數,因此主要的出發點還是學習率。觀察Adagrad對於自適應梯度的實現可以發現,分母存在梯度的累加,而非像RMSprop一樣的前後梯度加權和,因此到相對來說分母會很大,導致梯度較小,因此考慮可以適當提高學習率,以儘可能接近RMSprop的情況。測試中,將學習率提高至0.002後,發現對於一些情況模型得到了更快的收斂,可視化也可以看出明顯的擬合。
基於上述的改良,自適應優化器均能實現擬合。而SGD的擬合仍然無法成功,並且SGD與RMSprop的實現區別較大,也難以從前面的思路進行改良,入手點從參數角度來講只有學習率。按照以往的經驗,SGD的學習率常常設置爲0.01,但效果並不好,並且經過查閱資料發現,GAN的目標是尋找到特殊的鞍點,而SGD的優化目標是局部最小值,也常常容易陷入局部最優而發生振盪,與可視化出現的現象一致。
根據以上事實,可以考慮將學習率進一步增大,這樣能夠幫助SGD跳出局部最優。在更改爲0.1後,儘管收斂的較慢,但最終還是能夠對數據集中的點分佈實現明顯的擬合。那麼,順着之前的思路,SGDm只要在該學習率下公式足夠接近SGD也能實現擬合,而SGD也可以理解爲SGDm在momentum爲0的特殊情況,因此將其設置爲0.01,經過測試也實現了收斂。
最終,經過推導與嘗試,上述常見的幾種優化器都能夠實現收斂。經過查閱資料與總結進一步發現,對於實驗中的問題動量優化算法表現並不好(包括Adam與SGDm),往往需要通過參數控制幾乎消除動量的作用才能夠實現收斂。
學習率的設置在上面有所提到,在上述參數環境下,將自適應優化器設置爲0.001,SGD與SGDm設置爲0.1,經過測試能夠實現收斂。

總結

以往各種優化器儘管學習效率可能不同,但最終的都能基本實現收斂,而本次實驗初期對於很多優化器甚至難以收斂,一直處於振盪中。這是由於GAN的優化目標較爲特殊,因此不合適的優化方法很難實現收斂。
但經過對參數的調整,例如Adam的b1和b2,、SGDm的momentum、RMSprop的alpha,模型能夠實現收斂。這裏同樣也要注意不同優化器通常選取的學習率不同,否則也會影響收斂,相對來說SGD更大一些。
可見,各類參數的選取與優化器對GAN的收斂影響較爲明顯,在實際問題中需要精心調整與選取。另外,正如實驗所使用的方法,如果發現某個優化器表現更好,例如本實驗中的RMSprop,可以對比其他與之區別,有目的的進行調參。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章