通過神經網絡解決分類問題時,一般會設置k個輸出點,k代表類別的個數,
每個輸出結點,都會輸出該結點對應類別的得分,如[cat,dog,car,pedestrian] 為[44,10,22,5]。
但是輸出結點輸出的是得分,而不是概率分布,那麼就沒有辦法用交叉熵來衡量預測結果和真確結果了,那怎麼辦呢。
解決方法是在輸出結果後接一層 softmax,softmax的作用就是把輸出得分換算為概率分布。
交叉熵+sigmoid 輸出為單值輸出,可用於二分類。
交叉熵+softmax 輸出為多值,可用於多分類。
為什麼使用交叉熵作分類,而不用作回歸?
可以替代均方差+sigmoid組合解決梯度消失問題,另外交叉熵只看重正確分類的結果,而均方差對每個輸出結果都看重。
均方差損失函數均方差是預測值與真實值之差的平方和,再除以樣本量。
均方差函數常用於線性回歸,即函數擬合。
均方差為什麼不適用於分類問題,而適用於回歸?
因為經過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中論文的損失函數與實際代碼實現用的損失函數有些許不同,但不影響最終效果。——————