paddle深度學習基礎之損失函數

paddle深度學習基礎之損失函數

前言


上一節,咱們通過優化網絡結構,極大的提升了模型的精準度。本節,咱們將在損失函數上面做些文章。

網絡結構

img

損失函數

一、損失函數漫談

還記得我們之前做的房價預測模型,使用的損失函數是均方差損失函數。這對於房價預測模型這種需要模型不斷接近真實房價,是比較合適的。但是對於分類模型,我們所預測的值是離散。舉個例子,一張動物圖片,我們來預測是貓、狗、牛。我們會假定,輸出結果爲0的是貓,輸出結果爲1的是狗,輸出結果爲2的是牛。如果我們使用均方差損失函數,預測值和真實值相減,並不具備物理意義。所以,分類模型使用均方差損失函數是不合適的。那麼,接下來會介紹一種損失函數,能夠很好的用於分類模型中。

二、交叉熵損失函數

1. Softmax函數

在介紹交叉熵損失函數之前,我們需要引入Softmax函數。這個函數經常作爲分類模型的激活函數,用於將模型輸出的各個標籤的值進行轉化,轉化爲總和爲1的概率值,公式如下:
softmax(xi)=exij=0Nejx,i=0,...,C1 softmax(x_i) = \frac {e^{x_i}}{\sum_{j=0}^N{e^x_j}}, i=0, ..., C-1
下面咱們看這個圖,還是咱們前面說的貓狗牛三分類,最後全連接層輸出的三個值是3、1、-3,接下來將進行如下轉化:

img

從圖中最後結果我們可以看出,將全連接層輸出的結果,轉化爲了概率值,且相加之和爲1.這就很符合我們的認知。我們希望模型在預測類型的時候,能夠給出一個概率,而不是一個正常的數。

2.最大似然估計

什麼叫最大似然估計呢,最合適的解釋爲:根據已知結果,反推最有可能造成這個結果的參數值。這是一種根據結果反推參數值的一種概率論方法。

這裏我們可以對比着我們所學的一元二次曲線方程,我們通常會求它的極值。曲線方程可以類比爲已知結果,我們所求的極值點就是造成這個結果的參數值。

這裏我們可以對比着我們所學的一元二次曲線方程,我們通常會求它的極值。曲線方程可以類比爲已知結果,我們所求的極值點就是造成這個結果的參數值。

下面這裏篇博客講的特別好,大家可以去看一下:

3.貝葉斯公式

貝葉斯公式是我們概率論裏比較重要的公式之一,它通常和全概率公式一起使用。

我們首先看一下全概率公式:

formula

這個挺好理解的。舉個簡單的例子,你們班上一共有30名同學,其中20名爲男生,10名爲女生,男生中有10名同學在全年級排名前100名內,女生有8名同學在全年級排名前100名內。

我們需要計算你們班學生在全年級排名前100名的概率。

P(B)爲全年級排名前100的學生的概率

P(A1) 爲班級裏男生的概率 ,P(A2)爲班級裏是女生的概率

P(B|A1)表示男生中在全年級排名前100名的概率

P(B|A2)表示女生中在全年級排名前100名的概率

P(B) = (20/30) x(10/20)+(10/30)x(8/10)=0.6

從上面的例子中,我們也能看出,是我們已知導致結果的原因,求最終結果概率,這也叫先驗概率

下面我們介紹的貝葉斯公式,稱之爲後驗概率。已知結果,去推出各個原因的概率;通常被認爲是來解決“已知結果,分析原因”。不明白先驗概率後驗概率的看下面這篇博客:

貝葉斯公式

formula

從公式中,我們會發現,右側公式的分母,就是全概率公式。

百度百科針對這個公式的描述:公式中,事件Bi的概率爲P(Bi),事件Bi已發生條件下事件A的概率爲P(A│Bi),事件A發生條件下事件Bi的概率爲P(Bi│A)。

說白了,就是根據結果去推各個因素下事件發生的概率。

這時候,大家可能會有個疑問,貝葉斯公式的原理和最大似然估計原理好像啊。沒錯,不要懷疑你的這個想法。準確來說,最大似然估計是用來輔助貝葉斯公式進行計算的。

我們來看貝葉斯公式,分母就是結果A發生的總概率,這個也叫結果,通常我們會先算出這個東西。

但是對於分子,P(Bi)是條件Bi發生的概率,P(A|Bi)是在條件Bi下,結果A 發生的概率。前者我們通過樣本統計,一般不難得出來。但是後者,我們就很難得到。這時候,我們就把它轉化爲了估計參數,也就是將概率問題轉化爲了參數估計問題。如何進行參數估計呢,就用到了極大似然估計原理。

這篇博客講解的比較明白!

4.交叉熵損失函數

L=[ylog y^+(1y)log (1y^)] L=-[ylog\ \hat y+(1-y)log\ (1-\hat y)]

具體推到過程,可以參考下面的博客:

三、代碼中的應用

            # loss = fluid.layers.square_error_cost(predict,label)
            loss = fluid.layers.cross_entropy(predict,label)

只需要將咱們前面使用的均方差損失函數換成下面的這個函數即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章