至於動量的實現上完成了什麼,我們可以從在(上)所提到的局部最小值講起。局部最小值,包括使最佳演算法停滯不前的平坦區域和鞍點周遭的緩坡,將動量加入學習演算法,有助於克服這些局部最小點的問題。事實上,動量解決了兩個問題,除了在平坦區域中常見隨機梯度變異數(variance of stochastic gradient)外,就是病態二階導數矩陣。隨機梯度變異數就是在學習的過程中出現震盪的問題,有時是學習率值過大造成,有時則是演算法本身使用隨機取樣的方法來估算梯度,如隨機梯度下降法。而病態二階導數矩陣,所造成的橢圓體曲面(如下圖所示),則會在長軸高曲度的地方運行時產生震盪。
Adam 的作者們希望能應用指數衰退加權移動平均到梯度的估算上,所以他們將動量和未減去平均值的梯度變異分別用兩個變數獨立計算,最後再用動量當作該次需要更新的梯度量,用未減去平均值的梯度變異變數的方根倒數來做學習率動態調整。使用指數衰退權重的方法來計算動量,和標準動量法的不同處在於如何處理當次迭代的梯度。標準動量法認為當次迭代的梯度和過去梯度歷史是獨立的變數,加大過去梯度歷史的指數衰退係數並不會抑制當次迭代的梯度量。然而,對於 Adam 而言,若增加指數衰退加權係數會抑制當次迭代的梯度量,所以又有人稱呼 Adam 方法宛如一個在損失曲面坡道運行,但同時受到坡道阻擋的球,又被稱為 Heavy Ball with Friction (HBF) 「註一」。
雖然 Adam 看起來美好,但他也有一些問題並衍生了一些兒子兒孫,我們現在就來看看這些 Adam 兒孫解決什麼問題。
更多關於 Adam:
Adam 在 ICLR 2015 會議中初登場後,受到使用類神經網路的學者們喜愛,幾乎成為許多研究領域的最愛預設最佳化演算法。然而,Adam 未能經過時間的考驗,在隨後一些研究指出 Adam 在某些情況表現不如使用單純的隨機下降法加上動量,尤其是在泛化能力上, Adam 無法如當初所想可以廣泛應用在不同的任務中「註二」。
針對 Adam 種種的不是,最佳化演算法得專家們已經演化了各有特色的 Adam 子孫們,包括了:
與 Adam 由同一作者們在同一篇論文(見參考資料 [2])同時發表的 AdaMax ,主要是替換動態調整學習率的梯度第二動量估計值,從取 l2 範式項改為在過去梯度和當次梯度中取最大值。在這個替換中,無需做偏移校正。雖然不如取 l2 範式項具有連續性,但也能穩定收斂到一個最小值。
NAdam (Nesterov-accelerated Adaptive Moment Estimation)引入 Neterov 動量中「向前看」位置來計算當次迭代的梯度,變更了更新的公式以包含這項改變。