第十八章 直面配分函數 (開篇引言)

2018-01-12

Confronting the Partition Function

https://www.youtube.com/watch?v=yw1JDopTuwo

重點摘要: 許多機率模型(尤其是無向圖模型)由一個未歸一化的機率分佈 p̃(x;θ) 定義。為了獲得一個有效的機率分佈 p(x;θ),必須將 p̃(x;θ) 除以一個歸一化常數,即配分函數 Z(θ) (公式 18.1)。配分函數是未歸一化機率在所有狀態上的積分(對於連續變量)或求和(對於離散變量)(公式 18.2, 18.3)。對於許多有趣的深度學習模型而言,這個積分或求和難以計算。雖然有些模型設計成具有易於處理的歸一化常數或避免直接計算 p(x),但其他模型則必須直接面對這個挑戰。本章旨在介紹用於訓練和評估那些具有難以處理的配分函數的模型的技術。

Q: 什麼是配分函數 Z(θ)?為什麼在許多機率模型中它是一個重要的概念?

A: 配分函數 Z(θ) 是一個歸一化常數,定義為未歸一化機率分佈 p̃(x;θ) 在其所有可能狀態 x 上的積分(對於連續變量)或求和(對於離散變量)。它之所以重要,是因為有效的機率分佈 p(x;θ) 必須通過將 p̃(x;θ) 除以 Z(θ) 來獲得,即 p(x;θ) = (1/Z(θ))p̃(x;θ),以確保機率分佈在所有狀態上的總和(或積分)為1。

Q: 為什麼配分函數對於許多深度學習模型來說是一個挑戰?

A: 因為對於許多有趣的深度學習模型,特別是那些具有複雜依賴結構或高維狀態空間的模型,計算配分函數所需的積分或求和操作在計算上是難以處理的 (intractable),甚至是不可能的。

Q: 本章的主要目標是什麼?

A: 本章的主要目標是介紹一系列用於訓練和評估那些具有難以處理的配分函數的機率模型的技術。這些技術旨在繞過或近似計算配分函數及其相關的梯度。


18.1 對數概似梯度

重點摘要: 通過最大概似學習無向模型特別困難,因為配分函數 Z(θ) 依賴於模型參數 θ。對數概似 log p(x;θ) 相對於參數 θ 的梯度包含兩項: ∇_θ log p(x;θ) = ∇_θ log p̃(x;θ) - ∇_θ log Z(θ) (公式 18.4) 這兩項在機器學習中被稱為「正相 (positive phase)」和「負相 (negative phase)」。 對於大多數無向模型,負相 ∇_θ log Z(θ) 是困難的。通過一系列推導,可以證明: ∇_θ log Z(θ) = E_{x'~p(x';θ)}[∇_θ log p̃(x';θ)] (公式 18.13, 18.15) 這意味著負相梯度是在模型自身定義的機率分佈 p(x;θ) 下,對未歸一化對數機率 log p̃(x;θ) 的梯度的期望。 因此,整個對數概似梯度可以寫成: ∇_θ log p(x;θ) = ∇_θ log p̃(x;θ) - E_{x'~p(x';θ)}[∇_θ log p̃(x';θ)] 正相項 ∇_θ log p̃(x;θ) 通常易於計算(如果沒有潛變量或潛變量間相互作用少)。本章主要探討負相計算的難點。在深度學習文獻中,常用能量函數 E(x;θ) 來參數化 log p̃(x;θ) = -E(x;θ)。在這種情況下,正相可以解釋為降低訓練樣本的能量,負相可以解釋為提高模型生成樣本的能量。

Q: 對數概似梯度包含哪兩個主要部分?它們分別被稱為什麼?

A: 對數概似梯度 ∇_θ log p(x;θ) 包含兩個主要部分:

  1. ∇_θ log p̃(x;θ): 稱為「正相 (positive phase)」。
  2. - ∇_θ log Z(θ): 稱為「負相 (negative phase)」。

Q: 負相梯度 ∇_θ log Z(θ) 可以如何表示?這個表示意味著什麼?

A: 負相梯度可以表示為 ∇_θ log Z(θ) = E_{x'~p(x';θ)}[∇_θ log p̃(x';θ)] (公式 18.13, 18.15)。 這意味著負相梯度是在模型自身定義的機率分佈 p(x;θ) 下,對未歸一化對數機率的梯度 ∇_θ log p̃(x;θ) 的期望。換句話說,它涉及到從模型中採樣,並計算這些樣本對梯度的貢獻。

Q: 在使用能量函數 E(x;θ) 參數化模型時,正相和負相在直觀上可以如何解釋?

A: 如果 log p̃(x;θ) = -E(x;θ),那麼:


18.2 隨機最大概似和對比散度

重點摘要: 計算負相梯度 E_{x'~p(x';θ)}[∇_θ log p̃(x';θ)] 需要從模型 p(x;θ) 中採樣,這通常是困難的。

Q: 計算對數概似梯度的負相為什麼通常很困難?朴素的 MCMC 方法有什麼問題?

A: 負相需要計算在模型分佈 p(x;θ) 下的期望,這通常需要從 p(x;θ) 中進行採樣。如果 p(x;θ) 是一個複雜的、高維的分佈,直接採樣是很困難的,通常需要 MCMC 方法。 朴素的 MCMC 方法(如算法 18.1)的問題在於,每次計算梯度時,都需要從隨機初始狀態開始運行 MCMC 鏈,並等待其「混合」以達到平穩分佈,這個混合過程計算代價非常高,使得訓練過程極其緩慢,在實際中不可行。

Q: 什麼是對比散度 (CD-k) 算法?它是如何工作的?它相對於朴素 MCMC 有什麼優點和缺點?

A: 對比散度 (CD-k) 是一種近似計算負相梯度的算法。

Q: 什麼是隨機最大概似 (SML) 或持續性對比散度 (PCD)?它與 CD 有何不同?它有哪些優勢?

A: 隨機最大概似 (SML) 或持續性對比散度 (PCD) 是另一種近似計算負相梯度的 MCMC 策略。

Q: 為什麼說使用 CD 訓練的模型從某種程度上類似於訓練自編碼器?

A: 因為 CD 算法使用訓練數據點來初始化 MCMC 鏈以生成負相樣本。這意味著負相樣本相對接近真實數據。學習過程試圖區分真實數據和這些「輕微擾動」的數據。從這個角度看,模型被激勵去學習如何從這些接近數據的「幻想粒子」中重建或區分出真實數據,這與自編碼器學習從損壞的輸入中重建原始輸入有相似之處。特別是,它有助於預訓練之後會堆疊起來的淺層模型,因為堆疊中最早的模型會受激勵複製更多的信息到其潛變量,使其可用於隨後的模型。


18.3 偽概似

重點摘要: 偽概似 (Pseudolikelihood) 是一種避免直接處理配分函數及其梯度的訓練方法。它基於一個觀察:無向機率模型中條件機率的比率可以消去配分函數。 p(a|b) = p̃(a,b) / p̃(b) = p̃(a,b) / Σ_{a',c'} p̃(a',b,c') (公式 18.18) 對數概似 log p(x) 可以通過鏈式法則分解為一系列條件對數概似之和 log p(x) = Σ_i log p(x_i | x_{<i}) (公式 18.19)。計算每個 log p(x_i | x_{<i}) 仍然需要邊緣化,計算代價高。 偽概似則最大化一個替代目標函數,即所有單個變數 x_i 在給定所有其他變數 x_{-i} 的條件下的對數機率之和: Σ_{i=1}^n log p(x_i | x_{-i}) (公式 18.20) 計算 p(x_i | x_{-i}) 只需要估計與 x_i 取不同值相關的 p̃(x) 的值,計算量遠小於計算完整的配分函數。最大化偽概似的估計是漸近一致的。 廣義偽概似 (Generalized Pseudolikelihood Estimator, GPLE) (公式 18.21) 權衡計算複雜度和與最大概似表現的偏差,它條件化變數的一個子集 x_{-S^(j)} 來預測另一個子集 x_{S^(j)}。偽概似的一個弱點是它不能與僅在 p̃(x) 上提供下界的方法(如變分推斷)一起使用。

Q: 什麼是偽概似 (Pseudolikelihood) 估計?它的基本思想是什麼?

A: 偽概似估計是一種用於訓練機率模型的參數估計方法,它避免了計算難以處理的配分函數。其基本思想是最大化數據中每個變數 x_i 在給定所有其他變數 x_{-i} 的條件下的對數機率之和,即 Σ_i log p(x_i | x_{-i})。由於條件機率 p(x_i | x_{-i}) = p̃(x) / Σ_{x'_i} p̃(x'_i, x_{-i}) 的分母(局部配分函數)只涉及到對單個變數 x_i 的求和,其計算通常比完整配分函數容易得多。

Q: 相較於計算真實的對數概似,計算偽概似的計算優勢在哪裡?

A: 計算真實的對數概似(例如通過鏈式法則 Σ_i log p(x_i | x_{1:i-1}))需要對越來越多的變數進行邊緣化,計算量巨大。而計算偽概似中的每一項 log p(x_i | x_{-i}),其分母(歸一化項)只需要對單個變數 x_i 的所有可能取值進行求和(或積分),計算量顯著降低。如果每個變數有 k 個不同的值,n 個變數,計算 需要 k^n 次估計,而計算偽概似只需要 n * k 的估計。

Q: 偽概似估計的統計特性如何?它有哪些局限性?

A:


18.4 得分匹配和比率匹配

重點摘要:

Q: 什麼是「得分 (score)」?得分匹配的目標是什麼?

A: 「得分」是指對數機率密度 log p(x) 關於其輸入 x 的梯度,即 ∇_x log p(x)。 得分匹配的目標是最小化模型預測的得分 ∇_x log p_model(x;θ) 與真實數據分佈的得分 ∇_x log p_data(x) 之間的平方差的期望 (公式 18.22)。

Q: 得分匹配如何避免了計算配分函數 Z(θ) 的難題?

A: 因為配分函數 Z(θ) 不依賴於輸入 x,所以 ∇_x log Z(θ) = 0。因此,∇_x log p(x;θ) = ∇_x log p̃(x;θ),得分匹配的目標函數中只涉及到未歸一化對數機率 log p̃(x;θ) 關於 x 的梯度,從而避免了與 Z(θ) 相關的計算。

Q: 比率匹配是如何擴展得分匹配的思想來處理離散數據的?

A: 比率匹配利用了與偽概似類似的策略,即通過考慮機率的比率來消除配分函數。具體來說,它最小化一個目標函數,該函數基於模型在某個(二值)數據點 x 處的未歸一化機率 p̃_model(x;θ) 與將 x 中某一位 x_j 翻轉後得到的點 f(x,j) 處的未歸一化機率 p̃_model(f(x,j);θ) 之間的關係 (如公式 18.26 的形式)。由於配分函數在比率 p̃_model(x;θ) / p̃_model(f(x,j);θ) 中被消掉,因此避免了計算 Z(θ)


18.5 去噪得分匹配

重點摘要: 在實踐中,我們通常無法獲取真實的數據分佈 p_data,只有其經驗分佈。為了避免模型過擬合到訓練點(即 p_model 變成以訓練點為中心的 Dirac 分佈的混合),可以擬合一個平滑後的數據分佈 p_smoothed(x) = ∫ p_data(y)q(x|y)dy (公式 18.27),其中 q(x|y) 是一個損壞過程(例如向 y 添加少量噪聲)。這被稱為去噪得分匹配。一些自編碼器訓練算法(如第 14.5.1 節討論的)等價于得分匹配或去噪得分匹配,因此它們也是解決配分函數問題的一種方式。

Q: 什麼是去噪得分匹配?它試圖解決標準得分匹配的什麼問題?

A: 去噪得分匹配是得分匹配的一種變體,它不是直接去匹配真實數據分佈 p_data 的得分,而是去匹配一個被輕微「損壞」或「平滑」後的數據分佈 p_smoothed(x) = ∫ p_data(y)q(x|y)dy 的得分,其中 q(x|y) 是一個已知的損壞過程(例如,向 y 添加高斯噪聲得到 x)。 它試圖解決的問題是,當我們只有來自 p_data 的有限樣本時,標準得分匹配(以及任何一致的估計器)在給定足夠容量的情況下,可能會過擬合到訓練數據,使得 p_model 變成一組以訓練點為中心的 Dirac 函數的混合。通過擬合一個平滑後的分佈,有助於緩解這種過擬合,並學習到更平滑、更泛化的密度模型。

Q: 去噪得分匹配與某些自編碼器的訓練算法有何關聯?

A: 一些自編碼器的訓練算法,特別是那些涉及到從損壞的輸入中重建原始輸入的算法(如去噪自編碼器),其目標函數在某些條件下被證明等價于(或與)得分匹配或去噪得分匹配的目標函數。這意味著這些自編碼器實際上也在隱式地學習數據的某種形式的得分函數,從而也提供了一種繞過配分函數問題來學習數據分佈的方法。


18.6 噪聲對比估計

重點摘要: 噪聲對比估計 (Noise-Contrastive Estimation, NCE) (Gutmann and Hyvärinen, 2010) 是一種不同的策略,它明確地將模型機率表示為 log p_model(x) = log p̃_model(x;θ) + c (公式 18.28),其中 c = -log Z(θ) 被視為一個額外的參數,與 θ 一同估計。NCE 將估計 p(x) 的無監督學習問題轉化為一個監督學習的二元分類問題。具體來說,引入一個易於估計和採樣的噪聲分佈 p_noise(x)。構造一個新的聯合模型,其中一個二元開關變量 y 決定我們是從模型生成數據 (y=1) 還是從噪聲分佈生成數據 (y=0),且 P_joint(y=1)=P_joint(y=0)=1/2 (公式 18.29-18.31)。然後,訓練一個邏輯回歸分類器來區分來自真實數據(標記為 y=1,其來源假設為 p_model)和來自噪聲分佈(標記為 y=0)的樣本。這個邏輯回歸的對數機率差恰好是 σ(log p̃_model(x) - log p_noise(x)) (公式 18.37,這裡 log p̃_model(x) 包含了可學習的常數 c)。通過最大化這個監督學習問題的概似,可以得到 θc 的一致估計。 自對比估計 (self-contrastive estimation) 是 NCE 的一種特殊情況,其中噪聲分佈由模型自身的前一個版本生成。

Q: 噪聲對比估計 (NCE) 的核心思想是什麼?它如何將無監督的密度估計問題轉化?

A: NCE 的核心思想是將學習目標模型 p_model(x) 的無監督問題轉化為一個監督式的二元分類問題。它引入一個已知的、易於採樣的「噪聲」分佈 p_noise(x)。然後,訓練一個分類器來區分來自真實數據(被認為是由 p_model(x) 生成的)的樣本和來自噪聲分佈 p_noise(x) 的樣本。通過優化這個分類器的參數(包括模型 p_model 的參數和一個與配分函數相關的常數),可以得到對 p_model 參數的一致估計。

Q: 在 NCE 中,模型 p_model(x) 和噪聲分佈 p_noise(x) 如何構成一個邏輯回歸問題的輸入?

A: NCE 構造了一個聯合模型,其中一個二元標籤 y 指示樣本 x 是來自模型 (y=1) 還是來自噪聲 (y=0)。給定一個樣本 x,判斷其標籤為 y=1 的條件機率(即邏輯回歸的輸出)可以表示為: P_joint(y=1|x) = p_model(x) / (p_model(x) + p_noise(x)) 如果我們令 p_model(x) = exp(log p̃_model(x;θ) + c),其中 c 是一個可學習的常數(近似 -log Z(θ)),那麼這個條件機率可以寫成 sigmoid 函數的形式: σ( (log p̃_model(x;θ) + c) - log p_noise(x) ) 這就形成了一個標準的邏輯回歸問題,其輸入特徵是 log p̃_model(x;θ)log p_noise(x)(或者它們的差),目標是預測二元標籤 y

Q: NCE 對噪聲分佈 p_noise(x) 有什麼要求?選擇不同的噪聲分佈會如何影響學習過程?

A: NCE 要求噪聲分佈 p_noise(x) 必須易於估計(計算其密度)和易於從中採樣(以生成負樣本)。 選擇不同的噪聲分佈會影響學習過程的效率:


18.7 估計配分函數

重點摘要: 儘管許多訓練方法避免計算 Z(θ),但在評估模型、監控訓練性能和比較模型時,估計配分函數本身可能很重要。

Q: 為什麼即使在訓練時可以避免計算配分函數,估計配分函數仍然很重要?

A: 估計配分函數在以下情況下可能很重要:

  1. 模型評估: 計算模型在測試數據上的真實歸一化概似,這是評估模型擬合優度的一個關鍵指標。
  2. 監控訓練性能: 追踪配分函數的變化可以幫助了解訓練過程的穩定性和進展。
  3. 模型比較: 比較不同模型在相同數據集上的對數概似時,需要知道它們的配分函數(或者至少是它們的比率)。

Q: 什麼是退火重要性採樣 (AIS)?它是如何工作的?

A: 退火重要性採樣 (AIS) 是一種用於估計兩個機率分佈(一個是易於處理的起始分佈 p_0,其配分函數 Z_0 已知;另一個是目標分佈 p_1,其配分函數 Z_1 待估計)的配分函數比率 Z_1/Z_0 的方法。

Q: 橋式採樣與 AIS 在處理起始分佈和目標分佈之間的差異時有何不同?

A:


希望這些詳細的摘要和Q&A對您有所幫助!