Machine Can See 2018 圖像對抗攻擊大賽比賽心得
AI 研習社按:這篇文章來自俄羅斯數據科學家、機器學習愛好者、創業公司的計算機視覺研究員 Alexander Aveysov。他參加了 2018 年度的「Machine Can See」的對抗性樣本攻防大賽,並在比賽中獲得了第二名。這篇文章是他對這次比賽的個人感想以及經驗總結。AI 研習社編譯如下。
所有的對抗性攻擊的簡單範式
全文梗概
前不久,我有幸參加了「Machine Can See 2018」的對抗性樣本攻防大賽。事實上,我參加比賽的時候已經很晚了(幸運的是,我在比賽結束時獲得了第二名),最終我們的隊伍由4 個人組成,其中包括我在內的 3 個人為奪取勝利作出了突出的貢獻(去掉其中的任何一個人,我們都不會取得這樣的成績)。
本次比賽旨在對人臉圖片進行修改(結構相似度 SSIM的下限為 0.95),從而使黑盒的 CNN 無法將源人像(source person)和目標人像(target person)區分開來。
簡而言之,比賽的要求就是:修改一張人臉圖像,使得黑盒模型不能將兩張人臉圖像區分開來(至少從「L2 範數/歐氏距離」的層面上來說是這樣)。
在對抗性攻擊中起作用的是什麼?我們採用了哪些方法?
1. 快速梯度符號法(FGSM)確實有效。加入啟發式方法可以略微提升其性能;
2. 快速梯度值法(FGVM)。加入啟發式方法可以大幅度提升其性能;
3. 梯度差分進化演算法(這裡為大家提供一篇關於該演算法的精彩的文章:https://pablormier.github.io/2017/09/05/a-tutorial-on-differential-evolution-with-python/)+像素級攻擊;
4. 模型集成(將最優秀的解決方案對疊起來,例如 6 個ResNet-34);
5. 目標圖像組合的智能化遍歷;
6. 在進行 FGVM 攻擊時充分使用早停止(early stopping)技術。
對我們不起作用的做法是:
1. 為 FGVM 演算法添加動量(這種方法僅僅能夠提升排名較低的隊伍的模型性能。因此,也許僅僅使用模型集成+啟發式方法就能獲得比動量更好的性能?);
2. C&W攻擊(本質上是一種端到端的攻擊方法,他著眼於白盒模型中的「logits」(一個事件發生與該事件不發生的比值的對數),https://arxiv.org/abs/1705.07263);
3. 端到端的基於「Siamese」連接網路(一種類似於 UNet 的架構,但是是基於 RenNet 開發而來)的方法。這種方法對於 WB 有效,但是不適用於 BB。
我們還沒有嘗試的做法(由於缺乏時間、努力或意志力):
1. 為學生網路的學習適當地測試數據增強(我們同時還需要修改描述符);
2. 在攻擊時進行數據增強;
競賽概覽:
1. 競賽提供的數據是一個由 1000 組 5+5(分別為source person 和 target person)的圖片組合組成的小型數據集;
2. 用來訓練學生網路的數據集規模相對較大——超過 1M的圖片;
3. BB 是作為許多預編譯好的 Caffe 模型提供的(由於BB在這種環境下運行,這些模型當然不能使用合適的最新的版本的軟體,這個問題最終將由主機解決)。這個問題確實有些令人痛苦,因為這個BB 並不接受圖像的批量處理;
4. 該比賽設置了一個極高的對比基線(老實說,我相信沒有這個基線就不會有人登上排行榜了);
核心資源:
1. 一個最終的模型副本的代碼倉庫(https://github.com/snakers4/msc-2018-final );
2. 我們的模型演示(https://drive.google.com/file/d/1P-4AdCqw81nOK79vU_m7IsCVzogdeSNq/view );
3. 所有獲獎者的模型演示(https://drive.google.com/file/d/1aIUSVFBHYabBRdolBRR-1RKhTMg-v-3f/view );
詳細敘述 - 「Machine Can See 2018」大賽概覽,看我如何取得最終的成績
1. 比賽流程及解決方案
老實說,我被這項有趣的比賽所吸引了,比賽的獎品為英偉達 GTX 1080Ti 公版顯卡並且我認為比賽的競爭水平相對較低(它遠遠不能和那些有 4000 個參賽者的 Kaggle 比賽+整個 ODS 團隊相提並論)。
如上文所述,比賽的目標是欺騙 BB 模型,使其無法區分連個不同的人的圖像(使用 L2範數或歐氏距離度量)。該比賽是一個「黑盒」競賽,因此我們不得不利用比賽提供給我們的數據「蒸餾」(知識提取)出學生網路,並希望 BB 和 WB 模型的梯度能夠足夠相似,從而進行攻擊。
事實上,如果你充分閱讀了學術文獻(例如,這一篇(https://arxiv.org/abs/1712.07107 )和這一篇(https://arxiv.org/abs/1801.00553 ),儘管這些論文並未討論真實生活中的情況如何)並且提煉出那些頂尖的團隊所獲得的知識,你可以很容易地發現下面的模式:
1. 最容易實現的攻擊手段(在現在流行的框架上)涉及白盒攻擊或者了解卷積神經網路(CNN)的內部結構(或僅僅是一個架構);
1.1 有人在和我聊天時竟然建議我記錄黑盒模型進行推斷的時間,從而反推它的架構,真是太搞笑了!
2. 如果能夠獲得足夠的數據,你可以使用一個經過恰當訓練的白盒模型對黑盒模型進行模擬;
3. 根據推測,目前最先進的方法是:
3.1 端到端的 C&W 攻擊(在這裡效果並不好);
3.2 巧妙的 FGSM 演算法的擴展(https://arxiv.org/pdf/1710.06081.pdf),例如:動量+模型集成;
說實話,我們曾一度陷入困惑之中,因為我們團隊中有兩個人實現了截然不同的兩套端到端的解決方案(而他們之間互相併不知道這一點,也就是說分別完成了兩套系統),而他們都沒有採用黑盒模型。這本質上意味著在我們的任務中,我們的模型設定中漏掉了一些隱藏的因素,而我們沒有注意到這一點。正如許多現在流行的完全端到端的計算機視覺應用一樣,它們要麼為你提供非常好的結果(例如:風格遷移,深度分水嶺演算法(用於圖像分割),圖像生成,圖像去噪),要麼就基本上不起作用。
梯度方法是如何工作的
事實上,你可以利用知識蒸餾技術通過一個白盒模型模擬一個黑盒模型,接著你值用計算輸入圖像關於模型輸出的梯度。而這一切的奧秘都在啟發式演算法中。
2. 目標度量
目標的度量標準是一個所有 25 種(5*5=25)源圖像和目標圖像組合的平均 L2 範數(歐氏距離)。
由於 CodaLab(賽事組織者)的限制,我認為個人得分(以及團隊分數合併的過程)是由管理員手動完成的,這就有些尷尬了。
3. 團隊
當我比排行榜(AFAIK)上的其他人都取得了更好的學生網路的訓練結果,並且和 Atmyre(https://github.com/atmyre)進行了一番討論之後(她幫助我使用了正確編譯的黑盒模型,因為她自己也面臨這樣的問題),我加入了現在的團隊。在比賽結束前的 2-3 天,我們在不用分享我們的演算法和代碼的情況下共享了本地分數:
1. 我的端到端的模型失敗了(她的也是);
2. 我的學生模型性能更好;
3. 他們擁有更好的 FGVM 啟發式演算法的變體(他們的代碼是基於基線修改而來);
4. 起初,我開始著手處理基於梯度的模型,並且獲得了大約 1.1 的本地分數。一開始,由於某些我個人的原因(認為太沒有挑戰)我不願意使用基線的代碼;
5. 他們當時不具備足夠的計算能力;
6. 在最後,我們賭了一把,將各自的策略結合了起來——我貢獻了我的 devbox 工作站/卷積神經網路/模型簡化實驗及觀測結果,他們貢獻了他們修改了好幾個星期的代碼。
這一次,她為她自己卓越的組織能力和無價的組隊建議而歡呼!我們取得了不錯的成績。
團隊的成員包括:
1. https://github.com/atmyre ——她是我們團隊的隊長(我從她的所作所為中推斷出來的)。她為我們最中提交的版本貢獻了基因差分進化攻擊演算法;
2. https://github.com/mortido ——他用精妙的啟發式演算法以及他利用基線代碼訓練好的兩個模型實現了最佳的 FGVM 攻擊演算法;
3. https://github.com/snakers4 ;除了一些模型簡化測試,我還貢獻了 3 個具有領先的分數的學生模型、計算能力,並且我還需要在模型演示和最終提交的階段不斷提升模型性能;
4. https://github.com/stalkermustang ;
在最後,我們從彼此身上學到了很多東西,我很慶幸我們賭了這一把。如果缺少上述 3 個貢獻中的任意一項,我們都不會勝出。
4. 學生卷積神經網路知識蒸餾
我在訓練學生模型時獲得了最高的分數,因為我使用了自己的代碼而不是基線代碼。
關鍵點和起作用的因素:
1. 為每個架構都分別開發一個邏輯回歸(LR)模型體系;
2. 一開始只需要使用 Adam 演算法和 LR 衰減技術進行訓練;
3. 接下來使用摺疊或/和其他甚至更巧妙的像循環學習率或權重集成等做法(我在這裡並沒有這樣做);
4. 仔細監控欠擬合、過擬合以及模型的容量;
5. 手動調整你的訓練進度,不要依賴全自動的方案。它們也可以正常工作,但是如果你合適地調整了所有的訓練細節,你的訓練時間可以縮短 2-3 倍。特別是對於 DenseNet 這樣求解梯度過程很深的模型來說,這一點非常重要;
6. 最好的模型往往都很深;
7. 使用 L2 損失代替均方誤差損失(MSE)也是同樣有效的,但是這樣做卻不夠精確。在運行使用均方誤差損失訓練的測試模型時,顯示出它與 BB 模型的輸出之間的 L2 距離小於使用 L2 損失訓練的模型。這可能是因為均方誤差,如果我們使用創造性的方法單獨處理每個 batch 中的 B*512 的樣本(它允許更多的參數調優,並且共享圖像之間的信息),而 L2 範數則單獨處理每個 2*512 的向量組合。
不起作用的是:
1. 基於 inception 的架構(由於高的下採樣率和更高需求的解析度而不適用)。而不知為何,第三名的隊伍設法使用了 inception-v1 架構和全解析度圖像(大約 250*250);
2. 基於 VGG 模型的架構(發生過擬合);
3.「輕量化」架構(SqueezeNet / MobileNet——欠擬合);
4. 圖像增強(沒有修改描述符——儘管第三名隊伍的人努力實現了這一點);
5. 使用全尺寸圖像;
6. 此外,我們在競賽的主辦者提供的網路的最後也加入了一個批量歸一化層。這並沒有對我的隊友起到幫助,我最後使用了自己的代碼,因為我不太明白為什麼會出現這種情況。;
7. 同時使用顯著性映射(saliency maps)和單像素攻擊。假設這對於全尺寸圖像更有用(只需比較 112*112 的搜索空間和 299*299 的搜索空間);
我們最好的模型。可以看到,最佳得分是 3*1e-4(越低越好)。根據模型的複雜度,你可以在某種程度上猜測出 BB 模型是 ResNet-34.在我的測試中,ResNet-50 的表現比 ResNet-34 要差。
第一名的均方誤差損失示意圖
5. 最終得分和模型簡化分析
我們的模型簡化分析結果如下圖所示:
最佳的解決方案如下圖所示(是的,還有人開玩笑說要將 ResNet 堆疊起來,他們猜測 ResNet 就是黑盒模型架構):
其它隊伍提供的其它的巧妙、使用的技術:
1. 自適應的 epsilon 參數;
2. 數據增強;
3. 訓練時使用動量;
4. Nesterov 動量(http://ruder.io/optimizing-gradient-descent/index.html#momentum);
5. 攻擊鏡面翻轉圖像;
6. 修改數據——比賽中僅僅提供 5000 個圖像組合中的 1000 張獨特的圖像,你可以生成更多的訓練數據;
實用的 FGVM 啟發式演算法:
1. Noise = eps * clamp(grad / grad.std(), -2, 2);
2. 通過梯度加權將幾個卷積神經網路(CNN)集成起來;
3. 只在模型的平均損失減小時保存變化;
4. 使用目標組合來實現更魯棒的目標選擇;
5. 只使用比均值加標準差更大的梯度(對於 FGSM 演算法來說);
簡單概括一下:
1. 第一名是最「具有黑客精神的解決方案」;
2. 我們團隊擁有最多樣化的解決方案;
3. 第三名的解決方案是最「漂亮」的;
6. 端到端的模型
儘管在這次比賽中,這種方法失敗了,但是它仍然值得在未來被嘗試。詳情請參閱上文提供的代碼倉庫,但是,簡而言之我們嘗試了:
1. C&W 攻擊;
2. 有兩個目標的,受到 Siamese 連接網路啟發的模型;
端到端模型
端到端模型的工作流
7. 參考文獻及進一步的閱讀資料
1. 競賽官網:https://competitions.codalab.org/competitions/19090#participate
2. 我們的代碼倉庫:https://github.com/snakers4/msc-2018-final
3. 關於變分自編碼器(VAE)的系列文章——看上去和這個主題十分相關:https://habr.com/post/331552/
4. 關於結構相似性的資料:
4.1 維基百科:https://en.wikipedia.org/wiki/Structural_similarity
4.2「可用來反推概念」的 Pytorch 實現:https://github.com/Po-Hsun-Su/pytorch-ssim
5. 關於差分進化演算法的資料:
5.1 精彩的博文:https://pablormier.github.io/2017/09/05/a-tutorial-on-differential-evolution-with-python/
5.2 SciPy實現:https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.differential_evolution.html
6. 模型演示
6.1 我們的模型演示:https://drive.google.com/open?id=1P-4AdCqw81nOK79vU_m7IsCVzogdeSNq
6.2 所有的模型演示:https://drive.google.com/open?id=1aIUSVFBHYabBRdolBRR-1RKhTMg-v-3f
7. 兩篇最有用的論文:
7.1 https://arxiv.org/pdf/1710.06081.pdf
7.2 https://arxiv.org/abs/1708.03999
8. 兩篇廣為推崇的論文:
8.1 https://arxiv.org/abs/1712.07107
8.2 https://arxiv.org/abs/1801.00553
新人福利
關注 AI 研習社(okweiwu),回復1領取
【超過 1000G 神經網路 / AI / 大數據資料】
視頻 | 谷歌新論文發現對抗樣本也會騙人
※攻擊 AI 模型之 FGSM 演算法
※6次Kaggle 計算機視覺類比賽賽後感
TAG:AI研習社 |