交叉熵
信息論
交叉熵是信息論中的一個概念,要想了解交叉熵的本質,需要先從最基本的概念講起。
1 信息量
每件事情都有一定的發生概率,不同概率的事情發生帶來的信息量是不同的。舉例來說:
事件A:巴西隊進入了2018世界杯決賽圈。
事件B:中國隊進入了2018世界杯決賽圈。
可以知道,B事件發生的信息量是比A事件發生的信息量要大的,因為A事件的概率明顯比B事件的概率大。那么我們如何來衡量不同事件發生帶來的信息量呢?公式如下:
其中p(x)表示事件x發生的概率
信息量=?log(p(x))信息量=-log(p(x)) 信息量=?log(p(x))
2 熵
熵用來表示所有信息量的期望。熵衡量了預測隨機變量的不確定度,不確定性越大熵越大。
公式如下:
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代表所有可能發生的事件數量。
舉例來說:
| A | 電腦正常開機 | 0.6 | ?log(p(A))=0.22-log(p(A))=0.22?log(p(A))=0.22 |
| B | 電腦無法開機 | 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 相對熵(KL散度)
相對熵又稱KL散度,如果我們對于同一個隨機變量 x 有兩個單獨的概率分布 P(x) 和 Q(x),我們可以使用 KL 散度(Kullback-Leibler (KL) divergence)來衡量這兩個分布的差異
維基百科對相對熵的定義
In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.
即 使用P來描述問題所帶來的信息增量,相對于Q來說。
在機器學習中,P往往用來表示樣本的真實分布,比如[1,0,0]表示當前樣本屬于第一類。Q用來表示模型所預測的分布,比如[0.7,0.2,0.1]
直觀的理解就是如果用P來描述樣本,那么就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那么的完美,信息量不足,需要額外的一些“信息增量”才能達到和P一樣完美的描述。如果我們的Q通過反復訓練,也能完美的描述樣本,那么就不再需要額外的“信息增量”,Q等價于P。
KL散度的計算公式:
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 交叉熵
對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?))
在機器學習中,我們需要評估label和predicts之間的差距,使用KL散度剛剛好,即DKL(y∣∣y^)D_{KL}(y||\hat{y})DKL?(y∣∣y^?),由于KL散度中的前一部分?H(y)?H(y)?H(y)不變,故在優化過程中,只需要關注交叉熵就可以了。所以一般在機器學習中直接用用交叉熵做loss,評估模型。
下一篇將會講解為什么要使用交叉熵作為損失函數
轉自:博客
總結
- 上一篇: ubuntu18.04 更改apt源
- 下一篇: pytorch 常用的 loss fun