1. 引言
我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。
2. 交叉熵的來源
2.1 信息量
一條信息的信息量大小和它的不確定性有很大的關係。一句話如果需要很多外部信息才能確定,我們就稱這句話的信息量比較大。比如你聽到「雲南西雙版納下雪了」,那你需要去看天氣預報、問當地人等等查證(因為雲南西雙版納從沒下過雪)。相反,如果和你說「人一天要吃三頓飯」,那這條信息的信息量就很小,因為條信息的確定性很高。
那我們就能將事件x_0的信息量定義如下(其中p(x_0)表示事件x_0發生的概率):
概率總是一個0-1之間的值,-log(x)的圖像如上
2.2 熵
信息量是對於單個事件來說的,但是實際情況一件事有很多種發生的可能,比如擲骰子有可能出現6種情況,明天的天氣可能晴、多雲或者下雨等等。熵是表示隨機變量不確定的度量,是對所有可能發生的事件產生的信息量的期望。公式如下:
n表示事件可能發生的情況總數
其中一種比較特殊的情況就是擲硬幣,只有正、反兩種情況,該種情況(二項分布或者0-1分布)熵的計算可以簡化如下:
p(x)代表擲正面的概率,1-p(x)則表示擲反面的概率(反之亦然)
2.3 相對熵
相對熵又稱KL散度,用于衡量對於同一個隨機變量x的兩個分布p(x)和q(x)之間的差異。在機器學習中,p(x)常用於描述樣本的真實分布,例如[1,0,0,0]表示樣本屬於第一類,而q(x)則常常用於表示預測的分布,例如[0.7,0.1,0.1,0.1]。顯然使用q(x)來描述樣本不如p(x)準確,q(x)需要不斷地學習來擬合準確的分布p(x)。
KL散度的公式如下:
n表示事件可能發生的情況總數
KL散度的值越小表示兩個分布越接近。
2.4 交叉熵
我們將KL散度的公式進行變形,得到:
前半部分就是p(x)的熵,後半部分就是我們的交叉熵:
機器學習中,我們常常使用KL散度來評估predict和label之間的差別,但是由於KL散度的前半部分是一個常量,所以我們常常將後半部分的交叉熵作為損失函數,其實二者是一樣的。
3. 交叉熵作為loss函數的直覺
在回歸問題中,我們常常使用均方誤差(MSE)作為損失函數,其公式如下:
m表示樣本個數,loss表示的是m個樣本的均值
其實這裡也比較好理解,因為回歸問題要求擬合實際的值,通過MSE衡量預測值和實際值之間的誤差,可以通過梯度下降的方法來優化。而不像分類問題,需要一系列的激活函數(sigmoid、softmax)來將預測值映射到0-1之間,這時候再使用MSE的時候就要好好掂量一下了,為啥這麼說,請繼續看:
sigmoid加MES的基本公式
gradient推導過程
上面複雜的推導過程,其實結論就是下面一張圖:
C就是👆的J,sigma就是sigmoid函數,a就是predict
從以上公式可以看出,w和b的梯度跟激活函數的梯度成正比,激活函數的梯度越大,w和b的大小調整得越快,訓練收斂得就越快。而我們都知道sigmoid函數長這樣:
圖片來自:https://blog.csdn.net/u014313009/article/details/51043064
在上圖的綠色部分,初始值是0.98,紅色部分初始值是0.82,假如真實值是0。直觀來看那麼0.82下降的速度明顯高於0.98,但是明明0.98的誤差更大,這就導致了神經網絡不能像人一樣,誤差越大,學習的越快。
但是如果我們把MSE換成交叉熵會怎麼樣呢?
x表示樣本,n表示樣本的總數
重新計算梯度:
推導過程
另外sigmoid有一個很好的性質:
我們從結果可以看出梯度中不再含有sigmoid的導數,有的是sigmoid的值和實際值之間的差,也就滿足了我們之前所說的錯誤越大,下降的越快。
這也就是在分類問題中常用cross entropy 而不是 MSE的原因了。
來自 AI部落聯盟
作者 Jason Cai
乾貨推薦:
一大批歷史精彩文章啦
劉知遠:NLP研究入門之道(一)
劉知遠:NLP研究入門之道(二)走近NLP學術界
詳解Transition-based Dependency parser基於轉移的依存句法解析器
乾貨 | 找工作的經驗總結(一)
經驗 | 初入NLP領域的一些小建議
學術 | 如何寫一篇合格的NLP論文
乾貨 | 那些高產的學者都是怎樣工作的?
是時候研讀一波導師的論文--一個簡單有效的聯合模型
近年來NLP在法律領域的相關研究工作