首页 > 其他分享 >对抗训练综述学习笔记

对抗训练综述学习笔记

时间:2024-08-21 15:15:02浏览次数:7  
标签:mathbf 迭代 综述 text 样本 FGSM 笔记 对抗

本文基于这篇综述进行讨论学习:《Bai T, Luo J, Zhao J, et al. Recent advances in adversarial training for adversarial robustness[J]. arXiv preprint arXiv:2102.01356, 2021.》

对抗训练主要目的是让模型能够对于对抗样本做出正确的判断。常见的对抗样本的生成方式(或者说是对抗攻击)是 Fast Gradient Sign Method (FGSM)。

1. 对抗攻击

Fast Gradient Sign Method (FGSM) 是一种用于生成对抗样本的攻击算法,由 Ian Goodfellow 等人在 2014 年提出。FGSM 是一种非常经典且简单的对抗攻击方法,主要用于评估模型对对抗攻击的鲁棒性。下面是 FGSM 的简单介绍:

1.1 FGSM 的原理

FGSM 利用模型的梯度信息,通过对输入样本施加微小的扰动来生成对抗样本。其基本思想是通过梯度下降的方式找到能使模型产生错误预测的最小扰动。

FGSM 的步骤

  1. 选择损失函数: 选择一个损失函数\(L\),该函数衡量模型的预测与真实标签之间的差距。常用的损失函数是交叉熵损失。
  2. 计算梯度: 对输入样本\(\mathbf{x}\)计算损失函数相对于输入的梯度\(\nabla_{\mathbf{x}} L(\mathbf{x}, y)\),其中\(y\)是真实标签。
  3. 生成对抗扰动: 使用梯度信息生成对抗扰动。扰动的公式为:

\[\mathbf{x}*{\text{adv}} = \mathbf{x} + \epsilon \cdot \text{sign}(\nabla*{\mathbf{x}} L(\mathbf{x}, y)) \]

其中,\(\text{sign}(\cdot)\)表示符号函数,\(\epsilon\)是一个小的正数,表示扰动的幅度。
4. 生成对抗样本: 将扰动添加到原始样本中,得到对抗样本\(\mathbf{x}_{\text{adv}}\)。

例子

假设你有一个图像分类模型,目标是生成一个对抗样本,使模型错误地将一个猫的图像分类为狗。使用 FGSM,你会:

  1. 选择损失函数: 使用交叉熵损失来衡量模型预测的错误程度。
  2. 计算梯度: 对猫的图像计算交叉熵损失相对于输入图像的梯度。
  3. 生成对抗扰动: 根据梯度的符号生成扰动。比如,梯度的符号告诉我们在每个像素上如何调整以最大化损失。
  4. 生成对抗样本: 将生成的扰动添加到原始猫的图像中,得到对抗样本。

FGSM 的特点

  1. 效率: FGSM 是一种非常快速和简单的攻击方法,因为它只需要计算一次梯度。
  2. 效果: 尽管简单,FGSM 能够有效地生成对抗样本,测试模型的鲁棒性。
  3. 局限性: FGSM 可能对一些防御方法不够有效,因为它的扰动是单一的,可能不足以击败更复杂的防御策略。

FGSM 作为对抗攻击的基础方法,为进一步研究和开发更复杂的对抗攻击技术提供了重要的理论基础。

Iterative FGSM 和 Projected Gradient Descent (PGD) 是对抗攻击中常用的改进方法,相比于原始的 FGSM,它们通过迭代优化过程来生成更强的对抗样本。以下是这两种方法的详细介绍:

1.2 Iterative FGSM

原理: Iterative FGSM,也称为 Iterative Fast Gradient Sign Method,是 FGSM 的一种改进版本。它通过多次迭代的方式生成对抗样本,以增强对抗攻击的效果。

步骤:

  1. 初始化对抗样本: 从原始样本开始,初始对抗样本为\(\mathbf{x}_{\text{adv}}^0 = \mathbf{x}\)。
  2. 迭代扰动:
    • 对每一步\(t\)(从\(t = 0\)到\(T-1\)):
      • 计算当前对抗样本的梯度\(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y)\)。
      • 根据梯度生成扰动\(\delta_t = \epsilon \cdot \text{sign}(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y))\)。
      • 更新对抗样本\(\mathbf{x}_{\text{adv}}^{t+1} = \mathbf{x}_{\text{adv}}^t + \delta_t\)。
      • 对于下一步,确保对抗样本仍在有效的扰动范围内(如 [0, 1] 之间),有时需要进行投影操作来保持样本的有效性。
  3. 生成最终对抗样本: 完成所有迭代后,最终的对抗样本为\(\mathbf{x}_{\text{adv}}^T\)。

特点:

  • 迭代过程: 通过多次迭代,每次对抗样本都稍微更新,从而生成更强的对抗样本。
  • 效果提升: 迭代过程使得对抗样本的攻击效果通常比单次 FGSM 攻击要强。

1.3 Projected Gradient Descent (PGD)

原理: PGD 是一种更强的对抗攻击方法,它在 FGSM 的基础上进行了改进,通过迭代和投影操作生成对抗样本。PGD 是一种广泛使用的迭代攻击方法,尤其在研究对抗鲁棒性时。

步骤:

  1. 初始化对抗样本: 从原始样本开始,初始对抗样本为\(\mathbf{x}_{\text{adv}}^0 = \mathbf{x}\)。
  2. 迭代更新:
    • 对每一步\(t\)(从\(t = 0\)到\(T-1\)):
      • 计算当前对抗样本的梯度\(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y)\)。
      • 生成扰动\(\delta_t = \alpha \cdot \text{sign}(\nabla_{\mathbf{x}} L(\mathbf{x}_{\text{adv}}^t, y))\),其中\(\alpha\)是步长。
      • 更新对抗样本\(\mathbf{x}_{\text{adv}}^{t+1} = \mathbf{x}_{\text{adv}}^t + \delta_t\)。
      • 投影操作: 对于每个更新步骤,将对抗样本投影回有效的扰动范围内,确保对抗样本仍在合法范围内。这通常是通过在对抗样本上应用投影操作来实现的(例如,投影到\(\epsilon\)-球内)。

具体而言,对于\(L_{\infty}\) 范数约束的投影操作,给定原始样本 \(\mathbf{x}\) 和扰动幅度 \(\epsilon\),对抗样本的投影公式可以表示为:

\[\mathbf{x}_{\text{adv}} = \text{clip}(\mathbf{x}_{\text{adv}}^{\text{new}}, \mathbf{x} - \epsilon, \mathbf{x} + \epsilon) \]

其中:

  • \(\mathbf{x}_{\text{adv}}^{\text{new}}\) 是更新后的对抗样本。
  • \(\text{clip}(\cdot, \text{min}, \text{max})\) 是将输入值限制在 \([\text{min}, \text{max}]\) 区间内的函数。

简化地,投影操作可以写为:

\[\mathbf{x}_{\text{adv}}[i, j] = \max(\mathbf{x}[i, j] - \epsilon, \min(\mathbf{x}_{\text{adv}}^{\text{new}}[i, j], \mathbf{x}[i, j] + \epsilon)) \]

这表示对每个像素 \((i, j)\),将对抗样本的值限制在 \([\mathbf{x}[i, j] - \epsilon, \mathbf{x}[i, j] + \epsilon]\) 区间内。

  1. 生成最终对抗样本: 完成所有迭代后,最终的对抗样本为\(\mathbf{x}_{\text{adv}}^T\)。

特点:

  • 迭代优化: 通过多个迭代步骤来优化对抗样本生成过程,提高对抗攻击的效果。
  • 投影操作: 在每次迭代后进行投影,确保对抗样本在扰动约束范围内(例如,\(\epsilon\)-球内)。

区别与总结

  • Iterative FGSM:

    • 是 FGSM 的迭代版本,通过多次迭代生成更强的对抗样本。
    • 每次迭代更新对抗样本,并在更新过程中施加扰动。
    • 主要关注通过迭代改进对抗样本的质量,但没有对扰动范围进行显式的限制。
  • PGD:

    • 是一种更强的迭代攻击方法,通过每次迭代的梯度更新和投影操作生成对抗样本。
    • 包括投影操作,以确保对抗样本在允许的扰动范围内。
    • 常被认为是最强的白盒攻击之一,因为它通过迭代和投影的方式可以生成非常强的对抗样本。

这两种方法都旨在提高对抗样本的攻击效果,但 PGD 的投影操作使其在生成更具攻击性的对抗样本方面通常更为有效。

2. 对抗训练

为了让模型能够正确处理对抗样本,有很多不同的对抗训练方法被提出。

  1. Adversarial Regularization:第一种最直观的方法就是把把对抗样本加入到训练集中去训练模型
  2. Curriculum-based Adversarial Training:第二种是根据对抗样本的难易程度进行分类,让模型先学习简单的对抗样本,然后学习困难的。就像人上课一样,先从简单的入手,然后开启苦难模式
  3. ensemble adversarial training:这个也好理解,就是用多个模型生成的对抗样本来训练
  4. Adversarial Training with Adaptive \(\epsilon\):这个其实也好理解,前面生成对抗样本公式中有个因子\(\epsilon\),通常这是一个固定值,那么对应的对抗样本的难度相对也是在一个固定的范围内。那么一种很自然的思想就是动态改变这个因子的值,那么样本的难度也会发生变化,这样模型训练过程中能够看到不同难度的样本
  5. Adversarial Training with Semi/Unsupervised Learning:有研究发现对抗训练后,模型在对抗测试集上的 accuracy 要明显比对抗训练集上的低。要解决这个问题需要大规模的数据集,但是标签数据非常难获得,所以半监督、无监督训练成为一种可行的方法。不过,你也许会说,不是可以直接用模型生成大量的对抗样本吗,为什么还要用无监督这类方法呢?你说的没错,不过对抗样本生成是基于已有的数据通过加噪声的方式生成的,如果本身的数据集数量有限,那么模型学习到的数据分布也是不够的,对于正常样本的分辨能力可能也会受到影响。
  6. Efficient Adversarial Training:以下是对提高对抗训练效率方法的算法总结:
      1. Free Adversarial Training (Free-AT) [Shafahi et al., 2019]
      • Free-AT的核心思想是在前向传播时重用在反向传播中计算得到的梯度。在这种方法中,模型参数和图像扰动将同时更新。Free-AT通过这种方式减少了计算量,因为不需要多次计算梯度。
      1. Fast Adversarial Training (FastAT) [Wong et al., 2020]
      • FastAT采用了随机初始化的快速梯度符号方法(FGSM)来进行对抗性训练,并证明了其与基于PGD的对抗性训练方法(PGD-AT)同样有效。FastAT通过随机化初始化扰动来减少过拟合,并提高了训练效率。
      1. GradAlign [Andriushchenko and Flammarion, 2020]
      • GradAlign旨在解决快速训练方法中出现的灾难性过拟合问题。该方法通过在梯度更新中引入额外的对齐步骤来改善模型的泛化能力。
      1. Dynamic Schedule [Vivek and Babu, 2020b]
      • 动态调度方法通过调整训练过程中的扰动强度和其他超参数,来平衡模型的鲁棒性和准确性。
      1. Inner Interval Verification [Kim et al., 2021]
      • 这种方法通过在内部验证扰动的区间来防止过拟合,从而提高模型的泛化能力。
      1. Domain Adaptation [Song et al., 2019]
      • 域适应方法通过将对抗性训练应用于不同域的数据来提高模型的泛化能力。
      1. Regularization Methods [Vivek and Babu, 2020a; Huang et al., 2020]
      • 正则化方法通过在损失函数中添加正则化项来控制模型的复杂度,从而减少过拟合。
      1. You Only Propagate Once (YOPO) [Zhang et al., 2019a]
      • YOPO基于Pontryagin的最大原理,通过分析发现对抗性梯度更新仅与神经网络的第一层相关。因此,YOPO专注于在第一层计算对抗性扰动,而其他层保持不变,显著减少了前向和后向传播的次数。

这些方法都旨在解决传统对抗性训练中的计算效率问题,同时尽可能保持或提高模型的对抗性鲁棒性。通过这些技术,研究者们希望能够在有限的计算资源下训练出更加鲁棒的深度学习模型。

微信公众号:AutoML机器学习
MARSGGBO♥原创
如有意合作或学术讨论欢迎私戳联系~
邮箱:[email protected]

标签:mathbf,迭代,综述,text,样本,FGSM,笔记,对抗
From: https://www.cnblogs.com/marsggbo/p/18371701

相关文章

  • 前端学习笔记-JS篇-05
    对象什么是对象对象(object):JavaScript里的一种数据类型,可以理解为是一种无序的数据集合,注意数组是有序的数据集合,用来描述某个事物例如描述一个人:人有姓名、年龄、性别等信息、还有吃饭睡觉打代码等功能;如果用多个变量保存则比较散,用对象比较统一。比如描述班主任信息:静......
  • 2024-08-21 关于vue3中使用emit的一些笔记
    问题1:emitisnotdefinedwatch(()=>content.value,(val)=>{emit('input',val);});原因:直接使用了未定义的emit导致报错。解决方案:使用vue3中的defineEmits函数定义一个可以定义触发的函数,比如constemit=defineEmits(['input']);此处的emit只是一个变量,你可......
  • 随机森林学习笔记概述
    随机森林(RandomForest)是一种集成学习方法,它通过构建多个决策树并将它们的预测结果进行投票或平均来提高预测性能。随机森林在许多实际应用中表现出了很好的性能,尤其是在分类和回归问题上。以下是关于随机森林的一些学习笔记概述:1.基本概念  集成学习:通过组合多个弱学习......
  • 深入Java虚拟机JVM类加载学习笔记
    1.类加载过程----------以及风中叶老师在他的视频中给了我们一段程序,号称是世界上所有的Java程序员都会犯的错误加载---验证---准备---解析---初始化---使用---卸载诡异代码如下:packagetest01;classSingleton{ publicstaticSingletonsingleton=newSingleton();......
  • 多模态大型语言模型(MLLM)综述(非常详细)零基础入门到精通, 收藏这一篇就够了
    ASurveyonMultimodalLargeLanguageModels多模态大型语言模型(MLLM)综述摘要—最近,以GPT-4V为代表的多模态大型语言模型(MLLM)已成为新兴的研究热点,它使用强大的大型语言模型(LLMs)作为“大脑”来执行多模态任务。MLLM出人意料的涌现能力,如基于图像编写故事和无需OCR的数学......
  • prometheus学习笔记之简介与安装
    一、prometheus简介1.简介Prometheus是基于go语⾔开发的⼀套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统,Prometheus于2016年加⼊CNCF(CloudNativeComputingFoundation,云原⽣计算基⾦会),2018年8⽉9⽇prometheus成为CNCF继kubernetes......
  • 【内网渗透】最保姆级的春秋云镜initial打靶笔记
    目录flag1flag2flag3 flag1外网thinkphp服务 随便找个工具梭连蚁剑读/root目录要提权suid没有可利用的提权命令,打sudo提权sudo-lmysql的sudo提权 Linux提权之Sudo70种提权方法-简单安全 查看文件名带flag的文件sudomysql-e'\!find/-typef-n......
  • [Android 逆向整理笔记] Frida
    妈的终于考过科目三了......
  • 《给所有人的生成式 AI 课》学习笔记(二)
    前言本文是吴恩达(AndrewNg)的视频课程《GenerativeAIforEveryone》(给所有人的生成式AI课)的学习笔记。由于原课程为全英文视频课程(时长约3个小时),且国内访问较慢,阅读本文可快速学习课程内容。课程介绍本课程帮助大家了解生成式人工智能的工作原理,以及如何在生活和工......
  • 学习达梦hint注入笔记
    1.创建表droptabletest;SQL>createtabletest(idint,infovarchar);操作已执行SQL>insertintotestselectlevel,'a'fromdualconnectbylevel<=10000;影响行数10000SQL>createindexidx_test_idontest(id);操作已执行SQL>stat100ontest(id......