ADADELTA:一種學習率自調整方法
摘要
針對梯度下降算法提出了一種新型的適用於高維情況下學習率設置方法,稱之爲ADADELTA。這種方法僅僅使用一階導數信息,具有良好的動態適應性,並且與原始隨機梯度下降算法相比具有更小的計算開銷。這種方法不需要人工調節學習率而且對噪聲梯度信息、不同模型結構、不同的數據模式以及超參數(某個參數是隨機變量時,該參數的分佈中的參數就是超參數,即參數的參數)的選擇表現出較強的魯棒性。我們在同一臺電腦上進行MNIST數字識別以及在分佈式環境中對一個大規模的聲音數據庫進行語音識別,與其他方法相比,我們的方法得到了更好的結果。
1.介紹
很多機器學習方法的目的都是不斷更新參數集合
在文中我們認爲,梯度
其中
設置學習率通常要不斷調整,而較好的學習率一般是手動設置的。 學習率設置的過高會使得系統發散,但選擇的過小又會使學習過程變慢。對於很多問題而言,選擇一個好的學習率更像是藝術而不是科學。
這項工作試圖通過引入新的“動態學習率”來減輕原先需要反覆選擇學習率的重複任務。這種方法在每個維度上計算時只需要一階導數信息,並且在每次在梯度下降的迭代計算時只增加額外少量計算量。另外,這種方法用到了一些超參數,但是我們發現這些超參數的選擇對結果影響不大。這種方法的優點如下:
- 不需要人工設置學習率。
- 對超參數不敏感。
- 每維有單獨的動態學習率。
- 能減小梯度下降算法的計算量。
- 對於大梯度、噪聲和不同結構有較好的魯棒性。
2.相關工作
梯度下降算法有很多改進方法,在這些改進方法中最強的就是牛頓的方法(Newton’method),它需要用到成本函數(cost function)的二階導數信息:
其中,
2.1 學習率的退火算法
在梯度下降算法的每一次迭代中,很多人嘗試用啓發式算法來預估一個好的學習率。他們試着在合適的時候加快學習的速度,在局部極小值附近則降低學習速度。我們將在後面探討這些問題。
當梯度下降的成本函數的極小值附近時,這個參數會圍着這個極小值來回震盪。一種解決方法是通過減小學習率來減緩參數的更新,這可以在驗證準確率達到平穩時手動完成。另外,還有人提出通過查學習率表來完成學習率的自動退火,這種方法基於已經有多少數據已經訓練完了,這是一種典型的通過增加額外的超參數來控制學習率下降快慢的方法。
2.2 對每維求一階導方法
上面討論的啓發式退火算法對所有維度的參數僅僅更新一個全局學習率。因爲每維的參數向量與整體成本函數之間的關係可能完全不同,因此能夠抵消這種不同的每維學習率通常性能更好。
2.2.1 增加動量項
一種對每個維度都加速的方法是動量方法。這是一種非常簡單的對SGD的擴展方法,已經成功應用了數十年。動量方法的核心思想是在梯度方向一致的地方加速,在梯度方向不斷改變的地方減速。這種方法是通過追蹤指數下降的過去的參數來完成的:
其中
2.2.2 ADAGRAD
最近有一種叫ADAGRAD的一階方法在分佈式環境下執行大規模學習任務時表現優異。這種方法僅僅使用一階方法但表現出了一些二階方法的特性。他的更新規則是:
這裏,分母計算了以前所有時刻基於每個維度的偏置和全局學習率的梯度的範數。
與之前不同的是,這裏有調節全局學習率的地方,並且每個維度都有自己的動態學習率。動態學習率與梯度的幅值成反比,梯度越大學習率越小,梯度越小學習率越大。它有一個非常好的特性,就像一個二階方法一樣,它隨着時間的推移在各個維度上的速度會趨於一致。這使得它非常適合訓練深度網絡,因爲深度網絡的不同層的梯度的尺度通常是不同數量級。因此,對於最優學習率應該考慮到這一點。此外,分母中的梯度和與退火算法有相同的效果,都會隨着時間的推移減少學習率。由於ADAGRAD沒有考慮梯度的幅值,所以這種方法會對參數的初值和相對應的梯度敏感。如果初始梯度很大,在剩餘的學習率將會變得很小。當然,可以通過增大全局學習率來解決這個問題,所以這使得ADAGRAD的學習率的選擇變得很難。因爲隨着分母上梯度的平方不斷積累,學習率會隨着訓練持續減小,最終會減小到零而導致訓練停止。我們的ADADELTA方法有助於克服這種對超參數的選擇的敏感性,同時能夠避免學習率的持續下降。
2.3 使用二階信息的方法
上面的方法僅僅使用了梯度和進化函數來優化目標函數,而二階方法比如牛頓法或擬牛頓法則使用了Hessian矩陣,或者使用一些近似方法。雖然這些方法能夠提供額外的曲率信息,但精確計算二階導數卻使得計算開銷很大。
對於大模型,整個Hessian矩陣的二階導數的計算量非常大。因此Becker和LecCun提出了一種對Hessian矩陣對角近似計算方法。這種對角陣計算方法需要額外前向傳播和後向傳播的計算,使得計算量比SGD增加了一倍。Hessian的對角陣
其中,Hessian矩陣對角陣的絕對值用來保證永遠跟隨梯度的負方向,
最近,Schaul等人又提出了一種方法。這種方法包含3Hessian矩陣的對角陣,和ADAGRAD形式很像,用來減輕手動設置學習率的繁瑣。它的更新公式爲:
其中
3. ADADELTA 方法
本文提出的方法源自於ADAGRAD,主要是爲了改善這個方法的兩大缺陷:1)隨着訓練學習率逐漸減小。2)需要人工選擇全局學習率。我們注意到我們的方法和Schaul等人的方法有些相似之處,兩者比較如下:
在ADAGRAD方法中,分母從開始訓練就對每一次迭代進行累加。每一個表達式都是正的,隨着不斷的累加,其和也不斷的變大,使得每個維度上的學習率不斷減小。多次迭代後,學習率會變得非常小。
3.1. 思想1:用窗口限制累加
不直接累加所有的梯度的平方,而是用一個寬度爲
因爲直接存儲
其中
其中加入常數
算法 1 計算ADADELTA在 |
---|
需要:下降率 |
需要:初始參數 |
|
for t=1:T |
|
|
|
|
|
end for |
3.2. 思想2:帶Hessian逼近的正確修正單元
當提到更新參數
注:
log 一階導數正比於1x
假設成本函數
相對比而言,使用Hessian或者Hessian逼近法等二階信息的方法,比如牛頓法,可以在參數更新中修正單位:
注:
log 二階導數正比於1x1x1x=x