浅谈Label Smoothing技术
目錄
- 一、從 One-Hot 到 Label Smoothing
- 二、Label Smoothing 的簡單實現
- 三、Label Smoothing 的優缺點
- 四、什么時候使用 Label Smoothing?
一、從 One-Hot 到 Label Smoothing
考慮單個樣本的交叉熵損失
H(p,q)=?∑i=1Cpilog?qiH(p,q)=-\sum_{i=1}^C p_i\log q_i H(p,q)=?i=1∑C?pi?logqi?
其中 CCC 代表類別個數,pip_ipi? 是真實分布(即 target),qiq_iqi? 是預測分布(即神經網絡輸出的 prediction)。
如果真實分布采用傳統的 One-Hot 向量,則其分量非 000 即 111。不妨設第 kkk 個位置是 111,其余位置是 000,此時交叉熵損失變為
H(p,q)=?log?qkH(p,q)=-\log q_k H(p,q)=?logqk?
從上面的表達式不難發現一些問題:
- 真實標簽跟其他標簽之間的關系被忽略了,一些有用的知識無法學到;
- One-Hot 傾向于讓模型過度自信(Overconfidence),容易造成過擬合,進而導致泛化性能降低;
- 誤標注的樣本(即 target 錯誤)更容易對模型的訓練產生影響;
- One-Hot 對 “模棱兩可” 的樣本表征較差。
緩解這些問題的方法就是采用 Label Smoothing 的技術,它也是一種正則化的技巧,具體如下:
pi:={1??,i=k?/(C?1),i≠kp_i:= \begin{cases} 1-\epsilon,& i=k \\ \epsilon/(C-1),&i\neq k\\ \end{cases} pi?:={1??,?/(C?1),?i=ki=k?
其中 ?\epsilon? 是一個小正數。
例如,設原始 target 為 [0,0,1,0,0,0][0,0,1,0,0,0][0,0,1,0,0,0],取 ?=0.1\epsilon=0.1?=0.1,則經過 Label Smoothing 后 target 變為 [0.02,0.02,0.9,0.02,0.02,0.02][0.02,0.02,0.9,0.02,0.02,0.02][0.02,0.02,0.9,0.02,0.02,0.02]。
📌 原始的 One-Hot 向量通常稱為 Hard Target(或 Hard Label),經過標簽平滑后通常稱為 Soft Target(或 Soft Label)
二、Label Smoothing 的簡單實現
import torchdef label_smoothing(label, eps):label[label == 1] = 1 - epslabel[label == 0] = eps / (len(label) - 1)return labela = torch.tensor([0, 0, 1, 0, 0, 0], dtype=torch.float) print(label_smoothing(a, 0.1)) # tensor([0.0200, 0.0200, 0.9000, 0.0200, 0.0200, 0.0200])三、Label Smoothing 的優缺點
優點:
- 一定程度上可以緩解模型 Overconfidence 的問題,此外也具有一定的抗噪能力;
- 提供了訓練數據中類別之間的關系(數據增強);
- 可能在一定程度上增強了模型的泛化能力。
缺點:
- 單純地添加隨機噪音,也無法反映標簽之間的關系,因此對模型的提升有限,甚至有欠擬合的風險;
- 某些場景下 Soft Label 并不能幫助我們構建更好的神經網絡(表現不如 Hard Label)。
四、什么時候使用 Label Smoothing?
- 龐大的數據集難免存在噪音(即標注錯誤),為了避免模型學到這些噪音可以加入 Label Smoothing;
- 對于模糊的 case 而言可以引入 Label Smoothing(比如貓狗分類任務中,可能存在一些圖片既像狗又像貓);
- 防止模型 Overconfidence。
總結
以上是生活随笔為你收集整理的浅谈Label Smoothing技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 手机摇一摇
- 下一篇: Mysql : 对于表数据处理增删改的内