Transferable Sparse Adversarial Attack

本文主要研究了基于0-范数的稀疏对抗攻击,这种攻击只需要修改图像中的几个像素点就可以成功,但先验稀疏攻击方法由于对目标模型过拟合,在黑盒协议下的可转移性比较低,本文引入一种生成器架构来缓解过拟合问题,以提高其可转移性。

这种框架,将原始图像输入生成器,通过一次前馈推理快速获得对抗图像,不需要梯度反向传播。该框架将对抗扰动解耦为两个分量,分别控制畸变大小和被扰动像素的位置。然后再位置图上应用稀疏正则化,以达到满意的稀疏性,映射的每个点都是一个二进制值,即0/1,这会导致离散优化问题。为了用端到端方式优化训练阶段的稀疏扰动,我们设计了一个特殊的0-1量化算子,同时保证训练阶段和测试阶段的一致性。

主要贡献

1)我们提出了一个基于0-范数的稀疏对抗攻击框架,以获得更好的可转移性。
2)我们进行了大量的实验来评估稀疏对抗攻击的可转移性。

方法

问题分析

本文中,\delta的约束由0-范数和\infty-范数度量:

在以往的稀疏攻击中,非常依赖f相对于当个图像x的梯度信息,会导致过拟合,为了缓解这种过拟合现象,本文引入了一种基于生成器的方法,生成器学习自然图像和稀疏对抗图像之间的映射,省身骑的参数是优化的数据分布,而不是单一的图像 增加训练数据量可以减少过拟合,从而提高可转移性。在这个假设下,问题转化为如何设计一个基于生成器的框架来解决问题1。

为了在基于生成器的框架中解决近似的1-范数约束问题,一个想法是直接添加一个'1-范数正则化δ。然而,δ上的1-范数正则化将使扰动的值在0附近收敛,从而导致一个密集的解。如果在这个解上应用二进制量化来获得一个真正的稀疏扰动,得到的样本可能由于信息丢失而不是对抗式的。

我们通过将扰动分解为两个变量的元积来解决这个问题,这两个变量包括一个控制扰动大小的矢量和一个控制扰动位置的二进制掩模

 然后我们联合优化m(扰动的位置的向量)和r(扰动的大小),对m只应用1-范数正则化而不应用δ。在m上1-范数正则化可以得到一个稀疏映射,同时不影响对成功攻击的扰动大小的优化。

r被\infty-范数所限制,m每个元素都是一个二进制,m的二进制值引起了一个具有挑战性的离散优化问题,因为它不能直接使用任何基于梯度的连续求解器进行优化。
为了解决这一问题,我们设计了一个0-1随机量化算子,将连续向量转换为离散向量,并实现梯度反向传播。

框架

生成器G包括一个编码器和两个就解码器的分支,

编码器E以原始样本x为输入,生在z=E(x),z进入两个解码器D1,D2

D1是类似于无穷范数生成器中的解码器,输出一个表示扰动大小的矢量,运用尺度运算来实现投影,将其限定在一个有效的范围内。

D2输出一个向量Q,为了得到控制扰动像素位置的离散向量m,要将Q转换成一个二值量化算子,但在训练中使用这种量化算子会导致梯度消失,所以在训练阶段设计了一个包含随机性的算子,来表示是否量化Q为随机变量x,if x=1,将其量化为1/0(x=1是阻止梯度反向传播,x=0只允许梯度流),x服从伯努利分布,,概率分布为:

 损失函数

  对抗损失:使用C&W中的损失函数作为对抗性损失;

稀疏损失

量化损失 

设计了一个特殊的量化算子,它在训练和测试中处于不同的状态。这可能会由于量化带来的信息丢失而带来一定的测试误差。为了减少训练和测试之间的差距,一个直接的解决方案是减少量化误差Q,量化参数应尽可能接近全精度参数,期望测试性能接近训练性能。
量化损失为:

 

<think>好的,我现在需要回答用户关于Cesium中Transferable用法的相关问题。首先,我需要回忆Cesium框架中是否确实有Transferable这个功能或者相关的接口。Cesium是一个用于构建3D地球和地图应用的JavaScript库,通常用于WebGL渲染。Transferable对象在Web开发中通常与Web Workers相关,用于高效传输数据,避免复制开销。 可能用户指的是使用Transferable Objects来优化Cesium中的数据传递,比如传递大型几何数据或图像数据到Web Worker进行处理。Cesium本身是否有内置的支持呢?我需要查阅Cesium的官方文档或者社区讨论。 记得Cesium的Web Worker使用案例中,可能会用到postMessage传输数据,而Transferable可以在这里应用。例如,在处理地形数据或大量实体时,使用Transferable如ArrayBuffer来转移所有权,提升性能。但Cesium是否有封装好的方法或示例呢? 另外,需要注意Cesium的版本,不同版本可能有不同的实现方式。用户的问题中没有指定版本,可能需要给出通用方法。例如,在创建Web Worker时,将数据作为Transferable传递,例如: ```javascript const worker = new Worker('worker.js'); const positions = new Float64Array([...]); worker.postMessage({positions}, [positions.buffer]); ``` 在Cesium中处理几何体时,可能需要将顶点数据转换为TypedArray,然后通过Transferable发送到Worker线程进行计算,处理完毕后再传回主线程更新。这可能涉及到Cesium的Geometry和GeometryInstance等类的处理。 同时,要注意内存管理,一旦数据被转移,原线程就不能再访问该数据。需要确保在Cesium渲染管线中正确使用,避免出现数据访问错误。 可能还需要参考Cesium的官方示例或GitHub issues,是否有相关的最佳实践。例如,Cesium的Web Worker文档或性能优化指南是否提到Transferable的使用。 总结回答的结构:先解释Transferable在Web开发中的作用,再说明在Cesium中的潜在应用场景,给出代码示例,最后注意事项。同时生成相关问题,引导用户深入探讨。</think>### Cesium中Transferable的应用与实现 在Web开发中,**Transferable Objects** 用于高效传递大型数据(如`ArrayBuffer`)到Web Worker,避免数据复制开销[^1]。在Cesium中,这一技术可优化几何数据或影像处理的性能。 #### 实现步骤 1. **数据准备**:将Cesium几何数据转换为可转移的TypedArray。 例如,提取`Primitive`的顶点数据: ```javascript const positions = Cesium.ComponentDatatype.toTypedArray( positionsAttribute.values, ComponentDatatype.FLOAT, 3 ); ``` 2. **数据传输**:使用`postMessage`传递数据并标记Transferable: ```javascript const worker = new Worker('geometry-processor.js'); worker.postMessage({ positions }, [positions.buffer]); ``` 3. **Worker处理**:在Web Worker中重构数据并计算: ```javascript self.onmessage = (e) => { const positions = new Float32Array(e.data.positions); // 执行计算(如简化几何或生成法线) self.postMessage({ result }, [result.buffer]); }; ``` 4. **主线程更新**:接收结果并更新Cesium实体: ```javascript worker.onmessage = (e) => { const geometry = new Cesium.Geometry({ attributes: { position: new Cesium.GeometryAttribute(...) } }); primitive.geometry = geometry; }; ``` #### 注意事项 - **内存管理**:转移后的数据原线程不可访问,需确保Worker处理完成后再更新场景。 - **兼容性**:TypedArray的字节对齐需符合Cesium的几何格式要求(如`POSITION`属性为3分量浮点数)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值