題:
為什麼要優化最大對數概率而不是概率
Albert
2015-09-28 13:37:33 UTC
view on stackexchange narkive permalink

在大多數機器學習任務中,您可以製定應最大化的概率$ p $,我們實際上將優化對數概率$ \ log p $而不是某些參數$ \ theta $的概率。例如。在最大似然訓練中,通常是對數似然。使用某些漸變方法進行此操作時,會涉及以下因素:

$$ \ frac {\ partial \ log p} {\ partial \ theta} = \ frac {1} {p} \ cdot \ frac {\ partial p} {\ partial \ theta} $$

有關某些示例,請參見此處此處

當然,優化是等效的,但是梯度會有所不同,因此任何基於梯度的方法的行為都會有所不同(尤其是隨機梯度方法)。是否有理由證明$ \ log p $梯度比$ p $更好梯度嗎?

您需要注意,我們通常使用導數來最大化似然性。另一方面,在許多情況下應用獨立性條件,這意味著似然性是某些同義概率密度函數的乘積。而且,許多小的值(在[0,1]間隔內)的乘積會導致非常小的值。這導致計算困難。
@AlejandroRodriguez在此處查看我的[answer](http://stats.stackexchange.com/a/176563/11646),以獲取更多詳細信息。
七 答案:
Paul
2015-10-12 16:54:45 UTC
view on stackexchange narkive permalink

梯度方法通常比$ p(x)$更能優化$ \ log p(x)$,因為$ \ log p(x)$的梯度通常更容易縮放。也就是說,它的大小可以始終如一地並有用地反映目標函數的幾何形狀,從而更容易選擇合適的步長並以更少的步長達到最佳。

要了解我的意思,請比較$ p(x)= \ exp(-x ^ 2)$和$ f(x)= \ log p(x)= -x ^ 2 $的梯度優化過程。在任意點$ x $處,$ f(x)$的梯度為$$ f'(x)= -2x。$$如果將其乘以$ 1/2 $,我們將得到達到不管$ x $是什麼,原始的全局最優值。這意味著我們不必為了獲得良好的步長而付出很大的努力(或用ML術語“學習率”)。無論我們的起始點在哪裡,我們都將步長設置為漸變的一半,然後一步步到達原點。而且,如果我們不知道所需的確切因素,我們可以選擇一個大約為1的步長,進行一些線搜索,我們會很快找到一個很大的步長,無論在哪裡,都可以正常工作$ x $是。此屬性對於$ f(x)$的轉換和縮放具有魯棒性。雖然縮放$ f(x)$將導致最佳步長縮放不同於1/2,但無論$ x $是什麼,至少步長縮放都將是相同的,因此我們僅需找到一個參數即可獲得有效的基於梯度的優化方案。

相反,$ p(x)$的梯度具有非常差的全局優化屬性。我們有$$ p'(x)= f'(x)p(x)= -2x \ exp(-x ^ 2)。$$這會將完美的,行為良好的漸變$ -2x $乘以一個因子$ \ exp(-x ^ 2)$隨著$ x $的增加呈指數衰減(快於)。在$ x = 5 $的情況下,我們已經有$ \ exp(-x ^ 2)= 1.4 \ cdot 10 ^ {-11} $,因此沿著梯度向量的步長大約是$ 10 ^ {-11} $倍。為了使合理的步長達到最佳,我們必須按梯度的倒數來縮放梯度,這是一個巨大的常數$ \ sim 10 ^ {11} $。這樣的縮放比例差的縮放效果比出於優化目的無用的效果更糟-我們最好只是嘗試在上坡方向執行單位步長,而不是通過按$ p'(x)$縮放來設置步長! (在許多變量中,$ p'(x)$變得很有用,因為我們至少從梯度中獲取了方向信息,但是縮放問題仍然存在。)

通常不能保證$ \ log p(x)$會像這個玩具示例一樣具有出色的漸變比例屬性,尤其是當我們有多個變量時。但是,對於幾乎所有非平凡的問題,$ \ log p(x)$都會比$ p(x)$更好。這是因為似然性是一個包含大量項的大乘積,對數將乘積轉化為總和,如其他幾個答案所述。從最優化的角度出發,假設似然項是行為良好的,它們的對數通常是行為良好的,行為良好的功能之和也應保持行為良好。 “表現良好”是指$ f''(x)$的變化不會太大或太快,導致了幾乎二次函數,可以通過梯度方法輕鬆優化。無論導數的階數如何,導數的和都是該和的導數,這有助於確保一大堆總和項具有非常合理的二階導數!

+1此答案提出並強調了成為問題核心的要點。
謝謝!我想在tensorflow上嘗試這個。對於習慣於tensorflow的用戶來說,這是一個快速實現:[here](https://colab.research.google.com/drive/1F9YbiAFyrHyai5gNwFijAiQYIrFyF-87?usp=sharing)
Uri Goren
2015-09-28 14:23:31 UTC
view on stackexchange narkive permalink

下溢

計算機使用分數的有限數字浮點表示形式,因此乘以如此多的概率可以保證非常非常接近零

有了$ log $,我們就不會遇到這個問題。

+1以獲得數值穩定性-這個和Yuril的答案應該是一個!
您可以在對數空間中計算乘積,從而將其變成一個總和,然後將其轉回。或者您計算$ \ frac {\ partial \ log p} {\ partial \ theta} \ cdot p $等於$ \ frac {\ partial p} {\ partial \ theta} $。因此,數值穩定性不是問題。
請記住,您提到的$ p $是樣本中所有事件的概率的乘積,而$ p $是下溢的元素。
這似乎有點極端。您什麼時候需要小於$ 2 ^ {-127} $的概率?
@Filip此主題中的術語有些不明智。我們正在討論的是概率*密度*,而不是概率。密度是任意的:它們取決於測量單位。此外,對於足夠的樣本量,來自參數模型的任何簡單樣本的概率密度最終將小於$ 2 ^ {-127} $。在大問題(具有數百萬個數據)中,概率密度通常為$ 2 ^ {-1000000} $或更小。即使從標準正態分佈中提取的大小為$ 80 $的樣本也幾乎可以肯定其概率密度小於$ 2 ^ {-127} $。
@FilipHaglund:煩人是正確的,但是,其密度這一事實並不是這裡的關鍵觀察。我們也可以討論一個離散的過程並討論實際概率(實際上,OP沒有說任何排除這種情況的東西)。但是,我們談論的是非常具體的結果的概率(例如,一百萬個觀察結果以某種特定方式出現)。一個特定的結果不太可能,但是在貝葉斯推理中,概率比很重要,因此我們需要知道一個小概率與另一個小概率有多大。
是的,但是underflo並不是全部。對數早在我們擁有計算機之前就已經使用過這種方式,對數也用於純理論處理中,因此也有一些潛在的理論原因!
TemplateRex
2015-09-28 20:56:02 UTC
view on stackexchange narkive permalink
  1. 多個聯合概率的對數簡化為單個概率的對數之和(並且求和規則比乘積規則容易區分)

    $ \ log \ left(\ prod_i P(x_i)\ right)= \ sum_i \ log \ left(P(x_i)\ right)$

  2. 指數概率分佈家族成員的對數(包括普遍存在的正態)在參數中是多項式的(即最大似然降低為最小二乘

    $ \ log \ left(\ exp \ left(-\ frac {1} {2} x ^ 2 \ right)\ right)=-\ frac {1} {2} x ^ 2 $

  3. 後一種形式比前一種形式更數值上穩定符號上更容易區分。

  4. 最後但並非最不重要的是,對數是一個單調變換,它保留極值的位置(尤其是在原始和對數轉換後的公式的最大似然性相同)

  5. ol>
原因2強調不夠。為了使具有高斯噪聲的線性模型的對數似然性最大化,您只需要解決最小二乘問題,就等於解決了線性方程組。
原因1和3僅描述瞭如何計算。您可以用這種方法進行計算,然後將其轉換回(乘以$ p $)以獲得$ \ frac {\ partial p} {\ partial \ theta} $。實際上,在對數空間中進行計算以獲得數值穩定性是非常普遍的。但這並不能解釋為什麼要使用該漸變。原因4也不是$ \ log p $漸變更好的原因。您也可以通過許多其他轉換來做到這一點。原因2很有趣,但是我仍然不確定為什麼多項式的梯度比另一個函數的梯度更好。
@Albert多項式的導數是低一階的多項式(尤其是二次變為線性),而指數並不僅僅在微分下
@TemplateRex:是的,很明顯。但是我問的是隨機梯度方法的收斂特性。
Yurii
2015-09-28 13:50:05 UTC
view on stackexchange narkive permalink

採用對數和的導數要比採用包含100乘數的乘積的導數容易得多。

另外,當項變得很小或很大時,還可以減少潛在的數字問題。
相反,OP隱式提供了一種計算任何非負函數乘積的極好方法:將對數的導數之和乘以乘積本身。(這種乘法最好以對數的形式進行,這也消除了@Björn的評論中提到的數值問題。)因此,“緩動”沒有提供真正的解釋能力,也沒有解決關於比較梯度的更有意義的問題。
Meni Rosenfeld
2015-09-30 00:22:24 UTC
view on stackexchange narkive permalink

通常,最基本,最簡單的優化問題是優化二次函數。無論從何處開始,都可以輕鬆找到此類功能的最佳選擇。這種表現方式取決於特定的方法,但是您的函數越接近二次方就越好。

如TemplateRex所述,在各種各樣的問題中,用於計算似然函數的概率來自於正態分佈或由其近似。因此,如果您處理日誌,則會得到一個很好的二次函數。而如果您處理這些概率,則您有一個函數

  1. 不是凸面的(到處都是優化算法的禍根)
  2. 快速跨越多個尺度,因此具有函數值指示要在何處定向的範圍非常狹窄。
  3. ol>

    您寧願優化哪個函數, this this

    (這實際上很簡單;在實際應用中,您的搜索可能會偏離最佳值,以至於即使您能夠進行數字計算,它們的函數值和梯度也將難以區分。從0開始,對於優化算法而言是無用的,但是轉換為二次函數使這很容易。

    請注意,這與已經提到的數值穩定性問題完全一致。使用此功能需要對數刻度的原因,這與對數概率表現出更好的效果(出於優化和其他目的)的原因完全相同。

    您還可以採用另一種方​​法。即使對數沒有任何優勢(有)-我們還是要使用對數刻度進行推導和計算,所以有什麼理由僅將exp變換用於計算梯度呢?我們也可能與日誌保持一致。

@TemplateRex:(向下)凸正函數的對數是凸,但反之則不成立。概率不是凸的,因此沒有什麼可保留的,但是對數是凸的。看一下我鏈接的圖-exp(-10x ^ 2)顯然是非凸的,但是-10x ^ 2是。
Aksakal
2015-10-08 01:57:18 UTC
view on stackexchange narkive permalink

通過使用$ \ ln p $,我們增加了優化算法的動態範圍。應用程序中的$ p $通常是功能的產物。例如,在最大似然估計中,它是形式為$ L(x | \ theta)= \ Pi_ {i = 1} ^ nf(x_i | \ theta)$的乘積,其中$ f(。)$是密度函數,它可以大於或小於1,順便說一句。

因此,當$ n $非常大(即大樣本)時,您的似然函數$ L(。)$通常遠離1:非常小或非常大,因為它是冪函數$ L \ sim f(。)^ n $。

通過記錄日誌,我們可以簡單地提高任何優化算法的動態範圍,使其以相同的方式適用於極大或極小的值。

Albert
2019-07-25 12:49:35 UTC
view on stackexchange narkive permalink

已經給出了一些不錯的答案。但是我最近遇到了一個新的:

通常,您會得到一個龐大的訓練數據集 $ \ mathcal {X} $ span>,然後定義了一些概率模型 $ p(x | \ theta)$ span>,並且您希望最大化\ mathcal {X} $ span>中 $ x \的可能性。它們被認為是獨立的,即您有 $$ p(\ mathcal {X} | \ theta)= \ prod_ {x \ in \ mathcal {X}} p(x | \ theta)。 $$ span> 現在,您經常進行某種基於隨機(小批量)梯度的訓練,即在每一步中,對於損失 $ L $ span>,您可以優化 $ L(\ mathcal {X'} | \ theta)$ span>表示 $ \ mathcal {X'} \ subset \ mathcal {X} $ span>,即 $$ \ theta':= \ theta-\ frac {\ partial \ sum_ {x \ in \ mathcal {X'}} L(x | \ theta)} {\ partial \ theta}。 $$ span> 現在,這些隨機步驟會累加累加。因此,您通常需要的屬性 $$ L(\ mathcal {X} | \ theta)= \ sum_ {x \ in \ mathcal {X}} L(x | \ theta)。 $$ span> 情況就是這樣 $$ L(x | \ theta)=-\ log p(x | \ theta) $$ span>



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...