交叉熵、相對熵及KL散度通俗理解
原文轉載自http://blog.csdn.net/u012162613/article/details/44239919
本文是《Neural networks and deep learning》概覽 中第三章的一部分,講machine learning演算法中用得很多的交叉熵代價函式。
1. 從方差代價函式說起
代價函式經常用方差代價函式(即採用均方誤差MSE),比如對於一個神經元(單輸入單輸出,sigmoid函式),定義其代價函式為:
其中y是我們期望的輸出,a為神經元的實際輸出【 a=σ(z), where z=wx+b 】。
在訓練神經網路過程中,我們通過梯度下降演算法來更新w和b,因此需要計算代價函式對w和b的導數:
然後更新w、b:
w <—— w - η* ∂C/∂w = w - η * a *σ′(z)
b <—— b - η* ∂C/∂b = b - η * a * σ′(z)
因為sigmoid函式的性質,導致σ′(z)在z取大部分值時會很小(如下圖示出來的兩端,幾近於平坦),這樣會使得w和b更新非常慢(因為η * a * σ′(z)這一項接近於0)。
2. 交叉熵代價函式(cross-entropy cost function)
為了克服這個缺點,引入了交叉熵代價函式(下面的公式對應一個神經元,多輸入單輸出):
其中y為期望的輸出,a為神經元實際輸出【a=σ(z), where z=∑Wj*Xj+b】
與方差代價函式一樣,交叉熵代價函式同樣有兩個性質:
- 非負性。(所以我們的目標就是最小化代價函式)
- 當真實輸出a與期望輸出y接近的時候,代價函式接近於0.(比如y=0,a~0;y=1,a~1時,代價函式都接近0)。
另外,它可以克服方差代價函式更新權重過慢的問題。我們同樣看看它的導數:
可以看到,導數中沒有σ′(z)這一項,權重的更新是受σ(z)−y這一項影響,即受誤差的影響。所以當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。這是一個很好的性質。
3. 總結
- 當我們用sigmoid函式作為神經元的啟用函式時,最好使用交叉熵代價函式來替代方差代價函式,以避免訓練過程太慢。
- 不過,你也許會問,為什麼是交叉熵函式?導數中不帶σ′(z)項的函式有無數種,怎麼就想到用交叉熵函式?這自然是有來頭的,更深入的討論就不寫了,少年請自行了解。
- 另外,交叉熵函式的形式是−[ylna+(1−y)ln(1−a)]而不是 −[alny+(1−a)ln(1−y)],為什麼?因為當期望輸出的y=0時,lny沒有意義;當期望y=1時,ln(1-y)沒有意義。而因為a是sigmoid函式的實際輸出,永遠不會等於0或1,只會無限接近於0或者1,因此不存在這個問題。
4. 還要說說:log-likelihood cost
對數似然函式也常用來作為softmax迴歸的代價函式,在上面的討論中,我們最後一層(也就是輸出)是通過sigmoid函式,因此採用了交叉熵代價函式。而深度學習中更普遍的做法是將softmax作為最後一層,此時常用的是代價函式是log-likelihood cost。
In fact, it’s useful to think of a softmax output layer with log-likelihood cost as being quite similar to a sigmoid output layer with cross-entropy cost。
其實這兩者是一致的,logistic迴歸用的就是sigmoid函式,softmax迴歸是logistic迴歸的多類別推廣。log-likelihood代價函式在二類別時就可以化簡為交叉熵代價函式的形式。具體可以參考UFLDL教程
5. 熵與KL散度
連結:https://www.zhihu.com/question/41252833/answer/108777563
熵的本質是夏農資訊量
(log1p )
<script id="MathJax-Element-102" type="math/tex">(\log\frac{1}{p})</script>的期望。
現有關於樣本集的2個概率分佈p和q,其中p為真實分佈,q非真實分佈。按照真實分佈p來衡量識別一個樣本的所需要的編碼長度的期望(即平均編碼長度)為:
H(p)=∑ i p(i)∗log1p(i)
<script id="MathJax-Element-103" type="math/tex">H(p) = \sum_{i}p(i)*\log\frac{1}{p(i)}</script>,如果使用錯誤分佈q來表示來自真實分佈p的平均編碼長度,則應該是:
H(p,q)=∑ i p(i)∗log1q(i) 。
<script id="MathJax-Element-104" type="math/tex">H(p,q) = \sum_{i}p(i)*\log\frac{1}{q(i)}。</script>因為用q來編碼的樣本來自分佈p,所以期望H(p,q)中概率是p(i)。H(p,q)我們稱之為“交叉熵”。
比如含有4個字母(A,B,C,D)的資料集中,真實分佈p=(1/2, 1/2, 0, 0),即A和B出現的概率均為1/2,C和D出現的概率都為0。計算H(p)為1,即只需要1位編碼即可識別A和B。如果使用分佈Q=(1/4, 1/4, 1/4, 1/4)來編碼則得到H(p,q)=2,即需要2位編碼來識別A和B(當然還有C和D,儘管C和D並不會出現,因為真實分佈p中C和D出現的概率為0,這裡就欽定概率為0的事件不會發生啦)。
可以看到上例中根據非真實分佈q得到的平均編碼長度H(p,q)大於根據真實分佈p得到的平均編碼長度H(p)。事實上,根據Gibbs’ inequality可知,H(p,q)>=H(p)恆成立,當q為真實分佈p時取等號。我們將由q得到的平均編碼長度比由p得到的平均編碼長度多出的bit數稱為“相對熵”: D(p||q)=H(p,q)−H(p)=∑ i p(i)∗logp(i)q(i) , <script id="MathJax-Element-105" type="math/tex">D(p||q) = H(p,q) - H(p) = \sum_{i}p(i)*\log\frac{p(i)}{q(i)},</script>其又被稱為KL散度(Kullback–Leibler divergence,KLD) Kullback–Leibler divergence。它表示2個函式或概率分佈的差異性:差異越大則相對熵越大,差異越小則相對熵越小,特別地,若2者相同則熵為0。注意,KL散度的非對稱性。
比如TD-IDF演算法就可以理解為相對熵的應用:詞頻在整個語料庫的分佈與詞頻在具體文件中分佈之間的差異性。
交叉熵可在神經網路(機器學習)中作為損失函式,p表示真實標記的分佈,q則為訓練後的模型的預測標記分佈,交叉熵損失函式可以衡量p與q的相似性。交叉熵作為損失函式還有一個好處是使用sigmoid函式在梯度下降時能避免均方誤差損失函式學習速率降低的問題,因為學習速率可以被輸出的誤差所控制。
PS:通常“相對熵”也可稱為“交叉熵”,因為真實分佈p是固定的,D(p||q)由H(p,q)決定。當然也有特殊情況,彼時2者須區別對待。
注:轉載的這篇博文對於資訊熵的舉列子裡,資訊熵的求解中對數是以2為底的,即是
log 2
<script id="MathJax-Element-106" type="math/tex">\log_2</script>。
關於資訊熵和相對熵這個問題,知乎上ID為CyberRep的答主答的挺好,連結:https://www.zhihu.com/question/41252833
相關文章
- 資訊熵,交叉熵與KL散度熵
- 【機器學習基礎】熵、KL散度、交叉熵機器學習熵
- 交叉熵、KL 散度 | 定義與相互關係熵
- 資訊理論之從熵、驚奇到交叉熵、KL散度和互資訊熵
- 一文總結條件熵、交叉熵、相對熵、互資訊熵
- 熵,交叉熵,Focalloss熵
- 熵、聯和熵與條件熵、交叉熵與相對熵是什麼呢?詳細解讀這裡有!熵
- 熵、交叉熵及似然函式的關係熵函式
- 熵、資訊量、資訊熵、交叉熵-個人小結熵
- 關於交叉熵的個人理解熵
- 歸一化(softmax)、資訊熵、交叉熵熵
- 理解"熵"熵
- 交叉熵損失CrossEntropyLoss熵ROS
- 圖示Softmax及交叉熵損失函式熵函式
- 談談交叉熵損失函式熵函式
- Tensorflow-交叉熵&過擬合熵
- 近似熵-樣本熵-多尺度熵熵
- 重新理解熵編碼熵
- kl散度如何計算
- 資訊熵(夏農熵)熵
- 資訊熵概念隨筆——資訊熵、資訊的熵熵
- ML-熵、條件熵、資訊增益熵
- 資訊熵相關知識總結熵
- ML-邏輯迴歸-Softmax-交叉熵(小航)邏輯迴歸熵
- pytorch使用交叉熵訓練模型學習筆記PyTorch熵模型筆記
- 如何理解用資訊熵來表示最短的平均編碼長度熵
- 資訊化基礎的最小熵值的散點聚集熵
- 最大熵模型熵模型
- 熵增定律熵
- 白話資訊熵熵
- 關於 KL 散度和變分推斷的 ELBO
- Consul的反熵熵
- [機器學習]資訊&熵&資訊增益機器學習熵
- 關於排列熵的一些理解與解釋熵
- 交叉熵代價函式定義及其求導推導(讀書筆記)熵函式求導筆記
- 統計學習:邏輯迴歸與交叉熵損失(Pytorch實現)邏輯迴歸熵PyTorch
- 熵權(值)法計算權重原理解釋&綜合得分縱向對比熵
- 最大熵模型原理小結熵模型