交叉熵在機器學習中的使用

2021-09-25 16:13:35 字數 2551 閱讀 2563

概率越小,資訊量越大,事件x=x

0x=x_0

x=x0

​的資訊量為:

i (x

0)=−

log(

p(x0

))

i(x_0)=-log(p(x_0))

i(x0​)

=−lo

g(p(

x0​)

)熵表示所有資訊量的期望:

h (x

)=−∑

i=1n

p(xi

)log

(p(x

i)

)h(x)=-\sum_^n p(x_i)log(p(x_i))

h(x)=−

i=1∑

n​p(

xi​)

log(

p(xi

​))其中n代表事件x有n種可能

d kl

(p∣∣

q)=∑

i=1n

p(xi

)log

(p(x

i)q(

xi))

d_(p||q)=\sum_^np(x_i)log(\frac)

dkl​(p

∣∣q)

=i=1

∑n​p

(xi​

)log

(q(x

i​)p

(xi​

)​)物理意義:如果用p來描述目標問題,而不是用q來描述問題,得到的資訊增量

在機器學習中,p往往表示樣本的真實分布,q表示模型**的分布,相對熵越小,表示q分布和p分布越接近

相對熵可以變形為:

d kl

(p∣∣

q)=−

h(p(

x))+

[−∑i

=1np

(xi)

log(

q(xi

))

]d_(p||q)=-h(p(x))+[-\sum_^np(x_i)log(q(x_i))]

dkl​(p

∣∣q)

=−h(

p(x)

)+[−

i=1∑

n​p(

xi​)

log(

q(xi

​))]

等式的前半部分是p的熵,後半部分就是交叉熵:

h (p

,q)=

−∑i=

1np(

xi)l

og(q

(xi)

)h(p,q)=-\sum_^np(x_i)log(q(x_i))

h(p,q)

=−i=

1∑n​

p(xi

​)lo

g(q(

xi​)

)在機器學習中,我們需要評估labl和predicts之間的差距,可以使用kl散度,但由於kl散度前半部分不變,故在優化過程中,只需要關注交叉熵就行,所以一般在機器學習中直接用交叉熵作為loss函式,評估模型。

在回歸問題中,常用mse做loss函式,但在邏輯分類中卻用不好,這時需要用交叉熵

當sigmod函式和mse一起使用時會出現梯度消失,原因是在使用mse時,w、b的梯度均與sigmoid函式對z的偏導有關係,而sigmoid函式的偏導在自變數非常大或非常小是,偏導數的值接近與0,這將導致w、b的梯度將不會變化,也就是出現所謂的梯度消失現象。而使用交叉熵時,梯度就不會出現上述情況。所以mse不適用於分類問題。

當mse和交叉熵同事應用於多分類場景下,mse對每個輸出結果都非常看重,而交叉熵只對正確分類的結果看重。可見mse除了讓正確的分類盡量變大,還會讓錯誤的分類變得平均,這對回歸問題顯得很重要,所以mse適合回歸問題的loss函式。

1、交叉熵在單分類中的使用

2、交叉熵在多分類中使用

nn.crossentropyloss(

)

這個損失函式和通常的交叉熵函式公式不一樣,它是nn.logsoftmax()和nn.nllloss()的整合,公式如下:

loss⁡(

x,

class )=

−log⁡(

exp⁡(x

[class ])

∑j

exp⁡(x

[j])

)=−x

[class ]+

log⁡(∑

jexp⁡(

x[j]

))

\operatorname(x, \text )=-\log \left(\frac])} \exp (x[j])}\right)=-x[\text ]+\log \left(\sum_ \exp (x[j])\right)

loss(x

,class )=

−log(∑

j​exp(x[

j])exp(x

[class ])

​)=−

x[class ]+

log(j∑

​exp(x

[j])

)

演算法筆記 交叉熵的含義以及在機器學習中的應用

感謝原文 熵用來表示乙個隨機變數資訊量的期望 相對熵 kl散度 用來衡量隨機變數不同分布之間的差異。在機器學習的分類問題中,p表示標準分類結果,q表示學習得到的分類結果,那麼p和q之間的相對熵越小,就說明q的分類效果越好 接近正確結果p 訓練的目的就是獲得更加標註的分布q,使得p,q之間的交叉熵更小...

機器學習基礎 熵 KL散度 交叉熵

熵 entropy kl 散度 kullback leibler kl divergence 和交叉熵 cross entropy 在機器學習的很多地方會用到。比如在決策樹模型使用資訊增益來選擇乙個最佳的劃分,使得熵下降最大 深度學習模型最後一層使用 softmax 啟用函式後,我們也常使用交叉熵來...

在TensorFlow中實現交叉熵

softmax回歸處理 神經網路的原始輸出不是乙個概率值,實質上只是輸入的數值做了複雜的加權和與非線性處理之後的乙個值而已,那麼如何將這個輸出變為概率分布?這就是softmax層的作用,假設神經網路的原始輸出為y1,y2,yn,那麼經過softmax回歸處理之後的輸出為 很顯然的是 而單個節點的輸出...