十五、Tactics of Adversarial Attack on Deep Reinforcement Learning Agents
1、简介
之前提到的《ADVERSARIAL POLICIES: ATTACKING DEEP REINFORCEMENT LEARNING》一文在转移概率矩阵和回报函数中考虑了victim agent的动作利用PPO和self-play的方法实现了adversarial attack,这个方法并没有让adversarial agent学会如何去干扰、攻击victim agent而是通过自身的一些动作来影响victim agent的observation从而使victim agent采取”不好“的动作,进而实现了attack。
《Tactics of Adversarial Attack on Deep Reinforcement Learning Agents》这篇文章介绍了两种针对已经训练好的单个智能体场景的attack方法:strategically-timed attack和enchanting attack,思路和《ADVERSARIAL POLICIES: ATTACKING DEEP REINFORCEMENT LEARNING》有所不同。
2、strategically-time attack
strategically-time attack和《ADVERSARIAL POLICIES: ATTACKING DEEP REINFORCEMENT LEARNING》的共同之处都是想要通过attack来减小agent的reward,但是strategically-time毕竟是针对单个智能体的方法,所以与ADVERSARIAL POLICIES的方法还是有着本质的区别。strategically-time attack会学习在合适的时机对观测的状态做一些扰动,从而使回报减小。
minb1,b2,…,bL,δ1,δ2,…,δLsˉt=R1(sˉ1,…,sˉL)st+btδtbt∈{0,1},∑tbt≤Γ for all t=1,…,L for all t=1,…,L(15.2.1)
公式中的 bt 用来决定”when to attack“,当等于1的时候就attack,等于0时就不进行任何操作,并且认为限定了attack的次数:Γ 。所谓的attack就是对状态进行一个微扰(perturbation)δt ,但是这个微扰到底是怎么起作用的还需要解决”how to attack“这个问题。
文中解决”when to attack“的思路和之前advice exchange中解决”when to advise“的思路很像。”when to advise“中采用了”importance advise“:I(s)=maxaQ(s,a)−minaQ(s,a) ,而”when to attack“采用的是:c(st)=maxatπ(st,at)−minatπ(st,at) ,这个公式也是想了解在一个状态下采取不同的动作会带来怎样不同的影响,如果采取不同的动作对收益影响甚微,那就没必要在这个时候对状态进行微扰,反之如果得到一个很大的 c(st) ,就说明采取某个动作会显著地增加收益,也就意味着agent会很倾向于选择该动作(因为agent已经训练好了),所以就要对这个状态进行扰动从而使agent不采用该动作,这就达到了attack的目的并且体现了”strategically-time“的含义。c(st)=maxatπ(st,at)−minatπ(st,at) 这个公式更适合policy-based算法,文章针对value-based的算法也提出了类似的公式:
c(st)=atmax∑akeTQ(st,ak)eTQ(st,at)−atmin∑akeTQ(st,ak)eTQ(st,at)(15.2.2)
不难发现这是softmax的形式,只不过假如了参数 T ,通常称这个参数为”temperature“。T越大,maximize操作就越”soft“,即那些很小的数有了更高的概率被选中。
解决了”when to attack“接下来就要解决”how to attack“。首先要明白在这篇论文中attack的本质是什么?由于文章采用的是Atari游戏,agent接受的状态是图像,strategically-time attack要做的就是找到一个非常微小的扰动,经过这样的扰动之后图像产生的变化几乎无法用肉眼观测但是从图像分类的角度来讲它却已经是另外一个类别了。用公式来描述就是:
minimize such that D(x,x+δ)C(x+δ)=tx+δ∈[0,1]n(15.2.3)
公式中的 C(x) 是用来确定x的类别的,t就是target class,在本文中将那些产生很小收益,甚至是负的收益的 动作 作为misclassification即target class。也就是说我们要找到最小的 δ 使得 x 和 x+δ 不是同一类。但是,在实际应用上,C(x+δ)=t 是一个高度非线性的,这很不利于求解,为此在《Towards Evaluating the Robustness of Neural Networks》一文中,作者设计了一些目标函数 f,当且仅当 f(x+δ)≤0 时,有 C(x+δ)=t(具体怎么设计出来的我也不知道)。所以上式就可以变成:
minimize such that D(x,x+δ)f(x+δ)≤0x+δ∈[0,1]n(15.2.4)
由于 f(x+δ) 是人为设计的目标函数,所以它肯定能取到0或者负数,因此还可以变形成更简单的形式:
minimizeD(x,x+δ)+c⋅f(x+δ)s.t. x+δ∈[0,1]n(15.2.5)
D 是一个用来衡量 x, x+δ 之间距离的metric,通常用范数表示,以二范数为例:D(x,x+δ)=∣∣x+δ−x∣∣22=∣∣δ∣∣22 ,再选择一个 f ,这样又可以变形成:
minimize∣∣δ∣∣22+c⋅f(x+δ)f(x′)=max(max{Z(x′)i:i=t}−Z(x′)t,−κ)s.t.x+δ∈[0,1]n(15.2.6)
Z(x) 是softmax的输入,即CNN的倒数第二层。通过不断训练,调整 δ 就可以找到合适的perturbation,从而制造出adversarial example,它可以误导agent去采取不好的动作,比如说在Pong的游戏中,agent本该向上移动去击打小球,但是因为观测到了经过扰动的状态结果采取了向下的动作。
3、enchanting attack
我个人认为strategically-time attack这种用回报函数来学习的方法还是比较传统和常规的,而enchanting attack则更有趣了一些,它的目标诱导agent前往一个指定的状态 sg 从而使agent的performance变差。整个实现的过程也比strategically-time attack更加复杂,需要结合”video prediction model “和”sample-based action planning“。整个流程是:
(1)训练video prediction model
(2)随机采样动作,生成N个动作序列
(3)利用训练好的video prediction model预测在状态 st 采取一个动作序列之后会到达的最终状态,并计算该状态和指定状态 sg的 D
(4)利用类似Top-K的方法进行迭代直到用完所有采样得到的动作序列,从而得出最优的动作序列
(5)利用动作序列,生成adversarial examples,诱导agent走向 sg

第一步”video prediction model“在《Action-Conditional Video Prediction using Deep Networks in Atari Games》一文中有比较详细的介绍,用到了autoencoder和deconvolution(Transposed convolution)相关的知识。我们知道,autoencoders是一种unsupervised learning,他可以从较低维度的没有标注的数据中学到特征。

但是在RL问题中,agent会采取动作,这些动作势必会对之后的video frame有影响所以需要把动作也考虑进去。通过一些transformation的手段将action作为额外的输入加入到了autocoder的过程中。

首先encoding的过程很简单,就是将一系列过去的frames输入到一个CNN里,CNN会提取出一些high-level的特征,这个过程就是encoding
htenc=CNN(xt−m+1:t)(15.3.1)
下标t代表time step t。再将提取出来的特征和动作向量相乘,相当于根据特征对动作赋予权重,再将这个赋予了特征权重的动作与一个权重矩阵相乘,并且要加上偏置bias(其实有时候也可以看作threshold)
ht,idec=j,l∑Wijlht,jencat,l+bi(15.3.2)
transformation之后进行decoding,得到output
x^t+1= Deconv (Reshape (hdec))(15.3.3)
这里的deconvolution就是convolution的逆过程,也称为transposed convolution,首先回顾一下convolution的过程:

input是 $ 4 \times 4$ ,output是 2×2 ,卷积核可以写成一个矩阵:
w=⎝⎛w0,0w1,0w2,0w0,1w1,2w2,1w0,2w1,2w2,2⎠⎞
output size与input size之间有一个换算关系:$o=\left\lfloor\frac{i+2 p-k}{s}\right\rfloor+1 $ ,o:output;i:input;p:padding;s:stride;⌊⌋:floor
则有:y=wTx(+b) ,deconvolution就是即将这个过程反过来,同样有一个output size与input size的换算关系:i=(o−1)s+k−2p;当不能整除时,需要考虑余数,但是通常都会用padding方法使得它能够整除。其过程如下:

到这里就只剩下Loss function没有定义了,文中提到如果训练模型的时候每次只做以此预测,预测的误差会随着时间逐渐变大,所以文中采用了多步预测方法,计算并减小K步预测产生的损失,这里的K步就类似于前面提到的动作序列。
LK(θ)=2K1i∑t∑k=1∑K∥∥∥x^t+k(i)−xt+k(i)∥∥∥2(15.3.4)
公式中的 i 我猜测是iterations,没过K time steps模型就会把预测得到的frame作为下一组history frame输入。这个方法主要是用来预测短期的future frame,当短期的预测能够比较好的收敛之后再来微调model使它具备一定的预测比较长远的frame,loss的参数应该是来自CNN和transformation,用SGD来减小loss寻找最优解。
训练好了”video predicting model“就要想办法获得一个动作序列,让agent在一些状态被”误导“,采取了我们希望他进行的动作,从而被“骗到”我们为它指定的状态。论文中的做法是首先随机采样大量的动作序列样本 {At:t+Hn}n=1N ,比如2000个序列,每个动作序列都含有相同数量的动作,比如20个动作也就是20个step,然后在当前状态 st 用video prediction model预测出执行了一个动作序列后会到达什么状态:st+H(n)=M(st,At:t+H) , M 为video prediction model。同样是利用metric D 计算这2000个预测出的最终状态和指定状态 sg 之间的距离,然后保留前K个动作序列,比如K=400。文中提到要根据这K个动作序列“refit categorical distributions”我的理解是选出了前400个动作序列之后再综合出一个最优的,比如第一个动作有80%的序列都是向上,那么就将第一个动作定为向上,尽管排名第一的序列的第一个动作可能是向下。最后我们将得到最优的动作序列:At:t+H∗
有了这个动作序列之后就可以制造adversarial examples了,因为我们是将动作作为misclassification的所以有:
minimize such that D(x,x+δ)C(x+δ)=at∗x+δ∈[0,1]n(15.3.5)
接下来的步骤和strategically-time attack相同,直到找到了合适的 δ 然后制造出了第一个adversarial example,把它传递给agent,则状态 x+δ 对应的类别即动作就是动作序列中的第一个动作,agent执行该动作,来到状态 st+1 ,重复上面的步骤,找到 st+1+δ 对应动作为序列中的第二个动作……依此类推agent将被误导到 sg ,从而实现了attack。