黑盒攻击中迁移攻击和通用对抗扰动的讲解及实战(附源码)

简介: 黑盒攻击中迁移攻击和通用对抗扰动的讲解及实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

黑盒攻击

人们发现结构类似的神经网络模型在面对相同的对抗样本攻击时,会有类似的表现。也就是说,基于类似已知模型,采用白盒攻击来产生对抗样本,可能对未知模型也有攻击作用,称之为对抗样本的迁移能力(transferable)。

下表中左侧列表表示生成对抗样本的模型,最上面行表示被迁移攻击的模型,表格中的数据表示被迁移攻击模型对生成模型基于优化的方法产生的迁移攻击样本的识别率

从左上角到右下角对角线的数据为0,表明针对本模型的白盒攻击能够在本模型上做到全部攻击成功,当生成模型和迁移攻击模型不同时,对抗样本被识别率大约为百分之十到百分之四十

基于集成的对抗样本生成方法

基本思想是用多个白盒模型共同产生具有高迁移性的对抗样本。 假设有k个白盒模型,它们的输出层采用softmax激活函数,输出向量记为J_1,J_2,…,J_k。原始图像记为x,它的真实标签记为y。记对抗样本为x^∗,定向攻击的标签为y^∗。 基于集成的方法的优化目标为:

优化目标是尽量减少模型输出与定向攻击标签之间和对抗样本与原始样本之间的差异,常量λ用来调节两个差异的重要性。

通用对抗扰动

通用对抗扰动是可以用来以较大概率成功攻击某模型的所有样本的扰动。 记分类模型为k,对d维实数空间中服从分布u的样本x,分类模型的预测标签为k ̂(x)。

d维实数空间中的通用对抗扰动v是满足以下两个条件的扰动:

1)‖v‖_p≤ϵ。 ‖v‖_p是v的p范数(范数的定义见式4‑17),此条件即要求扰动v的大小要限制在常量ϵ以内。

2)P_x~u(k ̂(x+v)≠k ̂(x))≥1−δ。此条件要求添加扰动后的样本的误判率要大于指定的值1−δ。

生成通用对抗扰动的算法先从所有样本中抽样出一批分类均衡的有代表性的测试样本。将通用对抗扰动v设为0初值。然后,从第一个测试样本开始迭代直至最后一个测试样本:如果当前测试样本x_i添加扰动v后不能使模型判断错误,则计算x_i+v到最近分类超平面的向量∆v_i,并更新v←v+∆v_i。∆v_i常通过DeepFool算法得到。

对于上述条件1),在每次更新v后,都要检测p范数是否超出限制ϵ。如果超出了,则按范数的含义进行收缩。比如,对于2范数,则按把2范数收缩到1的比例缩小v的每一维。

对于上述条件2),在每一轮全部测试样本迭代完后,将扰动v添加到所有测试样本上进行预测,并计算成功率,如果达不到1−δ,则继续新一轮迭代。

UPA通用对抗样本下结果如下图

可见成功率还是不低的

部分代码如下

# 时间原因,只取小部分样本进行实验
X_val1 = X_val[:100]
delta = 0.2 # 1-delta为对抗成功率
max_iter = 10 # 最多训练轮数
xi = 10 # 扰动的幅度
fooling_rate = 0.0
n_samples = np.shape(X_val1)[0]
v = 0 # 通用对抗扰动
itr = 0 # 迭代次数
while itr < max_iter:
    np.random.shuffle(X_val1) # 打乱顺序
    # 遍历所有测试样本,计算通用对抗扰动v
    for k in range(n_samples):
        print('序号:', k, '开始调整扰动...')
        cur_img = X_val1[k].reshape(1, 28, 28, 1)
        cur_label = model(cur_img)
        v_label = model(cur_img + v)
        if np.argmax(cur_label) == np.argmax(v_label): # 如果当前扰动不起作用。。。
            succ, adv, r_tot, epochs, label1 = deepfool(cur_img+v, v_label, model, 600) # 找到到最近分类超平面的向量r_tot
            #print('itr:', itr, 'k:', k, 'succ', succ, 'epochs:', epochs)
            if succ: 
                v = v + r_tot
                v = proj_l2(v, xi) # 限制v的大小
    # 验证通用对抗扰动v的效果
    X_perturbed = X_val1 + v # 所有样本加上扰动
    est_labels_pert = np.argmax( model(X_perturbed), axis=1 ) # 扰动后的标签
    est_labels_orig = np.argmax( model(X_val1), axis=1 ) # 扰动前的标签
    fooling_rate = float(np.sum(est_labels_pert != est_labels_orig) / float(n_samples)) # 计算成功率
    if fooling_rate < 1 - delta:
        print('轮次:', itr, '成功率 = ', fooling_rate)
    else:
        print('完成。成功率 = ', fooling_rate)
        break;
    itr += 1

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
1月前
|
人工智能 Rust 安全
2026年Vibe Coding实战指南:从入门到精通全流程
《2026年Vibe Coding实战指南》聚焦AI辅助开发新范式,以Rust Actix-web+异步任务为实战场景,系统拆解意图驱动开发全流程:从理念认知、TRAE等工具选型、提示词工程、三段式代码生成(含BUG初版→修正版对比),到迭代优化与工程落地,助开发者高效掌握Vibe Coding核心能力。(239字)
|
4月前
|
数据采集 自动驾驶 算法
道路设施目标检测数据集(约5000张已标注)|YOLO训练与智能交通应用数据集
本数据集含约5000张真实道路图像,精准标注交通标志、热塑标线、金属护栏、减速带4类设施,采用YOLO标准格式(归一化bbox),已划分train/val/test集。覆盖多场景、多光照、多尺度,支持YOLOv5/v8等直接训练,适用于智能巡检、自动驾驶感知与交通管理。
1128 12
道路设施目标检测数据集(约5000张已标注)|YOLO训练与智能交通应用数据集
|
数据可视化 数据挖掘 数据处理
零基础入门金融风控之贷款违约预测的Task2:数据分析
零基础入门金融风控之贷款违约预测的Task2:数据分析
376 1
|
监控 安全
公司如何监控员工电脑:WebAssembly 语言的浏览器端探索
在数字化办公环境中,公司可能需要对员工电脑进行监控以确保信息安全和工作效率。WebAssembly 作为一种高性能的二进制指令格式,可在浏览器端实现复杂监控功能,如获取浏览器信息和监测网络活动,无需安装额外软件,降低了系统侵入性。然而,公司在实施监控时需遵守法律法规和道德规范,确保员工隐私得到保护,并明确告知监控目的与范围。
342 3
|
网络协议 Linux C语言
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
本篇主要介绍了 Intel HDSLB 的基本运行原理和部署配置的方式,希望能够帮助读者们顺利的把 HDSLB-DPVS 项目 “玩” 起来。
1326 9
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
|
数据可视化 Python
Python绘制定制3D曲面图
8月更文挑战第19天
559 14
|
机器学习/深度学习 搜索推荐 Python
L2范数(L2 norm)
L2范数(L2 norm),也称为欧几里德范数(Euclidean norm)或2-范数,是向量元素的平方和的平方根。它在数学和机器学习中经常被用作一种正则化项、距离度量或误差度量。
12485 76
|
算法 Ubuntu Linux
为什么Linux不是实时操作系统
本文探讨了Linux为何不是实时操作系统(RTOS)。实时性关乎系统对事件的确定性响应时间,而Linux虽能保证调度执行的实时任务,但无法确保中断响应时间、中断处理时间和任务调度时间的确定性。中断响应时间受中断屏蔽时间影响,Linux中无法确保;中断处理时间因不支持中断嵌套而不确定;任务调度时间虽快,但调度点的限制影响实时性。Linux的定位是通用操作系统,追求平均性能而非绝对实时性。为改善实时性,Linux提供了不同抢占模型,如可抢占内核(Low-Latency Desktop)和PREEMPT-RT补丁,后者接近硬实时但牺牲了吞吐量。PREEMPT-RT正逐渐成为Linux实时增强的标准。
993 1
为什么Linux不是实时操作系统