數據增強之mixup論文筆記

                                                數據增強之mixup論文筆記

  1. 前言

深度學習一直以來存在計算量大(落地困難)和模型過擬合的問題。爲了解決過擬合問題,從模型本身和數據這兩個方面着手,提出了很多有效的方法。

數據增強(Data Argumentation)則是從數據層面解決過擬合,提高模型的泛化性(generalization),通用的數據增強方法有:隨機裁切、翻轉(左右上下)、顏色抖動(color jitter)、噪聲(高斯噪聲)、旋轉、 平移、縮放、仿射變換和PCA jitter等等。

比較簡單地理解是數據增強首先增大了訓練集規模,進一步增加了訓練樣本的多樣性(模擬真實場景中樣本可能的狀態),由於數據增強是對訓練樣本的各種有章法的變換,這就使得模型能夠學到數據更加本質的特徵,增強模型對樣本細微變換的適應性(減弱對變化的敏感性)。

2、mixup數據增強

論文《mixup:BEYOND EMPIRICAL RISK MINIMIZATION》則提出了一種簡單明快的數據增強方法mixup,論文中試驗也非常清晰地證明其有效性。

1)貢獻(創新點):mixup採用對不同類別之間進行建模的方式實現數據增強,而通用數據增強方法則是針對同一類做變換。思路非常簡單:

 

從訓練樣本中隨機抽取兩個樣本進行簡單的隨機加權求和,同時樣本的標籤也對應加權求和,然後預測結果與加權求和之後的標籤求損失,在反向求導更新參數。

代碼實現也比較簡單:

這是論文中給出的代碼,比較好理解。但是最後官方給出實現上還是有一些變動,輸入網絡的訓練樣本mixup操作的代碼:

Github:https://github.com/hongyi-zhang/mixup

並不是同時取出兩個batch,而是取一個batch,並將該batch中的樣本ID順序打亂(shuffle),然後再進行加權求和。而最後損失函數則是輸出的預測值對這兩組標籤分別求損失,然後用之前樣本所有的權重加權求和,反向求導更新參數。流程如下:

論文也給出瞭解釋:單個Dataloader與兩個是等效的,論文的試驗也證明了這一點。

注意到這個權重是怎麼來的呢?作者假設權重符合Beta分佈,Beta分佈是概率的概率分佈,Beta分佈有兩個參數  ,  代碼默認設置爲1.0,並且設置  , 由於Beta分佈的期望爲  ,如果 ,則期望爲0.5。在作者多組實驗中,無論如何設置 的值,期望始終爲0.5。可不可以這樣理解:權重在每個batch都會隨機產生,在整個訓練過程中會有N個batch,權重在N次中期望近似爲0.5。 Beta分佈函數 圖像如下,

2)試驗效果距離

分類效果看起來非常顯著啊,之前通用數據增強一起混用可能也就提升一點,這個一個打十個;作者也在生成模型GAN上做了實驗,同樣也有不俗的表現。

3)作者知乎答疑:

https://www.zhihu.com/question/67472285/answer/256651581

3、總結

   採用了mixup數據增強之後,可以看到至始至終參與模型訓練的樣本是真實樣本線性插值的得到的,而並非直接是像經驗風險最小化(Empirical Risk Minimization , ERM))訓練中的真實樣本。

論文《DATA AUGMENTATION BY PAIRING SAMPLES FOR IMAGES CLASSIFICATION》(https://arxiv.org/abs/1801.02929v2)。

和mixup有相同的思路(異曲同工),只是實現上個人感覺更加偏trick一些,該論文對訓練集中成對圖像像素相加求平均操作,損失函數和標籤不變

訓練過程中:

1)首先僅僅用普通的數據增強(如隨機裁剪和左右鏡像)訓練(無SamplePairing data augmentation)。

2)在沒有SamplePairing情況下訓練1個epoch或100個epoch之後,開啓SamplePairing,即對成對樣本求均值。

3)間歇性開啓與關閉SamplePairing,直到訓練穩定以後關閉SamplePairing,用普通數據增強進行funtune訓練,微調模型。

 

論文《Bag of Freebies for Training Object Detection Neural Networks》中獎mixup應用在目標檢測算法上,同樣效果也很好。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章