看了一篇好文章, 講解交叉熵和相對熵, 之前就想弄懂, 今天仔細研究了一下.
文章鏈接: 交叉熵(Cross-Entropy)
-
信息量
定義事件X=x0發生時的信息量爲: 定義事件X=x0發生時的信息量爲:
I(x0)=−log(p(x0)) 一個事件發生的概率越大,則它發生時所攜帶的信息量就越小,當p(x0)=1時,熵將等於0,表示該事件的發生不會導致任何信息量的增加.
-
不確定度
對一個事件X所有可能的發生結果x1,x2,...帶來的額外信息量求期望E(I(x)),其結果就能衡量出這個事件X的不確定度,稱爲熵(不確定度的量度). H(X)=−x∈X∑p(x)log(p(x))舉個例子, A、B、C事件均爲0~1分佈, 正例發生的概率分別爲0.001, 0.1和0.5, 那麼HA(x)=−[p(xA=0)log(p(xA=0))+(p(xA=1))log(p(xA=1))]=0.0114 HB(x)=−[p(xB=0)log(p(xB=0))+(p(xB=1))log(p(xB=1))]=0.4690 HC(x)=−[p(xC=0)log(p(xC=0))+(p(xC=1))log(p(xC=1))]=1 這與我們的常識認知也是一致的, A事件中正例很有可能發生、B事件中正例基本有可能發生、C事件中正例和反例都有可能發生, ABC中到底是正例還是反例發生的不確定度越來越高.
-
相對熵(KL散度)
相對熵定義爲:DKL(p∣∣q)=Ep[logq(x)p(x)]=x∈X∑p(x)logq(x)p(x)=Hp(q)−H(p) 它用來度量兩個分佈p(真實分佈),q(假設分佈)之間的距離. 表示當真實分佈爲p時, 假設分佈q的無效性. 當p=q時, 相對熵=0, 表示兩個分佈相等.
解釋: Hp(q)表示在p分佈下, 用q進行編碼所需的bit數, H(p)表示分佈p的最優編碼bit數, 所以DKL(p∣∣q)表示真實分佈爲p的前提下, 使用q分佈進行編碼相對於直接用p分佈進行編碼(最優編碼)所多出來的bit數(q相對p的無效性). 優化相對熵, 即等於優化假設分佈q來擬合真實分佈p.
關於爲什麼H(p)爲什麼是分佈p的最優編碼數, 參考知乎"信息熵是什麼?"的回答, 同理可得Hp(q).
-
交叉熵(cross_entropy)
交叉熵就是Hp(q):Hp(q)=DKL(p∣∣q)+H(p)=−x∈X∑p(x)log(q(x))因爲真實分佈p是確定的, H(p)爲一個常數, 優化Hp(q)就等於優化DKL(p∣∣q), 所以在機器學習/深度學習中, 我們可以把交叉熵作爲損失函數進行優化, 從而讓假設分佈儘可能的接近真實分佈.
在邏輯迴歸中:
p:真實樣本分佈,服從參數爲p的0-1分佈,即X∼B(1,p)
q:待估計的模型,服從參數爲q的0-1分佈,即X∼B(1,q)
它們的交叉熵爲
Hp(q)=−x∈X∑p(x)log(q(x))=−[p∗log(q)+(1−p)∗log(1−q)]=−[y∗log(hθ(x))+(1−y)∗log(1−hθ(x))]
對所有樣本取均值:
loss=−m1i=1∑m[y(i)∗log(hθ(x(i)))+(1−y(i))∗log(1−hθ(x(i)))]
與通過極大似然估計方法求出來的loss結果是一致的.
-
極大似然估計求loss(二分類)
二項 logistic regression模型的條件概率分佈:
P(Y=1∣x)=hw(x)=1+exp(w⋅x+b)exp(w⋅x+b)p(Y=0∣x)=1−hw(x)=1+exp(w⋅x+b)1似然函數爲: i=1∏m[hw(xi)]yi[1−hw(xi)]1−yi對數似然函數: L(w)=i=1∑m[yilog(hw(xi))+(1−yi)log(1−hw(xi))]定義loss: loss=−m1i=1∑m[yilog(hw(xi))+(1−yi)log(1−hw(xi))] 梯度計算公式: Z=w⋅x+b∂Z∂L=dZ=y^−y
極大化對數似然函數求w^, 等於極小化loss
- softmax 多分類
多項 logistic regression 模型的概率分佈:
P(Y=k∣x)=1+∑k=1K−1exp(wk⋅x)exp(wk⋅x),k=1,2,...,K−1P(Y=K∣x)=1+∑k=1K−1exp(wk⋅x)1
同樣可以通過極大似然估計或者交叉熵原理得到loss:
單個數據:loss(y^,y)=−j=1∑cyjlogy^j多個數據: loss=−m1i=1∑mj=1∑cyj(i)logy^j(i)梯度計算公式: ∂Z[L]∂L=dZ[L]=y^−y