SGD過程中的噪聲如何幫助避免局部極小值和鞍點?

2020-12-13 機器之心Pro

來自 UC Berkeley RISELab 的本科研究員 Noah Golmant 發表博客,從理論的角度分析了損失函數的結構,並據此解釋隨機梯度下降(SGD)中的噪聲如何幫助避免局部極小值和鞍點,為設計和改良深度學習架構提供了很有用的參考視角。

當我們著手訓練一個很酷的機器學習模型時,最常用的方法是隨機梯度下降法(SGD)。隨機梯度下降在高度非凸的損失表面上遠遠超越了樸素梯度下降法。這種簡單的爬山法技術已經主導了現代的非凸優化。然而,假的局部最小值和鞍點的存在使得分析工作更加複雜。理解當去除經典的凸性假設時,我們關於隨機梯度下降(SGD)動態的直覺會怎樣變化是十分關鍵的。向非凸環境的轉變催生了對於像動態系統理論、隨機微分方程等框架的使用,這為在優化解空間中考慮長期動態和短期隨機性提供了模型。

在這裡,我將討論在梯度下降的世界中首先出現的一個麻煩:噪聲。隨機梯度下降和樸素梯度下降之間唯一的區別是:前者使用了梯度的噪聲近似。這個噪聲結構最終成為了在背後驅動針對非凸問題的隨機梯度下降算法進行「探索」的動力。

mini-batch 噪聲的協方差結構

介紹一下我們的問題設定背景。假設我想要最小化一個包含 N 個樣本的有限數據集上的損失函數 f:R^n→R。對於參數 x∈R^n,我們稱第 i 個樣本上的損失為 f_i(x)。現在,N 很可能是個很大的數,因此,我們將通過一個小批量估計(mini-batch estimate)g_B:

來估計數據集的梯度 g_N:

。其中,B{1,2,…,N} 是一個大小為 m 的 mini-batch。儘管 g_N 本身就是一個關於梯度 f(x) 的帶噪聲估計,結果表明,mini-batch 抽樣可以生成帶有有趣的協方差結構的估計。

引理 1 (Chaudhari & Soatto 定理:https://arxiv.org/abs/1710.11029):在回置抽樣(有放回的抽樣)中,大小為 m 的 mini-batch 的方差等於 Var(g_B)=1/mD(x),其中

該結果意味著什麼呢?在許多優化問題中,我們根本的目標是最大化一些參數配置的似然。因此,我們的損失是一個負對數似然。對於分類問題來說,這就是一個交叉熵。在這個例子中,第一項

是對於(負)對數似然的梯度的協方差的估計。這就是觀測到的 Fisher 信息。當 N 趨近於正無窮時,它就趨向於一個 Fisher 信息矩陣,即相對熵(KL 散度)的 Hessian 矩陣。但是 KL 散度是一個與我們想要最小化的交叉熵損失(負對數似然)相差甚遠的常數因子。

因此,mini-batch 噪聲的協方差與我們損失的 Hessian 矩陣漸進相關。事實上,當 x 接近一個局部最小值時,協方差就趨向於 Hessian 的縮放版本。

繞道 Fisher 信息

在我們繼續詳細的隨機梯度下降分析之前,讓我們花點時間考慮 Fisher 信息矩陣 I(x) 和 Hessian 矩陣 ^2f(x) 之間的關係。I(x) 是對數似然梯度的方差。方差與損失表面的曲率有什麼關係呢?假設我們處在一個嚴格函數 f 的局部最小值,換句話說,I(x)=^2f(x) 是正定的。I(x) 引入了一個 x附近的被稱為「Fisher-Rao metric」的度量指標: d(x,y)=√[(xy)^TI(x)(xy) ]。有趣的是,參數的 Fisher-Rao 範數提供了泛化誤差的上界(https://arxiv.org/abs/1711.01530)。這意味著我們可以對平坦極小值的泛化能力更有信心。

回到這個故事中來

接下來我們介紹一些關於隨機梯度下降動態的有趣猜想。讓我們做一個類似中心極限定理的假設,並且假設我們可以將估計出的 g_B 分解成「真實」的數據集梯度和噪聲項:g_B=g_N+(1√B)n(x),其中 n(x)N(0,D(x))。此外,為了簡單起見,假設我們已經接近了極小值,因此 D(x)≈^2f(x)。n(x) 在指數參數中有一個二次形式的密度ρ(z):

這表明,Hessian 矩陣的特徵值在決定被隨機梯度下降認為是「穩定」的最小值時起重要的作用。當損失處在一個非常「尖銳」(二階導很大)的最小值,並且此處有許多絕對值大的、正的特徵值時,我很可能會加入一些把損失從樸素梯度下降的吸引域中「推出來」的噪聲。類似地,對於平坦極小值,損失更有可能「穩定下來」。我們可以用下面的技巧做到這一點:

引理 2:令 v∈R^n 為一個均值為 0 並且協方差為 D 的隨機向量。那麼,E[||v||^2]=Tr(D)。

通過使用這一條引理以及馬爾可夫不等式,我們可以看到,當 Hessian 具有大曲率時,更大擾動的可能性越高。我們還可以考慮一個在局部最小值 x 周圍的「穩定半徑」:對於給定的 ∈(0,1),存在一些 r(x)>0,使得如果我們的起點 x_0 滿足 ||x_0x||

定理 1: 一個嚴格的局部最小值 x 的穩定性半徑 r(x) 與 ^2f(x) 的譜半徑成反比。

讓我們把這個結論和我們所知道的 Fisher 信息結合起來。如果在隨機梯度下降的動態下,平坦極小值更加穩定,這就意味著隨機梯度下降隱式地提供了一種正則化的形式。它通過注入各項異性的噪聲使我們擺脫了 Fisher-Rao 範數所帶來的不利泛化條件。

深度學習的啟示:Hessian 矩陣的退化和「wide valleys」

在深度學習中,一個有趣的現象是過度參數化。我們經常有比做示例運算時更多的參數(d>>N)。這時,D(x) 是高度退化的,即它有許多零(或者接近零)的特徵值。這意味著損失函數在很多方向上都是局部不變的。這為這些網絡描繪了一個有趣的優化解空間中的場景:隨機梯度下降大部分時間都在穿越很寬的「峽谷」(wide valleys)。噪聲沿著幾個有大曲率的方向傳播,這抵消了 g_N 朝著這個「峽谷」的底部(損失表面的最小值)推進的趨勢。

當前關注點:批量大小、學習率、泛化性能下降

由於我們在將 n(x) 加到梯度之前,按照 1/√m 的因子將其進行縮放,因此增加了批處理的規模,降低了小批量估計的整體方差。這是一個值得解決的問題,因為大的批量尺寸可以使模型訓練得更快。它在兩個重要的方面使得訓練更快:訓練誤差在更少的梯度更新中易於收斂,並且大的批量尺寸使得我們能利用大規模數據並行的優勢。但是,不使用任何技巧就增大批量尺寸會導致測試誤差增大。這個現象被稱為泛化能力下降(generalization gap),並且目前還存在一些為什麼會出現這種情況的假說。一個流行的解釋是,我們的「探索性噪聲」不再有足夠的力量將我們推出一個尖銳最小值的吸引域。一種解決辦法是簡單地提高學習率,以增加這種噪聲的貢獻。這種縮放規則非常成功(https://arxiv.org/abs/1706.02677)。

長期關注點:逃離鞍點

雖然泛化能力下降「generalization gap」最近已經成為了一個熱門話題,但之前仍有很多工作研究鞍點的影響。雖然不會漸進收斂到鞍點(http://noahgolmant.com/avoiding-saddle-points.html),我們仍然可能附近停留相當長的一段時間(https://arxiv.org/abs/1705.10412)。而且儘管大的批量尺寸似乎會更易於產生更尖銳的最小值,但真正大的批量尺寸會將我們引導到確定的軌跡上,這個軌跡被固定在鞍點附近。一項研究(https://arxiv.org/abs/1503.02101)表明,注入足夠大的各項同性噪聲可以幫助我們逃離鞍點。我敢打賭,如果噪聲有足夠的「放大」能力,小批量的隨機梯度下降(mini-batch SGD)會在造成訓練困難的維度上提供足夠的噪聲,並且幫助我們逃離它們。

一旦我們解決了「尖銳的最小值」的問題,鞍點可能是下一個大規模優化的主要障礙。例如,我在 CIFAR-10 數據集上用普通的隨機梯度下降算法訓練了 ResNet34。當我將批量尺寸增大到 4096 時,泛化能力下降的現象出現了。在這一點之後(我最高測試了大小為 32K 的批量尺寸,有 50K 個訓練樣本),性能顯著降低:訓練誤差和測試誤差都僅僅在少數幾個 epoch 中比較平穩,並且網絡無法收斂到一個有效解上。以下是這些結果的初步學習曲線(即看起來比較醜、還有待改進):

進一步的工作

目前提出的大多數處理尖銳的最小值/鞍點的解決方案都是圍繞(a)注入各向同性噪聲,或(b)保持特定的「學習率和批量尺寸」。我認為從長遠來看,這還不夠。各向同性噪聲在包含「wide valley」結構的解空間中做的並不好。增加學習率也增大了對梯度的更新,這使得權重更新得更大。我認為正確的方法應該是想出一種有效的方法來模擬小批量噪聲的各向異性,這種方法從學習率和批處理大小的組合中「解耦」出來。存在能夠使用子採樣梯度信息和 Hessian 向量乘積去做到這一點的方法,我正在進行這個實驗。我很希望聽聽其它的關於如何解決這個問題的想法。與此同時,我們還需要做大量的理論工作來更詳細地理解這種動態,特別是在一個深度學習環境中。

相關焦點

  • 神經網絡逃離鞍點
    對於非凸問題,僅僅梯度為零不足以判斷當前點是不是局部最優,因為有鞍點的存在。為了區分局部最優點和鞍點,我們可以考慮二階導數矩陣:Hessian Matrix。如果Hessian Matrix是正定的,那麼從當前點沿著任何一個方向都會使函數值變大,那麼當前點就是一個局部最小而不是鞍點。如果Hessian Matrix有正和負的特徵值,那麼當前點就是鞍點。
  • 算法優化之道:避開鞍點
    在文章的剩下部分,我們首先會介紹,收斂於鞍點的可能性是很大的,因為大多數自然目標函數都有指數級的鞍點。然後,我們會討論如何對算法進行優化,讓它能夠嘗試去避開鞍點。對稱與鞍點許多學習問題都可以被抽象為尋找k個不同的分量(比如特徵,中心…)。
  • 如何在黎曼流形上避開鞍點?本文帶你了解優化背後的數學知識
    學習是模型迭代地學習最小化某個誤差函數或者最大化某個獎勵函數的過程。拿用於分類任務的簡單線性回歸為例,誤差函數是模型輸出和數據真值輸出之間的均方差,學習過程即找出線性函數 y = a^Tx + b 的係數 a_i 和 b_i,以最小化 y(模型輸出)和 y*(真值輸出)間的誤差。例如,學習(即優化)通常使用梯度下降算法通過反向傳播來迭代進行。
  • 學界 | Michael Jordan新研究官方解讀:如何有效地避開鞍點
    近日,Off the Convex Path 博客和伯克利人工智慧研究所(BAIR)的博客都發表了對該研究的解讀文章。機器之心對其進行了編譯介紹。論文地址:https://arxiv.org/abs/1703.00887 非凸優化中一個核心問題是如何避開鞍點。
  • 梯度下降兩大痛點:陷入局部極小值和過擬合
    打開APP 梯度下降兩大痛點:陷入局部極小值和過擬合 胡薇 發表於 2018-04-27 17:01:36 這有助於預防模型陷入局部極小值,因為即使當前梯度為0,之前梯度絕大多數情況下不為0,這樣模型就不那麼容易陷入極小值。另外,使用動量也使誤差平面上的移動總體上更為平滑,而且移動得更快。
  • 為什麼說隨機最速下降法 (SGD) 是一個很好的方法?
    其次,如果我們不小心陷入了鞍點,或者比較差的局部最優點,GD 算法就跑不出來了,因為這些點的導數是 0。什而且,大家並不用擔心導數中包含的噪聲會有什麼負面影響。有大量的理論工作說明,只要噪聲不離譜,其實(至少在 f 是凸函數的情況下),SGD 都能夠很好地收斂。雖然搞理論的人這麼說,但是很多完美主義者仍會惴惴不安,覺得用帶了隨機噪聲的導數來訓練自己的神經網絡不放心,一定要用最準確的導數才行。於是他們往往還會嘗試用 GD 跑一遍,和 SGD 得到的結果比較比較。結果呢?
  • 空氣汙染和噪聲與老年人局部腦結構的關係
    (文末點擊瀏覽)了解空氣汙染和噪聲與神經認知能力喪失之間的關係很重要,本文在老年人中評估了住宅空氣汙染和噪聲與神經認知測試表現以及局部腦萎縮的標誌物-局部回指數(LGI,local gyrificationindex)之間的關係。
  • 深度學習優化入門:Momentum、RMSProp 和 Adam
    在另一篇文章中,我們討論了隨機梯度下降的具體細節,以及如何解決諸如卡在局部極小值或鞍點上的問題。在這篇文章中,我們討論另外一個困擾神經網絡訓練的問題,病態曲率。 雖然局部極小值和鞍點會阻礙我們的訓練,但病態曲率會減慢訓練的速度,以至於從事機器學習的人可能會認為搜索已經收斂到一個次優的極小值。讓我們深入了解什麼是病態曲率。病態曲率考慮以下損失曲線圖。
  • 你真的了解隨機梯度下降中的「全局最優」嗎?
    這項工作加深了對SGD優化過程的理解,也有助於構建深度神經網絡的訓練理論。梯度下降是機器學習算法中最常用的一種優化方法。其中,隨機梯度下降 (Stochastic Gradient Descent, SGD) 由於學習速率快並且可以在線更新,常被用於訓練各種機器學習和深度學習模型,很多當前性能最優 (SOTA) 模型都使用了SGD。
  • 【乾貨】深度學習必備:隨機梯度下降(SGD)優化算法及可視化
    幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降算法的不同變種實現。但是,它們就像一個黑盒優化器,很難得到它們優缺點的實際解釋。這篇文章旨在提供梯度下降算法中的不同變種的介紹,幫助使用者根據具體需要進行使用。
  • 探討工業企業廠界噪聲監測過程中有關問題
    北極星環境監測網訊:摘要:隨著人們環保意識的逐漸增強,對於噪聲汙染的危害和管控需求也日益強烈。國家相關環保部門針對社會發展的這些新情況,對環保噪聲汙染和治理提出更高要求,對一些重要指標進行細化量化,有力地推動了噪聲汙染治理的發展。本文主要針對工業企業廠界噪聲監測過程中的常見問題進行討論,提出有關問題的改進方法和建議。
  • 乾貨|全面理解SGD,Momentum,AdaGrad,RMSProp,Adam優化算法
    SGD1.1.1 Batch Gradient Descent在每一輪的訓練過程中,Batch Gradient Descent算法用整個訓練集的數據計算cost fuction的梯度,並用該梯度對模型參數進行更新:
  • 觀點| 如何優雅地從四個方面加深對深度學習的理解
    超參數和泛化:在經典統計理論中,為什麼泛化依賴於參數的數量而非深度學習?存在其它較好的泛化方法嗎?深度的意義:深度如何幫助神經網絡收斂?深度和泛化之間的聯繫是什麼?生成模型:為什麼生成對抗網絡(GAN)效果非常好?
  • 深度學習優化器算法詳解:梯度更新規則+缺點+如何選擇
    BGD 可以收斂到局部極小值,當然 SGD 的震蕩可能會跳到更好的局部極小值處。當我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。另一方面可以充分地利用深度學習庫中高度優化的矩陣操作來進行更有效的梯度計算。
  • SGD、Adam優化器
    在梯度下降法中調優比較重要的是3個因素,步長、初始值、歸一化(1)步長:又稱學習率,決定了在梯度下降迭代的過程中,每一步沿梯度負方向前進的長度。步長太小,收斂慢,步長太大,會遠離最優解。所以需要從小到大,分別測試,選出一個最優解。(2)初始值:隨機選取初始值,當損失函數是非凸函數時,找到的解可能是局部最優解,需要多測試幾次,從局部最優解中選出最優解。
  • SGD有多種改進的形式,為什麼大多數論文中仍然用SGD?
    在理論上和實踐上,Adam家族裡那些用了自適應學習率的優化器都不善於尋找flat minima。而flat minima對於generalization是很重要的。所以Adam訓練得到的training loss可能會更低,但test performance常常卻更差。這是很多任務裡避免用自適應學習率的最主要的原因。
  • 6種機器學習中的優化算法:SGD,牛頓法,SGD-M,AdaGrad,AdaDelta,Adam
    3.SGD-Mmomentum是模擬物理裡動量的概念,更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向,可以在一定程度上增加穩定性,從而學習更快,並且還有擺脫局部最優的能力。
  • 【翻譯】Sklearn 與 TensorFlow 機器學習實用指南 —— 第4章( 中) 訓練模型
    雖然隨機性可以很好的跳過局部最優值,但同時它卻不能達到最小值。解決這個難題的一個辦法是逐漸降低學習率。 開始時,走的每一步較大(這有助於快速前進同時跳過局部最小值),然後變得越來越小,從而使算法到達全局最小值。 這個過程被稱為模擬退火,因為它類似於熔融金屬慢慢冷卻的冶金學退火過程。 決定每次迭代的學習率的函數稱為learning schedule。