欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python機器學(xué)習(xí)pytorch交叉熵損失函數(shù)的深刻理解

 更新時間:2021年10月12日 08:51:24   作者:Ezail_xdu  
這篇文章主要為大家介紹了Python機器學(xué)習(xí)中對交叉熵損失函數(shù)的深刻理解,文中作出了詳細易懂的講解,有需要的朋友可以借鑒參考下希望能夠有所幫助

說起交叉熵損失函數(shù)「Cross Entropy Loss」,腦海中立馬浮現(xiàn)出它的公式:

我們已經(jīng)對這個交叉熵函數(shù)非常熟悉,大多數(shù)情況下都是直接拿來使用就好。但是它是怎么來的?為什么它能表征真實樣本標(biāo)簽和預(yù)測概率之間的差值?上面的交叉熵函數(shù)是否有其它變種?

1.交叉熵損失函數(shù)的推導(dǎo)

我們知道,在二分類問題模型:例如邏輯回歸「Logistic Regression」、神經(jīng)網(wǎng)絡(luò)「Neural Network」等,真實樣本的標(biāo)簽為 [0,1],分別表示負類和正類。模型的最后通常會經(jīng)過一個 Sigmoid 函數(shù),輸出一個概率值,這個概率值反映了預(yù)測為正類的可能性:概率越大,可能性越大。
Sigmoid 函數(shù)的表達式和圖形如下所示:

其中 s 是模型上一層的輸出,Sigmoid 函數(shù)有這樣的特點:s = 0 時,g(s) = 0.5;s >> 0 時, g ≈ 1,s << 0 時,g ≈ 0。顯然,g(s) 將前一級的線性輸出映射到 [0,1] 之間的數(shù)值概率上。這里的 g(s) 就是交叉熵公式中的模型預(yù)測輸出 。

我們說了,預(yù)測輸出即 Sigmoid 函數(shù)的輸出表征了當(dāng)前樣本標(biāo)簽為 1 的概率:

很明顯,當(dāng)前樣本標(biāo)簽為 0 的概率就可以表達成:

重點來了,如果我們從極大似然性的角度出發(fā),把上面兩種情況整合到一起:

不懂極大似然估計也沒關(guān)系。我們可以這么來看:

當(dāng)真實樣本標(biāo)簽 y = 0 時,上面式子第一項就為 1,概率等式轉(zhuǎn)化為:

當(dāng)真實樣本標(biāo)簽 y = 1 時,上面式子第二項就為 1,概率等式轉(zhuǎn)化為:

兩種情況下概率表達式跟之前的完全一致,只不過我們把兩種情況整合在一起了。

重點看一下整合之后的概率表達式,我們希望的是概率 P(y|x) 越大越好。首先,我們對 P(y|x) 引入 log 函數(shù),因為 log 運算并不會影響函數(shù)本身的單調(diào)性。則有:

我們希望 log P(y|x) 越大越好,反過來,只要 log P(y|x) 的負值 -log P(y|x) 越小就行了。那我們就可以引入損失函數(shù),且令 Loss = -log P(y|x)即可。則得到損失函數(shù)為:

非常簡單,我們已經(jīng)推導(dǎo)出了單個樣本的損失函數(shù),是如果是計算 N 個樣本的總的損失函數(shù),只要將 N 個 Loss 疊加起來就可以了:

這樣,我們已經(jīng)完整地實現(xiàn)了交叉熵損失函數(shù)的推導(dǎo)過程。

2. 交叉熵損失函數(shù)的直觀理解

我已經(jīng)知道了交叉熵損失函數(shù)的推導(dǎo)過程。但是能不能從更直觀的角度去理解這個表達式呢?而不是僅僅記住這個公式。好問題!接下來,我們從圖形的角度,分析交叉熵函數(shù),加深理解。

首先,還是寫出單個樣本的交叉熵損失函數(shù):

我們知道,當(dāng) y = 1 時

這時候,L 與預(yù)測輸出的關(guān)系如下圖所示:

看了 L 的圖形,簡單明了!橫坐標(biāo)是預(yù)測輸出,縱坐標(biāo)是交叉熵損失函數(shù) L。顯然,預(yù)測輸出越接近真實樣本標(biāo)簽 1,損失函數(shù) L 越??;預(yù)測輸出越接近 0,L 越大。因此,函數(shù)的變化趨勢完全符合實際需要的情況。

當(dāng) y = 0 時:

這時候,L 與預(yù)測輸出的關(guān)系如下圖所示:

同樣,預(yù)測輸出越接近真實樣本標(biāo)簽 0,損失函數(shù) L 越?。活A(yù)測函數(shù)越接近 1,L 越大。函數(shù)的變化趨勢也完全符合實際需要的情況。

從上面兩種圖,可以幫助我們對交叉熵損失函數(shù)有更直觀的理解。無論真實樣本標(biāo)簽 y 是 0 還是 1,L 都表征了預(yù)測輸出與 y 的差距。

另外,重點提一點的是,從圖形中我們可以發(fā)現(xiàn):預(yù)測輸出與 y 差得越多,L 的值越大,也就是說對當(dāng)前模型的 “ 懲罰 ” 越大,而且是非線性增大,是一種類似指數(shù)增長的級別。這是由 log 函數(shù)本身的特性所決定的。這樣的好處是模型會傾向于讓預(yù)測輸出更接近真實樣本標(biāo)簽 y。

3. 交叉熵損失函數(shù)的其它形式

什么?交叉熵損失函數(shù)還有其它形式?沒錯!我剛才介紹的是一個典型的形式。接下來我將從另一個角度推導(dǎo)新的交叉熵損失函數(shù)。

這種形式下假設(shè)真實樣本的標(biāo)簽為 +1 和 -1,分別表示正類和負類。有個已知的知識點是Sigmoid 函數(shù)具有如下性質(zhì):

這個性質(zhì)我們先放在這,待會有用。

好了,我們之前說了 y = +1 時,下列等式成立:

如果 y = -1 時,并引入 Sigmoid 函數(shù)的性質(zhì),下列等式成立:

重點來了,因為 y 取值為 +1 或 -1,可以把 y 值帶入,將上面兩個式子整合到一起:

這個比較好理解,分別令 y = +1 和 y = -1 就能得到上面兩個式子。

接下來,同樣引入 log 函數(shù),得到:

要讓概率最大,反過來,只要其負數(shù)最小即可。那么就可以定義相應(yīng)的損失函數(shù)為:

還記得 Sigmoid 函數(shù)的表達式吧?將 g(ys) 帶入:

好咯,L 就是我要推導(dǎo)的交叉熵損失函數(shù)。如果是 N 個樣本,其交叉熵損失函數(shù)為:

接下來,我們從圖形化直觀角度來看。當(dāng) y = +1 時:

這時候,L 與上一層得分函數(shù) s 的關(guān)系如下圖所示:

 橫坐標(biāo)是 s,縱坐標(biāo)是 L。顯然,s 越接近正無窮,損失函數(shù) L 越??;s 越接近負無窮,L 越大。

另一方面,當(dāng) y = -1 時:

這時候,L 與上一層得分函數(shù) s 的關(guān)系如下圖所示:

同樣,s 越接近負無窮,損失函數(shù) L 越??;s 越接近正無窮,L 越大。

4.總結(jié)

本文主要介紹了交叉熵損失函數(shù)的數(shù)學(xué)原理和推導(dǎo)過程,也從不同角度介紹了交叉熵損失函數(shù)的兩種形式。第一種形式在實際應(yīng)用中更加常見,例如神經(jīng)網(wǎng)絡(luò)等復(fù)雜模型;第二種多用于簡單的邏輯回歸模型。

需要注意的是:第一個公式中的變量是sigmoid輸出的值,第二個公式中的變量是sigmoid輸入的值。

以上就是Python機器學(xué)習(xí)交叉熵損失函數(shù)的深刻理解的詳細內(nèi)容,更多關(guān)于pytorch交叉熵損失函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python常用擴展插件使用教程解析

    Python常用擴展插件使用教程解析

    這篇文章主要介紹了Python常用擴展插件使用教程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python中zfill()方法的使用教程

    Python中zfill()方法的使用教程

    這篇文章主要介紹了Python中zfill()方法的使用教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • python 實現(xiàn)快速生成連續(xù)、隨機字母列表

    python 實現(xiàn)快速生成連續(xù)、隨機字母列表

    今天小編就為大家分享一篇python 實現(xiàn)快速生成連續(xù)、隨機字母列表,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python2和Python3之間的str處理方式導(dǎo)致亂碼的講解

    Python2和Python3之間的str處理方式導(dǎo)致亂碼的講解

    今天小編就為大家分享一篇關(guān)于Python2和Python3之間的str處理方式導(dǎo)致亂碼的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    Python實現(xiàn)GIF動圖加載和降幀的方法詳解

    這篇文章主要為大家詳細介紹了如何利用Python和Pygame實現(xiàn)GIF動圖加載和降幀的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • Python單元測試入門到精通講解

    Python單元測試入門到精通講解

    單元測試是軟件開發(fā)中不可或缺的一部分,有助于確保代碼的正確性、可維護性和可擴展性,在Python中,有豐富的工具和庫可用于進行單元測試,本文將為你提供一個全面的指南,從入門到精通,輕松掌握Python單元測試的方方面面
    2023-11-11
  • 在python中實現(xiàn)將一張圖片剪切成四份的方法

    在python中實現(xiàn)將一張圖片剪切成四份的方法

    今天小編就為大家分享一篇在python中實現(xiàn)將一張圖片剪切成四份的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python操作lxml庫之基礎(chǔ)使用篇

    Python操作lxml庫之基礎(chǔ)使用篇

    lxml庫是python的第三方庫,安裝方式也是十分簡單,下面這篇文章主要給大家介紹了關(guān)于Python操作lxml庫之基礎(chǔ)使用篇的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • pytorch實現(xiàn)MNIST手寫體識別

    pytorch實現(xiàn)MNIST手寫體識別

    這篇文章主要為大家詳細介紹了pytorch實現(xiàn)MNIST手寫體識別,使用全連接神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python中的優(yōu)先隊列(priority?queue)和堆(heap)

    Python中的優(yōu)先隊列(priority?queue)和堆(heap)

    這篇文章主要介紹了Python中的優(yōu)先隊列(priority?queue)和堆(heap),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論