back to index

Attack ML Models (3/8)


link |
00:01.000
在剛才的投影片中呢,我們定義了Loss function L,然後呢我們定義了Distance D。
link |
00:08.760
那我們現在要做的事情,是解一個Optimization的Problem,我們要找一個X',這個X'可以讓L of X' 值越小越好,
link |
00:21.760
但是同時這個X'要滿足一個限制,它跟X0的差距不可以太大。
link |
00:29.760
那這一個可以讓L越小越好,同時又滿足這個限制的X',我們這邊寫做X'.
link |
00:38.760
那要怎麼找這個X'呢?其實你找這個X'的方法,跟你一般在train一個Neural Network其實是非常像的。
link |
00:47.760
我們一般在train一個Neural Network的時候,我們是要找一個Network Parameter Setup,去minimize某一個Loss function。
link |
00:55.760
我們現在只是改成,我們要找一張新的Image X',這個新的Image X'可以minimize某一個Loss function。
link |
01:04.760
那你怎麼會說,啊不對啊,這邊有一個限制,這跟一般的train Network的過程不太一樣。
link |
01:12.760
那沒關係,我們現在先把這個限制拿掉。
link |
01:16.760
如果我們把這個限制拿掉,那你其實就會解了,你可以用Gradient Descent,只是你把你現在的X'當作Network的參數來看待。
link |
01:25.760
就之前我們在訓練Network的時候,我們是調這個參數去minimize Loss function,現在我們把X'當作Network的參數。
link |
01:33.760
但是Network原來真正的參數是固定的,是不動的,我們只調X',用Gradient Descent的方法來調X',找到一個可以讓Loss最小的X'.
link |
01:43.760
怎麼做?就用Gradient Descent。
link |
01:46.760
那這個就是Gradient Descent的algorithm,那我們知道說,如果你要apply Gradient Descent,你要先initialize你要找的參數。
link |
01:55.760
那在原來的Neural Network裡面,你會random initialize你的Network parameter。
link |
02:00.760
在這邊,我們說,我們可以把原來的Image X'當作我們的initialized point。
link |
02:08.760
然後接下來,我們就用Gradient Descent的方法,去update我們的X。
link |
02:13.760
在每一個iteration裡面,我們就先算出Xt-1,這三個iteration得到的Xt-1對Loss的Gradient。
link |
02:24.760
然後再乘上learning rate,然後再把Xt-1減掉learning rate,乘上Gradient,得到新的Xt。
link |
02:33.760
然後就把這個process反覆大提示,那這個Gradient這個倒三角形是什麼意思呢?
link |
02:39.760
我們就不需要再細講,我想在這個有關Gradient Descent的錄音裡面,都已經講得非常清楚了。
link |
02:46.760
好,那接下來呢,我們就把我們剛才說我們不知道怎麼處理的那個限制呢,把它加回去。
link |
02:54.760
我們說,我們要找的X'不只可以minimize這個Loss function,這個X'跟X0的距離不可以超過Epsilon。
link |
03:02.760
所以我們需要一個改版的Gradient Descent,怎麼做?
link |
03:08.760
因為我們今天一般在做Gradient Descent的時候,你對這個X並沒有任何限制。
link |
03:13.760
所以有可能你跑了大T的iteration以後,你的X會跟X0差很多,它不滿足你這邊這個限制的這個條件。
link |
03:22.760
所以怎麼辦?我們要修改一下我們的演算法。
link |
03:27.760
我們在每一個iteration裡面呢,我們都去check說這個Xt有沒有符合我們的限制。
link |
03:34.760
如果Xt沒有符合我們的限制,也就是說Xt跟X0的距離大過Epsilon的話,那我們就進行一個修正。
link |
03:42.760
這個修正目標是要修改Xt,讓Xt跟X0的距離小於等於我們的限制Epsilon。
link |
03:53.760
那怎麼做修改這件事呢?你可以想像說你寫了一個function,這個function叫做fix。
link |
04:01.760
那fix這個function實際上做的事情就是,它重舉所有跟X0距離在Epsilon以內的所有的X。
link |
04:11.760
再看這些符合限制的X,它跟我們現在不符合限制的Xt哪一個最接近?
link |
04:17.760
我們看哪一個符合限制的X跟不符合限制的Xt最接近,就用這個符合限制的X來取代Xt,結束。
link |
04:26.760
實際上你是怎麼寫這個function的呢?如果你今天用的是L2 node,那你的X0在這中間,然後你希望你找到的X,它跟X0的距離都不可以超過Epsilon。
link |
04:39.760
所以你找到的X一定要落在以X0為原心半徑式Epsilon的這個圈圈裡面,你找到的所有X都應該要落在這個圈圈裡面。
link |
04:51.760
那我們今天如果做完Gradient Descent,做一次update,發現說今天Xt跑出這個圈圈範圍外了,那怎麼辦?
link |
05:01.760
你就把它抓回來,你就看說今天在這個圈圈範圍內,哪一個點跟Xt的距離最近,就用那個點來取代Xt。
link |
05:11.760
實際上在寫這個程式的時候非常容易,你就把X0跟Xt連起來,然後看這條線通過這個圓的哪一個點,那那個點就是離Xt最近,但同時又在這個圓圈內的X。
link |
05:31.760
反正如果是L infinity的話也是一樣,如果是L infinity的話,你的X0在中間,然後你今天不管是往左邊走,往右邊走,往上面走,往下面走,你都不可以走超出Epsilon的距離。
link |
05:49.760
所以以這個X0為圓心,這個方形的範圍是你可以接受的範圍,你要在這個方形的範圍內去找一個X line,它可以optimize你的loss function,它可以minimize你的loss function。
link |
06:07.760
但是今天如果你用Brady-Desai的演算法,一update你的X發現說它跳出了這個方形的區域,那怎麼辦?當你update你的參數發現它跳出了這個方形的區域,那你就把它拉回來。
link |
06:22.760
那今天拉回來的方法非常簡單,就看說這個Xt如果它是在Y軸的這個方向超過了Epsilon,那就把它設為Epsilon,在X軸的方向超過了Epsilon,就把它設為Epsilon,那就把這個Xt拉進這個方形的範圍來就結束了。
link |
06:42.760
那這個在神社的實作上都是非常簡單的。