準(zhǔn)備工作
作業(yè)十是黑箱攻擊(Blackbox Attack),完成作業(yè)需要助教代碼和數(shù)據(jù)集,運(yùn)行代碼過(guò)程中保持聯(lián)網(wǎng)可以自動(dòng)下載數(shù)據(jù)集,已經(jīng)有數(shù)據(jù)集的情況可關(guān)閉助教代碼中的下載數(shù)據(jù)部分。關(guān)注本公眾號(hào),可獲得代碼和數(shù)據(jù)集(文末有方法)。
提交地址
JudgeBoi:https://ml.ee.ntu.edu.tw/hw10/,非課程選修學(xué)生無(wú)法提交,有想討論溝通的同學(xué)可進(jìn)QQ群:156013866。以下為作業(yè)解析,詳細(xì)代碼見(jiàn)文末。
Simple ?Baseline(acc <=?0.70)
方法:FGSM方法。FGSM只對(duì)圖片進(jìn)行一次攻擊,對(duì)應(yīng)助教代碼中fgsm函數(shù),無(wú)需修改。代理模型(proxy models)是resnet110_cifar10,在被攻擊圖片中的精度benign_acc=0.95, benign_loss=0.22678。在攻擊中,使用gen_adv_examples函數(shù)調(diào)用fgsm函數(shù),精度降低:fgsm_acc=0.59, fgsm_loss=2.49272。
Medium Baseline (acc <= 0.50)
方法:I-FGSM方法 + Ensembel Attack。ifgsm方法相比與fgsm相比,使用了多次的fgsm循環(huán)攻擊,對(duì)應(yīng)代碼中的ifgsm函數(shù),無(wú)需修改。另外使用了Ensemble attack,該方法使用多個(gè)代理模型攻擊,這里我們需要改動(dòng)ensembelNet這個(gè)類中的forward函數(shù),在攻擊前測(cè)試的精度benign_acc=095, benign_loss=0.15440。在攻擊中,使用gen_adv_examples函數(shù)調(diào)用emsebel_model和ifgsm,精度降低明顯:ensemble_ifgsm_acc = 0.00, emsemble_ifgsm_loss=13.41106。
def forward(self, x):
emsemble_logits = None
for i, m in enumerate(self.models):
????????????emsemble_logits?=?m(x)?if?i?==?0?else?emsemble_logits?+?m(x)
return emsemble_logits/len(self.models)
Strong?Baseline (acc <= 0.30)
方法:MIFGSM + Ensemble Attack(pick right models)。mifgsm相比于ifgsm,加入了momentum,避免攻擊陷入local maxima(這個(gè)與optimizer里面momentum的原理類似),這里我們修改mifgsm函數(shù)。在medium baseline中,我們隨機(jī)挑選了一些代理模型,這樣很盲目,根據(jù)文章Query-Free Adversarial Transfer via Undertrained Surrogates(https://arxiv.org/abs/2007.00806)描述,可以選擇一些訓(xùn)練不充分的模型,訓(xùn)練不充分的意思包括兩方面:一是模型的訓(xùn)練epoch少,二是模型在驗(yàn)證集(val set)未達(dá)到最小loss。我們依據(jù)論文中的一個(gè)例子,使用https://github.com/kuangliu/pytorch-cifar中的訓(xùn)練方法,選擇resnet18模型,訓(xùn)練30個(gè)epoch(正常訓(xùn)練到達(dá)最好結(jié)果大約需要200個(gè)epoch),將其加入ensmbleNet中。攻擊后的精度和loss:ensemble_mifgsm_acc = 0.00, emsemble_mifgsm_loss = 12.25672??梢試L試更多的undertrain model來(lái)加強(qiáng)攻擊。???????
????????#?TODO:?Momentum?calculation
grad = x_adv.grad.detach()
grad = decay * momentum + grad/(grad.abs().sum() + 1e-8)
momentum = grad
x_adv = x_adv + alpha * grad.sign()
Boss?Baseline (acc <= 0.15)
方法:DIM-MIFGSM + Ensemble Attack(pick right models)。相對(duì)于strong baseline,我們將mifgsm替換為dim-mifgsm,后者在前者的基礎(chǔ)上,對(duì)被攻擊圖片加入了transform來(lái)避免overfitting。該技巧來(lái)自于文章Improving Transferability of Adversarial Examples with Input Diversity(https://arxiv.org/pdf/1803.06978.pdf),文章中的transform是先隨機(jī)的resize圖片,然后隨機(jī)padding圖片到原size,我們?cè)趍ifgsm函數(shù)的基礎(chǔ)上寫(xiě)dim_mifgsm函數(shù),后者添加的部分代碼如下。在攻擊中,使用gen_adv_examples函數(shù)調(diào)用emsebel_model和dim_mifgsm,攻擊后的精度和loss:ensemble_dmi_mifgsm_acc = 0.00, emsemble_dim_mifgsm_loss = 13.71190。???????
if torch.rand(1).item() >= p:
#resize img to rnd X rnd
rnd = torch.randint(29, 33, (1,)).item()
x_adv = transforms.Resize((rnd, rnd))(x_adv)
#padding img to 32 X 32 with 0
left = torch.randint(0, 32 - rnd + 1, (1,)).item()
top = torch.randint(0, 32 - rnd + 1, (1,)).item()
right = 32 - rnd - left
bottom = 32 - rnd - top
x_adv = transforms.Pad([left, top, right, bottom])(x_adv)
???????
作業(yè)十答案獲得方式:
-
關(guān)注微信公眾號(hào) “機(jī)器學(xué)習(xí)手藝人”?
-
后臺(tái)回復(fù)關(guān)鍵詞:202210文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-471887.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-471887.html
到了這里,關(guān)于李宏毅2022機(jī)器學(xué)習(xí)HW10解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!