5.6.1 JSMA基本原理
5.6.1 jsma基本原理
jsma(jacobian-based saliency map attack)是nicolas papernot等人在论文《the limitations of deep learning in adversarial settings》中提出的。jsma是典型的l0范数的白盒定向攻击算法,追求的是尽量减少修改的像素个数。该论文指出,通过jsma攻击图像分类模型,攻击成功率达到了97%,修改的像素的数量平均为总量的4.02%。jsma的特点是引入了saliency map即显著图的概念,用以表征输入特征对预测结果的影响程度。如图5-20所示,在一个典型的深度学习网络中,输入为x,维度为m,输出为y,维度为n,隐藏层的个数为n,前向计算的结果为f(x)。需要特别指出的是,f(x)为输出层没有经过softmax处理的结果,即所谓的logits输出。logits的输出经过softmax处理后会隐藏其丰富的信息,对生成对抗样本的效果有一定影响。事实上,在常见对抗样本算法的工程实现时,都是尽量直接使用logits的输出结果。在logits的输出结果中,值越小表明概率越低,概率低的会出现负值。logits可以理解为一个事件发生与该事件不发生的比值的对数。假设事件发生的概率为p,不发生的概率则为1–p,对应的logits定义为:
图5-20 典型的深度学习网络结构
定向攻击的目标标签为t,从saliency map中查找需要扰动的像素点的坐标的算法如下:
saliency map从输入的特征空间或者说搜索空间中,查找影响最大的点(p1,p2)。判断的标准max综合考虑了两个因素α和β。α代表了对预测为攻击目标t的贡献,β代表了对预测为非攻击目标t的贡献,贡献衡量的大小就是f(x)的梯度值。前向传播输出f(x)使用的是logits的输出结果,f(x)的梯度为正表明是正向贡献,反之为负向贡献,因此max=–αxβ,max越大越有利于预测为目标t。
完整的jsma算法可以表示如下。
jsma
输入:输入为x,输出为y,前向传播输出f(x),定向攻击目标输出为y*,输入的特征空间Γ,扰动为,最大可以接受的扰动为
x*← x
Γ={1…|x|}
while f(x*)≠y* and ‖δx‖< do
计算前向梯度 ?f(x*)
s = saliency_map (?f(x*),Γ,y*)
选择满足imax =arg max s(x,y*)[i] 使用更新x*
x = x* - x
end while
jsma(jacobian-based saliency map attack)是nicolas papernot等人在论文《the limitations of deep learning in adversarial settings》中提出的。jsma是典型的l0范数的白盒定向攻击算法,追求的是尽量减少修改的像素个数。该论文指出,通过jsma攻击图像分类模型,攻击成功率达到了97%,修改的像素的数量平均为总量的4.02%。jsma的特点是引入了saliency map即显著图的概念,用以表征输入特征对预测结果的影响程度。如图5-20所示,在一个典型的深度学习网络中,输入为x,维度为m,输出为y,维度为n,隐藏层的个数为n,前向计算的结果为f(x)。需要特别指出的是,f(x)为输出层没有经过softmax处理的结果,即所谓的logits输出。logits的输出经过softmax处理后会隐藏其丰富的信息,对生成对抗样本的效果有一定影响。事实上,在常见对抗样本算法的工程实现时,都是尽量直接使用logits的输出结果。在logits的输出结果中,值越小表明概率越低,概率低的会出现负值。logits可以理解为一个事件发生与该事件不发生的比值的对数。假设事件发生的概率为p,不发生的概率则为1–p,对应的logits定义为:
图5-20 典型的深度学习网络结构
定向攻击的目标标签为t,从saliency map中查找需要扰动的像素点的坐标的算法如下:
saliency map从输入的特征空间或者说搜索空间中,查找影响最大的点(p1,p2)。判断的标准max综合考虑了两个因素α和β。α代表了对预测为攻击目标t的贡献,β代表了对预测为非攻击目标t的贡献,贡献衡量的大小就是f(x)的梯度值。前向传播输出f(x)使用的是logits的输出结果,f(x)的梯度为正表明是正向贡献,反之为负向贡献,因此max=–αxβ,max越大越有利于预测为目标t。
完整的jsma算法可以表示如下。
jsma
输入:输入为x,输出为y,前向传播输出f(x),定向攻击目标输出为y*,输入的特征空间Γ,扰动为,最大可以接受的扰动为
x*← x
Γ={1…|x|}
while f(x*)≠y* and ‖δx‖< do
计算前向梯度 ?f(x*)
s = saliency_map (?f(x*),Γ,y*)
选择满足imax =arg max s(x,y*)[i] 使用更新x*
x = x* - x
end while