熵、交叉熵、KL散度、JS散度
一、信息量
事件發生的可能性大,信息量少;事件發生的可能性小,其信息量大。 即一條信息的信息量大小和它的不確定性有直接的關系,比如說現在在下雨,然后有個憨憨跟你說今天有雨,這對你了解獲取天氣的信息沒有任何用處。但是有人跟你說明天可能也下雨,這條信息就比前一條的信息量大。可以看出信息量的大小與事件發生的可能性成反比。
\(I(x)\)稱為隨機變量X的自信息,描述的是隨機變量的某個事件(X = \(x\))發生所帶來的信息量。這里可以稍微理解一下為什么使用\(log\) :例如兩個相互獨立的事件\(x,y\),因為兩者相互獨立所以兩個事件帶來的信息量為\(I(x)+I(y)\) ,而兩個事件同時發生的概率是\(p(x,y) = p(x)p(y)\)。\(log\)函數就滿足這兩個式子,其中\(log\)的基數可以任意,常用的是2(二進制編碼),\(e\)。
二、熵
從信息量的公式可以看出,當一個事件的發生概率為\(p(x)\) 時,它的信息量就是\(-log(p(x))\)。那么我們將這個事件的所有可能發生的結果都羅列出來,求的該事件信息量的期望(信息量的算術平均):
熵其實表示的是一種混亂程度,其最初就是從化學領域引入到信息論當中的,隨機變量的取值越多,狀態數也就越多,也越混亂。就比如你獲取信息的來源越多,信息量越大,你腦子里就越亂,頭大。
三、KL散度(相對熵)
對於同一個隨機變量有兩個單獨的概率分布,我們可以使用KL散度(Kullback-Leibler divergence)來衡量兩個分布的差異。在機器學習的損失函數的計算中,我們可以假設\(P\)為樣本的真實分布,\(Q\)用來表示模型所預測的分布,使用KL散度來衡量兩個分布之間的差異,
當\(p(x_i)\)越接近\(q(x_i)\),\(D_{KL}(p||q)\)就越小,極端情況下\(p(x_i)=q(x_i)\)時,\(D_{KL}=0\)。即損失函數越小,模型預測越准確。KL散度又稱為KL距離,但從公式中可以看出其不滿足:
- 對稱性,\(D_{KL}(p||q)!=D_{KL}(q||p)\)
- 三角不等式(兩邊之和大於第三邊,兩邊之差小於第三邊)
四、交叉熵
交叉熵是從相對熵中提取出來的,我們可以對(3)式進行展開:
而交叉熵就等於
為(4)式的后半部分。
在深度學習的損失評估中,相對熵(KL散度)可以比較兩個分布(真實分布和預測結果的分布)的差異。當訓練數據給定,其真實分布是確定的。比如多分類問題中,一張圖片的結果是貓,無論模型怎么優化,其預測結果是不確定的,但真實的label就是貓。所以在\(D_{KL}\)中的\(\sum_{i=1}^np(x_i)logp(x_i)\)是個常數,它對於損失函數的比較和梯度下降沒有幫助。此時KL散度於交叉熵的作用是一樣的,為了減少計算量可以直接用交叉熵作為其損失函數。
五、為什么使用交叉熵而不是均方差
從上面的分析我們可以看出KL散度(交叉熵也是一樣的)並不是對稱的,這樣訓練過程中對訓練數據的順序不同可能會造成訓練時間的差異(可以想象一下在幾何意義上距離相同的兩個訓練數據點對梯度的貢獻不同,於是對這兩個數據點的計算順序不同可能會對梯度下降的快慢造成影響)。
這里我們從梯度消失的角度來進行分析。我們已二分類問題為例,在二分類問題中我們在輸出層使用的是sigmod函數:
對它進行求導為:
從(6)式中可以看出當\(\sigma(z)\)接近於0或者是1時,\(\sigma(z)\)產生的梯度接近於0,發生梯度彌散。
我們先描述一下模型的結構:
然后就是均方差和交叉熵的公式來計算loss function:
模型的前向傳播為:
-
應用均方差的反向傳播過程:
\[\begin{align} \frac{\partial L}{\partial a_0} &= a_0-y_0 \notag\\ \frac{\partial a_0}{\partial w_1} &= a_0(1-a_0)x_0(從(6)式可得) \notag\\ \frac{\partial L}{\partial w_1} &= a_0(1-a_0)x_0(a_0-y_0) \tag{9} \end{align} \] -
應用交叉熵的反向傳播過程:
這里只從\(w_1\)的更新來說明問題,從(9)和(10)式可以看出但\(a_0\)取值為0或者1時,MSE容易造成梯度消失,而(10)式可以在一定程度上抑制這種影響。
六、JS散度
JS散度也是用於度量兩個概率分布的相似度,其解決了KL散度不對稱的缺點。