交叉熵損失函數被廣泛的運用於各種神經網絡的訓練目標函數,今天我們來深度刨析一番這一函數的優勢何在,它又是從何而來?
- 一.最初的方差損失函數
- 二.獨熱編碼與SoftMax函數
- 三.信息量與熵
- 四.相對熵
- 五.交叉熵與交叉熵損失函數
一、最初的方差代價函數
在一步步介紹到交叉熵損失函數之前,先讓我們來看一下最初的方差損失函數,爲什麼我們需要更優的交叉熵損失函數?先了解方差損失函數有助於我們更好的把握交叉熵損失函數的優勢與性能。現在我們假設有一個獨立的多輸入單輸出神經元的結構如下:
其中輸入向量 X=(x1,x1,...,xn) ,權重係數 W=(w1,w2,...,wn) , 偏置b,激活函數 σ 爲sigmoid 函數 。由此我們可以得到該神經元的實際輸出函數如下:
a=σ(Z) 其中 Z=WX+b
有了上面的基礎,現在我們就可以給出最基礎的方差損失函數
C=(y−a)22
上式中,y 爲我們期望的輸出,在訓練神經網絡的過程中,我們通過梯度下降算法來更新 W 和 b ,這一過程中,我們需要分別求損失函數 C 對 W 和 b 的偏導如下:
∂C∂W=(a−y)σ′(Z)X=a1σ′(Z)
∂C∂b=(a−y)σ′(Z)=a2σ′(Z)
然後我們就可以用梯度下降的公式求得理想的參數,迭代如下:
Wk=Wk−1−η∗a1∗σ′(Z)
bk=bk−1−η∗a2∗σ′(Z)
其中 η 爲自行設置的迭代步長,這裏我們又需要了解一下激活函數 sigmoid 的性質,其函數曲線如下:
從上圖我們可以看出來, 激活函數 sigmoid 的變化空間集中在0附近,與0的距離越遠,函數的變化越小,即導數越小。這一性質會導致 σ′ 在 Z 取絕大多數值的時候會非常小,從而使 W 和 b 更新的非常慢,而交叉熵損失函數正是爲了解決這一問題而被引入神經網絡的優化過程。
二、獨熱編碼與SoftMax函數
看完了方差損失函數,我們先不急着說交叉熵損失函數,別急,我們還需要了解一下可以使交叉損失函數更方便應用的一些神經網絡設置與技巧。
2.1獨熱編碼
我們可以先回憶一下我們平時使用的二分類器,通常我們使用0表示“是“,1表示“不是“,這其實也是一種編碼,我們稱其爲自然編碼。而我們要說的獨熱編碼是這樣的:“01“表示“是“,“10“表示“不是“。說到這裏大家應該明白了,獨熱編碼是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,並且在任意時候,其中只有一位有效。
2.2SoftMax函數
做過邏輯迴歸分類問題的同學應該知道,在logistic regression二分類問題中,我們使用 sigmoid 函數將輸入 WX+b 映射到(0,1)區間中,從而得到輸入樣本屬於某個類別的概率。將這一思想推廣到多分類問題中,我們就可以使用SoftMax函數來實現,對輸出的值歸一化爲概率值。
這裏假設在進入SoftMax函數之前,已有模型輸出,一個輸入樣本的輸出個數爲C(在獨熱編碼下即爲類別數),記輸出爲 a1,a2,...,ac ,對於每個樣本,它屬於類別 i 的概率爲:
yi=eai∑Ck=1eai
通過上式,即SoftMax函數,可以保證 ∑Ck=1yi=1 ,即屬於各個類別的概率和爲1。
三、信息量與熵
千呼萬喚始出來,終於要講到交叉熵損失函數的概念了。在信息論中,熵是對信息量的一個度量,我們先來介紹一下什麼是信息量。
3.1信息量
假設 X 是一個離散型隨機變量,其取值集合爲 χ , X 的概率密度函數爲 P(x)=Pr(X=x),xϵχ , 於是,我們可以定義事件 X=x0 的信息量爲:
I(x_{0})= -log(P(x_{0}))
當
log 以2爲底時其單位爲bit,以e爲底時其單位爲net,以10爲底時單位爲Hart。光看公式可能比較抽象,這裏舉一個簡單的例子:
小寶貝考試及格的概率是0.9
駿駿哥哥考試及格的概率是0.6
則“小寶貝考試及格“這一事件帶給我們的信息量(這裏以e爲底)是 −loge(0.9)=0.105
而“駿駿哥哥考試及格“這一事件帶給我們的信息量是 −loge(0.6)=0.511
對此,我們可以理解爲,一個事件發生的概率越大,則它所攜帶的信息量就越小,當 P(x0=1) 時,熵將等於0,也就是說該事件的發生不會導致任何信息量的增加。
3.2熵
有了信息量的基礎,我們就可以較好的理解熵的概念。對於一個隨機變量 X ,它的所有可能取值的信息量的期望 E[I(x)] 就稱爲熵,其數學定義爲:
H(x)=Ep(log1p(x))=−∑xϵXp(x)log(p(x))
如果 p(x) 是連續型隨機變量的概率密度函數,則可以類似的定義熵爲:
H(x)=Ep(log1p(x))=−∫xϵXp(x)log(p(x))
爲了保證有效性,定義:
limp(x)→0p(x)log(p(x)))=0
根據定義我們可以知道,熵其實描述了一個系統所包含的信息量的大小
四、相對熵
相對熵是一個非常容易和交叉熵弄混的概念,相對熵又稱爲KL散度,KL距離,是兩個隨機分佈間的距離的度量。記爲 DKL(p||q) ,它所描述的是當真實分佈爲 p 時,分佈 q 的失效性(越大越失效)。數學描述如下:
DKL(p||q)=Ep(log(p(x)q(x))=∑xϵXp(x)logp(x)q(x)
=∑xϵX(p(x)log(p(x))−p(x)log(q(x)))
=∑xϵXp(x)log(p(x))−∑xϵXp(x)log(q(x))
=−H(p)−∑xϵXp(x)log(q(x))
=−H(p)+Ep(−log(q(x)))
=−H(p)+Hp(q)
上式中的
Hp(q) 表示在分佈
p 下,使用
q 進行編碼需要的的bit數,而
H(p) 表示對真實分佈
p 所需要的最小編碼bit數。基於此,相對熵的意義就很明確了:DKL(p||q)表示在分佈爲
p 的前提下,使用
q 分佈進行編碼,相對於使用真實分佈進行編碼(即最優編碼)所多出來的bit數。顯然,當
p=q 時,兩者之間的相對熵 爲0。
同樣的,爲了保證連續有效性,定義:
0log00=0,0log0q=0,plogp0=inf
五、交叉熵與交叉熵損失函數
終於說到重頭戲了,假設有兩個分佈 p,q ,則它們在給定樣本集上的交叉熵定義如下:
CEH=Ep(−logq)=−∑xϵXp(x)log(q(x))=H(p)+DKL(p||q)
我們可以從公式中看出來,交叉熵與上一節定義的相對熵僅差了
H(p) ,當
p 已知時,可以把
H(p) 看作一個常數,此時交叉熵與相對熵在行爲上是等價的,都反映了分佈
p,q 的相似程度。最小化熵等於最小化的相對熵。它們都將在
p=q 時取得最小值
H(p)
特別的,在logistic regression中,我們有
p :真實樣本分佈,服從參數爲 p 的0-1分佈,即 x ~ B(1,p)
q :待估計的模型,服從參數爲 q 的0-1分佈,即 x ~ B(1,q)
兩者的交叉熵爲:
CEH(p,q)=−∑xϵX(p,q)
=−(Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0))
=−(plogq+(1−p)log(1−q))
對所有m個樣本的交叉熵取均值,可得邏輯迴歸問題的交叉熵損失函數:
C=−1m∑mi=1(pilogqi+(1−pi)log(1−qi))
現在我們可以回答一開始的問題:交叉熵損失函數相比於方差損失函數好在哪裏?
讓我們對交叉熵損失函數C求偏導(y爲期望輸出,a爲實際輸出):
C=−1m∑m(yloga+(1−y)log(1−a))
對W求偏導:
∂C∂σ(W)=∂C∂σ(Z)∂σ(Z)∂Z∂Z∂W=1m∑xxj(σ(Z)−y)
對b求偏導:
∂C∂σ(b)=∂C∂σ(Z)∂σ(Z)∂Z∂Z∂b=1m∑x(σ(Z)−y)
對比之前方差損失函數,我們會發現交叉熵損失函數的偏導少了
σ′ 項,從而避免了最初迭代過慢的問題