日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix)

發布時間:2025/3/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??mixup是一種簡單而又有效的數據增強方法,漲點利器,該方法在圖像、文本、語音、推薦、GAN、對抗樣本防御等多個領域都能顯著提高效果。mixup論文被ICLR2018收錄,后續又出現了一系列改進方法。我在本文中詳細分析討論了mixup,并介紹了幾種典型的改進方法。

文章目錄

  • 一、mixup
    • 1, mixup方法
    • 2, mixup的討論
      • 2.1 mixup效果如何?
      • 2.2 為什么使用Beta分布?
      • 2.3 參數α\alphaα有何影響,如何選擇?
      • 2.4 是否可以使用多個樣本混合?
      • 2.5 為什么要使用凸組合?
  • 二、mixup的后續改進
    • 1, 各改進方法簡介
      • 1.1 cutMix
      • 1.2 manifold mixup
      • 1.3 patchUp
      • 1.4 puzzleMix
      • 1.5 saliency Mix
      • 1.6 fMix
      • 1.7 co-Mix
    • 2, 各改進方法對比
  • 三、讀后感


一、mixup

論文(ICLR2018收錄,arxiv發表時間:2017-10-25):https://arxiv.org/abs/1710.09412
源碼(698星):https://github.com/facebookresearch/mixup-cifar10

1, mixup方法

??mixup對兩個樣本-標簽數據對按比例相加后生成新的樣本-標簽數據:
??x~=λxi+(1?λ)xj\tilde{x} = \lambda x_{i} + (1- \lambda) x_{j}x~=λxi?+(1?λ)xj?, 其中xxx為輸入向量
??y~=λyi+(1?λ)yj\tilde{y} = \lambda y_{i} + (1- \lambda) y_{j}y~?=λyi?+(1?λ)yj?, 其中yyy為標簽的one-hot編碼
??λ∈[0,1]\lambda \in [0, 1]λ[0,1]是概率值,λ~Beta(α,α)\lambda \sim Beta(\alpha,\alpha)λBeta(α,α) 即λ服從參數都為α的Beta分布即\lambda 服從參數都為\alpha的Beta分布λαBeta
核心代碼如下,即插即用:

criterion = nn.CrossEntropyLoss() for x, y in train_loader:x, y = x.cuda(), y.cuda()# Mixup inputs.lam = np.random.beta(alpha, alpha)index = torch.randperm(x.size(0)).cuda()mixed_x = lam * x + (1 - lam) * x[index, :]# Mixup loss. pred = model(mixed_x)loss = lam * criterion(pred, y) + (1 - lam) * criterion(pred, y[index])optimizer.zero_grad()loss.backward()optimizer.step()

??代碼中并沒有直接按照公式計算新的標簽y~\tilde{y}y~?,而是把損失函數也修改成了線性組合的形式。可以自行推導一下,對于交叉熵損失CE,這種方法和計算y~\tilde{y}y~?之后再計算一個單獨的損失函數是等效的。而這種寫法可以直接使用torch.nn.CrossEntropyLoss()(因為它僅支持整數型的y),所以非常方便。

2, mixup的討論

2.1 mixup效果如何?

原文試驗數據:


??從原文試驗結果中可以看出,mixup在ImageNet-2012上面經過200epoch后在幾個網絡上提高了1.2 ~ 1.5個百分點。在CIFAR-10上提高1.0 ~ 1.4個百分點,在CIFAR-100上提高1.9 ~ 4.5個百分點。可以說是非常驚艷的。
??作者繼續試驗了在語音數據、表格數據和GAN上也都有不錯的效果。
??作者還發現mixup不僅具有好的泛化性能,也具有很好的魯棒性,無論對于含噪聲標簽的數據還是對抗樣本攻擊,都表現出不錯的魯棒性。

2.2 為什么使用Beta分布?

??使用Beta分布在數學上不是必須的,只是它比較零活方便。Beta分布有兩個參數α\alphaαβ\betaβ,我們看圖1中的α\alphaαβ\betaβ相同時的Beta分布概率密度曲線:

圖1. Beta分布概率密度曲線

??從圖1中可以看出,當α=β=1\alpha=\beta=1α=β=1時,等于(0,1)均勻分布;當α=β<1\alpha=\beta<1α=β<1時,表現為兩頭的概率大,中間的概率小,當α=β→0\alpha=\beta \to 0α=β0時,相當于{0,1}二項分布,要么取0,要么取1,等于原始數據沒有增強,也就是論文中所說的經驗風險最小化ERM;當α=β>1\alpha=\beta>1α=β>1時,表現為兩頭概率小,中間概率大,類似正態分布,當α=β→∞\alpha=\beta\to\inftyα=β時,概率恒等于0.5,相當于兩個樣本各取一半。所以使用Beta分布相當靈活,只需要調整參數α,β\alpha,\betaα,β的值,就可以得到多樣化的[0,1]區間內的概率分布,使用非常方便。

??我用PreActResNet18在CIFAR-10上進行了幾種分布的對比試驗,試驗共訓練200epoch,學習率lr=0.1, 100epoch和150epoch時分別縮減到1/10,momentum=0.9, weight_decay=1e-4。本文以下所有試驗參數配置相同。

圖2. mixup中分別使用Beta分布和平均分布、正態分布的對比

??從圖2中也可以看出,使用均勻分布或者正態分布和使用Beta分布相應參數的效果基本差不多。注意其中正態分布經過了truncate到(0,1)區間,這樣會有一些樣本等于是直接用了原始樣本而沒有進行mixup,所以效果會比其他幾條線稍稍差一些。

2.3 參數α\alphaα有何影響,如何選擇?

圖3. 在CIFAR-10上不同alpha參數的測試集精度

其中α=0\alpha=0α=0意味著不使用mixup,就是論文中說的ERM方法。

??可以看出,α\alphaα在0.2 ~ 2之間效果都差不多,說明mixup對α\alphaα參數并不是很敏感。但如果α\alphaα過小,等于沒有進行mixup的原始數據,如果α\alphaα過大,等于所有輸入都是各取一半混合,樣本的多樣性和沒有增強的原始數據是一樣的,但由于標簽不直接,所以學習會慢一些,但最終精度和原始數據差不多。
??限于資源,我沒有進行ImageNet上的試驗,作者指出ImageNet上α\alphaα在0.2 ~ 0.4之間效果更好,這可能意味著ImageNet上數據已經夠多,應更多的保留原始數據成分,適當少用一些混合,效果更好。所以在不同的數據集也有必要對α\alphaα進行一定的調參。
??還有一點需要指出,從圖中可以看出,使用mixup以后訓練抖動會大一些,也就是說訓練沒有原來穩定。

2.4 是否可以使用多個樣本混合?

??文中給出的方法使用了兩個樣本進行混合,我們自然會想到使用更多的樣本混合效果會更好嗎?也就是說:
??x~=∑i=1Nλixi\tilde{x} =\sum_{i=1}^N \lambda _{i} x_{i}x~=i=1N?λi?xi?,??y~=∑i=1Nλiyi\tilde{y} =\sum_{i=1}^N \lambda _{i} y_{i}y~?=i=1N?λi?yi???其中,∑i=1Nλi=1\sum_{i=1}^N \lambda _{i}=1i=1N?λi?=1

??使用狄利克雷分布可以方便的實現這個公式,我在CIFAR10中進行了試驗,結果如下圖,N=2時等同于Beta分布,效果最好,N越大效果越差,N≤4效果仍能比原始數據稍好,N>5時效果還不如原始數據。什么原因還沒有想明白。論文中提到作者也考慮了狄利克雷分布,但計算比較耗時且沒有更好的效果。我不知道作者所指是否和我相同,我的試驗中速度并沒有比Beta分布變慢(即使N=10)。

圖4. 使用狄利克雷分布進行多個樣本的mixup試驗 (圖中dirichletN表示對N張圖混合,N=1時相當于原始數據,N=2時相當于Beta分布)

2.5 為什么要使用凸組合?

??凸組合(convex combination)是指線性組合中各項系數之和為1。當然我們直覺上也能想象使用凸組合得到的新樣本在數值上是和原樣本持平的,應該會好。但效果怎樣我還是想試一試:

圖5. 不使用凸組合的mixup試驗

??結果發現,∑λ\sum\lambdaλ 小于1時效果變差很多。

二、mixup的后續改進

1, 各改進方法簡介

??mixup方法成功挖了一個新坑,迅速涌現了大批改進和應用,我收集了部分方法改進性的論文進行介紹。除了這些改進性方法外,還有很多mixup理論分析及交叉應用的論文,比如mixUp應用于GAN,應用于對抗攻擊防御,應用于標簽降噪等,感興趣的可自行閱讀。

1.1 cutMix

paper(ICCV2019 oral,2019-5-13): https://arxiv.org/abs/1905.04899v2
code(739星): https://github.com/clovaai/CutMix-PyTorch
??cutMix方法另辟蹊徑,不從數值角度對兩個樣本插值,而是從圖像的空間角度考慮,把一張圖片上的某個隨機矩形區域剪裁到另一張圖片上生成新圖片。標簽的處理和mixUp是一樣的,都是按照新樣本中兩個原樣本的比例確定新的混合標簽的比例。這種新的處理更適合圖像中信息連續性這個特點,所以作者試驗認為效果比mixup更好。方法示意圖見1.4節PuzzleMix插圖。

1.2 manifold mixup

paper(ICML2019,2019-5-11): https://arxiv.org/abs/1806.05236
code(310星): https://github.com/vikasverma1077/manifold_mixup
??manifold mixup對mixup進行擴展,把輸入數據(raw input data)混合擴展到對中間隱層輸出混合。至于對中間隱層混合更有效的原因,作者強行解釋了一波。首先給出了現象級的解釋,即這種混合帶來了三個優勢:平滑決策邊界、拉大低置信空間(拉開各類別高置信空間的間距)、展平隱層輸出的數值。至于這三點為什么有效,從作者說法看這應該是一種業界共識。然后作者又從數學上分析了第三點,即為什么manifold mixup可以實現展平中間隱層輸出。總之這篇論文的理論解釋部分比較深奧,畢竟作者有Yoshua Bengio大神。

1.3 patchUp

paper(2020-6-14): https://arxiv.org/abs/2006.07794
code(12星): https://github.com/chandar-lab/PatchUp
??這個也是Bengio組出品。PatchUp方法在manifold mixup基礎上,又借鑒了cutMix在空間維度剪裁的思路,對中間隱層輸出也進行剪裁,對兩個不同樣本的中間隱層剪裁塊進行互換或插值,文中稱互換法為硬patchUp,插值法為軟patchUp。試驗發現互換法在識別精度上更好,插值法在對抗攻擊的魯棒性上更好。這篇論文作者沒有再進行深度解釋,僅僅給出了一個現象級對比,就是patchUp方法的隱層激活值比較高。
??manifold和patchUp的官方開源代碼都是對網絡本身代碼進行了修改,不能即插即用到其他網絡中,我實現了一份即插即用版,鏈接見文末。

1.4 puzzleMix

paper(ICML2020, 2020-9-15) https://arxiv.org/abs/2009.06962
code(60星): https://github.com/snu-mllab/PuzzleMix
??puzzleMix在cutMix基礎上加入了顯著性分析。因為cutMix合成的圖片可能剪裁塊正好來自于源圖片的非重要區域或者正好把目標圖片的重要區域遮擋,這明顯和生成的標簽不符。因此puzzle Mix首先計算各樣本的顯著性區域,僅剪裁顯著性區域,又進一步加入了一些復雜精細的優化操作,從試驗數據看效果很不錯。

1.5 saliency Mix

paper(ICLR2021,2020-6-2):https://arxiv.org/abs/2006.01791
code(0星):https://github.com/SaliencyMix/SaliencyMix
??saliency Mix也是在cutMix基礎上加入了顯著性分析,但沒有更多的優化操作措施,效果似乎不如puzzleMix。

1.6 fMix

paper(ICLR2021,2020-6-24):https://arxiv.org/abs/2002.12047
code(249星):https://github.com/ecs-vlc/FMix
??fMix在cutMix基礎上改進,把剪裁區域從矩形轉換為不規則形狀,這樣增加了數據樣本空間規模。作者還先對圖像進行傅里葉變換來提取低頻分量(?)。除了在幾個常用圖像數據集上進行試驗外,作者還把方法應用了情感分類這種一維數據上。但作者沒有對方法為什么有效進行深入的理論分析。這篇論文以臨界得分被ICLR2021錄用。

1.7 co-Mix

paper(ICLR2021 oral, 2021-2-5): https://arxiv.org/abs/2102.03065
code(27星): https://github.com/snu-mllab/Co-Mixup
??co-Mix方法在剪裁+顯著性的基礎上繼續改進,把從兩個樣本混合變成從多個樣本中提取顯著性區域并混合。該文使用顯著性測度對顯著性進行量化,并引入超模-子模分析方法,設計了一個子模最小化算法來實現在生成圖片中盡可能多的累積顯著性區域。這樣生成的圖片能夠保證最大的顯著性測度,同時還保持標簽的多樣性。該文是ICLR2021的oral,提出的理論方法確實比較深奧和高檔。但綜合多個文獻的試驗數據看,該方法的效果似乎還不如puzzleMix。

2, 各改進方法對比

圖6. mixup系列族譜(日期表示首次在arxiv上發表的時間)

??圖6中給出了Mixup系列(不完全收錄)發展過程。每篇論文都會宣稱自己是SOTA,但是由于每篇論文中使用的模型的參數、訓練超參等不可能完全相同,所以直接根據某一篇論文中給出的數據對比它們的性能并不準確和公平,下面我把各論文在cifar-100中試驗結果整理出來,我們可以通過交叉分析多個文獻的數據綜合對比它們的效果。

表1. 各文獻中給出的各方法測試誤差(%),使用CIFAR-100和ResNet18(其中cutMix使用PyramidNet-200) 方法?\文獻→mixupcutMixmanifoldpatchUpsaliencyMixpuzzleMixco-MixupFMix
baseline25.616.4524.0124.62222.4623.6723.5924.78
mixup21.115.6322.1122.326-23.1622.4322.56
cutMix-14.47-22.18419.4223.2021.2920.49
manifold--20.3421.396-20.9821.64-
patchUp---19.120----
saliencyMix----19.29---
puzzleMix-----19.6220.62-
co-Mixup------19.87-
FMix-------20.15
表2. 各文獻中給出的各方法測試誤差(%),使用CIFAR-100和WideResNet28-10(其中cutMix使用PyramidNet-200) 方法?\文獻→mixupcutMixmanifoldpatchUpsaliencyMixpuzzleMixco-MixupFMix
baseline19.416.4521.7222.44218.8021.1421.7021.74
mixup17.515.6318.8918.726-18.2720.0818.81
cutMix-14.47-18.31616.6617.5020.1418.04
manifold--18.0418.352-17.4020.55-
patchUp---16.134----
saliencyMix----16.56---
puzzleMix----16.2315.9519.24-
co-Mixup------19.15-
FMix-------17.97

圖7. 表1表2數據可視化(都減去各自的baseline)

一些結論:
1,幾乎所有人都測出來自己誤差最小(與自己前的文獻對比),而很多情況下別人測出來的結果卻未必(哈哈);
2,綜合各種因素看,感覺效果最好的應該是patchUp > puzzleMix > 其他;
3,雖然隨著時間發展模型精度越來越高,但程序也越來越復雜。mixup原方法可以很方便的使用在CNN、RNN、GAN等各種場合,但使用剪裁的cutMix及后續方法似乎都只能用在CNN場合。而涉及到隱層修改的manifold和patchUp還需要修改網絡本身各層的寫法,官方開源代碼不能夠即插即用。
??想到在pytorch中使用鉤子操作(hook)可以修改中間層,因此我自己實現了一份可以即插即用的manifold和patchUp,請參見我另一篇博客:https://blog.csdn.net/Brikie/article/details/114222605

三、讀后感

??mixup方法開創了一種根據兩個或多個數據樣本生成混合樣本的數據增強方式,相比之下,傳統的數據增強方法多是根據單個樣本進行變換得到新樣本。這種人類無法學習的混合形式數據卻能被神經網絡學習并得到精度更高,泛化更好,魯棒性更強的結果,這一點很讓人吃驚。這或許揭示了神經網絡和人腦學習模式的不同,揭示了神經網絡的某種本質屬性,但目前為止似乎還沒有人徹底解釋清這種本質。所以mixup相關研究還剛開始,遠未結束。
??畢竟初學,時間也有限,文中難免大量錯誤,還請各位讀者幫忙指出,我及時更正,以方便后來的讀者閱讀。

總結

以上是生活随笔為你收集整理的【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。