資訊熵,交叉熵與KL散度
一、資訊熵
若一個離散隨機變數 \(X\) 的可能取值為 \(X = \{ x_{1}, x_{2},...,x_{n}\}\),且對應的概率為:
\[p(x_{i}) = p(X=x_{i}) \]那麼隨機變數 \(X\) 的熵定義為:
\[H(X) = -\sum_{i=1}^{n}p(x_{i})logp(x_{i}) \]規定當 \(p(x_{i})=0\) 時,\(H(X)=0\)。
通過公式可以看出,若隨機變數 \(X\) 的取值等概率分佈,即 \(p(x_{i} = p(x_{j}), i \neq j\) 時,\(H(X)\) 最大。
直觀理解:資訊熵表達的時隨機變數 \(X\) 所含的資訊量,當 \(X\)
二、交叉熵
交叉熵定義為用模擬分佈 \(q\) 來編碼真實分佈 \(p\) 所需要的平均編碼長度位元個數:
\[H(p,q) = \sum_{i=1}^{n}p_{i}log\dfrac{1}{q_{i}} = -\sum_{i=1}^{n}p_{i}q_{i} \]拿一個三分類問題舉例,加入標籤通過 one-hot
編碼後的目標為 \([1,0,0]\),那麼當預測完全準確時,模擬分佈 \(q\)
因此,在使用交叉熵作為損失函式執行分類任務時,通常使目標函式趨近於0。加入模型預測出來的結果為:\(p = [0.7, 0.2, 0.1]\),那麼 \(p, q\) 的交叉熵為:
\[H(p,q) = -\sum_{i=1}^{n}p_{i}log(q_{i}) = -(1 \times log (0.7) + 0 \times log (0.2) + 0 \times log(0.1)) = -log(0.7) \]為什麼在分類任務中多用交叉熵而不是MSE作為損失函式?
若使用 MSE 作為損失函式,則:
\[L = \dfrac{1}{2}||q-p||^{2} \\ \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 \]而使用交叉熵作為損失函式,則:
\[L = -\sum_{i=1}^{n}p_{i}ln(q_{i}) = -(pln(q)+(1-p)ln(1-q))\\ \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。公式表示如下:
\[D_{KL}(p||q) = -\sum_{i=1}^{n}p(x_{i})log(\dfrac{p(x_{i})}{q(x_{i}))} = H(p,q)-H(p) \]於是,相對熵=交叉熵-資訊熵。而在有監督的機器學習和深度學習中,往往已經有了真實的樣本(隨機變數)和標籤(label),因此可以理解為實際的概率分佈 \(p\) 已知,而訓練所得到的分佈為 \(q\),那麼資訊熵 \(H_{p}\) 相當於常量,所以可以直接用交叉熵 \(H(p,q)\) 來衡量兩個獨立概率分佈的差異。