平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读
- 原理部分:要想搞懂交叉熵需要先清楚一些概念,順序如下:==1.自信息量—>2.信息熵
(熵)—>3.相對熵(KL散度)—>4.交叉熵==
1.自信息量隨機事件發(fā)生概率對數(shù)的負值為該隨機事件的自信息量,記作。設(shè)的發(fā)生概率為,則其自信息為:
當,即隨機事件,不發(fā)生時,定義為無限大;當,即隨機事件為確定事件必然發(fā)生時,;對于,非負。
對數(shù)的底決定自信息量的單位。如果以2為底,信息量單位為比特(bit)(信息論中常用);如果以e為底數(shù),取自然對數(shù)單位為奈特(nat);如果以10為底,單位為迪特(det)。
舉個例子:
- ?冬季某天哈爾濱將下雪,這句話的發(fā)生概率很大(不確定性很小),所以信息量就小。
- ?夏季某天吐魯番將下雪,這句話的發(fā)生概率很小(不確定性很大),所以信息量就大。
2.信息熵設(shè)隨機變量取值于出現(xiàn)的概率為,那么所有可能事件的自信息量的加權(quán)平均,定義為隨機變量X的信息熵(簡稱熵),記為。即:
- ?
特例:在隨機變量服從二項分布(0-1分布)時,只有兩種可能性,一個概率是另一個概率是,所以信息熵可以簡化為:
3.相對熵相對熵也是KL散度(Kullback-Leibler divergence),對于同一個隨機變量由兩個獨立的概率分布和,這時就可以用KL散度來衡量這兩個分布的差異。
在深度學(xué)習(xí)中通常表示樣本的真實分布,表示對樣本的預(yù)測分布。計算公式:
值越小,表示兩個分布就越接近。
4.交叉熵有了對前面概念的鋪墊,就很容易理解交叉熵的含義了。
交叉熵=信息熵+相對熵
為什么這么定義呢,先看相對熵,我們對相對熵計算公式展開得:
可以看出相對熵展開后的第一項正好是信息熵的負值。這樣信息熵加上相對熵就得到了交叉熵:
在深度學(xué)習(xí)中,我們需要評估真實值與預(yù)測值的差距。正由于相對熵展開后的第一項由訓(xùn)練數(shù)據(jù)決定且不變,因此在優(yōu)化過程中為了簡便,我們讓其與信息熵相加,這樣一來就可以只考慮相對熵的后一項,并將其命名為了交叉熵。
- Pytorch代碼部分:原理整明白了,接下來我們看一下在pytorch中,交叉熵損失的代碼,參數(shù)設(shè)置大家參考文檔就好。
class torch.nn.CrossEntropyLoss( weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')pytorch中對交叉熵公式描述如下:
- 接下來我們重點看看這個公式 推理過程。
假設(shè)一個三分類問題,預(yù)測值為,真實類別值為 ?。交叉熵公式為:
交叉熵公式中計算的都是概率值,所有這里需要先對預(yù)測值做softmax操作,然后對真實值做one-hot編碼。對進行one-hot編碼得到:。真實值是確定的,所以的概率為零,的概率也為零,的概率為1。
到這里將上面結(jié)果再與官方文檔對比,轉(zhuǎn)換一下符號就完全一致了,就是我們的,就是。
- 代碼實現(xiàn)一個例子:
import torchimport torch.nn as nnimport numpy as nptorch.manual_seed(2020)y = torch.empty(1, dtype=torch.long).random_(3)y_ = torch.randn(1,3,requires_grad=True)loss = nn.CrossEntropyLoss()L = loss(y_, y)print('真實值為:', y)print('預(yù)測值為:', y_)print('Pytorch計算的損失值為:', L)# 手動計算驗證:ynew = y.numpy()y_new = y_.detach().numpy()[0]num_class = y_new[ynew]L_new = -num_class + np.log(np.sum(list(map(np.exp, y_new))))print('手動計算的損失值為:', L_new)輸出結(jié)果:真實值為:tensor([2])預(yù)測值為:tensor([[ 1.2566, -1.9265, -0.0638]], requires_grad=True)Pytorch計算的損失值為:tensor(1.5893, grad_fn=)手動計算的損失值為:[1.589269]代碼顯示兩個方式計算的損失相等,驗證了我們的推理過程是正確的。
總結(jié)
以上是生活随笔為你收集整理的平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wincc vbs mysql_Winc
- 下一篇: win8数据源设置mysql_Win8系