白盒攻击中FGM、FGSM、DeepFool算法在MNIST手写数字集中的实战(附源码)

简介: 白盒攻击中FGM、FGSM、DeepFool算法在MNIST手写数字集中的实战(附源码)

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

白盒攻击

根据攻击者对模型的了解程度,对抗攻击可分为白盒攻击和黑盒攻击。

白盒攻击是指攻击者掌握包括模型结构与系数在内的所有信息。

黑盒攻击是指攻击者对模型结构与参数不了解,仅能够对模型进行输入试探以获得对应的输出响应。

FGM算法

算法流程图如下

在定向攻击时,误差是用前向传播的输出与攻击目标y_target进行比较计算得到的,因此,扰动的目标是使该误差变小,因此,扰动r沿梯度的相反方向计算得到。

在非定向攻击时,误差是用前向传播的输出与实际标签进行比较计算得到的,因此,扰动的目标是使该误差变大,因此,扰动r是沿梯度的真实方向计算得到,即按所谓的梯度上升法进行优化。

记样本为x=(x^(1),x^(2),…,x^(n))。 记损失函数对样本特征变量的梯度为:g=(g^(1),g^(2),…,g^(n))

其中,g^(i)为误差对x^(i)的梯度。 FGM算法的调整样本扰动r为:

其中,‖g‖_2是g的L2范数,即进行了正则化操作。ϵ常量是步长。

输出结果如下 可见198次预测时结果为1.成功达到了扰乱模型判断能力的目的

FGSM

FGSM是在FGM的基础上,将样本特征变量的梯度g的符号作为扰动r:

加入扰动之后,对抗样本被模型错误识别为miniature_poodle类型,但实际上它是一直贵宾犬

 

FGSM算法比较简单,生成的样本具有迁移性好的特点。在FGSM算法的基础上,发展出了I-FGSM和MI-FGSM等算法。

DeepFool算法

DeepFool算法是一种基于梯度的可自动调整步长的对抗样本生成算法。从攻击线性二分类模型推广到攻击一般多分类模型。 在攻击线性二分类模型时,扰动r为:

在f(x)=0时表示分割空间的超平面,超平面的两侧分别表示不同的类别。在二维平面上,它是一条直线,在三维立体空间中,它是一个平面。

把扰动r写成如下形式:

f(x)/‖g‖是空间中点到平面的距离,g/‖g‖是平面的单位法向量,因此,r可看作是从点x到平面的向量,它的方向垂直于平面并指向平面,长度等于它到平面的距离。

在攻击一般的非线性二分类模型时,采用迭代求解。最终扰动是每次迭代的扰动之和。

推广到攻击线性多分类模型时,扰动r是点x到各个超平面的向量中长度最短的那个。记第k个超平面为f_k(x)=0。记点x的原始预测概率最大函数为f_k ̂(x)。可以证明点x到第k个超平面的最短向量r_k为:

最优的扰动r是所有r_k中的最小值。推广到攻击一般的非线性多分类模型时,采用迭代求解,每次迭代中,取到每个超平面的扰动r_k的模最小者作为本次迭代调整样本的扰动r。最终扰动是所有迭代的扰动之和。

运行结果如下 可见最后一次将图片识别成了8,成功达到了扰动的目的

部分代码如下

def deepfool(img, label, model, epochs=1000):
    #epochs = 1000 # 最大迭代次数
    overshoot = 0.02 # 加大一点扰动,越过分类超平面
    input_shape = [28, 28, 1]
    w = np.zeros(input_shape)
    r_tot = np.zeros(img.shape) # 记录累积扰动
    orig_label = np.argmax(label)
    output = model(img)
    adv = img
    for epoch in range(epochs):
        scores = model(adv).numpy()[0]
        label = np.argmax(scores)
        print(epoch, ':', label, scores[label])
        if label != orig_label: # 无定向攻击成功
            break
        pert = np.inf
        grad_orig = compute_grad(tf.constant(adv), orig_label)
        for k in range(num_classes):
            if k == orig_label:
                continue
            cur_grad = compute_grad(tf.constant(adv), k)
            w_k = cur_grad - grad_orig
            f_k = (output[0, k] - output[0, orig_label]).numpy()
            #if np.linalg.norm(w_k) == 0:
            #    print('norm==0', epoch, k, orig_label)
            pert_k = abs(f_k) / (np.linalg.norm(w_k) + 1e-5)
            if pert_k < pert: # 选择pert最小值
                pert = pert_k
                w = w_k
        # 计算 r_i 和 r_tot
        r_i =  (pert + 1e-8) * w / (np.linalg.norm(w) + 1e-5) # 本次迭代的扰动
        r_tot = r_tot + r_i # 累积扰动
        adv = img + (1 + overshoot) * r_tot # 原样本加上扰动
    if epoch == epochs -1:
        succ = False
    else:
        succ = True
    return succ, adv, r_tot, epoch, label

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

相关文章
|
4月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
424 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
5月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
4月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
7月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
12月前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
9059 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
11月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章