news 2026/4/16 16:11:05

机器学习 - 对抗性机器学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机器学习 - 对抗性机器学习

摘要:对抗性机器学习研究机器学习模型面对对抗性攻击时的脆弱性。攻击者通过微小扰动欺骗模型做出错误预测,可能影响自动驾驶、医疗等关键领域。主要攻击类型包括规避攻击、投毒攻击和模型反演攻击。防御技术有对抗训练、防御性蒸馏等。Python中可使用CleverHans、ART等工具库实现攻击和防御。实验显示,模型在原始MNIST数据上准确率达98.5%,但在对抗样本上骤降至35.2%,证实了对抗性攻击的有效性。

目录

机器学习 - 对抗性机器学习

Python 实现

步骤 1:安装 ART 包

步骤 2:编写代码实现

代码说明

输出结果


机器学习 - 对抗性机器学习

对抗性机器学习是机器学习的一个子领域,专注于研究机器学习模型在对抗性攻击面前的脆弱性。对抗性攻击是指通过在输入数据中引入微小扰动,蓄意欺骗机器学习模型的行为。这些扰动通常人类无法察觉,但却能导致模型以高置信度做出错误预测。在自动驾驶、安全系统和医疗保健等实际应用场景中,对抗性攻击可能会引发严重后果。

对抗性攻击主要分为以下几种类型:

  • 规避攻击(Evasion attacks):这类攻击旨在操纵输入数据,导致模型对其进行错误分类。规避攻击可分为靶向攻击(攻击者明确知晓目标类别)和非靶向攻击(攻击者仅希望引发错误分类)。
  • 投毒攻击(Poisoning attacks):这类攻击旨在操纵训练数据,使模型偏向特定类别或降低其整体准确率。投毒攻击包括数据投毒(攻击者修改训练数据)和模型投毒(攻击者直接修改模型本身)两种形式。
  • 模型反演攻击(Model inversion attacks):这类攻击通过观察模型的输出结果,推断训练数据或模型本身的敏感信息。

为抵御对抗性攻击,研究人员提出了多种防御技术:

  • 对抗训练(Adversarial training):该技术通过在训练数据中添加对抗样本,增强模型对 adversarial 攻击的鲁棒性。
  • 防御性蒸馏(Defensive distillation):该技术通过在第一个模型的输出基础上训练第二个模型,提升其对对抗性攻击的抵抗能力。
  • 随机化(Randomization):该技术通过向输入数据或模型参数添加随机噪声,增加攻击者构造对抗样本的难度。
  • 检测与拒绝(Detection and rejection):该技术通过检测对抗样本,在其被模型处理前将其拒绝。

Python 实现

在 Python 中,多个库提供了对抗性攻击与防御的实现,包括:

  • CleverHans:适用于 TensorFlow、Keras 和 PyTorch 的对抗性攻击与防御工具集合。
  • ART(Adversarial Robustness Toolbox,对抗鲁棒性工具箱):提供一套全面的工具,用于评估和防御机器学习模型中的对抗性攻击。
  • Foolbox:适用于 PyTorch、TensorFlow 和 Keras 的对抗性攻击工具集合。

以下示例将使用对抗鲁棒性工具箱(ART)实现对抗性机器学习:

步骤 1:安装 ART 包

首先通过 pip 安装 ART 包:

pip install adversarial-robustness-toolbox

步骤 2:编写代码实现

import tensorflow as tf from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D from keras.optimizers import Adam from keras.utils import to_categorical from art.attacks.evasion import FastGradientMethod from art.estimators.classification import KerasClassifier # 禁用 TensorFlow 急切执行模式 tf.compat.v1.disable_eager_execution() # 加载 MNIST 数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理 x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255 x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # 定义模型架构 model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001), metrics=['accuracy']) # 使用 ART 的 KerasClassifier 包装模型(使其兼容 ART 攻击) classifier = KerasClassifier(model=model, clip_values=(0, 1), use_logits=False) # 训练模型 classifier.fit(x_train, y_train, epochs=20) # 在测试集上评估模型准确率 accuracy = classifier.evaluate(x_test, y_test)[1] print("测试集准确率: %.2f%%" % (accuracy * 100)) # 使用快速梯度方法(FastGradientMethod)生成对抗样本(最大扰动值 eps=0.1) attack = FastGradientMethod(estimator=classifier, eps=0.1) x_test_adv = attack.generate(x_test) # 在对抗样本上评估模型准确率 accuracy_adv = classifier.evaluate(x_test_adv, y_test)[1] print("对抗样本上的准确率: %.2f%%" % (accuracy_adv * 100))

代码说明

  1. 加载并预处理 MNIST 数据集:将图像数据重塑为 (28, 28, 1) 格式,归一化到 [0, 1] 区间,并将标签转换为独热编码(one-hot encoding)。
  2. 定义模型架构:构建一个简单的卷积神经网络(CNN),包含卷积层、最大池化层、展平层和全连接层。
  3. 编译与包装模型:使用交叉熵损失函数和 Adam 优化器编译模型,并通过 ART 的KerasClassifier包装模型,使其支持对抗性攻击。
  4. 训练与评估:在 MNIST 训练集上训练模型(20 个 epoch),分别在原始测试集和对抗样本上评估模型准确率。
  5. 生成对抗样本:使用快速梯度方法(FastGradientMethod)生成对抗样本,设置最大扰动值eps=0.1(扰动范围控制在 [0, 1] 内)。

输出结果

运行代码后,将得到类似以下的输出(训练过程持续约数分钟,具体耗时取决于硬件性能):

plaintext

Train on 60000 samples Epoch 1/20 60000/60000 [==============================] - 17s 277us/sample - loss: 0.3530 - accuracy: 0.9030 Epoch 2/20 60000/60000 [==============================] - 15s 251us/sample - loss: 0.1296 - accuracy: 0.9636 Epoch 3/20 60000/60000 [==============================] - 18s 300us/sample - loss: 0.0912 - accuracy: 0.9747 Epoch 4/20 60000/60000 [==============================] - 18s 295us/sample - loss: 0.0738 - accuracy: 0.9791 Epoch 5/20 60000/60000 [==============================] - 18s 300us/sample - loss: 0.0654 - accuracy: 0.9809 ...(后续训练日志省略) 测试集准确率: 98.50% 对抗样本上的准确率: 35.20%

输出说明:模型在原始测试集上的准确率可达 98% 以上,但在对抗样本上的准确率大幅下降(通常降至 40% 以下),直观体现了对抗性攻击对模型的影响。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 12:39:13

写论文省心了!千笔,专科生的AI论文神器

你是否正为论文写作而焦头烂额?选题无从下手、文献查找困难、框架逻辑混乱、查重率高得让人头疼……这些困扰,是否让你感到力不从心?专科生的论文之路本就不易,再加上时间紧迫和知识储备不足,更让写作变得举步维艰。别…

作者头像 李华
网站建设 2026/4/16 14:26:27

深度智能体开发实战:基于LangChain与LangGraph的Python实现

Image 人工智能智能体(AI Agents)——即结合大型语言模型(LLMs)与外部工具以执行任务的程序——已从学术概念演变为生产应用的核心组件。然而,简单的智能体往往难以应对需要规划、上下文管理与子任务协调的复杂多步骤任…

作者头像 李华
网站建设 2026/4/16 14:29:16

计算机毕业设计之基于java的教务管理系统

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式…

作者头像 李华
网站建设 2026/4/16 11:32:48

python+vue开发毕业设计选题项目选择管理系统

文章目录 项目背景技术架构系统功能创新点应用价值 大数据系统开发流程主要运用技术介绍源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式! 项目背景 随着高校毕业设计流程的规范化,选题管理成为师生共同关注的环节。…

作者头像 李华