back to index

Attack ML Models (5/8)


link |
00:00.000
好,那其實Attack的方法非常非常的多,我今天就是胡亂列了一些給大家參考,這邊這麼多方法,就算我想講也不想聽就是了,我們就把Reference列在這邊給大家參考。
link |
00:17.240
我們等一下唯一會介紹的是FGSM這個方法,我們會把FGSM的Attack結果當作我們的Simple Baseline,那你可以看看說有沒有其他方法,你去實作以後攻擊的效果更好。
link |
00:32.120
那其實啊,不同的Attack方法,雖然讓你覺得五花八門,眼花撩亂,其實它們的不同之處往往只是在於它們用不同的Distance來作為我們的Contract,還有它們用不同的Optimization的Algorithm來Minimize這個Loss Function,同時符合這個Contract。
link |
01:02.200
那等一下我要介紹的這個方法呢,叫做FGSM,它可能不是最強大的Attack方式,但是它是一個非常非常簡單的方法。
link |
01:14.480
好,那這個FGSM有多簡單呢?它說,你要怎麼找這個X檔?你只要把X0減掉εδX就結束了。那這個δX是什麼呢?這個δX是你先把X對L的Gradient算出來,然後呢,你把這個Gradient Vector裡面的每一個Dimension拿出來。
link |
01:42.680
如果某一個Dimension是正的,就給它正1,如果某一個Dimension是負的,就給它負1。
link |
01:51.680
舉例來說,如果今天Partial L除以Partial X1是正的,是大於0的,那第一位就是正1,反之如果Partial L Partial X2是小於0的是負的,比如說負3,那不管它是負多少,我們第二位都放負1。
link |
02:10.680
所以這個δX它每一位要嘛是正1,要嘛就是負1。
link |
02:16.680
所以你把X0減掉εδX,就是說你會把X0每一位要嘛減掉ε,要嘛加上ε。
link |
02:33.680
那你把X0的每一位減掉ε加上ε以後就結束了,減完加完你就得到最好的結果,X.*。
link |
02:42.680
所以這個FGSN這個方法,它就跟這個祁鈺老師一樣,它就只需要攻擊一次就可以達成它的目標。
link |
02:52.680
反正有同學可能會問說,這攻擊一次的方法真的是最好的嗎?如果多攻擊幾次會不會結果更好呢?那多攻擊幾次在文獻上看來確實結果會更好。
link |
03:07.680
所以FGSN有一個進階的方法叫做Iterative的FGSN,不過我們這個作為的Simple Baseline就只要求你做FGSN就好了。
link |
03:19.680
那如果你覺得這個FGSN還有點抽象的話,那我們用圖示的方法來告訴你說這個FGSN實際上做的事情是什麼。
link |
03:30.680
那在FGSN裡面呢,我們假設我們用的這個Distance的Contraint用的是Linfinity,那我們剛才在投影片裡面,我們在剛才課程裡面已經講過說這個,在剛才課程裡面呢,我們已經講過說如果你用Linfinity,那假你就是把X0當作中心,
link |
03:51.680
然後有一個這個邊長是2X用的正方形,然後你今天新找出來的X'不可以超出這個正方形的範圍之外。
link |
04:02.680
好,那我們就先把Gradient算出來,那我們假設Gradient算出來呢是這個方向。
link |
04:09.680
那如果你不是用FGSN,你是用一般的Gradient Descent的話,你會說我把這個Gradient的負號乘上Learning Rate,乘上Learning Rate以後呢,你用這個Gradient的負號乘上Learning Rate去Update X0,接下來你就得到X1。
link |
04:27.680
那FGSN告訴你說,你只需要做一次Update,你一次Update就直接把X0挪到X'然後就結束了。
link |
04:39.680
那這個FGSN這個方法,它並不在意Gradient的值,它只在意Gradient的方向。
link |
04:48.680
在今天這個例子裡面,假設你的Gradient指向的方向是左下角,不管它是這樣子指、這樣子指、這樣子指、怎麼指,X'都會跑到右上角。
link |
05:02.680
或者是說,如果你的Gradient指向左上角,不管它是這樣子、這樣子、還是這樣子,你的X'通通會跑到右下角。
link |
05:12.680
在FGSN裡面,我們只在意Gradient的方向,我們並不在意它真正的大小。
link |
05:20.680
好,那這個FGSN的原理是什麼呢?你可以想像FGSN這個方法,其實是設定了一個非常大的Learning Rate。
link |
05:30.680
那因為給了一個非常大的Learning Rate,所以也許只要一次Update就可以達到攻擊這件事。
link |
05:37.680
好,怎麼說?假設這是我們現在Gradient的方向,那假設你的Learning Rate設得異常的巨大,那你會往Gradient的反方向Update你的參數,但是因為你的Learning Rate設得異常的巨大,
link |
05:50.680
你只要一Update,你現在的X1就一定會超出這個方形的範圍,因為你的Learning Rate非常非常的大,所以只要一Update,X0馬上變成X1,馬上跳出這個方形的範圍。
link |
06:04.680
那我們剛才說呢,如果你今天Update你的X以後,發現X跑出了我們限制的範圍怎麼辦?把它拉回來。
link |
06:15.680
那拉回來會拉到什麼地方呢?拉到這個方形的尖角的地方。
link |
06:21.680
好,所以你就可以想像說FGSN它的原理其實就是因為設了一個非常大的Learning Rate,所以我們只需要Update一次參數,
link |
06:30.680
就像一拳超人一樣,只要一拳就可以達到攻擊的目標。