交叉熵
信息論
交叉熵是信息論中的一個(gè)概念,要想了解交叉熵的本質(zhì),需要先從最基本的概念講起。
1 信息量
每件事情都有一定的發(fā)生概率,不同概率的事情發(fā)生帶來的信息量是不同的。舉例來說:
事件A:巴西隊(duì)進(jìn)入了2018世界杯決賽圈。
事件B:中國(guó)隊(duì)進(jìn)入了2018世界杯決賽圈。
可以知道,B事件發(fā)生的信息量是比A事件發(fā)生的信息量要大的,因?yàn)锳事件的概率明顯比B事件的概率大。那么我們?nèi)绾蝸砗饬坎煌录l(fā)生帶來的信息量呢?公式如下:
其中p(x)表示事件x發(fā)生的概率
信息量=?log(p(x))信息量=-log(p(x)) 信息量=?log(p(x))
2 熵
熵用來表示所有信息量的期望。熵衡量了預(yù)測(cè)隨機(jī)變量的不確定度,不確定性越大熵越大。
公式如下:
H(X)=?∑i=1np(xi)log(p(xi))H(X)=-\sum_{i=1}^{n}p(x_{i})log(p(x_{i})) H(X)=?i=1∑n?p(xi?)log(p(xi?))
其中n代表所有可能發(fā)生的事件數(shù)量。
舉例來說:
| A | 電腦正常開機(jī) | 0.6 | ?log(p(A))=0.22-log(p(A))=0.22?log(p(A))=0.22 |
| B | 電腦無法開機(jī) | 0.2 | ?log(p(B))=0.69-log(p(B))=0.69?log(p(B))=0.69 |
| C | 電腦爆炸 | 0.2 | ?log(p(C))=0.69-log(p(C))=0.69?log(p(C))=0.69 |
H(x)=?[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))]=0.6?0.22+0.2?0.69+0.2?0.69=0.408H(x) = ?[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))] =0.6*0.22+0.2*0.69+0.2*0.69 =0.408 H(x)=?[p(A)log(p(A))+p(B)log(p(B))+p(C))log(p(C))]=0.6?0.22+0.2?0.69+0.2?0.69=0.408
3 相對(duì)熵(KL散度)
相對(duì)熵又稱KL散度,如果我們對(duì)于同一個(gè)隨機(jī)變量 x 有兩個(gè)單獨(dú)的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個(gè)分布的差異
維基百科對(duì)相對(duì)熵的定義
In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.
即 使用P來描述問題所帶來的信息增量,相對(duì)于Q來說。
在機(jī)器學(xué)習(xí)中,P往往用來表示樣本的真實(shí)分布,比如[1,0,0]表示當(dāng)前樣本屬于第一類。Q用來表示模型所預(yù)測(cè)的分布,比如[0.7,0.2,0.1]
直觀的理解就是如果用P來描述樣本,那么就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那么的完美,信息量不足,需要額外的一些“信息增量”才能達(dá)到和P一樣完美的描述。如果我們的Q通過反復(fù)訓(xùn)練,也能完美的描述樣本,那么就不再需要額外的“信息增量”,Q等價(jià)于P。
KL散度的計(jì)算公式:
DKL(p∣∣q)=∑i=1np(xi)log(p(xi)q(xi))D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log( \frac{ p(x_{i}) } {q(x_{i}) }) DKL?(p∣∣q)=i=1∑n?p(xi?)log(q(xi?)p(xi?)?)
DKLD_{KL}DKL?的值越小,表示q分布和p分布越接近。
4 交叉熵
對(duì)KL散度公式變形得到:
DKL([∣∣q)=∑i=1np(xi)log(p(xi))?∑i=1np(xi)log(q(xi))=?H(p(x))+[?∑i=1np(xi)log(q(xi))]D_{KL}([||q) = \sum_{i=1}^{n}p(x_{i})log(p(x_{i})) - \sum_{i=1}^{n}p(x_{i})log(q(x_{i})) =-H(p(x)) + [-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))] DKL?([∣∣q)=i=1∑n?p(xi?)log(p(xi?))?i=1∑n?p(xi?)log(q(xi?))=?H(p(x))+[?i=1∑n?p(xi?)log(q(xi?))]
等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
H(p,q)=?∑i=1np(xi)log(q(xi))H(p,q) = -\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) H(p,q)=?i=1∑n?p(xi?)log(q(xi?))
在機(jī)器學(xué)習(xí)中,我們需要評(píng)估label和predicts之間的差距,使用KL散度剛剛好,即DKL(y∣∣y^)D_{KL}(y||\hat{y})DKL?(y∣∣y^?),由于KL散度中的前一部分?H(y)?H(y)?H(y)不變,故在優(yōu)化過程中,只需要關(guān)注交叉熵就可以了。所以一般在機(jī)器學(xué)習(xí)中直接用用交叉熵做loss,評(píng)估模型。
下一篇將會(huì)講解為什么要使用交叉熵作為損失函數(shù)
轉(zhuǎn)自:博客
總結(jié)
- 上一篇: ubuntu18.04 更改apt源
- 下一篇: pytorch 常用的 loss fun