通俗理解label smoothing 標(biāo)簽平滑實(shí)例

  • 問題背景

對(duì)于分類問題,尤其是多類別分類問題中,常常把類別向量做成one-hot vector(獨(dú)熱向量)。

簡單地說,就是對(duì)于多分類向量,計(jì)算機(jī)中往往用[0, 1, 3]等此類離散的、隨機(jī)的而非有序(連續(xù))的向量表示,而one-hot vector 對(duì)應(yīng)的向量便可表示為[0, 1, 0],即對(duì)于長度為n 的數(shù)組,只有一個(gè)元素是1,其余都為0。因此表征我們已知樣本屬于某一類別的概率是為1的確定事件,屬于其他類別的概率則均為0。

one-hot 帶來的問題:

對(duì)于損失函數(shù),我們需要用預(yù)測(cè)概率去擬合真實(shí)概率,而擬合one-hot的真實(shí)概率函數(shù)會(huì)帶來兩個(gè)問題:

1)無法保證模型的泛化能力,容易造成過擬合;

2)全概率和0概率鼓勵(lì)所屬類別和其他類別之間的差距盡可能加大,而由梯度有界可知,這種情況很難adapt。會(huì)造成模型過于相信預(yù)測(cè)的類別。

  • 解決方法

使用下面的 label smoothing 可以緩解這個(gè)問題:

原理:對(duì)于以Dirac函數(shù)分布的真實(shí)標(biāo)簽,我們將它變成分為兩部分獲得(替換)

1) 第一部分:將原本Dirac分布的標(biāo)簽變量替換為(1 - ?)的Dirac函數(shù);

2) 第二部分:以概率 ? ,在u(k)u(k) 中份分布的隨機(jī)變量。

代碼對(duì)應(yīng):

       def label_smoothing(inputs, epsilon=0.1):
          K = inputs.get_shape().as_list()[-1]    # number of channels
          return ((1-epsilon) * inputs) + (epsilon / K)

代碼的第一行是取Y的channel數(shù)也就是類別數(shù)

第二行就是對(duì)應(yīng)公式了。

  • 舉例說明

下面用一個(gè)例子理解一下:

假設(shè)我做一個(gè)蛋白質(zhì)二級(jí)結(jié)構(gòu)分類,是三分類,那么K=3;

假如一個(gè)真實(shí)標(biāo)簽是[0, 0, 1],取epsilon = 0.1,

新標(biāo)簽就變成了 (1 - 0.1)× [0, 0, 1] + (0.1 / 3) = [0, 0, 0.9] + [0.0333, 0.0333, 0.0333]

= [0.0333, 0.0333, 0.9333]

實(shí)際上分了一點(diǎn)概率給其他兩類(均勻分),讓標(biāo)簽沒有那么絕對(duì)化,留給學(xué)習(xí)一點(diǎn)泛化的空間。

從而能夠提升整體的效果。

下列文章表示,對(duì)K = 1000,? = 0.1的優(yōu)化參數(shù),實(shí)驗(yàn)結(jié)果有0.2%的性能提升。

參考:
Rethinking the Inception Architecture for Computer Vision
https://arxiv.org/abs/1512.00567
https://blog.csdn.net/neveer/article/details/91646657

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容