論文解讀:Radam:ON THE VARIANCE OF THE ADAPTIVE LEARNING RATE AND BEYOND算法
想找到一個比較好的優化器,可以在收斂速度和收斂的效果上都比較號。機器學習
目前sgd收斂較好,可是慢。性能
adam收斂快,可是容易收斂到局部解。學習
經常使用解決adam收斂問題的方法是,自適應啓動方法。測試
adam在訓練的初期,學習率的方差較大。優化
根本緣由是由於缺乏數據,致使方差大。ui
學習率的方差大,本質上自適應率的方差大。spa
能夠控制自適應率的方差來改變效果。.net
一堆數學公式估計出自適應率的最大值和變化過程。翻譯
提出了Radam的優化過程
前幾個週期內整流項使得RAdam比Adam方法慢,可是在後期的收斂速度是比Adam要更快的。
儘管RAdam在測試精度方面未能超越SGD,但它能夠帶來更好的訓練性能。
RAdam算法對初始學習率是具備魯棒性的,能夠適應更寬範圍內的變化。在從0.003到0.1一個很寬的範圍內,RAdam表現出了一致的性能,訓練曲線末端高度重合
若是你覺得RAdam只能處理較小數據集上的訓練,或者只有在CNN上有較好的表現就大錯特錯了。即便大道有幾十億個單詞的數據集的LSTM模型,RAdam依然有比Adam更好的表現。
優點:魯棒性強,這個優點很強,並且適合任何模型的初期的實驗,也對新手比較友好;不用調試學習率,這個優點也很強;自適應啓動的方式會增長超參數,不適合初期的實驗。
缺點:論文也提出,他的收斂效果不必定是全部裏面最好的。因此在實驗的後期,對於老手,能夠採用更加精細的學習率控制策略試試會不會拿到另外一個好的結果。
==============================================================================
找到一種快速穩定的優化算法,是全部AI研究人員的目標。
可是魚和熊掌不可兼得。Adam、RMSProp這些算法雖然收斂速度很快,當每每會掉入局部最優解的「陷阱」;原始的SGD方法雖然能收斂到更好的結果,可是訓練速度太慢。
最近,一位來自UIUC的中國博士生Liyuan Liu提出了一個新的優化器RAdam。
它兼有Adam和SGD二者的優勢,既能保證收斂速度快,也不容易掉入局部最優解,並且收斂結果對學習率的初始值很是不敏感。在較大學習率的狀況下,RAdam效果甚至還優於SGD。
RAdam意思是「整流版的Adam」(Rectified Adam),它能根據方差分散度,動態地打開或者關閉自適應學習率,而且提供了一種不須要可調參數學習率預熱的方法。
一位Medium網友Less Wright在測試完RAdam算法後,給予了很高的評價:
RAdam能夠說是最早進的AI優化器,能夠永遠取代原來的Adam算法了。
目前論文做者已將RAdam開源,FastAI如今已經集成了RAdam,只需幾行代碼便可直接調用。
想造出更強的優化器,就要知道前輩們的問題出在哪:
像Adam這樣的優化器,的確能夠快速收斂,也所以獲得了普遍的應用。
但有個重大的缺點是不夠魯棒,經常會收斂到不太好的局部最優解 (Local Optima) ,這就要靠預熱 (Warmup)來解決——
最初幾回迭代,都用很小的學習率,以此來緩解收斂問題。
爲了證實預熱存在的道理,團隊在IWSLT’14德英數據集上,測試了原始Adam和帶預熱的Adam。
結果發現,一把預熱拿掉,Transformer語言模型的訓練複雜度 (Perplexity) ,就從10增到了500。
另外,BERT預訓練也是差很少的狀況。
爲何預熱、不預熱差距這樣大?團隊又設計了兩個變種來分析:
一個變種是Adam-2k:
在前2000次迭代裏,只有自適應學習率是一直更新的,而動量 (Momentum) 和參數都是固定的。除此以外,都沿襲了原始Adam算法。
實驗代表,在給它2000個額外的樣原本估計自適應學習率以後,收斂問題就消失了:
另外,足夠多的樣本能夠避免梯度分佈變扭曲 (Distorted) :
這些發現證實了一點:早期缺少足夠數據樣本,就是收斂問題的根源。
下面就要證實,能夠經過下降自適應學習率的方差來彌補這個缺陷。
一個直接的辦法就是:
把ψ-cap裏面的ϵ增長。假設ψ-cap(. ) 是均勻分佈,方差就是1/12ϵ^2。
這樣就有了另外一個變種Adam-eps。開始把ϵ設成一個能夠忽略的1×10^-8,慢慢增長,到不可忽略的1×10^-4。
從實驗結果看,它已經沒有Adam本來的收斂問題了:
這就證實了,真的能夠經過控制方差來解決問題。另外,它和Adam-2k差很少,也能夠避免梯度分佈扭曲。
然而,這個模型表現比Adam-2k和帶預熱的Adam差不少。
推測是由於ϵ太大,會給自適應學習率帶來重大的誤差 (Bias) ,也會減慢優化的過程。
因此,就須要一個更加嚴格的方法,來控制自適應學習率。
論文中提出,要經過估算自由度ρ來實現量化分析。
RAdam算法的輸入有:步長αt;衰減率{β1, β2},用於計算移動平均值和它的二階矩。
輸出爲θt。
首先,將移動量的一階矩和二階矩初始化爲m0,v0,計算出簡單移動平均值(SMA)的最大長度ρ∞←2/(1-β2)-1。
而後按照如下的迭代公式計算出:第t步時的梯度gt,移動量的二階矩vt,移動量的一階矩mt,移動誤差的修正和SMA的最大值ρt。
若是ρ∞大於4,那麼,計算移動量二階矩的修正值和方差修正範圍:
若是ρ∞小於等於4,則使用非自適應動量更新參數:
以上步驟都完成後,得出T步驟後的參數θT。
RAdam在圖像分類任務CIFAR-10和ImageNet上測試的結果以下:
儘管在前幾個週期內整流項使得RAdam比Adam方法慢,可是在後期的收斂速度是比Adam要更快的。
儘管RAdam在測試精度方面未能超越SGD,但它能夠帶來更好的訓練性能。
此外,RAdam算法對初始學習率是具備魯棒性的,能夠適應更寬範圍內的變化。在從0.003到0.1一個很寬的範圍內,RAdam表現出了一致的性能,訓練曲線末端高度重合。
親測過的網友Less Wright說,RAdam和他今年測試的許多其它論文都不同。
其餘方法經常是在特定數據集上有良好的效果,可是放在新的數據集上每每表現不佳。
而RAdam在圖像分類、語言建模,以及機器翻譯等等許多任務上,都證實有效。
(也側面說明,機器學習的各種任務裏,普遍存在着方差的問題。)
Less Wright在ImageNette上進行了測試,取得了至關不錯的效果(注:ImageNette是從ImageNet上抽取的包含10類圖像的子集)。在5個epoch後,RAdam已經將準確率快速收斂到86%。
若是你覺得RAdam只能處理較小數據集上的訓練,或者只有在CNN上有較好的表現就大錯特錯了。即便大道有幾十億個單詞的數據集的LSTM模型,RAdam依然有比Adam更好的表現。
總之,RAdam有望提供更好的收斂性、訓練穩定性,以及幾乎對全部AI應用都用更好的通用性。