Yolo v3中關於交叉熵與均方差損失函數的思考

2022-01-05 AI大道理

收錄於話題 #AI大視覺 18個

損失函數(誤差函數)是關於模型輸出和樣本標籤值之差的函數,通過對誤差函數求導來調節權重參數。本質:選取恰當的函數來衡量模型輸出分布和樣本標籤分布之間的接近程度。損失函數是網絡學習的指揮棒,它引導著網絡學習的方向——能讓損失函數變小的參數就是好參數。所以,損失函數的選擇和設計要能表達你希望模型具有的性質與傾向。交叉熵損失函數

使用交叉熵的背景:

通過神經網絡解決分類問題時,一般會設置k個輸出點,k代表類別的個數,

每個輸出結點,都會輸出該結點對應類別的得分,如[cat,dog,car,pedestrian] 為[44,10,22,5]。

但是輸出結點輸出的是得分,而不是概率分布,那麼就沒有辦法用交叉熵來衡量預測結果和真確結果了,那怎麼辦呢。

解決方法是在輸出結果後接一層 softmax,softmax的作用就是把輸出得分換算為概率分布。 

交叉熵+sigmoid 輸出為單值輸出,可用於二分類。

交叉熵+softmax 輸出為多值,可用於多分類。

為什麼使用交叉熵作分類,而不用作回歸?

可以替代均方差+sigmoid組合解決梯度消失問題,另外交叉熵只看重正確分類的結果,而均方差對每個輸出結果都看重。

均方差損失函數

均方差是預測值與真實值之差的平方和,再除以樣本量。
均方差函數常用於線性回歸,即函數擬合。

回歸問題與分類問題不同,分類問題是判斷一個物體在固定的n個類別中是哪一類。比如房價預測,銷量預測等都是回歸問題,這些問題需要預測的不是一個事先定義好的類別,而是一個任意實數。在訓練時,如果預測值與實際值的誤差越大,那麼在反向傳播訓練的過程中,各種參數調整的幅度就要更大,從而使訓練更快收斂。

均方差為什麼不適用於分類問題,而適用於回歸?

因為經過sigmoid函數後容易造成梯度消失,所以不適用於分類問題。

均方差適用於線性的輸出,特點是與真實結果差別越大,則懲罰力度越大。

區別在一個三分類模型中,模型的輸出結果為(a,b,c),而真實的輸出結果為(1,0,0),那麼MSE與cross-entropy相對應的損失函數的值如下:

交叉熵的損失函數隻和分類正確的預測結果有關係,而MSE的損失函數還和錯誤的分類有關係。

均方差分類函數除了讓正確的分類儘量變大,還會讓錯誤的分類變得平均。

實際在分類問題中這個調整是沒有必要的,錯誤的分類不必處理。

但是對於回歸問題來說,這樣的考慮就顯得很重要了,回歸的目標是輸出預測值,而如果預測值有偏差,是一定要進行調整的。

所以,回歸問題使用交叉熵並不合適。

yolo v3中的損失函數


YOLOv3將分類預測改為回歸預測,分類損失函數換成了二值交叉熵損失函數。

Loss 要計算:

中心點的 Loss

寬高的 Loss

置信度的 Loss

目標類別的 Loss

其中:

寬高w、h的loss使用均方差損失函數。

中心點的坐標x、y的loss、置信度c的loss和目標類別p的loss使用交叉熵損失函數。

解釋:

對於目標類別obj 的loss,Logistic回歸正好方差損失和交叉熵損失的求導形式是一樣的,都是output - label的形式。

本這裡應該用(二元分類的)交叉熵損失函數的,但在代碼裡也可直接用均方差損失函數代替。

對於中心點的坐標x、y的 loss,DarkNet官方代碼實現的YOLOV3裡面坐標損失用的是交叉熵BCE Loss,而YOLOV3官方論文裡面說的是均方差MSE Loss。

對於寬高w、h的loss是均方差MSE Loss,因為沒有經過sigmoid,而x、y是交叉熵BCE Loss因為經過了sigmoid。

總結yolov3中論文的損失函數與實際代碼實現用的損失函數有些許不同,但不影響最終效果。

 ——————

     

相關焦點

  • 為什麼分類問題的損失函數採用交叉熵而不是均方誤差MSE
    我們可以回憶下交叉熵Loss和均方差Loss定義是什麼:最小均方誤差,MSE(Mean Squared Error)Loss交叉熵 在輸出接近 0 和 1 的時候是非常小的,故導致在使用最小均方差Loss時,模型參數w會學習的非常慢。而使用交叉熵Loss則沒有這個問題。為了更快的學習速度,分類問題一般採用交叉熵損失函數。
  • 關於交叉熵損失
    而softmax 函數能將一個向量的每個分量映射到[0,1]區間,並且對整個向量的輸出做了歸一化,保證所有分量輸出的和為1,正好滿足多分類任務的輸出要求。所以,在多分類中,在最後就需要將提取的到特徵經過softmax函數的,輸出為每個類別的概率,然後再使用交叉熵作為損失函數。softmax函數定義如下:
  • 熵、交叉熵和KL散度的基本概念和交叉熵損失函數的通俗介紹
    (也稱為對數損失)是分類問題中最常用的損失函數之一。但是,由於當今龐大的庫和框架的存在以及它們的易用性,我們中的大多數人常常在不了解熵的核心概念的情況下著手解決問題。所以,在這篇文章中,讓我們看看熵背後的基本概念,把它與交叉熵和KL散度聯繫起來。我們還將查看一個使用損失函數作為交叉熵的分類問題的示例。什麼是熵?
  • 簡單的交叉熵損失函數,你真的懂了嗎?
    說起交叉熵損失函數「Cross Entropy Loss」,腦海中立馬浮現出它的公式:我們已經對這個交叉熵函數非常熟悉,大多數情況下都是直接拿來使用就好。但是它是怎麼來的?為什麼它能表徵真實樣本標籤和預測概率之間的差值?上面的交叉熵函數是否有其它變種?也許很多朋友還不是很清楚!
  • Softmax函數與交叉熵
    softmax的計算與數值穩定性在Python中,softmax函數為:def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x)傳入[1, 2, 3, 4, 5]的向量>>> softmax([1, 2, 3,
  • 機器學習常用損失函數小結
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 損失函數的原理及使用場景
    損失函數:通常是針對單個訓練樣本而言,給定一個模型輸出y_和一個真實y,損失函數輸出一個實值損失L=f(y, y_)。代價函數:通常針對整個訓練集的總損失。目標函數:表示任意希望被優化的函數。1 均方誤差(RMSE)L2 loss在模型輸出與真實值的誤差服從高斯分布的假設下,如果這個假設能被滿足(比如回歸),那麼均方差損失是一個很好的損失函數選擇;如果這個假設不能被滿足(比如分類),那麼均方差損失不是一個好的選擇。
  • 透徹講解~交叉熵代價函數
    交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。與二次代價函數相比,它能更有效地促進ANN的訓練。在介紹交叉熵代價函數之前,本文先簡要介紹二次代價函數,以及其存在的不足。
  • 你是否有過疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?
    引言我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.
  • 【小知識】Softmax函數與交叉熵
    softmax的計算與數值穩定性在Python中,softmax函數為:def softmax(x): exp_x = np.exp(x) return exp_x / np.sum(exp_x)傳入[1, 2, 3, 4, 5]的向量>>> softmax([1, 2, 3,
  • 機器學習常用損失函數總覽:基本形式、原理、特點
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 深度學習中常見的損失函數
    該式就是sigmoid函數的交叉熵,這也是上文說的在分類問題上,交叉熵的實質是對數似然函數。在深度學習中更普遍的做法是將softmax作為最後一層,此時常用的仍是對數似然損失函數,如下所示:先看tf.nn.sigmoid_cross_entropy_with_logits(logits,targets)函數,它的實現和之前的交叉熵算法定義是一樣的,也是TensorFlow最早實現的交叉熵算法。
  • 可視化理解二值交叉熵/對數損失
    介紹如果你正在訓練一個二分類器,很有可能你正在使用的損失函數是二值交叉熵/對數(binary cross-entropy / log)。你是否想過使用此損失函數到底意味著什麼?問題是,鑑於如今庫和框架的易用性,很容易讓人忽略所使用損失函數的真正含義。動機我一直在尋找一個可以向學生展示的以清晰簡潔可視化的方式解釋二值交叉熵/對數損失背後概念的博客文章。
  • 深度學習常用損失函數總覽:基本形式、原理、特點
    本文將介紹機器學習、深度學習中分類與回歸常用的幾種損失函數,包括均方差損失 Mean Squared Loss、平均絕對誤差損失 Mean Absolute Error Loss、Huber Loss、分位數損失 Quantile Loss、交叉熵損失函數 Cross Entropy Loss、Hinge 損失 Hinge Loss。
  • 【損失函數合集】超詳細的語義分割中Loss盤點
    我們在計算分類的時候常用的損失——交叉熵的公式如下:為了解決正負樣本數量不平衡的問題,我們經常在二元交叉熵損失前面加一個參數來表示真實標籤值,那麼交叉熵損失關於補充(Softmax梯度計算)在介紹Dice Loss的時候留了一個問題,交叉熵的梯度形式推導,這裡給一下推導。(1)softmax函數 首先再來明確一下softmax函數,一般softmax函數是用來做分類任務的輸出層。
  • 官方DarkNet YOLO V3損失函數完結版
    接下來我就完整的寫一下根據DarkNet官方源碼推出來的YOLOV3的Loss。2.另外值得注意的一個點是網上大多數博客寫這個損失的時候都加了】 在二分類問題並且使用One-Hot編碼的情況下確實是這樣的,「但是我們這裡並不是分類」,我們要做的是預測出來的偏移值靠近原始的GT相對于于
  • 【損失函數】常見的損失函數(loss function)總結
    交叉熵損失函數 (Cross-entropy loss function)交叉熵損失函數的標準形式如下:注意公式中  表示樣本,  表示實際的標籤,  表示預測的輸出,  表示樣本總數量。特點:(1)本質上也是一種對數似然函數,可用於二分類和多分類任務中。
  • 機器學習最常用的損失函數之交叉熵
    在圖中也可以看出,當p=0或1時,熵為0,即此時X完全確定。 熵的單位隨著公式中log運算的底數而變化,當底數為2時,單位為「比特」(bit),底數為e時,單位為「奈特」。基於此,相對熵的意義就很明確了:DKL(p||q)表示在真實分布為p的前提下,使用q分布進行編碼相對於使用真實分布p進行編碼(即最優編碼)所多出來的bit數。交叉熵容易跟相對熵搞混,二者聯繫緊密,但又有所區別。假設有兩個分布p,q,則它們在給定樣本集上的交叉熵定義如下:
  • 以色列理工暑期學習-機器學習中Loss函數的小結
    通俗來講Loss函數是一種關於fitness的測度(關於數據是否合適模型的匹配度),或者是對於預測是否準確的一種判斷,如果預測和判斷沒有錯誤,則損失函數的值為0;如果有錯誤則會進行一些「懲罰」措施,也可以稱之為代價(風險)函數。藉助文獻中的原話:「the loss function measures 「how bad」 the mistake is.
  • 簡單的交叉熵,你真的懂了嗎?
    引言        我們都知道損失函數有很多種:均方誤差(MSE)、SVM的合頁損失(hinge loss)、交叉熵(cross entropy)。這幾天看論文的時候產生了疑問:為啥損失函數很多用的都是交叉熵(cross entropy)?其背後深層的含義是什麼?如果換做均方誤差(MSE)會怎麼樣?下面我們一步步來揭開交叉熵的神秘面紗。2.