【调制识别】PGD攻击中参数的含义
在PGD(Projected Gradient Descent)对抗攻击中,代码如下:
# 定义PGD对抗样本生成类
class AttackPGD(nn.Module): def __init__(self, model, config):super(AttackPGD, self).__init__()self.model = model # 模型self.rand = config['random_start'] # 是否随机初始化self.step_size = config['step_size'] # 步长self.epsilon = config['epsilon'] # 扰动量self.num_steps = config['num_steps'] # 迭代次数self.attack = config['attack'] # 是否进行对抗攻击def forward(self, inputs, targets):if not self.attack: # 如果不进行对抗攻击,直接返回模型的输出和输入return self.model(inputs), inputsx = inputs.detach() # 返回一个新的张量,从当前计算图中分离出来,即返回的新的张量不会参与梯度计算if self.rand: # 如果随机初始化,则将输入的每个元素随机偏移一个范围在 [-epsilon, epsilon] 之间的值x = x + torch.zeros_like(x).uniform_(-self.epsilon, self.epsilon) x.requires_grad_(True) # 设置 x 需要计算梯度original_training = self.model.training # 保存模型当前训练状态self.model.train() # 将模型设置为训练模式for i in range(self.num_steps): # 迭代 num_steps 次# 清除之前计算的梯度if x.grad is not None: # 如果 x 的梯度不为空,则将其置零,作用是防止梯度累积x.grad.zero_()with torch.enable_grad(): # 启用梯度计算logits = self.model(x).float() # 获取模型的输出loss = F.cross_entropy(logits, targets, reduction='sum') # 计算损失函数grad = torch.autograd.grad(loss, x, create_graph=False)[0] # 计算梯度x = x.detach() + self.step_size * torch.sign(grad) # 更新 xx = torch.min(torch.max(x, inputs - self.epsilon), inputs + self.epsilon)# 投影到inputs的边界[inputs-epsilon,inputs+epsilon]# x = torch.clamp(x, 0, 1) # 将 x 的值限制在 [0, 1] 之间x.requires_grad_(True) # 设置 x 需要计算梯度self.model.train(original_training) # 恢复模型的训练状态return self.model(x), x # 返回模型在对抗样本上的输出和对抗样本本身
在PGD(Projected Gradient Descent)对抗攻击中,参数的含义及代码逻辑解析如下:
参数解析
-
step_size
(扰动步长,示例值0.5)- 作用:每次迭代中沿梯度方向更新扰动的步长。
- 影响:步长越大,单次更新幅度越大,可能更快接近扰动边界,但可能跳过最优解;步长越小,更新更精细,但需要更多迭代次数。
-
epsilon
(扰动范围,示例值2)- 作用:对抗样本与原始输入之间的最大允许扰动(L∞范数约束)。
- 影响:控制扰动的不可察觉性,值越大对抗样本越容易被察觉,但攻击成功率可能更高。
-
num_steps
(迭代次数,示例值4)- 作用:攻击的迭代次数。
- 影响:迭代次数越多,攻击越强(更接近最优扰动),但计算成本更高。
代码逻辑解析
-
初始化
- 保存模型和配置参数(如是否随机初始化、步长、扰动范围等)。
-
生成对抗样本(
forward
方法)- 是否攻击:若关闭攻击(
attack=False
),直接返回原始输入和模型输出。 - 随机初始化:若启用
random_start
,在初始输入上添加均匀分布的随机扰动(范围[-epsilon, epsilon]
),避免陷入局部最优。 - 迭代扰动:
- 计算梯度:通过损失函数(交叉熵)的反向传播获取输入梯度。
- 更新扰动:沿梯度符号方向(
torch.sign(grad)
)以步长step_size
更新输入。 - 投影约束:将扰动后的输入限制在原始输入的邻域
[inputs-epsilon, inputs+epsilon]
内(L∞约束)。 - 循环迭代:重复上述步骤
num_steps
次。
- 是否攻击:若关闭攻击(
-
恢复模型状态
- 确保攻击结束后,模型的训练模式与攻击前一致。
参数设计示例
- 示例配置:
step_size=0.5
,epsilon=2
,num_steps=4
- 合理性:总扰动潜力为
step_size * num_steps = 2
,与epsilon
相等,确保在迭代中能探索整个扰动范围,达到最优攻击效果。
- 合理性:总扰动潜力为
关键细节
- 梯度符号方向:使用
torch.sign(grad)
而非实际梯度值,类似FGSM,但通过多次迭代(PGD)增强攻击效果。 - 投影操作:通过逐像素裁剪(
torch.min
/torch.max
)确保扰动不超过epsilon
,实现L∞约束。 - 数据范围:若输入归一化到
[0,1]
,需额外添加torch.clamp(x, 0, 1)
避免无效像素值(示例代码中未启用)。
总结
PGD通过多次迭代的梯度更新生成对抗样本,三个参数共同控制攻击强度与效率:
epsilon
约束扰动不可察觉性,step_size
和num_steps
平衡搜索速度与精度。- 代码中通过梯度上升最大化损失,同时投影确保扰动合法性,是经典的L∞-PGD实现。
相关文章:
【调制识别】PGD攻击中参数的含义
在PGD(Projected Gradient Descent)对抗攻击中,代码如下: # 定义PGD对抗样本生成类 class AttackPGD(nn.Module): def __init__(self, model, config):super(AttackPGD, self).__init__()self.model model …...
设备数据看板助力自动化工厂实现生产智能精细化管理
工厂数字化转型需要实现自动化设备生产现场可视化、设备系统间的互联互通,以及数据的智能决策。然而,当前许多制造企业仍面临着传统单机设备同质化严重、数字化服务能力不足、售后成本高企、系统集成效率低下等挑战。企业如何通过自动化装备看板和实时数…...
单点登录是是什么?具体流程是什么?
SSO⼀般都需要⼀个独⽴的认证中⼼(passport),⼦系统的登录均得通过passport,⼦系统本⾝将不参与登录操作,当⼀个系统成功登录以后,passport将会颁发⼀个令牌给各个⼦系统,⼦系统可以拿着令牌会获…...
什么业务需要用到waf
Web应用防火墙(Web Application Firewall,简称WAF)主要用于保护Web应用程序免受各种网络攻击,以下是需要用到WAF的业务类型及具体场景: 一、电子商务业务 业务特点:涉及用户注册、登录、支付等敏感操作&a…...
java中的Servlet4.x详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 Servlet 4.x 是 Java EE 8(现 Jakarta EE)规范的一部分,于 2017 年正式发布。作为 Servlet 技术的重大更…...
## Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决
好的,这是一份关于你遇到的 Docker Elasticsearch 启动报错问题的笔记,包含问题描述、我的分析判断以及最终的解决方案,适合用于整理成文章。 Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决 在使用 Docker部署 E…...
JavaScript:PC端特效--缓动动画
一、缓动效果原理 缓动动画就是让元素运动速度有所变化,最常见的就是让元素慢慢停下来 思路: 让盒子每次移动的距离慢慢变小,速度就会慢慢降下来核心算法:(目标值-现在位置)/10作为每次移动距离的步长停…...
【深度学习新浪潮】什么是多模态大模型?
多模态大模型是人工智能领域的前沿技术方向,它融合了多种数据模态(如文本、图像、语音、视频、传感器数据等),并通过大规模参数模型实现跨模态的联合理解与生成。简单来说,这类模型就像人类一样,能同时“看”“听”“读”“说”,并将不同信息关联起来,完成复杂任务。 …...
C++23 std::mdspan:多维数组处理新利器
文章目录 引言C23简介std::mdspan的定义与特点定义特点 std::mdspan的优势零成本抽象的多维数据访问减少内存开销提高代码灵活性 std::mdspan的应用场景科学计算图形学 相关提案示例代码使用动态扩展使用静态和动态扩展 总结 引言 在C的发展历程中,每一个新版本都带…...
09、底层注解-@Import导入组件
09、底层注解-Import导入组件 Import是Spring框架中的一个注解,用于将组件导入到Spring的应用上下文中。以下是Import注解的详细介绍: #### 基本用法 - **导入配置类** java Configuration public class MainConfig { // 配置内容 } Configuration Impo…...
码蹄集——N是什么、棋盘
MT1223 N是什么 给定一系列数字3、10、21、36…,输入正整数N,输出上述序列的第N个值。从N1开始计数。 格式 输入格式:输入正整数N 输出格式:输出整型 样例 1 输入:5 输出:55 备注:N小于…...
C++中聚合类(Aggregate Class)知识详解和注意事项
一、聚合类(Aggregate Class)概念 聚合(Aggregate) 是 C 中一类特殊的类类型,无用户自定义构造函数、无私有或受保护非静态数据成员、无虚函数、无基类(C11 起基类必须也是聚合且无私有/受保护成员&#x…...
python打卡day30
模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 python的学习就像…...
PostGIS实现栅格数据导出图片标准格式【ST_AsGDALRaster】
ST_AsGDALRaster 函数应用详解:将栅格数据导出为标准图片格式 [文章目录] 一、函数概述 二、函数参数详解 三、关键功能示例 四、GDAL 选项配置指南 五、性能优化建议 六、注意事项与限制 七、应用场景 八、总结 一、函数概述 ST_AsGDALRaster是PostGIS中…...
4.6 sys模块
sys --- 仅作了解 面试之前冲击一下 python的垃圾回收机制 import sys # 1. api_version : 获取python的内部版本号 print(sys.api_version) #1013 # 2. copyright: 获取cpython的版本 print(sys.copyright) #3.getfilesystemencoding() getdefaultencoding():获…...
「HHT(希尔伯特黄变换)——ECG信号处理-第十三课」2025年5月19日
一、引言 心电信号(ECG)是反映心脏电活动的重要生理信号,其特征提取对于心脏疾病的诊断和监测具有关键意义。Hilbert - Huang Transform(HHT)作为一种强大的信号处理工具,在心电信号特征提取领域得到了广泛…...
枪机定焦系统的自动控制装置
枪机定焦系统,作为一种监控设备,通常被广泛应用于各种需要高清、远距离监控的场合。该系统的主要特点是其镜头焦距固定,不能手动或自动调节,从而确保了监控画面的稳定性和清晰度。当提到枪机定焦系统采用自动功能时,可…...
【Unity】Unity中将字典序列化
Unity中将字典序列化,在预制体上能够看到字典的内容,也可以直接在预制体上拖拽给字典赋值 直接上代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class SerializableD…...
VTK|箱体切割器
文章目录 效果实现类头文件实现类源文件如何调用项目git链接 效果 实现类头文件 /*** file BoxClipperController.h* brief 该头文件定义了 BoxClipperController 类,用于管理基于盒子的网格数据裁剪操作。* details 该类提供了使用 vtkBoxWidget 对网格数据进行裁…...
CS50x 01 c
1 getchar() 在 C 语言里,getchar()是一个十分常用的函数,其功能是从标准输入(一般指键盘)读取单个字符。下面为你详细介绍它的用法。 基本语法 getchar()函数的原型定义在<stdio.h>头文件中,语法形式如下&am…...
确保高质量的音视频通话,如何最大化利用视频带宽
在当今数字时代,音视频内容随处可见,对于开发者来说,理解互联网带宽变得至关重要。我们的在线体验质量,无论是观看高清电影还是演唱会直播,都严重依赖于互联网带宽的概念。在本文中,我们将揭示视频带宽的复…...
@RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
在Java Web开发中,RequestParam、RequestBody、HttpServletRequest 和 HttpServletResponse 是常用的组件,它们用于处理HTTP请求和响应。下面分别介绍它们的使用场景和使用方法: 1. RequestParam RequestParam 是Spring MVC框架中的注解&am…...
HashMap 的特点及应用场景
一、HashMap 核心特点 1. 基本特性 键值对存储:基于 Map 接口实现,存储 Key-Value 对 允许 null 键/值:可以有一个 null 键和多个 null 值 非线程安全:多线程环境下需要额外的同步措施 无序存储:不保证元素的插入顺…...
day30 python 模块、包与库的高效使用指南
目录 一、Python库的分类与适用场景 表格 1.1 基础工具库 1.2 科学计算库 1.3 数据分析库 1.4 Web开发库 1.5 机器学习库 1.6 自动化脚本库 1.7 网络爬虫库 二、模块与包的导入方式 2.1 标准导入 2.2 从模块中导入特定项 2.3 非标准导入(不推荐&#x…...
JVM核心配置参数详解与调优指南
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 Java虚拟机(JVM)的配置参数直接影响应用程序的性能、稳定性和资源利用率。合理配置参数能够显著提升吞吐量、降低延迟并避免内存…...
python打卡第30天
知识点回顾: 一,导入官方库的三种手段。 使用 import 直接导入整个模块 import module_name 使用 from ... import ... 导入特定功能 from module_name import function_name 使用 as 关键字重命名模块或功能 import module_name as alias # 或 from mod…...
数据要素及征信公司数据要素实践
数据要素及征信公司数据要素实践 1.数据要素的定义与核心特征2.征信公司应用数据要素的实践路径3.总结1.数据要素的定义与核心特征 数据要素是数字经济时代的新型生产要素,指以电子形式存在、通过计算方式参与生产经营活动并创造价值的数据资源。 其核心特征包括: 新型生产…...
耗时十分钟,做了一个 uniapp 灵感泡泡机
最近,我用 UniApp 搭配 CodeBuddy 实现了一个充满童话感的小应用,名叫 IdeaBubbles(灵感泡泡机)。它是一个单页 WebApp,用来记录那些转瞬即逝的灵感时刻。整个界面以梦幻气泡和彩虹玻璃拟态为主题,视觉效果…...
《Head First 设计模式》第二章 - 笔记
本书是本人写的设计模式的笔记,写下核心要点,如果你掌握过设计模式,想快速阅读本书内容,这个笔记适合你阅读。如果你是新手,有 java 基础和 oo 设计原则基础,你适合跟我一样从零阅读本书。 第一章 观察者模…...
matlab绘制光学传递函数mtf曲线
在 MATLAB 中绘制光学系统的光学传递函数(Modulation Transfer Function,MTF)曲线可以通过以下步骤实现。MTF 是描述光学系统对物体细节的传递能力的函数,通常用于分析成像系统的性能。 假设我们有一个理想的光学系统,…...
贵州某建筑物挡墙自动化监测
1. 项目简介 某建筑物位于贵州省某县城区内,靠近县城主干道,周边配套学校、医院、商贸城。建筑物临近凤凰湖、芙蓉江等水系,主打“湖景生态宜居”。改建筑物总占地面积:约5.3万平方米;总建筑面积:约15万平…...
自定义协议与序列化
前言 书接上回,我们上一篇提到了协议并且我们草率的写了一个协议,然后又对TCP的R和W留了一个伏笔,我们今天彻底做个了断。 UDP是面向数据报的,它要么不读,要么就是一次读完的,所以不存在数据断断续续的问…...
MySQL中的Change Buffer是什么,它有什么作用?
MySQL 中的 Change Buffer(更改缓冲区)是 InnoDB 存储引擎使用的一种特殊数据结构,主要用于优化对二级索引(secondary indexes)的写操作性能。 它的核心作用是: 当对表进行 INSERT、UPDATE 或 DELETE 操作…...
Ubuntu 20.04之Docker安装ES7.17.14和Kibana7.17.14
你需要已经安装如下运行环境: Ubuntu 20.04 docker 28 docker-compose 1.25 一、手动拉取镜像 docker pull docker.elastic.co/kibana/kibana:7.17.14docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.14 或者手动导入镜像 docker load -i es7.17.14.ta…...
ThreadLocal作一个缓存工具类
1、工具类 import java.util.HashMap; import java.util.Map;public class ThreadLocalUtil {// 使用Map存储多类型数据private static final ThreadLocal<Map<String, Object>> CONTEXT_HOLDER new ThreadLocal<>();// 存储数据public static void set(Str…...
DeepSeek在旅游行业的智能化革命
2025年,从贵州全域智慧旅游平台的行程规划革命,到黄山景区"AI旅行助手"的实时服务升级,再到宁夏"游宁AI"的全域智能导览,DeepSeek通过技术创新与行业场景的深度融合,正在重新定义"智慧旅游"的内涵。这场变革不仅体现在效率提升层面,更通过…...
说一下响应状态码有哪些?
HTTP响应状态码分类(RFC 7231标准) 1. 1xx(信息类) 临时响应,表示请求已被接收,需要继续处理 100 Continue:客户端应继续发送请求体 101 Switching Protocols:服务器同意升级协议(如WebSocket) 102 Processing(WebDAV):服务器正在处理但未完成 2. 2xx(成功类)…...
ABAP实战案例--获取当前数据由哪个用户锁住
1、业务场景: A用户正在打开订单,订单已上锁;B用户打开时只允许查看并提醒由哪个用户正在操作该笔订单。 2、函数使用:ENQUEUE_READ 代码示例: DATA:LV_MESSAGE TYPE SY-MSGV1,LV_UNAME TYPE UNAME.DATA:LV_GARG …...
CSS 选择器入门
一、CSS 选择器基础:快速掌握核心概念 什么是选择器? CSS 选择器就像 “网页元素的遥控器”,用于定位 HTML 中的特定元素并应用样式。 /* 结构:选择器 { 属性: 值; } */ p { color: red; } /* 选择所有<p>元素,…...
【深度学习新浪潮】如何入门人工智能?
入门人工智能(AI)需要结合数学基础、编程技能、机器学习理论和实践项目,逐步深入。以下是一个系统的学习路径,适合零基础或初学者参考: 一、打好基础:数学与编程 1. 数学基础(关键) AI的核心依赖数学,尤其是以下领域: 线性代数:向量、矩阵运算、特征分解等(用于…...
软件工程第六章-详细设计
文章目录 程序流程图PAD图N-S图(盒图)流图根据PDL创建流图把程序流程图映射到流图 程序流程图 PAD图 N-S图(盒图) 流图 根据PDL创建流图 把程序流程图映射到流图...
Profinet转Modbus TCP协议转换技术,打通能耗监控‘最后一公里’
在工业自动化领域,Profinet与Modbus TCP是两种广泛使用的通讯协议。Profinet通常用于实时性要求较高的工业控制系统,而Modbus TCP则因其简单、开放的特性广泛应用于各类设备的通信。然而,由于两者在技术规范上的差异,直接的互联互…...
C++:因子问题
【描述】 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 【输入】 包括两个整数N、M。N不超过1,000,000。 【输出】 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1 【样例…...
SAP系统的委外业务是什么?委外采购(标准委外)与工序外协的区别有哪些?
【SAP系统研究】 #SAP #委外 #外包 #代工 委外业务是很常见的业务类型。 企业生产过程中,会在自制生产之外,产生委外加工业务,也称之为外包或者代工。还有一些企业,自己只负责设计、市场等业务,而将生产加工环节交给其他公司。 一、委外产生的原因 有的企业由于环评、…...
小乌龟git中的推送账户、作者账户信息修改
文章目录 修改git文档作者信息修改git推送用户信息参考文献 修改git文档作者信息 小乌龟中的用户信息为:作者信息,并非推送用户。 上边用户信息,修改的是文件的作者信息。如果想要修改git服务中记录的推送用户信息需要修改推送用户信息。 …...
vue2.0 组件
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
5月19日笔记
BGP的路由聚合 BGP(Border Gateway Protocol,边界网关协议)是互联网中用于在不同自治系统(AS)之间交换路由信息的一种协议。在BGP中,路由聚合是一种技术,它允许网络管理员通过减少路由表中冗余的…...
【SPIN】PROMELA并发编程(SPIN学习系列--3)
一、active与run:Promela的进程创建基石 在Promela语言中,**active和run**是构建并发模型的核心关键字,分别用于定义主动进程和动态创建被动进程: active proctype <进程名>() 作用:声明主动进程类型࿰…...
深入理解 Redisson 看门狗机制:保障分布式锁自动续期
在分布式系统的开发中,分布式锁是解决资源竞争、数据一致性问题的关键手段。Redisson 作为一个在 Java 领域广泛使用的 Redis 客户端框架,为我们提供了功能强大且易用的分布式锁实现。其中,看门狗(watchDog)机制更是 R…...
App 发布后才想起安全?iOS 后置混淆的实战方法与工具路线(含 Ipa Guard 应用体验)
作为一名 iOS 开发者,我们对“上线前打包”和“上线后复盘”都不会陌生。但坦白说,在忙完功能、优化、测试、提交审核这些流程之后,大多数人对“App 安全”只剩下一个念头:上线了,就算了吧。 然而,真正在 …...