參考博客https://blog.csdn.net/qiu931110/article/details/86684241
在多分類任務中我們往往無論是使用sigmod函數還是softmax函數,最終都要經過交叉熵函數計算loss:
、
最終在訓練網絡時,最小化預測概率和標簽真實概率的交叉熵,從而得到最優的預測概率分布。如果分類正確p=y,loss=0,否則若p=1-y,loss趨近於無窮大。也就是說交叉熵會盡量拉大正確和錯誤的差值,這樣有兩個后果。
1.如果我們的標注數據沒有那么准確,導致模型混亂,也就是說魯棒性不強;
2.如果訓練樣本不能表征所有樣本特征,那么這種強制拉大兩者距離的做法很容易過擬合,導致模型泛化能力弱。
為了解決這個問題,在2016年,Szegedy等人提出了inception v2的模型(論文:Rethinking the inception architecture for computer vision.)。其中提到了Label Smoothing技術,用以減輕這個問題。label smoothing將真實概率分布作如下改變:
從概率分布上看,他讓峰值不那么尖銳:
假設我們的分類只有兩個,一個是貓一個不是貓,分別用1和0表示。Label Smoothing的工作原理是對原來的[0 1]這種標注做一個改動,假設我們給定Label Smoothing的值為0.1:
可以看到,原來的[0,1]編碼變成了[0.05,0.95]了。這個label_smoothing的值假設為ϵ,那么就是說,原來分類准確的時候,p=1,不准確為p=0,現在變成了p=1−ϵ和ϵ,也就是說對分類准確做了一點懲罰。與之對應,label smoothing將交叉熵損失函數作如下改變:
其實我們可以理解為過擬合與模型的能力和參數個數有關,我們相當於在label空間內做了個data augmentation,或者理解為加入了噪聲,用來緩解過擬合。
在yolov3中這樣使用(無論是focal loss 還是label smooth,yolov3都沒有處理交叉熵):