【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix)
??mixup是一種簡(jiǎn)單而又有效的數(shù)據(jù)增強(qiáng)方法,漲點(diǎn)利器,該方法在圖像、文本、語(yǔ)音、推薦、GAN、對(duì)抗樣本防御等多個(gè)領(lǐng)域都能顯著提高效果。mixup論文被ICLR2018收錄,后續(xù)又出現(xiàn)了一系列改進(jìn)方法。我在本文中詳細(xì)分析討論了mixup,并介紹了幾種典型的改進(jìn)方法。
文章目錄
- 一、mixup
- 1, mixup方法
- 2, mixup的討論
- 2.1 mixup效果如何?
- 2.2 為什么使用Beta分布?
- 2.3 參數(shù)α\alphaα有何影響,如何選擇?
- 2.4 是否可以使用多個(gè)樣本混合?
- 2.5 為什么要使用凸組合?
- 二、mixup的后續(xù)改進(jìn)
- 1, 各改進(jìn)方法簡(jiǎn)介
- 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, 各改進(jìn)方法對(duì)比
- 三、讀后感
一、mixup
論文(ICLR2018收錄,arxiv發(fā)表時(shí)間:2017-10-25):https://arxiv.org/abs/1710.09412
源碼(698星):https://github.com/facebookresearch/mixup-cifar10
1, mixup方法
??mixup對(duì)兩個(gè)樣本-標(biāo)簽數(shù)據(jù)對(duì)按比例相加后生成新的樣本-標(biāo)簽數(shù)據(jù):
??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為標(biāo)簽的one-hot編碼
??λ∈[0,1]\lambda \in [0, 1]λ∈[0,1]是概率值,λ~Beta(α,α)\lambda \sim Beta(\alpha,\alpha)λ~Beta(α,α) 即λ服從參數(shù)都為α的Beta分布即\lambda 服從參數(shù)都為\alpha的Beta分布即λ服從參數(shù)都為α的Beta分布
核心代碼如下,即插即用:
??代碼中并沒(méi)有直接按照公式計(jì)算新的標(biāo)簽y~\tilde{y}y~?,而是把損失函數(shù)也修改成了線性組合的形式。可以自行推導(dǎo)一下,對(duì)于交叉熵?fù)p失CE,這種方法和計(jì)算y~\tilde{y}y~?之后再計(jì)算一個(gè)單獨(dú)的損失函數(shù)是等效的。而這種寫(xiě)法可以直接使用torch.nn.CrossEntropyLoss()(因?yàn)樗鼉H支持整數(shù)型的y),所以非常方便。
2, mixup的討論
2.1 mixup效果如何?
原文試驗(yàn)數(shù)據(jù):
??從原文試驗(yàn)結(jié)果中可以看出,mixup在ImageNet-2012上面經(jīng)過(guò)200epoch后在幾個(gè)網(wǎng)絡(luò)上提高了1.2 ~ 1.5個(gè)百分點(diǎn)。在CIFAR-10上提高1.0 ~ 1.4個(gè)百分點(diǎn),在CIFAR-100上提高1.9 ~ 4.5個(gè)百分點(diǎn)。可以說(shuō)是非常驚艷的。
??作者繼續(xù)試驗(yàn)了在語(yǔ)音數(shù)據(jù)、表格數(shù)據(jù)和GAN上也都有不錯(cuò)的效果。
??作者還發(fā)現(xiàn)mixup不僅具有好的泛化性能,也具有很好的魯棒性,無(wú)論對(duì)于含噪聲標(biāo)簽的數(shù)據(jù)還是對(duì)抗樣本攻擊,都表現(xiàn)出不錯(cuò)的魯棒性。
2.2 為什么使用Beta分布?
??使用Beta分布在數(shù)學(xué)上不是必須的,只是它比較零活方便。Beta分布有兩個(gè)參數(shù)α\alphaα和β\betaβ,我們看圖1中的α\alphaα和β\betaβ相同時(shí)的Beta分布概率密度曲線:
圖1. Beta分布概率密度曲線??從圖1中可以看出,當(dāng)α=β=1\alpha=\beta=1α=β=1時(shí),等于(0,1)均勻分布;當(dāng)α=β<1\alpha=\beta<1α=β<1時(shí),表現(xiàn)為兩頭的概率大,中間的概率小,當(dāng)α=β→0\alpha=\beta \to 0α=β→0時(shí),相當(dāng)于{0,1}二項(xiàng)分布,要么取0,要么取1,等于原始數(shù)據(jù)沒(méi)有增強(qiáng),也就是論文中所說(shuō)的經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化ERM;當(dāng)α=β>1\alpha=\beta>1α=β>1時(shí),表現(xiàn)為兩頭概率小,中間概率大,類(lèi)似正態(tài)分布,當(dāng)α=β→∞\alpha=\beta\to\inftyα=β→∞時(shí),概率恒等于0.5,相當(dāng)于兩個(gè)樣本各取一半。所以使用Beta分布相當(dāng)靈活,只需要調(diào)整參數(shù)α,β\alpha,\betaα,β的值,就可以得到多樣化的[0,1]區(qū)間內(nèi)的概率分布,使用非常方便。
??我用PreActResNet18在CIFAR-10上進(jìn)行了幾種分布的對(duì)比試驗(yàn),試驗(yàn)共訓(xùn)練200epoch,學(xué)習(xí)率lr=0.1, 100epoch和150epoch時(shí)分別縮減到1/10,momentum=0.9, weight_decay=1e-4。本文以下所有試驗(yàn)參數(shù)配置相同。
圖2. mixup中分別使用Beta分布和平均分布、正態(tài)分布的對(duì)比??從圖2中也可以看出,使用均勻分布或者正態(tài)分布和使用Beta分布相應(yīng)參數(shù)的效果基本差不多。注意其中正態(tài)分布經(jīng)過(guò)了truncate到(0,1)區(qū)間,這樣會(huì)有一些樣本等于是直接用了原始樣本而沒(méi)有進(jìn)行mixup,所以效果會(huì)比其他幾條線稍稍差一些。
2.3 參數(shù)α\alphaα有何影響,如何選擇?
圖3. 在CIFAR-10上不同alpha參數(shù)的測(cè)試集精度其中α=0\alpha=0α=0意味著不使用mixup,就是論文中說(shuō)的ERM方法。
??可以看出,α\alphaα在0.2 ~ 2之間效果都差不多,說(shuō)明mixup對(duì)α\alphaα參數(shù)并不是很敏感。但如果α\alphaα過(guò)小,等于沒(méi)有進(jìn)行mixup的原始數(shù)據(jù),如果α\alphaα過(guò)大,等于所有輸入都是各取一半混合,樣本的多樣性和沒(méi)有增強(qiáng)的原始數(shù)據(jù)是一樣的,但由于標(biāo)簽不直接,所以學(xué)習(xí)會(huì)慢一些,但最終精度和原始數(shù)據(jù)差不多。
??限于資源,我沒(méi)有進(jìn)行ImageNet上的試驗(yàn),作者指出ImageNet上α\alphaα在0.2 ~ 0.4之間效果更好,這可能意味著ImageNet上數(shù)據(jù)已經(jīng)夠多,應(yīng)更多的保留原始數(shù)據(jù)成分,適當(dāng)少用一些混合,效果更好。所以在不同的數(shù)據(jù)集也有必要對(duì)α\alphaα進(jìn)行一定的調(diào)參。
??還有一點(diǎn)需要指出,從圖中可以看出,使用mixup以后訓(xùn)練抖動(dòng)會(huì)大一些,也就是說(shuō)訓(xùn)練沒(méi)有原來(lái)穩(wěn)定。
2.4 是否可以使用多個(gè)樣本混合?
??文中給出的方法使用了兩個(gè)樣本進(jìn)行混合,我們自然會(huì)想到使用更多的樣本混合效果會(huì)更好嗎?也就是說(shuō):
??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}=1∑i=1N?λi?=1
??使用狄利克雷分布可以方便的實(shí)現(xiàn)這個(gè)公式,我在CIFAR10中進(jìn)行了試驗(yàn),結(jié)果如下圖,N=2時(shí)等同于Beta分布,效果最好,N越大效果越差,N≤4效果仍能比原始數(shù)據(jù)稍好,N>5時(shí)效果還不如原始數(shù)據(jù)。什么原因還沒(méi)有想明白。論文中提到作者也考慮了狄利克雷分布,但計(jì)算比較耗時(shí)且沒(méi)有更好的效果。我不知道作者所指是否和我相同,我的試驗(yàn)中速度并沒(méi)有比Beta分布變慢(即使N=10)。
2.5 為什么要使用凸組合?
??凸組合(convex combination)是指線性組合中各項(xiàng)系數(shù)之和為1。當(dāng)然我們直覺(jué)上也能想象使用凸組合得到的新樣本在數(shù)值上是和原樣本持平的,應(yīng)該會(huì)好。但效果怎樣我還是想試一試:
??結(jié)果發(fā)現(xiàn),∑λ\sum\lambda∑λ 小于1時(shí)效果變差很多。
二、mixup的后續(xù)改進(jìn)
1, 各改進(jìn)方法簡(jiǎn)介
??mixup方法成功挖了一個(gè)新坑,迅速涌現(xiàn)了大批改進(jìn)和應(yīng)用,我收集了部分方法改進(jìn)性的論文進(jìn)行介紹。除了這些改進(jìn)性方法外,還有很多mixup理論分析及交叉應(yīng)用的論文,比如mixUp應(yīng)用于GAN,應(yīng)用于對(duì)抗攻擊防御,應(yīng)用于標(biāo)簽降噪等,感興趣的可自行閱讀。
1.1 cutMix
paper(ICCV2019 oral,2019-5-13): https://arxiv.org/abs/1905.04899v2
code(739星): https://github.com/clovaai/CutMix-PyTorch
??cutMix方法另辟蹊徑,不從數(shù)值角度對(duì)兩個(gè)樣本插值,而是從圖像的空間角度考慮,把一張圖片上的某個(gè)隨機(jī)矩形區(qū)域剪裁到另一張圖片上生成新圖片。標(biāo)簽的處理和mixUp是一樣的,都是按照新樣本中兩個(gè)原樣本的比例確定新的混合標(biāo)簽的比例。這種新的處理更適合圖像中信息連續(xù)性這個(gè)特點(diǎn),所以作者試驗(yàn)認(rèn)為效果比mixup更好。方法示意圖見(jiàn)1.4節(jié)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對(duì)mixup進(jìn)行擴(kuò)展,把輸入數(shù)據(jù)(raw input data)混合擴(kuò)展到對(duì)中間隱層輸出混合。至于對(duì)中間隱層混合更有效的原因,作者強(qiáng)行解釋了一波。首先給出了現(xiàn)象級(jí)的解釋,即這種混合帶來(lái)了三個(gè)優(yōu)勢(shì):平滑決策邊界、拉大低置信空間(拉開(kāi)各類(lèi)別高置信空間的間距)、展平隱層輸出的數(shù)值。至于這三點(diǎn)為什么有效,從作者說(shuō)法看這應(yīng)該是一種業(yè)界共識(shí)。然后作者又從數(shù)學(xué)上分析了第三點(diǎn),即為什么manifold mixup可以實(shí)現(xiàn)展平中間隱層輸出。總之這篇論文的理論解釋部分比較深?yuàn)W,畢竟作者有Yoshua Bengio大神。
1.3 patchUp
paper(2020-6-14): https://arxiv.org/abs/2006.07794
code(12星): https://github.com/chandar-lab/PatchUp
??這個(gè)也是Bengio組出品。PatchUp方法在manifold mixup基礎(chǔ)上,又借鑒了cutMix在空間維度剪裁的思路,對(duì)中間隱層輸出也進(jìn)行剪裁,對(duì)兩個(gè)不同樣本的中間隱層剪裁塊進(jìn)行互換或插值,文中稱(chēng)互換法為硬patchUp,插值法為軟patchUp。試驗(yàn)發(fā)現(xiàn)互換法在識(shí)別精度上更好,插值法在對(duì)抗攻擊的魯棒性上更好。這篇論文作者沒(méi)有再進(jìn)行深度解釋,僅僅給出了一個(gè)現(xiàn)象級(jí)對(duì)比,就是patchUp方法的隱層激活值比較高。
??manifold和patchUp的官方開(kāi)源代碼都是對(duì)網(wǎng)絡(luò)本身代碼進(jìn)行了修改,不能即插即用到其他網(wǎng)絡(luò)中,我實(shí)現(xiàn)了一份即插即用版,鏈接見(jiàn)文末。
1.4 puzzleMix
paper(ICML2020, 2020-9-15) https://arxiv.org/abs/2009.06962
code(60星): https://github.com/snu-mllab/PuzzleMix
??puzzleMix在cutMix基礎(chǔ)上加入了顯著性分析。因?yàn)閏utMix合成的圖片可能剪裁塊正好來(lái)自于源圖片的非重要區(qū)域或者正好把目標(biāo)圖片的重要區(qū)域遮擋,這明顯和生成的標(biāo)簽不符。因此puzzle Mix首先計(jì)算各樣本的顯著性區(qū)域,僅剪裁顯著性區(qū)域,又進(jìn)一步加入了一些復(fù)雜精細(xì)的優(yōu)化操作,從試驗(yàn)數(shù)據(jù)看效果很不錯(cuò)。
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基礎(chǔ)上加入了顯著性分析,但沒(méi)有更多的優(yōu)化操作措施,效果似乎不如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基礎(chǔ)上改進(jìn),把剪裁區(qū)域從矩形轉(zhuǎn)換為不規(guī)則形狀,這樣增加了數(shù)據(jù)樣本空間規(guī)模。作者還先對(duì)圖像進(jìn)行傅里葉變換來(lái)提取低頻分量(?)。除了在幾個(gè)常用圖像數(shù)據(jù)集上進(jìn)行試驗(yàn)外,作者還把方法應(yīng)用了情感分類(lèi)這種一維數(shù)據(jù)上。但作者沒(méi)有對(duì)方法為什么有效進(jìn)行深入的理論分析。這篇論文以臨界得分被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方法在剪裁+顯著性的基礎(chǔ)上繼續(xù)改進(jìn),把從兩個(gè)樣本混合變成從多個(gè)樣本中提取顯著性區(qū)域并混合。該文使用顯著性測(cè)度對(duì)顯著性進(jìn)行量化,并引入超模-子模分析方法,設(shè)計(jì)了一個(gè)子模最小化算法來(lái)實(shí)現(xiàn)在生成圖片中盡可能多的累積顯著性區(qū)域。這樣生成的圖片能夠保證最大的顯著性測(cè)度,同時(shí)還保持標(biāo)簽的多樣性。該文是ICLR2021的oral,提出的理論方法確實(shí)比較深?yuàn)W和高檔。但綜合多個(gè)文獻(xiàn)的試驗(yàn)數(shù)據(jù)看,該方法的效果似乎還不如puzzleMix。
2, 各改進(jìn)方法對(duì)比
圖6. mixup系列族譜(日期表示首次在arxiv上發(fā)表的時(shí)間)??圖6中給出了Mixup系列(不完全收錄)發(fā)展過(guò)程。每篇論文都會(huì)宣稱(chēng)自己是SOTA,但是由于每篇論文中使用的模型的參數(shù)、訓(xùn)練超參等不可能完全相同,所以直接根據(jù)某一篇論文中給出的數(shù)據(jù)對(duì)比它們的性能并不準(zhǔn)確和公平,下面我把各論文在cifar-100中試驗(yàn)結(jié)果整理出來(lái),我們可以通過(guò)交叉分析多個(gè)文獻(xiàn)的數(shù)據(jù)綜合對(duì)比它們的效果。
表1. 各文獻(xiàn)中給出的各方法測(cè)試誤差(%),使用CIFAR-100和ResNet18(其中cutMix使用PyramidNet-200)| baseline | 25.6 | 16.45 | 24.01 | 24.622 | 22.46 | 23.67 | 23.59 | 24.78 |
| mixup | 21.1 | 15.63 | 22.11 | 22.326 | - | 23.16 | 22.43 | 22.56 |
| cutMix | - | 14.47 | - | 22.184 | 19.42 | 23.20 | 21.29 | 20.49 |
| manifold | - | - | 20.34 | 21.396 | - | 20.98 | 21.64 | - |
| patchUp | - | - | - | 19.120 | - | - | - | - |
| saliencyMix | - | - | - | - | 19.29 | - | - | - |
| puzzleMix | - | - | - | - | - | 19.62 | 20.62 | - |
| co-Mixup | - | - | - | - | - | - | 19.87 | - |
| FMix | - | - | - | - | - | - | - | 20.15 |
| baseline | 19.4 | 16.45 | 21.72 | 22.442 | 18.80 | 21.14 | 21.70 | 21.74 |
| mixup | 17.5 | 15.63 | 18.89 | 18.726 | - | 18.27 | 20.08 | 18.81 |
| cutMix | - | 14.47 | - | 18.316 | 16.66 | 17.50 | 20.14 | 18.04 |
| manifold | - | - | 18.04 | 18.352 | - | 17.40 | 20.55 | - |
| patchUp | - | - | - | 16.134 | - | - | - | - |
| saliencyMix | - | - | - | - | 16.56 | - | - | - |
| puzzleMix | - | - | - | - | 16.23 | 15.95 | 19.24 | - |
| co-Mixup | - | - | - | - | - | - | 19.15 | - |
| FMix | - | - | - | - | - | - | - | 17.97 |
一些結(jié)論:
1,幾乎所有人都測(cè)出來(lái)自己誤差最小(與自己前的文獻(xiàn)對(duì)比),而很多情況下別人測(cè)出來(lái)的結(jié)果卻未必(哈哈);
2,綜合各種因素看,感覺(jué)效果最好的應(yīng)該是patchUp > puzzleMix > 其他;
3,雖然隨著時(shí)間發(fā)展模型精度越來(lái)越高,但程序也越來(lái)越復(fù)雜。mixup原方法可以很方便的使用在CNN、RNN、GAN等各種場(chǎng)合,但使用剪裁的cutMix及后續(xù)方法似乎都只能用在CNN場(chǎng)合。而涉及到隱層修改的manifold和patchUp還需要修改網(wǎng)絡(luò)本身各層的寫(xiě)法,官方開(kāi)源代碼不能夠即插即用。
??想到在pytorch中使用鉤子操作(hook)可以修改中間層,因此我自己實(shí)現(xiàn)了一份可以即插即用的manifold和patchUp,請(qǐng)參見(jiàn)我另一篇博客:https://blog.csdn.net/Brikie/article/details/114222605
三、讀后感
??mixup方法開(kāi)創(chuàng)了一種根據(jù)兩個(gè)或多個(gè)數(shù)據(jù)樣本生成混合樣本的數(shù)據(jù)增強(qiáng)方式,相比之下,傳統(tǒng)的數(shù)據(jù)增強(qiáng)方法多是根據(jù)單個(gè)樣本進(jìn)行變換得到新樣本。這種人類(lèi)無(wú)法學(xué)習(xí)的混合形式數(shù)據(jù)卻能被神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)并得到精度更高,泛化更好,魯棒性更強(qiáng)的結(jié)果,這一點(diǎn)很讓人吃驚。這或許揭示了神經(jīng)網(wǎng)絡(luò)和人腦學(xué)習(xí)模式的不同,揭示了神經(jīng)網(wǎng)絡(luò)的某種本質(zhì)屬性,但目前為止似乎還沒(méi)有人徹底解釋清這種本質(zhì)。所以mixup相關(guān)研究還剛開(kāi)始,遠(yuǎn)未結(jié)束。
??畢竟初學(xué),時(shí)間也有限,文中難免大量錯(cuò)誤,還請(qǐng)各位讀者幫忙指出,我及時(shí)更正,以方便后來(lái)的讀者閱讀。
總結(jié)
以上是生活随笔為你收集整理的【论文学习】mixup系列(mixup、cutMix、manifold mixup、patchUp、saliencyMix、puzzleMix、co-Mixup、FMix)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [论文学习]DIVIDEMIX:带噪声标
- 下一篇: [论文学习]Manifold Mixup