完整定義
KL 散度(Kullback-Leibler Divergence,又稱相對熵)是衡量一個機率分佈相對於另一個參考分佈的差異量。值為 0 表示兩分佈完全相同,值越大差異越大。在深度學習中廣泛用於 VAE、強化學習與知識蒸餾等任務。
KL 散度(Kullback-Leibler Divergence),由統計學家所羅門·庫爾巴克與理查德·萊布勒於 1951 年提出,是資訊理論中的核心概念之一。它衡量的是:如果我們用分佈 Q 來近似真實分佈 P,會損失多少資訊,或者說兩個分佈之間的「資訊距離」有多大。KL 散度也被稱為相對熵(Relative Entropy),在資訊理論、統計推斷、機器學習中都有重要地位。
在數學定義上,對於離散分佈,KL 散度 DKL(P||Q) = Σ P(x) × log(P(x)/Q(x));對於連續分佈則取積分形式。幾個關鍵特性值得注意:KL 散度恆為非負值(由吉布斯不等式保證),且當且僅當 P 與 Q 完全相同時為 0。但 KL 散度並非對稱的,DKL(P||Q) 不等於 DKL(Q||P),因此嚴格來說它不是距離度量,而是「散度」。
這種不對稱性在機器學習中有實際意義。DKL(P||Q)(前向 KL,P 為真實分佈)傾向於讓近似分佈 Q 覆蓋真實分佈 P 的所有高概率區域,即使 P 有多個峰值也要盡量照顧到,這被稱為「均值尋找(Mean-Seeking)」行為。反之,DKL(Q||P)(反向 KL,Q 為近似分佈)傾向於讓 Q 集中在 P 的某個高概率峰值上,稱為「模式尋找(Mode-Seeking)」行為。在變分推斷(Variational Inference)中,選擇哪個方向的 KL 散度作為目標函數,會顯著影響近似後驗分佈的形狀。
在變分自動編碼器(VAE, Variational Autoencoder)的訓練中,KL 散度是損失函數的核心組成部分。VAE 的損失函數由兩部分組成:重建損失(Reconstruction Loss)衡量解碼器輸出與原始輸入的差異,以及 KL 散度項衡量學習到的隱空間分佈與標準常態分佈之間的差異。KL 散度項起到正規化作用,讓隱空間保持連續性與結構性,使得模型可以從隱空間中任意取樣生成合理的輸出。當 KL 散度項的權重(beta)增大時,隱空間的結構性更強,生成的多樣性會降低但連貫性提高;beta 為 1 時就是標準 VAE,beta 更大則稱為 beta-VAE,有助於學習解耦(Disentangled)的隱空間表示。
在強化學習領域,近端策略優化(PPO, Proximal Policy Optimization)演算法使用 KL 散度來約束每次策略更新的幅度,確保新策略不會偏離舊策略太多,從而穩定訓練過程,避免出現策略崩潰(Policy Collapse)的問題。
在知識蒸餾(Knowledge Distillation)中,KL 散度被用來衡量學生模型輸出分佈與教師模型輸出分佈之間的差異,幫助學生模型不只學習硬標籤(Hard Label),還能學習教師模型的「軟標籤(Soft Label)」知識,包含類別之間的相對信心程度。
除了 KL 散度本身,衍生的 JS 散度(Jensen-Shannon Divergence)解決了非對稱問題,JS 散度 = (DKL(P||M) + DKL(Q||M)) / 2,其中 M = (P+Q)/2。JS 散度是對稱的,且有界(介於 0 到 log(2) 之間),在生成對抗網路(GAN)的早期理論分析中扮演重要角色,Wasserstein GAN 的提出正是為了克服 JS 散度在分佈不重疊時梯度消失的問題。
在 iPAS 考試中,KL 散度常出現在模型評估、分佈比較與資訊理論相關題目。考生需要理解 KL 散度的定義、不對稱性(DKL(P||Q) ≠ DKL(Q||P))、與 JS 散度的關係、以及在 VAE 損失函數中的正規化作用。
常見問題
KL 散度不對稱(DKL(P||Q) ≠ DKL(Q||P)),且當 Q(x)=0 而 P(x)>0 時值為無限大,這在實際計算中可能造成數值不穩定。JS 散度(Jensen-Shannon Divergence)透過引入中間分佈 M=(P+Q)/2 解決了這兩個問題:它是對稱的,值域有界在 [0, log(2)] 之間,計算更穩定。選擇哪個取決於應用場景:VAE 訓練中通常用反向 KL 散度因為有良好的數學性質;GAN 的理論分析常用 JS 散度;而需要方向性資訊(知道哪個分佈是「真實」的)時,KL 散度更能反映這種不對等關係。
在 VAE 中,KL 散度作為損失函數的正規化項,衡量編碼器學到的隱空間分佈(通常是條件常態分佈)與標準常態分佈之間的差距。這個 KL 項有兩個重要作用:第一,它迫使隱空間分佈盡量靠近標準常態分佈,使得整個隱空間中沒有「空洞」,可以從任意位置取樣生成合理圖片;第二,它讓不同輸入的隱空間表示彼此不過分分散,讓相似的輸入有相近的隱空間表示。當 KL 散度項的權重(beta)調整時,可以在重建品質與隱空間結構之間進行平衡。
KL 散度沒有固定的「顯著差異」閾值,需要根據具體應用場景判斷。KL 散度為 0 代表兩分佈完全相同,但它沒有上限(可以趨近於無限大)。在模型監控中,通常做法是建立基準線:以訓練集與驗證集之間的 KL 散度作為正常基準,若生產資料的 KL 散度超過基準的數倍(例如 2 倍或設定閾值如 0.1),則觸發警報。在 VAE 訓練中,KL 散度損失項在訓練穩定後通常在個位數範圍內。最重要的是根據業務影響設定合理閾值,而非使用通用標準。
交叉熵 H(P, Q) 等於 P 的熵 H(P) 加上 KL 散度 D_KL(P‖Q)。訓練分類模型時,P 是固定的真實標籤分布,H(P) 是常數,所以最小化交叉熵和最小化 KL 散度會得到相同的模型參數,差別只在損失數值相差一個常數。
一維時,D_KL(N(μ₁, σ₁²) ‖ N(μ₂, σ₂²)) = ln(σ₂/σ₁) + (σ₁² + (μ₁ − μ₂)²) / (2σ₂²) − 1/2。VAE 的 KL 項就是這個公式在 μ₂ = 0、σ₂ = 1 時的版本,每個潛在維度各算一次再加總。
input 要傳對數機率,通常先對模型輸出做 log_softmax,target 預設是一般機率,設 log_target=True 才改收對數機率。reduction 要用 'batchmean' 才符合 KL 散度的數學定義,預設的 'mean' 是對所有元素平均,數值不是真正的 KL 散度。
相關術語
本頁內容有提到,或屬於同一組主題的術語
來源
參考來源:en.wikipedia.org
其他格式:Markdown 版本