信息熵,交叉熵與KL散度
- 2021 年 6 月 29 日
- 筆記
一、信息熵
若一個離散隨機變量 \(X\) 的可能取值為 \(X = \{ x_{1}, x_{2},…,x_{n}\}\),且對應的概率為:
\]
那麼隨機變量 \(X\) 的熵定義為:
\]
規定當 \(p(x_{i})=0\) 時,\(H(X)=0\)。
通過公式可以看出,若隨機變量 \(X\) 的取值等概率分佈,即 \(p(x_{i} = p(x_{j}), i \neq j\) 時,\(H(X)\) 最大。
直觀理解:信息熵表達的時隨機變量 \(X\) 所含的信息量,當 \(X\) 中所有取值都等概率時,包含的信息量就越多,就需要用更多的信息來描述它。如果知道了 \(X\) 中取哪個值概率最大,那麼描述它所需要的信息就越少,\(H(X)\) 就越小。換句話說,信息熵表明了信息的無序狀態。
二、交叉熵
交叉熵定義為用模擬分佈 \(q\) 來編碼真實分佈 \(p\) 所需要的平均編碼長度比特個數:
\]
拿一個三分類問題舉例,加入標籤通過 one-hot
編碼後的目標為 \([1,0,0]\),那麼當預測完全準確時,模擬分佈 \(q\) 的熵為:
\]
因此,在使用交叉熵作為損失函數執行分類任務時,通常使目標函數趨近於0。加入模型預測出來的結果為:\(p = [0.7, 0.2, 0.1]\),那麼 \(p, q\) 的交叉熵為:
\]
為什麼在分類任務中多用交叉熵而不是MSE作為損失函數?我們以二分類問題為例來解釋這個問題。假設訓練數據集為:\(T = \{ (x_{1},y_{1}),(x_{2},y_{2}),…,(x_{n},y_{n})\}\),其中 \(y_{i} \in \{0,1\}\)。網絡的輸出為:\(z = w^{T}x\),標籤為 \(p = \{1,0\}\)。於是最後對網絡所預測的概率值為:\(q = \sigma(z)\),其中 \(\sigma()\) 代表 sigmoid 激活函數:
\]
若使用 MSE 作為損失函數,則:
\dfrac{\partial L}{\partial w} = \dfrac{\partial L}{\partial q} \times \dfrac{\partial q}{\partial z} \times \dfrac{\partial z}{\partial w} = (q-p)\sigma'(z)x = (q-p)\sigma(z)(1-\sigma(z))x
\]
而使用交叉熵作為損失函數,則:
\dfrac{\partial L}{\partial w} = \dfrac{\partial L}{\partial q} \times \dfrac{\partial q}{\partial z} \times \dfrac{\partial z}{\partial w} = (-\dfrac{p}{q}+\dfrac{1-p}{1-q})\sigma'(z)x = (q-p)x
\]
對比之下發現,由於sigmoid 函數在輸出接近0和1時,梯度很小,而使用 MSE 做損失函數時模型參數w會更新的比較慢,因此分類問題多採用交叉熵作為損失函數。
個人認為,使用交叉熵而不是用MSE的另一個原因在於,交叉熵損失函數的理想分類結果只與正確樣本有關,而MSE損失函數與正誤樣本都有關係。
三、相對熵(\(KL\)散度)
相對熵用來表示兩個概率分佈的差異,它表示2個函數或概率分佈的差異性:差異越大則相對熵越大,差異越小則相對熵越小,特別地,若2者相同則熵為0。公式表示如下:
\]
於是,相對熵=交叉熵-信息熵。而在有監督的機器學習和深度學習中,往往已經有了真實的樣本(隨機變量)和標籤(label),因此可以理解為實際的概率分佈 \(p\) 已知,而訓練所得到的分佈為 \(q\),那麼信息熵 \(H_{p}\) 相當於常量,所以可以直接用交叉熵 \(H(p,q)\) 來衡量兩個獨立概率分佈的差異。