这篇文章主要提出一个根据雅可比矩阵,即前向导数生成对抗样本的方法。论文一开始从一个简单神经网络入手,学习一个AND计算F(X) = x1 and x2,即0.7^0.3=0, 0.8^0.6=1。训练后,可得出下图:
接下来,对F(x)进行求导,因为呈对称,所以对一个求导就可以了,下图为对x2求导得出的结果图:
在尖峰附近,即在导数相对较大的地方,如X=(1,0.37)处,考虑X*=(1,0.43),差异很小,但F(X)=0.11,F(X*)=0.95,即成功生成对抗样本。由此可以得到的启发是:
- 小差异可导致结果误分类
- 不是所有的输入域都有助于找到对抗样本,如在(0,0)处扰动得很大才有可能会产生影响
- 使用前向导数的方法可以减少对抗样本的搜索域
由此论文提出如下算法:
该算法主要是迭代地修改X,直到达到扰动最大值或生成成功的对抗样本。迭代的步骤为首先生成雅可比矩阵,然后调用saliency_map方法,其实这个方法可以理解为根据雅可比矩阵和目标分类为输入向量的每一个特征打分,接下来选择分数最大者进行扰动。所以这个算法比较重要的部分就是怎么打分,如下所示,其中t为目标分类:
其实想法很好理解,在增加Xi的情况下时,希望Ft对Xi的导数越大越好且为正数,这样增加相应的Xi,Ft就会变大,这样就有助于最后分类到t的可能性,同理希望对不是t的导数越小越好且为负数。
文章还提出在具体的图片应用中,为避免特征的挑选过于严格,可考虑选择两个特征相加的值放入上述的式子中,即要进行枚举,这样的话就一次修改两个特征,具体算法如下所示: