- 前言
- 交叉熵損失函數
- 交叉熵損失函數的求導
前言
說明:本文只討論Logistic迴歸的交叉熵,對Softmax迴歸的交叉熵類似。
首先,我們二話不說,先放出交叉熵的公式:
J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))),J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i))),
以及
J(θ)對J(θ)對參數
θθ的偏導數(用於諸如梯度下降法等優化算法的參數更新),如下:
∂∂θjJ(θ)=1m∑i=1m(hθ(x(i))−y(i))x(i)j∂∂θjJ(θ)=1m∑i=1m(hθ(x(i))−y(i))xj(i)
但是在大多論文或數教程中,也就是直接給出了上面兩個公式,而未給出推導過程,而且這一過程並不是一兩步就可以得到的,這就給初學者造成了一定的困惑,所以我特意在此詳細介紹了它的推導過程,跟大家分享。因水平有限,如有錯誤,歡迎指正。
交叉熵損失函數
我們一共有m組已知樣本,(x(i),y(i))(x(i),y(i))表示第 ii 組數據及其對應的類別標記。其中x(i)=(1,x(i)1,x(i)2,...,x(i)p)Tx(i)=(1,x1(i),x2(i),...,xp(i))T爲p+1維向量(考慮偏置項),y(i)y(i)則爲表示類別的一個數:
- logistic迴歸(是非問題)中,y(i)y(i)取0或者1;
- softmax迴歸(多分類問題)中,y(i)y(i)取1,2…k中的一個表示類別標號的一個數(假設共有k類)。
這裏,只討論logistic迴歸,輸入樣本數據x(i)=(1,x(i)1,x(i)2,...,x(i)p)Tx(i)=(1,x1(i),x2(i),...,xp(i))T,模型的參數爲θ=(θ0,θ1,θ2,...,θp)Tθ=(θ0,θ1,θ2,...,θp)T,因此有
θTx(i):=θ0+θ1x(i)1+⋯+θpx(i)p.θTx(i):=θ0+θ1x1(i)+⋯+θpxp(i).
假設函數(hypothesis function)定義爲:
hθ(x(i))=11+e−θTx(i)hθ(x(i))=11+e−θTx(i)
.
因爲Logistic迴歸問題就是0/1的二分類問題,可以有
P(y^(i)=1|x(i);θ)=hθ(x(i))P(y^(i)=1|x(i);θ)=hθ(x(i))
P(y^(i)=0|x(i);θ)=1−hθ(x(i))P(y^(i)=0|x(i);θ)=1−hθ(x(i))
現在,我們不考慮“熵”的概念,根據下面的說明,從簡單直觀角度理解,就可以得到我們想要的損失函數:我們將概率取對數,其單調性不變,有
logP(y^(i)=1|x(i);θ)=loghθ(x(i))=log11+e−θTx(i),logP(y^(i)=1|x(i);θ)=loghθ(x(i))=log11+e−θTx(i),
logP(y^(i)=0|x(i);θ)=log(1−hθ(x(i)))=loge−θTx(i)1+e−θTx(i).logP(y^(i)=0|x(i);θ)=log(1−hθ(x(i)))=loge−θTx(i)1+e−θTx(i).
那麼對於第
ii組樣本,假設函數表徵正確的組合對數概率爲:
I{y(i)=1}logP(y^(i)=1|x(i);θ)+I{y(i)=0}logP(y^(i)=0|x(i);θ)=y(i)logP(y^(i)=1|x(i);θ)+(1−y(i))logP(y^(i)=0|x(i);θ)=y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))I{y(i)=1}logP(y^(i)=1|x(i);θ)+I{y(i)=0}logP(y^(i)=0|x(i);θ)=y(i)logP(y^(i)=1|x(i);θ)+(1−y(i))logP(y^(i)=0|x(i);θ)=y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
其中,
I{y(i)=1}I{y(i)=1}和
I{y(i)=0}I{y(i)=0}爲示性函數(indicative function),簡單理解爲{ }內條件成立時,取1,否則取0,這裏不贅言。
那麼對於一共
mm組樣本,我們就可以得到模型對於整體訓練樣本的表現能力:
∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
由以上表徵正確的概率含義可知,我們希望其值越大,模型對數據的表達能力越好。而我們在參數更新或衡量模型優劣時是需要一個能充分反映模型表現誤差的損失函數(Loss function)或者代價函數(Cost function)的,而且我們希望損失函數越小越好。由這兩個矛盾,那麼我們不妨領代價函數爲上述組合對數概率的相反數:
J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
上式即爲大名鼎鼎的交叉熵損失函數。(說明:如果熟悉“
信息熵“的概念
E[−logpi]=−∑mi=1pilogpiE[−logpi]=−∑i=1mpilogpi,那麼可以有助理解叉熵損失函數)
交叉熵損失函數的求導
這步需要用到一些簡單的對數運算公式,這裏先以編號形式給出,下面推導過程中使用特意說明時都會在該步驟下腳標標出相應的公式編號,以保證推導的連貫性。
① logab=loga−logb logab=loga−logb
② loga+logb=log(ab) loga+logb=log(ab)
③ a=logea a=logea
另外,值得一提的是在這裏涉及的求導均爲矩陣、向量的導數(矩陣微商),這裏有一篇教程總結得精簡又全面,非常棒,推薦給需要的同學。
下面開始推導:
交叉熵損失函數爲:
J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))J(θ)=−1m∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))
其中,
loghθ(x(i))=log11+e−θTx(i)=−log(1+e−θTx(i)) ,log(1−hθ(x(i)))=log(1−11+e−θTx(i))=log(e−θTx(i)1+e−θTx(i))=log(e−θTx(i))−log(1+e−θTx(i))=−θTx(i)−log(1+e−θTx(i))①③ .loghθ(x(i))=log11+e−θTx(i)=−log(1+e−θTx(i)) ,log(1−hθ(x(i)))=log(1−11+e−θTx(i))=log(e−θTx(i)1+e−θTx(i))=log(e−θTx(i))−log(1+e−θTx(i))=−θTx(i)−log(1+e−θTx(i))①③ .
由此,得到
J(θ)=−1m∑i=1m[−y(i)(log(1+e−θTx(i)))+(1−y(i))(−θTx(i)−log(1+e−θTx(i)))]=−1m∑i=1m[y(i)θTx(i)−θTx(i)−log(1+e−θTx(i))]=−1m∑i=1m[y(i)θTx(i)−logeθTx(i)−log(1+e−θTx(i))]③=−1m∑i=1m[y(i)θTx(i)−(logeθTx(i)+log(1+e−θTx(i)))]②=−1m∑i=1m[y(i)θTx(i)−log(1+eθTx(i))]J(θ)=−1m∑i=1m[−y(i)(log(1+e−θTx(i)))+(1−y(i))(−θTx(i)−log(1+e−θTx(i)))]=−1m∑i=1m[y(i)θTx(i)−θTx(i)−log(1+e−θTx(i))]=−1m∑i=1m[y(i)θTx(i)−logeθTx(i)−log(1+e−θTx(i))]③=−1m∑i=1m[y(i)θTx(i)−(logeθTx(i)+log(1+e−θTx(i)))]②=−1m∑i=1m[y(i)θTx(i)−log(1+eθTx(i))]
這次再計算
J(θ)J(θ)對第
jj個參數分量
θjθj求偏導:
∂∂θjJ(θ)=∂∂θj(1m∑i=1m[log(1+eθTx(i))−y(i)θTx(i)])=1m∑i=1m[∂∂θjlog(1+eθTx(i))−∂∂θj(y(i)θTx(i))]=1m∑i=1m⎛⎝x(i)jeθTx(i)1+eθTx(i)−y(i)x(i)j⎞⎠=1m∑i=1m(hθ(x(i))−y(i))x(i)j∂∂θjJ(θ)=∂∂θj(1m∑i=1m[log(1+eθTx(i))−y(i)θTx(i)])=1m∑i=1m[∂∂θjlog(1+eθTx(i))−∂∂θj(y(i)θTx(i))]=1m∑i=1m(xj(i)eθTx(i)1+eθTx(i)−y(i)xj(i))=1m∑i=1m(hθ(x(i))−y(i))xj(i)
這就是交叉熵對參數的導數:
∂∂θjJ(θ)=1m∑i=1m(hθ(x(i))−y(i))x(i)j∂∂θjJ(θ)=1m∑i=1m(hθ(x(i))−y(i))xj(i)
轉載請註明出處:http://blog.csdn.net/jasonzzj/article/details/52017438