您現在的位置是:首頁 > 綜合

從入門到放棄:深度研究自然梯度最佳化

  • 由 AI科技大本營 發表于 綜合
  • 2021-05-30
簡介也就是說,如果網路是採用 softmax,而不是基於給定觀察資料中的真實類別,以 01 機率取得 logp(z)的期望,那麼使用該模型的估計機率作為其權重,將導致整體期望梯度值為 0,因為我們的模型是以當前的置信度作為基本事實,但我們仍然

雅可比行列式怎麼理解

作者 | Cold Marie Wild譯者 | 劉暢責編 | Jane出品 | AI科技大本營(公眾號id:rgznai100)

【導語】根據自然梯度的支持者提出一種建議:我們不應該根據引數空間中的距離來定義值域空間,而是應該根據分佈空間中的距離來定義它。這樣真的有效?關於自然梯度最佳化,今天這篇文章值得大家一讀!作者要以一個大家很少關注的角度講一個肯定都聽過的故事。

現在的深度學習模型都使用梯度下降法來進行訓練。在梯度下降法的每個步驟中,引數值通常是從某個點開始,然後逐步將它們移動到模型最大損失減少的方向。我們通常可以透過從整個引數向量中計算損失的導數來實現這一點,也稱為雅可比行列式。然而,這只是損失函式的一階導數,它沒有任何關於曲率的資訊,換言之就是一階導數改變的速度。由於該點可能位於一階導數的區域性近似區域中,並且它可能離極值點並不遠(例如,在巨大的山峰之前的向下曲線),這時我們需要更加謹慎,並且不要以較大步長向下降低。因此,我們通常會採用下面等式中的步長 α 來控制我們的前饋速度。

從入門到放棄:深度研究自然梯度最佳化

這個步長正在做這樣一些事情:它以一個固定的值約束了你要在漸變方向上更新每個引數的距離。在這個演算法的最簡單版本中,我們採用一個標量,alpha,假設其值為 0。1,並將其乘以對損失函式求的梯度。注意,我們的梯度實際上是一個向量,也就是相對於模型中每個引數的損失梯度。因此當我們將它乘以標量時,實際上我們將沿著每個引數軸按照相同的固定量,按比例更新一個歐幾里德引數距離。而且,在最基本的梯度下降版本中,我們在訓練過程中使用的是相同步長。

但是......這樣做真的有意義嗎?

使用較小學習率的前提是我們知道單個梯度的區域性估計值可能僅在該估計周圍的小區域性區域中有效。但是,引數可以存在於不同的尺度上,並且可以對學習的條件分佈產生不同程度的影響。而且,這種程度的影響可能會在訓練過程中波動。從這個角度來看,在歐幾里德引數空間中去固定一個全域性範圍看起來並不像是一件特別明智或有意義的事情

由自然梯度的支持者提出的另一種建議是,我們不應該根據引數空間中的距離來定義值域空間,而是應該根據分佈空間中的距離來定義它。

因此,不應該是“在符合當前梯度變化時,將引數向量保持在當前向量的 epsilon 距離內”,而應該是“在符合當前梯度變化時,要保持模型的分佈是在之前預測分佈的 epsilon 距離內”。這裡的概念是兩個分佈之間的距離,而且對於任何縮放移位或一般的引數重置是具有不變性的。例如,可以使用方差引數或比例引數(1 /方差)來引數化相同的高斯分佈;如果你檢視引數空間,根據它們是使用方差還是比例進行引數化,兩個分佈將是不同的距離。但是如果你在原始機率空間中定義了一個距離,它就會是一致的。

從入門到放棄:深度研究自然梯度最佳化

接下來,本文將嘗試建立一種更強大,更直觀的理解方法,稱為自然梯度學習

,這是一種在概念上很優雅的想法,是為了糾正引數空間中尺度的任意性。我將深入探討它是如何工作的,如何在不同數學思想之間構建起橋樑,並在最後討論它是否以及在何處實際有用。

所以,第一個問題是:計算分佈之間的距離有什麼用?

KL散度賦能

KL散度,更確切地說是 Kullback-Leibler 散度,在技術上並不是兩個分佈之間的距離度量(數學家對於所謂的度量或合適的距離是非常挑剔的),但這是一個非常近似的想法。

從入門到放棄:深度研究自然梯度最佳化

在數學上,它是透過計算從一個分佈或另一個分佈取樣的 x 值取得的對數機率的比率的期望值(即,機率值的原始差異)來獲得的。於是,取自其中一個分佈或另一個分佈的期望使得它成為了一個非對稱度量,其中 KL(P || Q)!= KL(Q || P)。但是,在許多其他方面,KL 散度帶給我們關於機率距離是這樣的概念:它是直接根據機率密度函式的定義來衡量,也就是說,在定義的分佈上的一堆點的密度值的差異。這有一個非常實用的地方,對於“X的機率是多少”這樣的一個問題,當X沒限定範圍時,可以有各種不同的分佈。

在自然梯度的背景下,KL散度是一種用來衡量我們模型預測的輸出分佈變化的方式。如果我們正在解決多分類問題,那麼我們模型的輸出將是可以看作多項分佈的 softmax,每個類都有不同的機率。當我們談論由當前引數值定義的條件機率函式時,也就是我們討論的機率分佈。如果我們採用 KL 散度作為縮放我們梯度步長的方式,這意味著對於給定的輸入特徵集,如果它們導致預測的類別分佈在 KL 散度方面非常不同,那麼我們在這個空間中看到的兩個引數配置也會大相徑庭。

相關的費舍爾理論

到目前為止,我們已經討論過為什麼在引數空間中縮放更新每一步的距離是令人不滿意的,並給出了一個不那麼隨意的替代方案:也就是我們模型預測的類分佈最多隻能在一個 KL 散度範圍內,去更新我們的每一步距離。對我來說,理解自然梯度最困難的部分是另一部分:KL 散度和 Fisher 資訊矩陣之間的聯絡。

先講故事的結尾,自然梯度是像下面公式這樣實現的:

從入門到放棄:深度研究自然梯度最佳化

在等號上面的 def 意思是右邊的內容是左邊符號的定義。右邊是由兩部分組成,首先,是引數關於損失函式的梯度(這是與正常梯度下降步驟中使用的一樣的梯度)。“自然”位來自第二個部分:Z 的對數機率函式的平方梯度的期望值。我們將這整個部分,稱為 Fisher 資訊矩陣,然後將損失梯度乘以其逆。

p-theta(z)項是由我們的模型定義的條件機率分佈,也就是說:神經網路末端的 softmax。 我們正在研究所有 p-theta 項的梯度,因為我們關心的是模型預測的類機率因引數變化而變化的量。預測機率的變化越大,我們引數更新前和更新後的預測分佈之間的 KL 差異越大。

對自然梯度最佳化感到困擾的部分原因在於,當你正在閱讀或思考它時,你必須理解兩個不同的梯度物件,也就是兩個不同的事物。順便說一句,這對於想要深入瞭解它是不可避免的一步,特別是在討論機率時。我們沒有必要去抓住這樣的一個直覺; 如果您不喜歡瀏覽所有的細節,請隨時跳到下一部分

關於損失函式的梯度

通常,分類損失是一個交叉熵函式,但更廣泛地說,它是一些函式,它將模型的預測機率分佈和真實目標值作為輸入,並且當模型的預測分佈遠離目標時,損失值就更高。這個物件的梯度是梯度下降學習的核心; 它表示如果將每個引數移動一個單位,損失值就會發生變化。

從入門到放棄:深度研究自然梯度最佳化

對數似然的梯度

從入門到放棄:深度研究自然梯度最佳化

對於我來說,這是學習自然梯度最令人困惑的部分

。因為,當您去閱讀有關 Fisher 資訊矩陣的內容,將獲得許多說明它與模型的對數似然的梯度有關的內容。我之前對似然函式的理解是,它代表了你的模型在某些資料集上預測的正確可能性有多大,特別是,您需要目標值才能計算它,因為您的目標是計算模型預測出真實目標的機率。在討論可能性的大多數情況下,例如非常常見的最大似然技術,您會關心對數似然的梯度,因為似然越高,模型從真實分佈中取樣的值的機率越高,當然我們就很樂意看到這樣的結果。實際上,這看起來像計算 p(class | x)梯度的期望值,其中機率是在資料的實際類分佈中得出。

但是,你也可以用另一種方式來估計似然值,而不是根據真實目標值計算您的似然(也就是採用非零梯度,因為它可能增加模型引數對目標預測準確的機率)。你可以使用從條件分佈本身中提取的機率來計算期望。也就是說,如果網路是採用 softmax,而不是基於給定觀察資料中的真實類別,以 0/1 機率取得 logp(z)的期望,那麼使用該模型的估計機率作為其權重,將導致整體期望梯度值為 0,因為我們的模型是以當前的置信度作為基本事實,但我們仍然可以得到對梯度方差的估計(即梯度平方),也就是在 Fisher 矩陣中(隱含地)計算預測類空間中的 KL 散度時,需要用到的值。

所以......它有幫助嗎?

這篇文章花了很多時間來談論機制:究竟什麼叫做自然梯度估計,以及關於它如何以及為什麼能起作用的更好的一種直覺。但是,如果我不回答這個問題,我覺得自己會失職:這件事真的有價值嗎?

簡短的回答是:實際上,它並沒有為大多數深度學習應用程式提供足夠引人注目的價值。 有證據表明自然梯度僅需要很少的步驟就能讓模型收斂,但正如本文稍後將討論的那樣,這是一個複雜的比較過程。對於那些被引數空間中隨意更新步驟的方法困擾的人來說,自然梯度的想法是優雅並且令人滿意的。但是,除了優雅之外,我不清楚它是否提供了更多的價值。

據我所知,自然梯度提供了兩個關鍵的價值來源:

1、它提供有關曲率的資訊

2、它提供了一種直接控制模型在預測分佈空間中移動的方法,而且與模型在損失空間中的移動是分開的

從入門到放棄:深度研究自然梯度最佳化

曲率

現有的梯度下降法的一大奇蹟是它透過一階求導完成。一階方法是僅計算與要更新的引數相關的導數。使用一階導數,您所知道的是曲線在特定點處的切線。您不知道切線的變化速度有多快。而二階導數,會更具有描述性,即函式在任何給定方向上的曲率水平。要知道曲率是一個非常有用的東西,因為在高曲率區域,梯度從一點到另一點的急劇變化,所以最佳化時需要謹慎的邁出一大步,以免被正在攀登的陡峭山峰的區域性資訊誤導,而跳下就在眼前的懸崖。我喜歡這樣思考的方法,如果你處於一個點到點的梯度變化很大的地區(也就是說:高方差),那麼你 minibatch估計的梯度在某種意義上就更加的不確定。相比之下,如果梯度在給定點幾乎沒有變化,那麼下一步就不需要謹慎了。二階導數資訊非常有用,因為它可以根據曲率水平來縮放每一步的大小。

實際上,自然梯度是將引數更新除以梯度的二階導數。梯度相對於給定引數方向變化越大,Fisher 資訊矩陣中的值越高,那麼在該方向上更新的步幅大小越低。這裡討論的梯度是批次中各點的經驗似然的梯度。這與損失函式方面的梯度不同。但是,直觀地說,似然的巨大變化與損失函式的劇烈變化並不相符。因此,透過捕獲關於給定點處的對數似然導數空間的曲率的資訊,自然梯度也給出了真實的損失空間中的曲率資訊。有一個非常有力的論據,當自然梯度已被證明可以加速收斂(至少在所需梯度步幅的數量方面),這就是價值的來源。

然而請注意,本文提到自然梯度可以在梯度步驟方面加速收斂。這種精確度來自於自然梯度的每個單獨步驟需要更長時間,因為它需要計算 Fisher 資訊矩陣,記住,這是一個存在於 n_parameters² 空間中的數量。事實上,這種急劇放緩類似於透過計算真實損失函式的二階導數引起的減速。雖然是這種情況,但我還沒有看到計算自然梯度的 Fisher 矩陣能夠比計算相關損失函式的二階導數更快。以此為假設,與對損失函式本身進行直接二階最佳化的(也可能是同樣的代價高昂)方法相比,很難看出自然梯度提供的值域是多少。

現代神經網路能夠在理論預測只有一階導數失敗的情況下取得成功的原因有很多,深度學習從業者已經找到了一堆巧妙的技巧來憑經驗逼近二階導數矩陣中所包含的資訊。

Momentum

作為一種最佳化策略,它是透過保持上一次梯度值的加權平均值並將任何給定的梯度更新偏向該值移動的方向來起作用。這有助於解決在梯度值變化很大時的一部分問題:如果你經常得到相互矛盾的梯度更新,他們通常會取一個平均值,類似於減慢你的速度學習率。而且,相比之下,如果你反覆得到相同方向的梯度估計值,那就表明這是一個低曲率區域,並會建議採用更大的步長,而 Momentum 正是遵循這一規律。

RMSProp

,令人捧腹的是,它是由 Geoff Hinton 在課程中期發明的,它是對以前存在的稱為 Adagrad 的演算法的修改。RMSProp 透過獲取過去平方梯度值的指數加權移動平均值,或者換句話說,過去的梯度方差,並將更新的步長除以該值。這可以大致被認為是梯度的二階導數的經驗估計。

Adam(自適應的矩估計方法)

,它基本上是結合了上述的兩種方法,估計梯度的實際平均值和實際方差。它是當今最常見,也是最常用的最佳化策略之一,主要是因為它具有平滑掉嘈雜的一階梯度訊號的效果。

還值得一提的是,以上這些方法除了通常根據函式曲率縮放更新步長之外,它們還能根據這些特定方向上的曲率值不同地縮放不同的更新方向。這與我們之前討論的內容有點類似,也就是按相同的數量縮放所有引數可能不是一件明智的事情。您甚至可以根據距離來考慮這一點:如果某方向上的曲率很高,那麼在歐幾里德引數空間中相同數量的步長將使我們在梯度值的移動上比預期的更遠。

因此,雖然在定義引數更新的連貫方向方面不具備自然梯度的優雅,但它確實能夠在曲率不同的地方,準時的調整方向和更新步長。

根據分佈直接決定

OK,最後一節論述的是:既然直接分析 N² 的計算似乎都是非常耗時的,如果我們的目標是使用對數似然的分析曲率估計去替代損失曲率估計,為什麼我們不直接採用後者,或接近後者的方式。但是,如果您處於這樣一種情況,即您實際上是在關注預測類別分佈的變化,而不僅僅是損失變化? 這種情況甚至會是什麼樣的?

這種情況的一個例子,是當前自然梯度方法的主要領域之一:強化學習領域的信任區域策略最佳化(Trust Region Policy Optimization, TRPO)。在策略梯度的設定中,您在模型結束時預測的分佈是以某些輸入狀態為條件的動作分佈。而且,如果您正在從您模型當前預測的策略中收集下一輪訓練的資料訓練來學習 on-policy,則有可能將您的策略更新為一個死迴圈。這就是策略遭受災難性打擊的意義所在。為了避免這種情況,我們要謹慎行事,而不是做可以顯著改變我們策略的梯度更新。如果我們在預測機率發生變化的過程中保持謹慎,那就極少會出現死迴圈的情況。

這就是自然梯度的一個案例:在這裡,我們關心的實際上是在新引數配置下不同行為的預測機率變化了多少。我們關心的是模型本身,而不僅僅是損失函式的變化。

最後,我想透過兩個我仍然存在的困惑來結束這篇文章

1、我不敢確定計算對數似然的 Fisher 矩陣是否比僅僅計算損失函式的 Hessian 更有效(如果是,那將是自然梯度獲得關於損失曲面曲率資訊的更容易的方式)

2、我比較不相信,當我們在 z 的對數機率上計算期望時,那個期望值能夠替代我們模型預測的機率(期望必須相對於某些機率集來定義)。

(本文由AI科技大本營編譯,轉載請聯絡微信1092722531)

Top