kl散度的理解 以曲率的視角理解自然梯度優化

2021-10-11 13:51:37 字數 3740 閱讀 8947

我要講乙個故事:乙個你幾乎肯定聽過的故事,但它的側重點與你習以為常關注的不同。

所有現代深度學習模型都使用梯度下降進行訓練。 在梯度下降的每個步驟中,您的引數值從某個起始點開始,然後將它們移動到最大損失減少的方向。 你可以通過從你的整個引數向量中獲取損失的導數來實現這一點,否則稱為雅可比行列式。然而,這只是損失的一階導數,它沒有告訴你曲率的任何資訊,或者說,一階導數變化的有多快。由於您所處的區域中,您對一階導數的區域性近似可能不會從該估計值點(例如,在大山前的向下曲線)的區域中,您通常需要謹慎,並且不要太過大踏步。 因此,為了謹慎起見,我們用下面的等式中的步長α控制我們的前進速度。

這個步長做了一些有趣的事情:它限制了你要在梯度方向上更新每個引數的距離,並且這樣做是固定的數量。在這個演算法的最簡單的版本中,我們取乙個標量,假設是0.1,然後乘以關於損失的梯度。我們的梯度,記住,實際上是乙個向量-損失的梯度相對於模型中的每個引數向量-損失的梯度模型中,當我們將它乘以乙個標量時,我們用歐幾里得的方法,將沿每個引數軸的更新乘以相同的固定量。在梯度下降的最基本版本中,我們在學習過程中使用相同的步長。

但是,這真的有意義嗎?有乙個小學習率的前提是,我們知道乙個單一的區域性梯度估計只能在該估計周圍的乙個小的區域性區域有效。但是,引數可以存在於不同的尺度上,並且可以對您所學的條件分布產生不同程度的影響。而且,這種程度的影響會在培訓過程中波動。從這個角度來看,在歐幾里得引數空間中,用乙個固定的全域性半徑來定義乙個安全波動似乎不是一件特別明智或有意義的事情。

自然梯度的支持者含蓄地提出了乙個相反的建議,即我們不應該用引數空間中的距離來定義安全視窗,而是應該用分布空間中的距離來定義它。所以,與其說"我將遵循電流梯度,服從保持引數向量保持在電流向量的極小值的距離內",不如說"我將遵循我的電流梯度,服從保持分配我的模型是**在之前**的分布的極小值的距離內"。

這裡的概念是分布之間的距離對於任何縮放、移動或一般的重新引數化都是不變的。例如,例如,相同的高斯可以使用方差引數或尺度引數(1/方差)進行引數化;兩種分布之間的距離是不同的,這取決於它們是用方差還是尺度來進行引數化。但如果在原始概率空間中定義乙個距離,它將是一致的。

本文的其餘部分將嘗試建立一種更強大,更直觀的理解方法,稱為自然梯度學習,這是一種概念上優雅的想法,旨在糾正引數空間中縮放的任意性。本文將深入**它是如何工作的,如何在構成它的不同數學思想之間建立橋梁,並最終討論它是否以及在什麼地方真正有用。但是,首先:計算分布之間的距離意味著什麼?

kl分歧,或者更確切地說是kullback-leibler分歧,在技術上並不是分布之間的距離度量(數學家對於所謂的度量或適當的距離是挑剔的),但它非常接近這個概念。

從數學上講,它是通過計算從乙個分布或另乙個分布取樣的x的值取得的對數概率(即,概率值的原始差異)的比率的預期值來獲得的。這個事實是,期望取自其中乙個分布或另乙個分布使得它成為非對稱度量,其中kl(p || q)!= kl(q || p)。但是,在許多其他方面,kl分歧對映到我們關於概率距離應該是什麼樣的概念:它直接根據概率密度函式的定義來衡量,也就是說,分配在一堆點上的密度值的差異來定義的。這有乙個非常實用的方面,當分布對於廣泛的x系列的"x的概率是多少"的問題有更遠的答案時,分布被視為更加不同。

在自然梯度條件下,kl分歧被用作衡量我們的模型**的輸出分布變化的一種方式。如果我們正在解決多向分類問題,那麼我們的模型的輸出將是乙個softmax,它可以被看作是乙個多項式分布,每個類具有不同的概率。當我們談論由當前引數值定義的條件概率函式時,這就是我們所討論的概率分布。如果我們使用kl散度作為縮放梯度步長的方法,這意味著我們看到兩個引數配置為"更遠的距離",對於給定的輸入特徵集,如果它們會導致**的類別分布在kl分歧方面非常不同。

到目前為止,我們已經討論過為什麼在引數空間中縮放更新步驟的距離是令人不滿意的,並建議乙個不那麼隨意的替代方案:縮放我們的步驟,使得最多只能在kl分歧方面與我們的模型以前一直在**的類分布。理解自然梯度最困難的部分是下一部分:kl divergence和fisher資訊矩陣之間的聯絡。

從故事的結尾開始,natural gradient就像這樣實現:

等號上的def表示右邊的是左邊符號的定義。右手項由兩部分組成。首先,這是你的損失函式相對於引數的梯度(這是在更正常的梯度下降步驟中使用的相同梯度)。"自然"位來自第二個分量:取對數概率函式梯度的平方梯度的期望值(取自z)。我們將整個物件稱為fisher資訊矩陣,用損失梯度乘以它的倒數。

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

使自然梯度優化混淆的部分原因在於,當您正在閱讀或思考它時,您必須理解和爭論兩個不同的梯度物件,這意味著不同的事物。順便說一句,這對於雜草來說是不可避免的,特別是在討論可能性時,並沒有必要掌握整體直覺; 如果您不喜歡瀏覽所有血淋淋的細節,請隨時跳到下一部分。

通常,您的分類損失是乙個交叉熵函式,但更廣泛地說,它是某種函式,它將模型的**概率分布和真實目標值作為輸入,並且當您的分布遠離目標時具有更高的值。這個物件的梯度是梯度下降學習的核心麵包和黃油; 它表示如果將每個引數移動乙個單位,您的損失將會發生變化。

這是我學習自然梯度中最令人困惑的部分。因此,如果您閱讀有關fisher資訊矩陣的內容,您將獲得許多鏈結,說明它與模型的對數似然的梯度有關。我之前對似然函式的理解是,它代表了你的模型對某些資料集的可能性有多大; 特別是,您需要目標值來計算它,因為您的目標是計算模型分配給真實目標的概率,當您對輸入要素進行調節時。在討論可能性的大多數情況下,例如非常常見的最大似然技術,您關心對數似然的梯度,因為您的可能性越高,您的模型分配從真實分布中取樣的值的概率越高,我們都快樂。實際上,這看起來像計算p(class | x)漸變的期望值,其中概率在資料中的實際類分布中得出。

但是,您也可以用另一種方式評估可能性,而不是根據真實目標值計算您的可能性(您可能希望具有非零梯度,因為它可能會推動您的引數增加概率對於真正的目標,您可以使用從條件分布本身中提取的概率來計算您的期望。也就是說,如果您的網路導致softmax,而不是基於給定觀察的資料中的真實等級,以0/1概率取得logp(z)的期望,請使用該模型的估計概率作為在它期望中的權重。這將導致整體預期梯度為0,因為我們將模型當前的信念作為基本事實,但我們仍然可以得到梯度的方差(即梯度平方),這是我們的fisher矩陣中(隱含地)計算**類空間中的kl分歧所需要的。

簡短的回答是:實際上,它並沒有為大多數深度學習應用程式提供足夠引人注目的價值。有證據表明自然梯度導致收斂發生的步驟較少,但正如我稍後將討論的那樣,這是乙個複雜的比較。對於因引數空間中的縮放更新步驟的隨意性而受挫的人來說,自然漸變的想法是優雅的並且令人滿意。但是,除了優雅之外,我不清楚它是否提供了無法通過更多啟發手段提供的價值。

kl散度的理解

在看 detecting regions of maximal divergence for spatio temporal anomaly detection 時,文中提到了這三種方法來比較時間序列中不同區域概率分布的差異。kl散度 js散度和交叉熵 三者都是用來衡量兩個概率分布之間的差異性的指標...

資訊熵,交叉熵,KL散度,JS散度之間的關係

1 資訊熵介紹 對於連續型隨機變數,假設p為隨機變數x的概率分布,則p x 為隨機變數x在x x處的概率,隨機變數x在x處的夏農資訊量為 夏農資訊量用於刻畫消除隨機變數x在x處的不確定性所需的資訊量的大小。很容易看到 當 x x 的概率 p x 比較大時,就代表此事發生的概率比較大,不確定性因素小,...

我見過最清晰的 理解梯度,散度,旋度

梯度 運算的對像是純量,運算出來的結果會是向量在乙個純量場中,梯度的計算結果會是 在每個位置都算出乙個向量,而這個向量的方向會是在任何一點上從其周圍 極接近的周圍,學過微積分該知道甚麼叫極限吧?純量值最小處指向周圍純量值最大處.而這個向量的大小會是上面所說的那個最小與最大的差距程度 舉例子來講會比較...