機器學習的樣本中通常會存在少量錯誤標籤,這些錯誤標籤會影響到**的效果。標籤平滑採用如下思路解決這個問題:在訓練時即假設標籤可能存在錯誤,避免「過分」相信訓練樣本的標籤。當目標函式為交叉熵時,這一思想有非常簡單的實現,稱為標籤平滑(label smoothing)。
我們以2類分類問題為例,此時訓練樣本為(xi,yi),其中yi是樣本標籤,為0或1。在訓練樣本中,我們並不能保證所有的樣本標籤都標註正確,如果某個樣本的標註是錯誤的,那麼在訓練時,該樣本就有可能對訓練結果產生負面影響。乙個很自然的想法是,如果我們有辦法「告訴」模型,樣本的標籤不一定正確,那麼訓練出來的模型對於少量的樣本錯誤就會有「免疫力」。
為了達到這個目標,我們的方法是:在每次迭代時,並不直接將(xi,yi)放入訓練集,而是設定乙個錯誤率ε,以1-ε的概率將(xi,yi)代入訓練,以ε的概率將(xi,1-yi)代入訓練。這樣,模型在訓練時,既有正確標籤輸入,又有錯誤標籤輸入,可以想象,如此訓練出來的模型不會「全力匹配」每乙個標籤,而只是在一定程度上匹配。這樣,如果真的出現錯誤標籤,模型受到的影響就會更小。
那麼,這是否意味著我們在每次訓練時,都需要對標籤進行隨機化處理呢?答案是否定的,我們有更好的方法來解決,也就是標籤平滑。下面我們介紹標籤平滑的具體思路。
當我們採用交叉熵來描述損失函式時,對於每乙個樣本i,損失函式為:
經過隨機化之後,新的標籤有1-ε 的概率與 yi相同,有ε的概率不同(即1-yi)。所以,採用隨機化的標籤作為訓練資料時,損失函式有1-ε的概率與上面的式子相同,有 ε 的概率為:
我們把上面兩個式子按概率加權平均,就可以得到:
為了簡化上面的式子,我們令 yi'=ε(1-yi)+(1-ε)yi,可以得到:
這個式子和原先的交叉熵表示式相比,只有yi被替換成了yi',其他的內容全部都沒有變。這實際上等價於:把每個標籤yi替換成yi',再進行常規的訓練過程。因此,我們並不需要在訓練前進行隨機化處理,只需要把每個標籤替換一下即可。
為什麼這個過程被成為標籤平滑呢?我們可以從下面的式子看出來:
也就是說,當標籤為0時,我們並不把0直接放入訓練,而是將其替換為乙個比較小的數ε. 同樣地,如果標籤為1,我們也將其替換為較接近的數1-ε。為了方便看出效果,我們可以給出交叉熵模型的表示式:
由此可見,在交叉熵模型中,模型輸出永遠不可能達到0和1,因此模型會不斷增大w,使得**輸出盡可能逼近0或1,而這個過程與正則化是矛盾的,或者說,有可能出現過擬合。如果我們把標籤0和1分別替換成ε和1-ε,模型的輸出在達到這個值之後,就不會繼續優化。因此,所謂平滑,指的就是把兩個極端值0和1變成兩個不那麼極端的值。
當然,標籤平滑也可以用在多類分類問題中,仍然是假設標籤值在一定概率下不變,以一定概率變為其他值。只不過此時有多個其他值,我們可以假設均勻分布,也可以按一定的先驗分布處理。如果假設均勻分布,那麼標籤平滑只需要把所有的標籤1變為1-ε,把所有的標籤0變為ε/(k-1)即可,其中k是類別的數量。
在幾乎所有的情況下,使用標籤平滑訓練可以產生更好的校準網路,從而更好地去泛化網路,最終對不可見的生產資料產生更準確的**。因此,標籤平滑應該是大多數深度學習訓練的一部分。
參考:
CMake是什麼?有什麼用
cmake cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的c 特性,類似unix下的automake。假如我們有乙個深度學習框架的部分工程列表,裡面有超過40個互相呼叫...
CMake是什麼?有什麼用?
原創 andrewzhou924 最後發布於2018 05 19 09 05 20 閱讀數 10989 收藏 發布於2018 05 19 09 05 20 分類專欄 學習筆記 展開cmake是乙個跨平台的編譯 build 工具,可以用簡單的語句來描述所有平台的編譯過程。cmake能夠輸出各種各樣的m...
nginx是什麼?有什麼用?
一句話概述 nginx是乙個使用c語言編寫的 開源 輕量級 高效能的web伺服器及反向 伺服器軟體,同時也是乙個 imap pop3 smtp 伺服器。由 igor sysoev 為俄羅斯訪問量第二的 rambler.ru 站點開發的,伊戈爾 賽索耶夫建立並於2004年首次公開發布,2011年成立同...