准备工作

作业十是黑箱攻击(Blackbox Attack),完成作业需要助教代码和数据集,运行代码过程中保持联网可以自动下载数据集,已经有数据集的情况可关闭助教代码中的下载数据部分。关注本公众号,可获得代码和数据集(文末有方法)。

提交地址

JudgeBoi:https://ml.ee.ntu.edu.tw/hw10/,非课程选修学生无法提交,有想讨论沟通的同学可进QQ群:156013866。以下为作业解析,详细代码见文末。

Simple  Baseline(acc <= 0.70)

方法:FGSM方法。FGSM只对图片进行一次攻击,对应助教代码中fgsm函数,无需修改。代理模型(proxy models)是resnet110_cifar10,在被攻击图片中的精度benign_acc=0.95, benign_loss=0.22678。在攻击中,使用gen_adv_examples函数调用fgsm函数,精度降低:fgsm_acc=0.59, fgsm_loss=2.49272。

Medium Baseline (acc <= 0.50)

方法:I-FGSM方法 + Ensembel Attack。ifgsm方法相比与fgsm相比,使用了多次的fgsm循环攻击,对应代码中的ifgsm函数,无需修改。另外使用了Ensemble attack,该方法使用多个代理模型攻击,这里我们需要改动ensembelNet这个类中的forward函数,在攻击前测试的精度benign_acc=095, benign_loss=0.15440。在攻击中,使用gen_adv_examples函数调用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(这个与optimizer里面momentum的原理类似),这里我们修改mifgsm函数。在medium baseline中,我们随机挑选了一些代理模型,这样很盲目,根据文章Query-Free Adversarial Transfer via Undertrained Surrogates(https://arxiv.org/abs/2007.00806)描述,可以选择一些训练不充分的模型,训练不充分的意思包括两方面:一是模型的训练epoch少,二是模型在验证集(val set)未达到最小loss。我们依据论文中的一个例子,使用https://github.com/kuangliu/pytorch-cifar中的训练方法,选择resnet18模型,训练30个epoch(正常训练到达最好结果大约需要200个epoch),将其加入ensmbleNet中。攻击后的精度和loss:ensemble_mifgsm_acc = 0.00, emsemble_mifgsm_loss = 12.25672。可以尝试更多的undertrain model来加强攻击。​​​​​​​

        # 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)。相对于strong baseline,我们将mifgsm替换为dim-mifgsm,后者在前者的基础上,对被攻击图片加入了transform来避免overfitting。该技巧来自于文章Improving Transferability of Adversarial Examples with Input Diversity(https://arxiv.org/pdf/1803.06978.pdf),文章中的transform是先随机的resize图片,然后随机padding图片到原size,我们在mifgsm函数的基础上写dim_mifgsm函数,后者添加的部分代码如下。在攻击中,使用gen_adv_examples函数调用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)​​​​​​​

作业十答案获得方式:

  1. 关注微信公众号 “机器学习手艺人” 

  2. 后台回复关键词:202210

李宏毅2022机器学习HW10解析相关推荐

  1. 李宏毅2022机器学习HW2解析

    准备工作:去课程github下载原始代码,kaggle下载数据集.或者关注本公众号,下载代码和数据集(文末有方法).解压数据集,出现libriphone文件夹,将文件和代码放到同一目录下. kaggl ...

  2. 李宏毅2022机器学习HW5解析

    准备工作 作业五是机器翻译,需要助教代码,运行代码过程中保持联网可以自动下载数据集,已经有数据集的情况可关闭助教代码中的下载数据部分.关注本公众号,可获得代码和数据集(文末有方法). 提交地址 这次作 ...

  3. 李宏毅老师机器学习选择题解析

    机器学习选择题解析加整理 项目说明,本项目是李宏毅老师在飞桨授权课程的配套问题 课程 传送门 该项目AiStudio项目 传送门 仅供学习参考! 三岁出品必是精品! 整理内容源于李宏毅老师机器学习课程 ...

  4. 李宏毅2022机器学习hw6

    目录 ​Machine Learning HW6 一.任务 二.数据集 Crypko: 三.结果 四.改进方法 4.

  5. 李宏毅2022机器学习HW1收获

    colab的使用 把训练集取出一部分作为验证集 选择特征 tqdm,tensorboard使用 在训练和验证时要关闭梯度计算 要把模型和数据放在同一个device上 保证模型可复现性 pytorch和 ...

  6. 【李宏毅《机器学习》2022】作业1:COVID 19 Cases Prediction (Regression)

    文章目录 [李宏毅<机器学习>2022]作业1:COVID 19 Cases Prediction (Regression) 作业内容 1.目标 2.任务描述 3.数据 4.评价指标 代码 ...

  7. 李宏毅《机器学习》国语课程(2022)来了

    提起李宏毅老师,熟悉机器学习的读者朋友一定不会陌生.很多人选择的机器学习入门学习材料都是李宏毅老师的台大公开课视频.今年李宏毅老师开设一门新的机器学习机器学习课程,涵盖最新热门主题,非常值得关注! 李 ...

  8. 【千呼万唤】李宏毅《机器学习》国语课程(2022)终于来了

    提起李宏毅老师,熟悉机器学习的读者朋友一定不会陌生.很多人选择的机器学习入门学习材料都是李宏毅老师的台大公开课视频.今年李宏毅老师开设一门新的机器学习机器学习课程,涵盖最新热门主题,非常值得关注! 李 ...

  9. 李宏毅2020机器学习作业2-Classification:年收入二分类

    更多作业,请查看 李宏毅2020机器学习资料汇总 文章目录 0 作业链接 1 作业说明 环境 任务说明 数据说明 作业概述 2 原始代码 2.0 数据准备 导入数据 标准化(Normalization ...

最新文章

  1. 关于学习Python的一点学习总结(6->元组)
  2. java开发微信公众平台(一)-- 服务器配置
  3. python 3.8.2 / 内置的数据结构 / list (类似于 STL 中的 vector)
  4. 解决 【xshell 5 不能使用退格键和Delete建】的问题
  5. Python 面向对象【1】
  6. 洛谷P1145 约瑟夫
  7. 跳转到系统默认的Home
  8. Harnessing Your Zombies to Help You
  9. 小米路由器安装Misstar tools 和MIXBOX
  10. 为什么登录MySQL会闪退_MySql登录时闪退的快速解决办法
  11. 关于购买域名的一些建议
  12. Separating Pebbles数学,暴力
  13. 跟踪状态(TASK_TRACED)
  14. Linux proc目录详解
  15. Linux下的Cadence软件的spice和Verliog步骤(这是最最最为简单的超详细!!!!)
  16. HTML期末大作业~仿小米商城网页设计模板(HTML+CSS+JavaScript)
  17. 设计模式-鸭子类型1
  18. 如何从bitbucket到github的所有分支移动git存储库?
  19. 【英语词组】恋恋不忘Day 1-3
  20. superIO在Linux下的设备,X86 Linux ITE SuperIO GPIO Control

热门文章

  1. 大型企业是怎么牢牢的留住高级人才的?
  2. android 圆圈扩大动画,Android 实现圆圈扩散水波动画效果两种方法
  3. 用 python 写游戏《外星人入侵》:限制飞船的活动范围并给飞船增加射击功能
  4. java中ooa思想_OOA概念及基本知识介绍
  5. HTTP连接方式阐述
  6. input文件上传限制(类型,大小)
  7. Mac怎么蹭WiFi
  8. java对话框的关闭按钮_单击关闭按钮时,在jquery对话框中销毁Div及其内容
  9. CULane评价指标
  10. C++ condition_variable用法