机器学习之九(读书笔记)
- Attack ML Models
- Deffense
- Adversarial Attack
十五、Attack and Defense
Attack
1、什么是攻击
想做什么样的攻击?
举例:现有一个影响侦测的模型,原本它的功能是输入一张图片,它就能告诉你这张图片里面是什么样的东西:
我们现在做这样的事情:把图片上加上一些杂讯,这些杂讯不是随机生成的杂讯,加上这些杂讯就能得到稍微有点不一样的图片,把这个稍微有点不一样的图片丢到network里面,network就能得到非常不一样的结果:
2、Loss Function for Attack
怎么找出特别的杂讯呢?
一般的network fθf_\thetafθ,现在input一张image x0x^0x0,通过fθf_\thetafθ会得到y0y^0y0,这个输出的y0y^0y0跟正确的答案ytruey^{true}ytrue越接近越好,你会minimize这个y0y^0y0和ytruey^{true}ytrue的距离,即cross entropy。
现在要对这个network进行攻击:
(1)Non-targeted Attack(没有目标的攻击):我们要找另外一张新的图片x′x'x′(还不知道它长什么样子),把它丢到fθf_\thetafθ里面,output y′y'y′,接下来我们希望这个y′y'y′和ytruey^{true}ytrue的距离越远越好:
攻击和训练有本质上的不同,在训练时,我们的输入是固定的,我们调整的是network的参数θ\thetaθ;但是在攻击时,参数θ\thetaθ是固定的,network已经训练好了,不会去动它,要做的事情是找一张输入的图片,让它得到的答案越错越好。
(2)Targeted Attack(有目标的攻击):希望output y′y'y′不仅是离正确答案越远越好,同时希望它跟一个错误的答案距离越近越好,但是会有一个额外的限制–你找出的image x′x'x′与x0x^0x0越接近越好:
Constraint中的ε\varepsilonε怎么定义?
用Δx\Delta xΔx表示x′x'x′和x0x^0x0之间的差异:
(1)L2-norm:
(2)L-infinity:
为什么L-infinity是一个比较适合的distance,在影像的攻击上面?
举例:假设有一张图片,这个图片只有4个pixel,这4个pixel拉成一个vector时是一个12维的vector,因为每个pixel得用RGB三个颜色来表示,现在把这个图片的每一个维度都加上一点点变化,产生一张新的图片,但是因为这个变化非常小所以看不出这两张图片有什么样的差异;另外一个改变是说把右下角的pixel的颜色改变,而且变的比较多。
如果现在使用L2-norm比较用以上两种方式改变的图片分别与原图之间的distance,算出来是一样的。
如果是用L-infinity,可以看出两个向量之间最大差距有多大,上面的图片对原图的L-infinity是比较小的,下面的是比较大的。
3、如何去attack
以上定义了 Loss Function LLL,distance ddd,我们要找一个x′x'x′可以让L(x′)L(x')L(x′)的值越小越好,同时这个x′x'x′有一个限制:它跟x0x^0x0的差距不可以太大,这里写作x∗x^\astx∗:
怎么找x∗x^\astx∗?–Gradient Descent
把现在的x′x'x′当作network的参数来看待,之前训练调的是network参数,现在训练调整x′x'x′,找到可以让loss最小的x∗x^\astx∗。注意这个gradient descent的过程是把限制去掉的情况下,即:
这个Gradient Descent的过程:
(1)把原来的图x0x^0x0当作我们随机初始化的值;
(2)update xxx:在每一个iteration(迭代)里面,我们就先算出xt−1x^{t-1}xt−1对loss的gradient,乘上learning rate,再把xt−1x^{t-1}xt−1减去这个值,得到新的xtx^txt。
现在把限制加回去,即:
因为有了限制我们需要改版的gradient descent:每一个iteration(迭代)里面我们都去check这个xtx^txt有没有符合我们的限制,如果xtx^txt没有符合我们的限制,即xtx^txt和x0x^0x0的距离大过ε\varepsilonε,就进行一个修正,这个修正目标就是让xtx^txt和x0x^0x0的距离小于我们的限制。
怎么做修改这件事呢?
想象写了一个function fix(xt)fix(x^t)fix(xt),穷举所有跟x0x^0x0距离在ε\varepsilonε以内的所有xxx,然后看符合限制的xxx中的哪一个跟不符合限制的xtx^txt最接近,找出之后,取代xtx^txt。
怎么写这个function?
(1)如果用的是L2-norm:
希望xxx落在x0x^0x0为圆心,半径为ε\varepsilonε的圆内,假设做gradient descent,xtx^txt跑到圆圈之外了,就得把它抓回来,即把图中的x0x^0x0和xtx^txt连起来,落在圆上的点就是离xtx^txt最近同时又是圆圈内的点。
(2)如果用的是L-infinity:
x0x^0x0在中间,不管往上下左右的方向走的距离都不可以超出ε\varepsilonε的距离,假设做gradient descent,xtx^txt跑到圆圈之外了,这个xtx^txt如果在yyy轴的方向超过了ε\varepsilonε,就把yyy轴的距离变为ε\varepsilonε,xtx^txt如果在xxx轴的方向超过了ε\varepsilonε,就把xxx轴的距离变为ε\varepsilonε,最终落在以x0x^0x0原点2、坐标为(ε\varepsilonε,ε\varepsilonε)的点上(也可能不是,某一轴上没有超过时,这个轴的坐标为原来的大小)。
4、attack举例
希望把一张image丢到network里面,不仅不可以说这张image是“Tiger Cat”,而且还得说这张image是“Star Fish”,network为ResNet-50,把如下图片丢进去,它说这张图片为“Tiger Cat”:
模型如下:
经过一轮攻击后,从视觉上两张图片没有差别,但是丢到network里面就会发现Attack Image为“Star Fish”,而且它的信心分数为1.00,也就是它很可能这“Star Fish”:
把这两张图片相减之后乘上50倍,得到的图片为:
说明这两张图片之间确实有非常微小的差异,就足以骗过machine,让它觉得右边这张图片确实是“Star Fish”。
那么会不会是因为两者都是生物才导致这样的结果,那么就是使用“Tiger Cat”变成“Keyboard‘:
结果也和上述一样。
会不会是因为这个network很弱?
在attack时加入的杂讯并不是随机加入的,而是通过gradient算出来的信号,而这个信号加上去可以让辨识的结果坏掉。如果随机加一些杂讯,是骗不了今天的network。
举例来说,对”Tiger Cat“的image加一些杂讯,这些杂讯很微小,跟刚才上面例子的杂讯scale相同,结果对机器来说这张image仍然是一只”Tiger Cat“,如下图左上;现在把这个杂讯加大,从视觉上来说有点不一样,结果对机器来说确实有些不同,为”tabby cat“,如图左下;现在对图片加入更多的杂讯,图片从视觉上明显不同,结果对机器来说这是一只”Persian cat“,如图右上;再进一步加大杂讯,视觉上已经有一些看不出这是什么了,机器说这是一个”fire screen“,如图右下:
为什么机器可以轻易被attack?
假设x0x^0x0是一个在高维平面上的一个点,如下图,如果把这个点根据某个方向随机地移动,你会发现多数地时候在这个点附近它是”Ytiger cat“的信心分数都是非常高的。如果把这个点移动多一点,就会变成是”YPersian cat“的信心分数或者是”YEgyptian cat“的信心分数高,但是它们仍然还是猫。但是这个是随机的方向,而x0x^0x0是在一个高维空间中。
在这个高维空间中,有某一些神奇的方向,在这些方向里面,”Ytiger cat“的信心分数高的范围非常地狭窄,只要把x0x^0x0稍微改变一点,它是另外一个完全不相干地东西的信心分数就会忽然变得很高。
除了deep learning model,传统的decision tree和svm,它们也可以被attack。
5、Attack Approaches
attack的方法很多,列出如下几种供参考:
- FGSM(https://arxiv.orgt/abs/1412.6572)
- Basic iterative method(https://arxiv.orgt/abs/1607.02533)
- L-BFGS(https://arxiv.orgt/abs/1312.6199)
- Deepfool(https://arxiv.orgt/abs/1511.04599)
- JSMA(https://arxiv.orgt/abs/1511.07528)
- C&W(https://arxiv.orgt/abs/1608.04644)
- Elastic net attack(https://arxiv.orgt/abs/1709.04114)
- Spatially Transformed(https://arxiv.orgt/abs/1801.02612)
- One Pixel Attack(https://arxiv.orgt/abs/1710.08864)
- …only list a few
不同的attack的不同之处往往在于它们有不同的constraints,还有它们使用不同的optimization methods来minimize这个loss function。
这里介绍 Fast Gradient Sign Method(FGSM) 这种方法:
寻找x∗x^\astx∗的方法–
其中,Δx\Delta xΔx(xxx对LLL的gradient算出来,然后把这个gradient vector里面的每一个dimension拿出来,如果某一个dimension是负的,给-1,如果某一个dimension是正得,给+1):
多攻击几次,结果会更好。
用图示得方法解释FGSM:
假设distance constraints使用L-infinity:先把gradient算出来,假设如下图所示得方向,如果是用一般的gradient descent,那就是gradient的步长乘上learning rate,接下来update x0x^0x0,就得到x1x^1x1,但是FGSM告诉你说,你只需要做一次update,一次update就直接把x0x^0x0挪到x∗x^\astx∗,就结束了,如下图所示:
FGSM这个方法并不在意gradient的值,它只在意gradient的方向。
6、White Box v.s. Black Box
刚才将的方法是White Box的attack ,也就是说,在刚才的攻击里,我们需要知道network的参数θ\thetaθ,我们根据这个参数才能够计算gradient,才能找到最具有攻击力的x′x'x′。这种我们需要知道network parameters θ\thetaθ的攻击我们叫做White Box Attack。
既然只要知道network 参数就能攻击,那么只要保护好network参数就是安全的吗?大多数的on-line API,你不可能获取到它的model parameters。或许保护network参数可以规避被攻击的风险。
但是事实上,还可以做Black Box Attack,就是在不知道network参数的情况下也是可以进行攻击的。
怎么做Black Box Attack?
举例:现在有一个network,它是on-line API,你不知道它的model 参数,甚至不知道它背后的架构,对你来说它就是一个黑盒子。今天假设你知道这个network是用什么样的training data训练出来的,你就可以使用训练这个network所得到的训练资料,自己去训练一个network,叫做Network Proxy。
接着,使用这个Network Proxy去找出attacked object,也就是使用这个Network Proxy去计算gradient去找出一张image(假设这里做的是影像辨识)可以成功攻击这个Network Proxy,接下来你把这个可以成功攻击Network Proxy的image 拿去攻击这个对你来说是黑盒子的network,很大可能可以成功。
所以我们应该保护好我们的训练资料。
但是即便如此,别人有可能还能进行攻击!–假设这是一个线上的API,做的是影像辨识,别人也可以丢大量的image进去,然后得到这些image的辨识结果,把这些东西收集起来也可以当作训练资料。一样可以采用以上方式攻击。
用不同网络攻击不同的网络的结果(Black Box Attack):
7、Universal Adversarial Attack(普遍对抗性攻击)
Universal Adversarial Attack:可以找到一个非常神奇的attacked signal,这个attacked signal加到database中的所有image ,多数都可以让你的database里的image辨识错误,即 不需要为每个不同的影像添加不同的杂讯。
参考文献:https://arxiv.org/abs/1601.08401
8、Adversarial Reprogramming(对抗性重编程)
本来有一个network,它当时train的时候是想要完成A任务,但是我们给它看一些神奇的杂讯,让network完成的是B任务。
文献Gamaleldin F. Elsayed, Ian Goodfellow, Jascha Sohl-Dickstein, “Adversarial Reprogramming of Neural Networks”, ICLR, 2019做的事情如下:
你有一个很强的影像辨识的模型,然后它希望可以做到说这个模型可以去数我们输入的图片里面有几个方块,有几个方块就会对应一样事物,如下图。
本来这个network的工作是来辨识各种不同的东西,但是我们把这个network作一番改造,希望它可以辨识方块,改造方式并不是对这个network的参数本身做任何改变,但是今天我们只是在我们要数方块的小的图片旁边加上杂讯,丢到下面的ImageNet Classifier 里面,他就会帮你做数方块这件事,可以改变一个network原来想做的事。(这个例子中的就是把影像辨识的模型,从完成辨识各种东西变成数方块)
攻击也不仅限于图片,在文字、语音上都可以进行。
Defense
Adversarial Attack(对抗性攻击)无法通过权重规则化、dropout和model ensemble(模型集成)被防御。
两大类defense:
(1)Passive defense(被动的防御手段):不对network做任何的改变,另外加一个防护罩帮它阻挡外界的攻击,这个可以看作是Anomaly Detection(异常检测)的特例。
(2)Proactive defense(主动的防御手段):我们在训练模型时就把防御这件事情加到训练模型中。
1、Passive defense
概念:现在有一个network,它看到一张被攻击的图片,它会把这张图片的内容看成别的东西,那我们在这个network前面加一个filter,这个filter就是一个防护罩,一般的图片通过这个这个filter不会发生什么,但是如果是杂讯通过这个filter,希望杂讯的伤害可以被减轻。
什么样的filter可以做到这件事情呢?
其实并不需要太复杂的filter,比如把你的image稍微做一下平滑化,它就是一个有用的filter。
做一下实验:现在把原来的image(机器觉得是”tiger cat“),加了这个filter做了平滑化之后,机器仍然觉得它是”tiger cat“;假如把有被攻击的image(机器觉得是”keyboard“)加上filter后机器就会觉得它是”tiger cat“。
为什么这种方法可以成功?
攻击的信号只有在某个方向上的信号,只有某一种信号可以攻击成功,但这种信号可以同时让很多各种不同的machine model都失效,但其实,只有某几个方向上的信号可以攻击成功,一旦加上了一个filter,比如smoothing,你把信号改变了,那攻击就失效了,而同时加上smoothing这件事并不会伤害原来的图片。
根据以上的想法有一个方法叫–(1)Feature Squeeze(特征压缩):
下图中所有的squeezer指的是不同的filter,你可以设置不止一个filter来保护你的model。这个Feature Squeeze的想法是说(1)我们现在有一张image进来,先把这个image原封不动地用你的model做一下prediction得到第一个prediction的结果;
(2)接下来把这张图片通过squeezer 1 得到一个prediction的结果,通过squeezer 2 得到一个prediction的结果;
(3)如果做Squeeze前,和做Squeeze后,你发现model 的辨识结果差很多,那你就可以知道说这张图片可能是有被攻击过的。
另一种方法:(2)Randomization at Inference Phase(推理阶段的随机化):
这个方法也是在model前面加一个防护罩的方法,输入一张图片进来,你对这张图片做一些random的改动,比如说把输入的图片稍微进行一点缩放,然后在它旁边加上一些类似杂讯的东西,但是这个random缩放的程度,还有旁边加的东西不能太多,因为如果多到会让原来的影像辨识错误的话就得不偿失了。所以我们希望加上小小的缩放,在旁边加上一些小小的padding,让你的杂讯跟原来不太一样,我们说今天杂讯的攻击只有在某个方向上会成功,如果说今天把那个方向稍微改变了,攻击就很可能失效。
不过这些防御的方法,即在你的model前面加一些盾牌的方法,它们会害怕盾牌的防御被泄露出去,那攻击就很有可能是成功的。
比如,把filter当成是network的第一个layer,假设有人知道那个filter是怎么运作的,那它完全就可以把filter想象成network的第一个layer,然后用传统的attack方法去攻击你的network,仍然是有可能会成功的。
也或者是说加上random的方法,如果你是怎么缩放的事情被泄露出去,攻击有可能成功。
2、Proactive Defense
精神:在训练network时,找出network的漏洞,补起来。
一般训练network的训练过程:
一笔training data X={(x1,y^1),(x2,y^2),...,(xN,y^y)}X = \begin{Bmatrix} (x^1,\hat{y}^1),(x^2,\hat{y}^2),...,(x^N,\hat{y}^y) \end{Bmatrix}X={(x1,y^1),(x2,y^2),...,(xN,y^y)},使用XXX去训练你的model,一般训练network这样就训练完了,但接下来我们要把这个network的漏洞找出来,然后把找出来的漏洞补起来。
怎么把找出来的漏洞补起来呢?
你要再train T个iteration,在每个iteration里面,你对每一张图片都找出它的attacked image,即 把training data里面的每一个图片xnx^nxn统统倒出来,然后用某一个attack algorithm找出可以attack你现有的model 的input x~n\tilde{x}^nx~n;然后再把这些可以attack成功的image当作你的training data,然后把这些x~\tilde{x}x~标上跟原来image一样的label,即 X′={(x~1,y^1),(x~2,y^2),...,(x~N,y^y)}X' = \begin{Bmatrix} (\tilde{x}^1,\hat{y}^1),(\tilde{x}^2,\hat{y}^2),...,(\tilde{x}^N,\hat{y}^y) \end{Bmatrix}X′={(x~1,y^1),(x~2,y^2),...,(x~N,y^y)},然后再把这些新的资料拿去训练你的model。(这个过程有点像data optimization)
你用adversarial attack的方法去找到更多的data,把这些data加到你的训练资料里面去,可以想象说本来x~\tilde{x}x~可能会被辨识错误,但是我们现在把x~\tilde{x}x~加到你的训练资料里面给它一个争取的label,希望我们就可以把洞补起来。
为什么需要T次迭代呢?为什么不是找到洞补起来就结束呢?
因为你今天找出漏洞以后,你找出这些x~\tilde{x}x~重新训练你的network以后,你的network参数就变了,network参数变了以后它可能就会有新的漏洞,所以你要重新找漏洞,也就是你把你的network参数update之后你要从头再去找出漏洞,然后找出新的可以attack成功的image,再把这些新的可以attack成功的image,再加到你的训练资料里面,再重新做训练,那么这样的process要反复很多次。
另外要注意的是:今天假设你在找漏洞的时候你用的是attacked algorithm是A方法,但是实际上人家采用B方法来攻击你的时候你往往还是会被突破的。也就是说,假如你今天找漏洞的方法被泄露出去,别人只要用其它找漏洞的方法可能仍然可以制造成功的攻击。
所以,Deffense仍然是困难而尚待解决的问题。
十六、Adversarial Attack(对抗性攻击)
主要两部分:
- Attacks on Images:one pixel attack --differential evolution
- Attacks on audio:Attacks on ASR
Attacks on ASV
Hidden Voice Attack
(一)Attacks on Images
1、介绍
One Pixel Attack:这个attack攻击的东西就是一张图片的一个pixel,如下图攻击某张图片的其中一点:
2、One Pixel Attack与一般attack的比较
下图左边的这张4x4的表格就是attack一张图片时所加上的perturbations(扰动),你可以看到一般的attack里面有很多非0的数字,那我们的目标就是让这个原本的图片加上这个perturbation之后能够让我们attack的那个class的几率最高,假如说原本的图片叫做"cat",那我希望它被错误辨识成”dog“的时候那我就会希望说加入这个perturbation,我让它辨识成狗的类别的几率能够最高。attack得给它一个限制,这个限制最终的目的就是说我们人眼看到这个perturbation也没有办法分辨出来它跟原图的差异,因此我们才会给一个限制,这个infinity norm必须要小于某个值,这个infinity norm来源于格子里面最大的值。
再看右边的one pixel attack,4x4的格子,只有一格有值,其它都为0,它的目标就是希望动这个pixel时,你要攻击的target的那个class的几率越大越好,它的限制和一般的attack不一样,就是希望你的L0-norm小于某个值,one pixel attack规定d必须要等于1,也就是说你只能动其中一个pixel。
One Pixel Attack:
xxx:n-dimension inputs,x=(x1,...,xn)x=(x_1,...,x_n)x=(x1,...,xn)
fff:image classifier(model 的output经过softmax之后的值)
ft(x)f_t(x)ft(x):给定input xxx,model认为xxx是class ttt的几率
e(x)e(x)e(x):根据xxx加上的adversarial perturbation
再来看看它的untargeted attack和target attack:
target attack:我们将一张图片加入杂讯之后,我们希望它被错误辨识成“adv”这个class几率越高越好;
untargeted attack:假如原本的图片的class应该是ttt,加入杂讯之后我们希望model看过这张图片之后,它认为这张图片的class属于ttt的几率越小越好。
3、如何决定是哪一个pixel必须要被攻击,那个pixel杂讯的值要给多少
最直观的方法(Brute Force)就是说把每个pixel 跟0-255的值都试一遍,这样总有一天可能会知道一个可以成功attack的pixel。假设有一张图片是224x224的,这样光pixel就有5万多个,会花费很长的时间。
思考:我们真的需要最好的perturbation吗?还是刚好攻击成功就好?
如下图,原本这张图被认为是杯子的分数只有16.48,今天只要想办法找到一个pixel,只要这个pixel被classifier认为它是soup bowl的分数比cup还要高,那这样就是攻击成功。所以不必非要找一个pixel,让soup bowl 的分数逼近100,让cup的分数非常低,这是不必要的:
4、Differential Evolution(差异进化)
概念:在每个iteration,它都会产生一组的candidate solution,这些candidate solution比作小孩,这些小孩在下一个iteration会变成父母,它变成父母之后一样会产生新的小孩,这些产生的小孩如果没有父母好就会被丢掉,然后父母的值就会被留到下一轮,希望这样子最后能找到一个最好的小孩,但是如果不是最好的也没有关系,只要够好就可以。(这个演算法没有办法保证一定可以找到最佳解)
Differential Evolution的好处:
(1)有更高的几率可以找到global optima:
(2)要求目标系统提供较少的信息:相比FGSM,DE不需要算gradient,因此不需要攻击对象model太多的细节;独立于所使用的分类器。
仔细介绍Differential Evolution:
整体来说,第一步,必须要生成一些最开始的candidates,有了这些candidates之后再选几个candidate,根据这几个candidate做一些运算,然后再利用这些candidate生成新的candidate,新生出来candidate之后要测试这些新生出的candidate好不好,如果好的话,这些新的candidate就会取代原来旧的candidate,接下来一直重复下面两个步骤,直到次数足够多。
(1)现在我们要讲DE的第一个步骤,如何 initialize candidate?
举例:现在有一个f(x)f(x)f(x),它将xxx的每一个分量平方之后加总取平均,我们现在的目标就是找一个vector xxx让f(x)f(x)f(x)越小越好:
首先随机生成10个像这样的vector,每个vector都是4维的,vector中的每个数字都是介于0-1之间的小数:
把10组vector都投影到正负5之间,然后再丢进f(x)f(x)f(x)里面做计算,举第一个vector为例子,(−4.06)2+(−4.89)2+(−1)2+(−2.87)2(-4.06)^2+(-4.89)^2+(-1)^2+(-2.87)^2(−4.06)2+(−4.89)2+(−1)2+(−2.87)2再除以4得到12.3984504837,以此类推,到这里第一步initialize candidate的部分就算是完成了。
(2)第二步,选择一些candidate,根据这些candidate生成一些新的candidate。
下图是生的新的candidate(此时还没有统一到正负5之间),首先以第一个向量当作target vector,接下来我们会生一个新的candidate,来看看这个新的candidate代入fff之后的值会不会比较小(比较小,是跟代进fff的值相比):
现在从刚刚的10个candidate里面随机取出三个candidate(刚才第一个vector不能在选择范围内),将其中的两个vector相减,乘上一个mutation(变异) factor,再加上另外一个vector,这就是我们得到的初步的新的candidate,这个新的candidate我们要确保介于0-1之间(小于0的数值,直接把它当作0;大于1的数值直接把它当作1),经过clip让它介于0-1之后,这个最终的新的candidate:
我们得到candidate之后并非会保留里面所有的数字,必须要决定candidate当中的哪些数字要丢掉,哪些数字可以将candidate里面的数字替换掉。
怎么决定target vector哪些值会被candidate对应位置的值替换掉?
crossp:介于0-1之间的小数。
随机random出一个四维向量,记录出这个四维向量里面的四个数字是否小于crossp,有的话就是true,没有就是false(代表candidate对应的那个位置的值会被丢掉):
(3)测试新的candidate到底好不好?如果好就去取代原本的target vector,如果不好那就被丢掉。
现在生成新的candidate:
接下来把它(0-1之间)投影到正负5之间,然后再将它代入fff得到一个数值,如果这个数值比原本的target vector代入之后的值还要小,就用这个新的candidate取代原本的target vector,反之,这个新的candidate就会被丢掉:
做完以上的事情选择下一个target vector,重复第二、第三的步骤,这两个步骤会重复很多次。
5、Differential Evolution到底怎么真正套用在one pixel attack上?
回顾one pixel attack:
RGB image:有3个channel;
&emsp把这个attack pixel的x坐标和y坐标也当作变数,–(x,y,R,G,B),其中R,G,B是0-255的值。这个就是我们刚刚所生成的vector,维数为5维。
(二)Attacks on Audio
1、Attacks on ASR
什么是ASR?auto speech recognization,自动化语音辨识,把语音转文字。
怎么攻击这个model?
把一段音讯想象成一维的图片,对这一维做FGSM Attack,算出一个perturbation,然后将这个噪音加入原本要做transcript的音讯:
2、Attacks on ASV
什么是ASV?Automatic speaker verification,比如你今天讲一段文字这个model可以辨识说这段文字是你讲的,即这段音讯是哪个speaker所讲出来的话。
怎么攻击这个model?
一样使用FGSM来产生一段杂讯,将这个杂讯加回原本的音讯,输入model之后让model结果错误。
3、Hidden Voice Attack
讲一个指令,这个指令会被做一些修改,让你听不出来这是一段指令:
假如这句“hey siri”,放出来是一段杂讯,但是在公共场合可能会唤醒很多人的苹果手机。
Psychoacoustics(心理声学):
- 研究人对声音的感知程度跟反应;
- 感知极限:人只能听到20HZ到20000HZ范围的波段;
- 声音定位:人籍由双耳所听到的声音的时间差或是响度差来辨识出声音的方位。
以下是经过Hidden Voice Attack之后原本的音讯跟攻击后的音讯的对比图:
Hidden Voice Attack的原理(可以让人听不出来是什么,可是机器仍旧可以识别):
一般音讯在做语音辨识之前,对音讯做一些preprocess,signal preprocessing这个工作当成将一段音讯当中重要的东西提取出来。Hidden Voice Attack攻击的就是signal preprocessing,在之前的攻击中都是攻击model inference,是已经train好的model,然后更动input加上一些噪音之后让这个train好的model做出预测错误的行为。
Hidden Voice Attack反而是让你的model在inference时做出正确的结果。
4、perturbation
一段音讯如何被做攻击?加入perturbation的方法主要有以下几种:
- Time Domain Inversion (TDI)(时域反演)
- Random Phase Generation(RPG)(随机相位产生)
- High Frequency Addition(HFA)(高频加法)
- Time Scaling(TS)(时间尺度)
下图一段原本的音讯,加上四种perturbation之后的波形:
(1)Time Domain Inversion (TDI)(时域反演)
利用mFFT(magnitude fft)多对一的性质(有可能input两个不一样的波,但是两个不一样的波最后的magnitude fft是一样的);一段音讯经过修改也可能让它的magnitude fft和以前一样;
(2)Random Phase Generation(RPG)(随机相位产生)
(3)High Frequency Addition(HFA)(高频加法)
(4)Time Scaling(TS)(时间尺度)
本文是对blibli上李宏毅机器学习2020的总结,如有侵权会立马删除。
机器学习之九(读书笔记)相关推荐
- python自学教程读书导图-python机器学习基础教程读书笔记八(全书总结)
全书总结 现在你知道了如何使用重要的机器学习算法进行监督学习和无监督学习,这让你可以解 决很多种机器学习问题.在带你探索机器学习提供的所有可能性之前,我们希望给你一 些最后的建议.一些额外的资源,并提 ...
- Python《机器学习实战》读书笔记(三)——决策树
第三章 决策树 引言 3-1 决策树的构造 3-1-1 信息增益 3-1-2 划分数据集 3-1-3 递归构建决策树 3-2 在Python中使用Matplotlib注解绘制树形图 3-2-1 Mat ...
- Python《机器学习实战》读书笔记(四)——朴素贝叶斯
第四章 基于概率论的分类方法朴素贝叶斯 4-1 基于贝叶斯决策理论的分类方法 4-2 条件概率 4-3 使用条件概率来分类 4-4 使用朴素贝叶斯进行文档分类 4-5 使用Python进行文本分类 4 ...
- 机器学习之八(读书笔记)
Explainable Machine Learning Local Explanation Global Explanation LIME Decision Tree 十四.Explainable ...
- 《机器学习在线 解析阿里云机器学习平台》读书笔记
原文 最近读了阿里的<大数据之路-阿里巴巴大数据实践>,对于其机器学习平台也蛮感兴趣,正好阿里出了本新书<解析阿里云机器学习平台>,顺便读了下,感触也不少,结合最近团队机器学习 ...
- 《机器学习实战》读书笔记(第一部分:分类)
参考<机器学习实战> 一.KNN 原理: 步骤: 数据处理归一化(x-min)/(max-min) 计算已知类别数据集中的点与当前点之间的距离 选取与当前点距离最小的k个点 确定k个点所在 ...
- 机器学习之六(读书笔记)
RNN LSTM Attention-based Model 十一.Recurrent Neural Network(RNN)(循环神经网络) 1.Slot Filling 智慧客服,订票系统,需 ...
- 《机器学习实战》学习笔记(四):基于概率论的分类方法 - 朴素贝叶斯
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- 《机器学习实战》学习笔记(八):预测数值型数据 - 回归
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- 《机器学习实战》学习笔记(三):决策树
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
最新文章
- eclipse配置虚拟路径后,每次启动tomcat都会虚拟路径失效的问题解决
- php的验证码要gd库,怎么在PHP中使用GD库实现一个验证码功能
- python apscheduler执行_python apscheduler 每两小时执行一次
- SAP 各模块常用T-Code
- 码农翻身讲网络4:从Token到Sessions说到OAuth认证和CAS单点登录
- 【Python】:修改图片后缀
- 最强大脑记忆曲线(10)—— 信息统计
- Edison 物联网:使用MRAA发挥平台输入输出能力
- Gabor滤波器进行纹理分割
- 新媒体运营教程:如何用直播进行裂变+转化?
- 【精华】搭建个人Web服务器_LAMP
- Java之利用Freemarker模板引擎实现代码生成器,提高效率
- MySQL的核心日志
- 耳机断线了怎么修 耳机头部断线了如何修4线修复的方法
- 卫生专业计算机考试,快熟悉一下2019卫生专业技术资格考试人机对话系统
- CapsuleRRT: Relationships-aware Regression Tracking via Capsules
- a股量化交易接口策略——阿隆指标
- android 联系人 中文 排序,Android中文联系人排序及检索补丁的原理
- python 因果推断_causalinference: 使用Python做因果推断
- 编码显示器和六位7段数码管