当前位置: 首页 > news >正文

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

摘要:对抗性机器学习研究机器学习模型面对对抗性攻击时的脆弱性。攻击者通过微小扰动欺骗模型做出错误预测,可能影响自动驾驶、医疗等关键领域。主要攻击类型包括规避攻击、投毒攻击和模型反演攻击。防御技术有对抗训练、防御性蒸馏等。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% 以下),直观体现了对抗性攻击对模型的影响。

http://www.jsqmd.com/news/337223/

相关文章:

  • 福州留学中介top10解析,零差评服务优势全揭秘 - 留学机构评审官
  • 一文讲透|专科生必备的AI论文软件 —— 千笔·专业学术智能体
  • 基于python OpenCV的车牌识别计费系统
  • 合肥硕士留学中介如何选?排名揭晓稳定可靠答案 - 留学机构评审官
  • 大专学历从销售转行客户成功分析的优势与挑战
  • 来自 Claude Code 创始团队的 CC 最佳实践技巧
  • RAG完全指南:从嵌入到查询改写的五大核心技术(收藏必学)
  • 高职学历物流专员如何通过数据分析技能实现涨薪
  • 写论文省心了!千笔,专科生的AI论文神器
  • OpenAI 打响“桌面版”大战:推出 macOS 版 Codex,直指 Claude Code 用户!
  • 大模型Agent评估完全指南:提升AI应用稳定性的关键技术,开发者必藏!
  • 2026口碑实测|2家服务好的雅马拓Yamato烘箱代理商,科研机构都在选 - 品牌推荐大师1
  • 总结重庆靠谱的眼镜店,源头厂家选择攻略 - myqiye
  • 从深夜代码到AI“超级个体”:Peter Steinberger与Openclaw的逆袭!
  • 实验仪器推广平台怎么选?20年厂商亲测:中小企业别乱花钱,精准获客就看这两个平台 - 品牌推荐大师1
  • 线程池竟能把CPU干到100%?两个JDK BUG踩坑实录
  • 从金鱼记忆到博学大脑:构建企业级AI Agent的完整指南(建议收藏)
  • 2026年威海性价比高的科技住宅楼盘,已建成的住宅楼盘排名 - 工业推荐榜
  • 机器学习 - 堆叠集成(Stacking)
  • 美国财务分析求职咨询哪家高效:财务咨询TOP10指南 - 技研备忘录
  • 简单理解:电力电子器件工作的开关频率越高,低次谐波越小,但开关器件的开关损耗也越大,带来散热问题同时也会使电能变换效率降低。高压大功率电力电子器件工作频率一般不高于1kHz
  • web页面上如何使用js实现大附件的切片上传?
  • CellHostMicrobe | 沈其荣院士团队揭示土壤原生动物捕食驱动细菌代谢从竞争向合作转变
  • 2026年 压力容器厂家推荐排行榜:专业制造与安全性能深度解析,助力工业高效稳定运行 - 品牌企业推荐师(官方)
  • 唤醒大脑潜能,实现高效学习
  • ZYNQ让卫星在太空“换脑”:基于动态部分可重构的星载智能处理革命
  • 网络工程毕业设计新颖的题目怎么选
  • 2026年热门的直流电源直流接触器/逆变器直流接触器厂家推荐及选择参考 - 品牌宣传支持者
  • 百度WebUploader组件如何实现内网大文件的分段上传?
  • 百度开源上传组件如何处理内网超大文件的续传?