日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读

發(fā)布時(shí)間:2023/11/27 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

交叉熵(Cross Entropy)是Shannon(香濃)信息論中的一個(gè)概念,在深度學(xué)習(xí)領(lǐng)域中解決分類問題時(shí)常用它作為損失函數(shù)。
  • 原理部分:要想搞懂交叉熵需要先清楚一些概念,順序如下:==1.自信息量—>2.信息熵(熵)—>3.相對(duì)熵(KL散度)—>4.交叉熵==

1.自信息量隨機(jī)事件發(fā)生概率對(duì)數(shù)的負(fù)值為該隨機(jī)事件的自信息量,記作。設(shè)的發(fā)生概率為,則其自信息為:

當(dāng),即隨機(jī)事件,不發(fā)生時(shí),定義為無限大;當(dāng),即隨機(jī)事件為確定事件必然發(fā)生時(shí),;對(duì)于,非負(fù)。

對(duì)數(shù)的底決定自信息量的單位。如果以2為底,信息量單位為比特(bit)(信息論中常用);如果以e為底數(shù),取自然對(duì)數(shù)單位為奈特(nat);如果以10為底,單位為迪特(det)。

舉個(gè)例子:

  • ?冬季某天哈爾濱將下雪,這句話的發(fā)生概率很大(不確定性很小),所以信息量就小。
  • ?夏季某天吐魯番將下雪,這句話的發(fā)生概率很小(不確定性很大),所以信息量就大。

2.信息熵設(shè)隨機(jī)變量取值于出現(xiàn)的概率為,那么所有可能事件的自信息量的加權(quán)平均,定義為隨機(jī)變量X的信息熵(簡稱熵),記為。即:

  • ?特例:在隨機(jī)變量服從二項(xiàng)分布(0-1分布)時(shí),只有兩種可能性,一個(gè)概率是另一個(gè)概率是,所以信息熵可以簡化為:

3.相對(duì)熵相對(duì)熵也是KL散度(Kullback-Leibler divergence),對(duì)于同一個(gè)隨機(jī)變量由兩個(gè)獨(dú)立的概率分布和,這時(shí)就可以用KL散度來衡量這兩個(gè)分布的差異。

在深度學(xué)習(xí)中通常表示樣本的真實(shí)分布,表示對(duì)樣本的預(yù)測(cè)分布。計(jì)算公式:

值越小,表示兩個(gè)分布就越接近。

4.交叉熵有了對(duì)前面概念的鋪墊,就很容易理解交叉熵的含義了。

交叉熵=信息熵+相對(duì)熵

為什么這么定義呢,先看相對(duì)熵,我們對(duì)相對(duì)熵計(jì)算公式展開得:

可以看出相對(duì)熵展開后的第一項(xiàng)正好是信息熵的負(fù)值。這樣信息熵加上相對(duì)熵就得到了交叉熵:

在深度學(xué)習(xí)中,我們需要評(píng)估真實(shí)值與預(yù)測(cè)值的差距。正由于相對(duì)熵展開后的第一項(xiàng)由訓(xùn)練數(shù)據(jù)決定且不變,因此在優(yōu)化過程中為了簡便,我們讓其與信息熵相加,這樣一來就可以只考慮相對(duì)熵的后一項(xiàng),并將其命名為了交叉熵。


  • Pytorch代碼部分:原理整明白了,接下來我們看一下在pytorch中,交叉熵?fù)p失的代碼,參數(shù)設(shè)置大家參考文檔就好。
class torch.nn.CrossEntropyLoss(								weight=None, 								size_average=None, 								ignore_index=-100, 								reduce=None, 								reduction='mean')

pytorch中對(duì)交叉熵公式描述如下:

  • 接下來我們重點(diǎn)看看這個(gè)公式 推理過程。

假設(shè)一個(gè)三分類問題,預(yù)測(cè)值為,真實(shí)類別值為 ?。交叉熵公式為:

交叉熵公式中計(jì)算的都是概率值,所有這里需要先對(duì)預(yù)測(cè)值做softmax操作,然后對(duì)真實(shí)值做one-hot編碼。對(duì)進(jìn)行one-hot編碼得到:。真實(shí)值是確定的,所以的概率為零,的概率也為零,的概率為1。

到這里將上面結(jié)果再與官方文檔對(duì)比,轉(zhuǎn)換一下符號(hào)就完全一致了,就是我們的,就是。

  • 代碼實(shí)現(xiàn)一個(gè)例子
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('真實(shí)值為:', y)print('預(yù)測(cè)值為:', y_)print('Pytorch計(jì)算的損失值為:', L)# 手動(dòng)計(jì)算驗(yàn)證: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('手動(dòng)計(jì)算的損失值為:', L_new)
輸出結(jié)果:真實(shí)值為:tensor([2])預(yù)測(cè)值為:tensor([[ 1.2566, -1.9265, -0.0638]], requires_grad=True)Pytorch計(jì)算的損失值為:tensor(1.5893, grad_fn=)手動(dòng)計(jì)算的損失值為:[1.589269]

代碼顯示兩個(gè)方式計(jì)算的損失相等,驗(yàn)證了我們的推理過程是正確的。

總結(jié)

以上是生活随笔為你收集整理的平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請(qǐng)說明來源于"生活随笔",并保留原作者的名字。

本文地址:平均符号熵的计算公式_交叉熵(Cross Entropy)从