back to index

【機器學習2022】自然語言處理上的對抗式攻擊 (由姜成翰助教講授) - Part 1


link |
00:00.000
那很高興今天呢,大家可以來參加這個線上的課程。
link |
00:05.000
那今天呢,非常高興江承翰助教可以來跟我們講在NLP上面的Adversarial Attack。
link |
00:13.500
那我們在上課的錄影裡面呢,有講影像上的Adversarial Attack。
link |
00:18.500
在一個貓的圖片上加一個很小的雜訊,可以讓機器的辨識結果完全錯誤。
link |
00:24.500
但是你有沒有想過在NLP上要怎麼做類似的事情呢?
link |
00:29.500
你想想看,在講影像的Adversarial Attack的時候,
link |
00:34.500
我們需要對輸入的影像,對輸出進行偏為分的計算。
link |
00:41.500
但是如果輸入是文句的話,那要怎麼做呢?
link |
00:45.500
那這邊有另外一套不同的技術,那很高興承翰可以來跟我們分享。
link |
00:50.000
那我相信今天承翰講的東西,你可能很難在其他地方找到類似的完整的課程。
link |
00:56.500
所以我們就把時間交給承翰,謝謝承翰,謝謝。
link |
01:00.500
好,感謝老師。
link |
01:02.500
各位同學大家好,那我們就開始上課。
link |
01:06.500
現在聲音是清楚的嗎?
link |
01:09.500
清楚的。
link |
01:10.500
好,謝謝。
link |
01:11.500
那我們今天要討論的主題是自然語言處理裡面的公式。
link |
01:16.500
其實剛才老師已經把我影學大學要講的東西講完了。
link |
01:21.500
那今天這堂課呢,如果你要完全百分之百聽懂的話,
link |
01:29.500
那你其實應該要知道我這頁投影片裡面所列的所有東西。
link |
01:35.500
那這些基本的東西當然包括最基本的Adversarial Attack是什麼,
link |
01:40.500
然後在這學期的課程安排好像是放在下個禮拜。
link |
01:45.500
然後第二個你應該要有基本的概念就是Explainable AI,
link |
01:49.500
那這好像是這禮拜的課程進度吧。
link |
01:52.500
那另外因為這個Adversarial Sample它本身就是一種異常的東西,
link |
01:57.500
所以我們要怎麼去偵測這個Adversarial Example的時候,
link |
02:02.500
我們也需要一些Anomaly Detection的概念。
link |
02:05.500
那最後因為今天我們要討論的是NLP,
link |
02:10.500
就是自然語言處理裡面的Attack,
link |
02:13.500
所以當然我會需要大家對NLP裡面的各種任務,
link |
02:18.500
還有不同的模型有一定程度的認識。
link |
02:21.500
那最重要的模型也就是大家現在最常用的,
link |
02:25.500
當然就是Pre-trained Language Model。
link |
02:28.500
那其實跟NLP相關的這些知識老師在2020的BLHOP裡面都找得到。
link |
02:36.500
那可是如果我把這些東西當成先輩知識,
link |
02:40.500
那感覺今天這堂課的門檻有點太高了。
link |
02:43.500
所以今天的課程內容就是假設上面的東西你大概知道是什麼就可以了。
link |
02:48.500
然後就算你真的是完全不知道,應該也是聽得下去的。
link |
02:52.500
那如果你想要更深入了解的話,
link |
02:56.500
那相關的課程影片就放在這個地方,大家有興趣可以去看。
link |
03:00.500
那另外就是上次就是我4月1號上課的時候,
link |
03:05.500
有人說我講的速度有點太快,
link |
03:08.500
然後我後來看了一下影片好像真的有點太快,
link |
03:10.500
所以我今天會盡量講的慢一點。
link |
03:13.500
要是大家覺得我還是講的太快的話,就直接打斷我就好了。
link |
03:17.500
好,那今天的Outline是這樣子。
link |
03:21.500
那我們先講Introduction,然後講完之後我們再詳細看剩下的Outline是什麼。
link |
03:26.500
好,那我們先來看Adversarial Type。
link |
03:31.500
那其實這個主題呢,我們已經從2019年的ML講到現在,
link |
03:36.500
總之它是一個非常重要的主題。
link |
03:38.500
那因為它很重要,所以才會每年講一次嘛。
link |
03:42.500
而且每年也都會有一個跟Attack相關的作業。
link |
03:45.500
好,那講了那麼多次,為什麼今年我要特別把MLP裡面的Attack挑出來講呢?
link |
03:51.500
好,其實是這樣子的,大家如果去看前幾年的影片,
link |
03:55.500
會發現以前講的Attack主要是在講Image上面的Attack,
link |
04:00.500
那有少部分的是Audio或是Speech方面的,
link |
04:04.500
那MLP方面的應該非常非常少。
link |
04:08.500
那這個影像跟Speech這兩個Modality,
link |
04:12.500
它有一個非常非常重要的共通性,
link |
04:15.500
就是它們的Input Space是在整個連續的時數空間,
link |
04:21.500
或是有限範圍的連續的時數空間裡面。
link |
04:24.500
那以影像為例,這個影像的Input,
link |
04:29.500
它就是分佈在一個0到25,然後乘以影像的長跟寬,
link |
04:33.500
然後可能還有它的RGB三個Channel。
link |
04:36.500
那如果聲音你是一個Web檔,
link |
04:39.500
然後假設你用16bit存的話,
link |
04:42.500
那它的Input,它落的範圍就會在-32678到-3268,
link |
04:48.500
然後乘以它的時間長度。
link |
04:50.500
所以它都是一個連續的Input Space嘛。
link |
04:53.500
那這樣的連續的Input Space跟自然語言的Input Space,
link |
04:57.500
它是非常非常不一樣的。
link |
04:59.500
在NLP的世界裡面,
link |
05:03.500
那我們的Input是由Word,也就是詞所組成的,
link |
05:08.500
或是Token。
link |
05:10.500
那這些Token啊,它是離散的東西。
link |
05:14.500
所以當我們要把這些字詞所組成的語句,
link |
05:19.500
塞到一個Model裡面的時候,
link |
05:21.500
我們就需要把這個字句轉換成一些Vector,
link |
05:27.500
這樣模型才吃得下去。
link |
05:30.500
那我們做的方式呢,
link |
05:32.500
就是透過一個高維空間的向量,
link |
05:34.500
來代表一個Token。
link |
05:36.500
所以每個Token它都會有一個相應的向量。
link |
05:39.500
那透過這樣的方式,
link |
05:41.500
我們就可以把一個句子轉換成一串的Vector,
link |
05:45.500
然後我們再丟到Model裡面。
link |
05:49.500
那就因為這個NLP的Input,
link |
05:52.500
它是Discrete,是離散的,
link |
05:54.500
所以我們在做攻擊的時候呢,
link |
05:56.500
我們不會像是CV或是Speech上面的Attack那麼簡單。
link |
06:00.500
在CV的Attack呢,
link |
06:02.500
你就是在Image上面加一個Noise,
link |
06:05.500
這個Noise可能是任何的Noise。
link |
06:07.500
但是在NLP裡面,
link |
06:09.500
你現在有一個句子,
link |
06:11.500
然後呢,你想要Attack它,
link |
06:13.500
那這個Attack方式就是加某一個Perservation嘛,
link |
06:18.500
那我們要怎麼加?
link |
06:19.500
難道要直接在這個字詞上面加Noise嗎?
link |
06:23.500
那字詞上面的Noise是什麼東西呢?
link |
06:26.500
好像有點不知道怎麼做。
link |
06:28.500
那這個大家可能會想說,
link |
06:31.500
既然這個文字會被轉換成連續的這個Vector,
link |
06:36.500
就是Word Embedding,
link |
06:38.500
那我們是不是直接在Word Embedding上面加Noise,
link |
06:41.500
就可以達到攻擊的效果呢?
link |
06:43.500
不過這其實是不太合理的啦,
link |
06:45.500
因為模型實際上的Input是這個離散的Token,
link |
06:49.500
然後模型內部會經過Embedding Logout,
link |
06:52.500
把這些離散的Token再轉換成連續的Embedding。
link |
06:56.500
所以當我們想要攻擊一個NLP Model的時候,
link |
07:00.500
我們能操作的就只有Input的這個離散的Token,
link |
07:04.500
我們是不可能會對裡面的Word Embedding做Perservation。
link |
07:08.500
所以我們現在要想的就是,
link |
07:11.500
我們要怎麼在NLP的Input的句子上面,
link |
07:14.500
加了某種Perservation,
link |
07:16.500
使得模型看到它之後會直接爛掉。
link |
07:19.500
好,那這個就是今天的重點。
link |
07:24.500
那就因為它實在太特殊了,
link |
07:27.500
所以今天才會獨立把它拿出來講一堂課。
link |
07:31.500
那今天我們會主要涉及到的,
link |
07:34.500
有三種重要的NLP的Attack。
link |
07:37.500
第一種叫做Evasion Attack,
link |
07:39.500
然後第二種叫做Imitation Attack,
link |
07:41.500
第三種叫做Vector Attack。
link |
07:43.500
那這三種Attack呢,
link |
07:45.500
我都會講一些對應的Defense,
link |
07:48.500
就是我們要怎麼去防禦這些不同的Attack。
link |
07:53.500
那主要的重點會放在Evasion Attack上面,
link |
07:56.500
然後Imitation Attack跟Vector Attack是比較小的主題。
link |
08:01.500
那老師在上課的時候,
link |
08:04.500
講得比較多的也是CV裡面的Evasion Attack,
link |
08:08.500
所以我想Evasion Attack大家會比較熟。
link |
08:11.500
那Imitation Attack跟Vector Attack呢,
link |
08:13.500
上課的部分可能比較沒有提到,
link |
08:15.500
所以我們會藉由自然語言處理,
link |
08:18.500
這個Modality,
link |
08:19.500
然後來介紹給大家說什麼樣的東西叫做Imitation Attack,
link |
08:24.500
什麼是Vector Attack。
link |
08:25.500
那這些Attack用在NLP上面的時候,
link |
08:28.500
我們要怎麼去防禦它。
link |
08:30.500
好,然後最後就會用很短的時間做Summary。
link |
08:34.500
然後預計這一次的課程應該會分兩個禮拜講,
link |
08:40.500
因為內容實在是有點多,
link |
08:41.500
所以應該會分兩個禮拜。
link |
08:43.500
那首先我們來看一下Evasion Attack。
link |
08:47.500
先簡單講一下這個Evasion Attack是什麼,
link |
08:51.500
這個名詞是什麼,
link |
08:52.500
這個名詞大家可能不熟,
link |
08:54.500
可能沒有聽過,
link |
08:55.500
不過大家如果看到下面這張照片,
link |
08:56.500
就應該知道是什麼東西了。
link |
08:58.500
下面這邊有一張熊貓的照片,
link |
09:01.500
然後它加了一個非常小的Noise之後,
link |
09:04.500
這個Noise長這個樣子,
link |
09:06.500
然後你把它乘以0.07,
link |
09:08.500
就是這個Noise乘以0.07之後,
link |
09:10.500
對人來說是幾乎看不出來的。
link |
09:12.500
但是你把這個熊貓的圖片
link |
09:15.500
加上一個人看不出來的Noise之後,
link |
09:17.500
丟到模型裡面,
link |
09:19.500
模型竟然會把這樣的一張圖片
link |
09:21.500
當作一個叫做好像是金絲猿的動物吧。
link |
09:25.500
那原本模型會有57.7%的confidence
link |
09:29.500
覺得說這張圖片是熊貓,
link |
09:31.500
但是加上了這個Noise之後,
link |
09:34.500
它竟然有非常非常高的信心
link |
09:38.500
覺得它並不是一隻熊貓。
link |
09:40.500
所以這樣的東西就是所謂的Evasion Attack。
link |
09:43.500
所謂的Evasion Attack就是
link |
09:46.500
你丟了一個Adversarial Example到模型裡面,
link |
09:49.500
結果模型的prediction就爛掉了。
link |
09:51.500
這個就叫做Evasion Attack。
link |
09:54.500
那所謂的Adversarial Sample
link |
09:57.500
就是它跟某一個乾淨的Sample,
link |
09:59.500
就是這個乾淨的Sample,
link |
10:01.500
它長得非常非常像,
link |
10:03.500
像到對人類來說它其實是根本沒有差的。
link |
10:07.500
那在乾淨的Sample上面,
link |
10:09.500
模型可以正確的判斷。
link |
10:11.500
但是看到Adversarial Example的時候,
link |
10:13.500
模型的判斷就是錯誤的。
link |
10:16.500
那在NLP裡面,
link |
10:18.500
拿來做Evasion Attack的Adversarial Sample
link |
10:21.500
長什麼樣子呢?長什麼樣子呢?
link |
10:23.500
那先給大家看幾個不同的例子。
link |
10:26.500
首先第一個例子給大家看的是
link |
10:29.500
Sentiment Analysis這個任務裡面的Adversarial Example。
link |
10:33.500
那所謂的Sentiment Analysis就是情緒分類。
link |
10:38.500
那這邊舉的例子是電影評論的分類。
link |
10:43.500
那這個任務要做的事情就是
link |
10:46.500
我們有很多的不同的電影評論,
link |
10:49.500
然後我們希望模型可以告訴我們說
link |
10:52.500
這個電影評論它代表的是正面的一個評價
link |
10:56.500
還是負面的一個評價。
link |
10:58.500
所以這邊這個例子,這個Original,
link |
11:01.500
就是Skip the Film and Buy the Billy Bray Soundtrack CD。
link |
11:05.500
然後這個就是一個用反諷的方式,
link |
11:08.500
就是比較諷刺的方式,
link |
11:10.500
然後表達說他覺得這個電影是不好看的。
link |
11:13.500
那這個原本的這個電影評論
link |
11:17.500
丟到訓練好的模型之後,
link |
11:19.500
他就會覺得說這個電影評論
link |
11:22.500
是一個負面的評論,是一個負面的評論。
link |
11:25.500
但是呢,非常神奇的事情是
link |
11:27.500
當你在這個Film把它從單數改成負數之後呢,
link |
11:32.500
這個模型竟然很神奇的覺得
link |
11:35.500
這個評論是一個正面的評論。
link |
11:38.500
那對人來說呢,你加不加這個S
link |
11:40.500
根本不會影響這個評論是正面還是負面的。
link |
11:44.500
但是這個對人來說根本就沒有差的變動,
link |
11:48.500
竟然可以影響這個任務上面模型的預測。
link |
11:52.500
所以它就是一個Adversarial Sample。
link |
11:57.500
那舉的第二個例子呢,給大家看到的是
link |
12:00.500
Dependency Parsing裡面的Adversarial Type。
link |
12:03.500
那所謂的Dependency Parsing呢,就是給它一個句子。
link |
12:07.500
它要去output出字詞之間的語意還有文法結構關係。
link |
12:16.500
那這個結構關係畫出來就是一個
link |
12:18.500
長得很像樹的東西。
link |
12:20.500
所以這個Dependency Parsing的model,
link |
12:23.500
它的input就是黑色的這個字,
link |
12:26.500
然後它的output就是上面的這個樹。
link |
12:29.500
那原本的input長得是這個樣子,
link |
12:33.500
上面的黑色的句子。
link |
12:34.500
那我們把這個上面的句子的stock market,
link |
12:37.500
股市的stock,換成匯市的exchange。
link |
12:41.500
結果呢,改了這個東西之後,
link |
12:43.500
就讓整個模型的output出來的Dependency Tree
link |
12:46.500
是完全不一樣,是錯誤的一個Parsing。
link |
12:52.500
那對上面的句子來說,
link |
12:56.500
下面的句子就是一個Adversarial Example。
link |
12:59.500
那看到這邊你可能會覺得很奇怪,
link |
13:02.500
就是上面的句子跟下面的句子
link |
13:04.500
很明顯就長得不一樣啊。
link |
13:06.500
它跟我們剛才看到那個熊貓好像差很多。
link |
13:09.500
因為在熊貓的例子裡面,
link |
13:11.500
這個正常的Example跟Adversarial Example
link |
13:14.500
對人來說它就是兩張看起來
link |
13:17.500
根本就一模一樣的句子,
link |
13:19.500
看起來一模一樣的圖片。
link |
13:21.500
但是在這邊這個例子裡面呢,
link |
13:23.500
這兩個句子你很明顯就看到
link |
13:25.500
它們兩個就是有一個字是不一樣的。
link |
13:28.500
那這樣的東西怎麼會算是Adversarial Attack呢?
link |
13:33.500
這邊要澄清一下,
link |
13:35.500
所謂人看不出來其實是指說
link |
13:37.500
加了Perturbation之後
link |
13:39.500
它不會影響人對結果的預測。
link |
13:41.500
所以在熊貓的這個例子裡面呢,
link |
13:43.500
我們加了一個Notes,
link |
13:45.500
那個Perturbation其實不應該影響到人最終的預測。
link |
13:48.500
那我們要預測的東西是什麼呢?
link |
13:50.500
我們要預測的東西是它是不是一隻熊貓。
link |
13:53.500
那現在在Dependency Parsing的這個例子裡面,
link |
13:57.500
我們的預測目標就是某一個句子的Dependency Tree。
link |
14:02.500
所以呢,所謂的對人來說沒有差的Perturbation
link |
14:06.500
是指說這個句子你不管怎麼改,
link |
14:09.500
你只要沒有改變到它真正的Dependency Tree的話,
link |
14:12.500
那它就是一個合理的Perturbation。
link |
14:16.500
因為對人來說這個Perturbation是不會影響到它的Dependency Parsing的。
link |
14:20.500
所以說下面的這個句子對人來說
link |
14:24.500
它應該也要產生一個跟上面一樣的Dependency Tree。
link |
14:27.500
但是對模型來說,
link |
14:29.500
它竟然產生一個完全不一樣的錯誤的Dependency Tree。
link |
14:32.500
所以我們會說下面這個句子
link |
14:34.500
是上面這個句子的一個Adversarial Example。
link |
14:38.500
好,那這個時候你可能也會問說,
link |
14:41.500
要是我只有看下面這個句子,
link |
14:43.500
然後丟到模型裡面,
link |
14:45.500
然後它產生出了一個錯誤的Dependency Tree,
link |
14:48.500
那我不是都覺得說
link |
14:50.500
這就是一個單純的模型判斷錯誤嗎?
link |
14:52.500
那我也不會覺得它是一個Adversarial Example啊。
link |
14:55.500
那這個其實的確是這個樣子沒有錯。
link |
14:58.500
所謂的Adversarial Example
link |
15:00.500
它其實應該是相對於某一個Benign Example,
link |
15:04.500
Benign就是良性或是正常的Example。
link |
15:06.500
所以你單純看了某一個Adversarial Example,
link |
15:10.500
然後你沒有看到它原本的正常的Counterpart的時候,
link |
15:14.500
那它的確就是一個會讓模型判斷錯誤的一個東西,
link |
15:19.500
你也不會特別覺得它是不是Adversarial Example。
link |
15:22.500
好,那前面這兩個例子呢,
link |
15:25.500
就是感覺跟大家的生活比較遠啦,
link |
15:29.500
大家平常應該不太會去用電影評論的Sentiment Analysis,
link |
15:32.500
你也可能不會去用Dependency Parsing的這個模型。
link |
15:36.500
那下面這個例子呢,
link |
15:38.500
是Machine Translation在生活中的實際的例子,
link |
15:41.500
這個之前是有上過網路新聞的。
link |
15:43.500
這個句子呢,
link |
15:45.500
就是你把上面這個句子丟到Google的翻譯之後呢,
link |
15:50.500
它會跑出下面這個莫名其妙的翻譯。
link |
15:53.500
那上面這個句子是
link |
15:55.500
So sad to see Hong Kong become part of China.
link |
15:57.500
那所以照理說它翻譯應該是要說
link |
16:00.500
很難過看到香港成為中國的一部分。
link |
16:03.500
但非常神奇的事情是呢,
link |
16:05.500
當你輸入這個句子到Google Translation之後,
link |
16:09.500
它竟然會翻出
link |
16:10.500
很高興看到香港成為中國的一部分。
link |
16:13.500
那這個東西呢,
link |
16:15.500
為什麼會是as a zero sample呢?
link |
16:17.500
因為其實當初有人把
link |
16:19.500
Hong Kong跟China這兩個地名
link |
16:21.500
用各種不同的組合測試,
link |
16:23.500
然後最後測試出來
link |
16:25.500
只有China跟Hong Kong這個組合
link |
16:27.500
會產生這個錯誤的例子,
link |
16:30.500
錯誤的翻譯。
link |
16:32.500
所以這個意思要告訴大家就是呢,
link |
16:36.500
NLP Model其實比大家想像還要脆弱非常非常多。
link |
16:41.500
因為這個Google這麼大一個公司
link |
16:44.500
它訓練出來的Google Translation
link |
16:46.500
竟然大家每天去戳一戳
link |
16:48.500
然後就會戳出奇怪的結果。
link |
16:50.500
所以大家以後在訓練模型
link |
16:53.500
然後要丟到網路上面的時候
link |
16:55.500
一定要非常小心,
link |
16:56.500
因為你把它丟到網路上之後
link |
16:58.500
就會有成千上萬的人
link |
16:59.500
每天沒事就去戳一戳
link |
17:00.500
看它會不會爛掉。
link |
17:02.500
所以NLP的Model
link |
17:04.500
它的Attack跟Defense
link |
17:06.500
是非常非常重要的。
link |
17:08.500
然後有一件事情我要先澄清一下
link |
17:10.500
就是今天講這堂課的目的呢
link |
17:12.500
並不是要讓大家
link |
17:14.500
學到很多不同的Attack方式之後
link |
17:16.500
然後去網路上攻擊各種的API。
link |
17:20.500
我們的目的應該是讓大家知道說
link |
17:24.500
模型其實是很脆弱的
link |
17:26.500
所以大家要更謹慎地去設計這些模型。
link |
17:29.500
然後在你試出模型的時候
link |
17:32.500
應該要想想看有沒有什麼方法
link |
17:34.500
可以讓你的模型是更robust
link |
17:36.500
然後不要讓這個模型
link |
17:38.500
有這些可疑的output出現。
link |
17:44.500
那在簡單看過這個NLP的EvasionAttack之後呢
link |
17:48.500
我們來看一下這些Adversarial Sample
link |
17:51.500
它是用什麼方式被找出來的。
link |
17:56.500
那在生成Adversarial Sample的過程呢
link |
17:59.500
有四個非常重要的ingredient
link |
18:03.500
那分別是這個目標Goal,Transformation
link |
18:07.500
然後還有Constraint
link |
18:09.500
然後最後一個是SearchMessage
link |
18:11.500
那首先第一個Goal
link |
18:13.500
它指的就是這個EvasionAttack
link |
18:15.500
產生的Adversarial Sample
link |
18:17.500
它想要達到什麼樣的目標。
link |
18:21.500
那第二個要素Transformation
link |
18:24.500
它指的是說我們要怎麼產生
link |
18:27.500
潛在的Perturbation。
link |
18:29.500
第三個要素叫做Constraint
link |
18:32.500
也就是限制。
link |
18:33.500
這個限制指的是說呢
link |
18:35.500
我們產生的這個Perturbation
link |
18:37.500
要滿足什麼樣的條件
link |
18:40.500
它才能算是一個合理的Adversarial Sample。
link |
18:45.500
最後這個SearchMessage
link |
18:47.500
它講的就是
link |
18:49.500
在Transformation這個步驟呢
link |
18:51.500
會產生很多很多可能的
link |
18:53.500
Possible的Perturbation。
link |
18:56.500
那我們要怎麼把這些
link |
18:58.500
不同的Perturbation結合起來
link |
19:00.500
然後產生一個既可以達成目標
link |
19:03.500
又不會違反我們的Constraint的
link |
19:05.500
一個最終的Adversarial Sample
link |
19:07.500
那這就是Search Method
link |
19:08.500
它要做的事情。
link |
19:10.500
好,那這四個要素呢
link |
19:12.500
等一下我們都會詳細介紹。
link |
19:14.500
那我們首先先看一個流程圖
link |
19:17.500
看一下這四個要素是怎麼
link |
19:19.500
來產生一個這個Adversarial Sample的。
link |
19:23.500
好,當你要產生一個Adversarial Sample的時候呢
link |
19:27.500
你當然要知道現在的任務是什麼
link |
19:31.500
這樣你才可以決定你的目標是什麼。
link |
19:35.500
那你當然也需要一個
link |
19:37.500
跟這個Test有關的Victim Model嘛。
link |
19:40.500
那這個Victim Model呢
link |
19:42.500
它可以是Black Box、黑箱
link |
19:44.500
它也可以是White Box
link |
19:45.500
總之它這個
link |
19:46.500
它是Black Box或是White Box
link |
19:47.500
不會影響我們今天的討論。
link |
19:49.500
那我們這邊舉一個例子
link |
19:51.500
是Sample Analysis
link |
19:53.500
就是剛才那個
link |
19:54.500
Movie Review Classification的例子。
link |
19:56.500
那我們今天想要找到
link |
19:58.500
某一個Adversarial Sample
link |
20:00.500
使得呢模型的結果會爛掉。
link |
20:04.500
那我們前面有講過Adversarial Sample呢
link |
20:06.500
它是相對於某一個正常的Sample而已。
link |
20:10.500
所以我們會需要一個正常的Sample。
link |
20:15.500
那這邊這個正常的Sample呢
link |
20:17.500
它是一個本來被模型判斷成
link |
20:20.500
正面評論的一個句子。
link |
20:22.500
那我們拿到這個句子之後呢
link |
20:25.500
首先會經過一連串的Transformation
link |
20:29.500
然後呢來對本來的句子
link |
20:31.500
做一些更動。
link |
20:33.500
然後這些更動就
link |
20:35.500
產生的結果就是
link |
20:37.500
一些可能的Perturbation。
link |
20:39.500
那在這些Perturbation裡面啊
link |
20:41.500
可能會有一些
link |
20:43.500
這個奇怪的結果
link |
20:46.500
它可能是不符合我們的Constraint的。
link |
20:48.500
那我們就要把這些
link |
20:50.500
不符合這個Constraint的東西拿掉。
link |
20:55.500
那下一個步驟呢
link |
20:57.500
我們就是要在這一堆
link |
20:59.500
我們產生的Possible Perturbation裡面呢
link |
21:01.500
經過組合
link |
21:03.500
產生這個某一個Perturbation。
link |
21:06.500
那這個步驟
link |
21:08.500
就是Search Method它要做的事情。
link |
21:10.500
那Search Method呢
link |
21:12.500
它就是要結合這個可能的Perturbation
link |
21:14.500
產生可能的Output。
link |
21:17.500
那這個可能的Output呢
link |
21:19.500
它也有可能
link |
21:21.500
它會違反我們原本定的Constraint。
link |
21:23.500
所以我們就會把
link |
21:25.500
違反Constraint的部分拿掉。
link |
21:27.500
最終要是我們
link |
21:29.500
產生的這個Adversarial Sample呢
link |
21:31.500
丟到模型裡面
link |
21:32.500
的確可以達到我們的目標的話
link |
21:34.500
那我們就找到一個
link |
21:36.500
成功的Adversarial Sample。
link |
21:38.500
反之如果我們最後產生的這個東西呢
link |
21:41.500
它沒有辦法讓模型的結果爛掉的話
link |
21:43.500
那這個Tag就是不成功的。
link |
21:50.500
好,首先呢我們來看一下
link |
21:52.500
四個要素裡面的第一個要素
link |
21:54.500
就是我們的目標。
link |
21:57.500
那不同的任務它會有不同的目標。
link |
21:59.500
我們先看最常見的一個目標
link |
22:01.500
就是Untargeted Classification。
link |
22:04.500
那Untargeted Classification的
link |
22:07.500
這個目標呢
link |
22:09.500
我們所希望達到的事情
link |
22:11.500
就是我要讓
link |
22:13.500
Classification Model的結果爛掉。
link |
22:15.500
那它只要爛掉最好
link |
22:17.500
但我不會管它說它是怎麼錯的。
link |
22:19.500
所以舉例而言
link |
22:21.500
假設我們有一個任務
link |
22:23.500
這個任務是News Title Classification
link |
22:25.500
新聞標題的分類。
link |
22:27.500
那這個任務做的事情
link |
22:29.500
就是給你一個新聞標題
link |
22:32.500
然後去判斷出
link |
22:34.500
這個新聞是屬於哪一個分類的。
link |
22:36.500
那這個分類可能包括了
link |
22:38.500
Science and Technology
link |
22:40.500
或是科技類的新聞
link |
22:42.500
或是體育類的新聞
link |
22:44.500
或是世界新聞
link |
22:46.500
就是國際新聞之類的。
link |
22:48.500
好,那在Untargeted Classification呢
link |
22:50.500
這個
link |
22:52.500
我就是讓模型
link |
22:54.500
預測錯就好了嘛。
link |
22:56.500
所以原本有一個新聞
link |
22:58.500
這個新聞的Title叫做News 1
link |
23:00.500
那假設呢
link |
23:02.500
它經過Classification之後
link |
23:04.500
產生這個
link |
23:06.500
被更動過的
link |
23:08.500
被更動過的一個News Title
link |
23:10.500
丟到模型裡面
link |
23:12.500
結果模型預測它是一個
link |
23:14.500
體育新聞
link |
23:16.500
那這樣子它算是一個成功的Attack
link |
23:18.500
那同時我的
link |
23:20.500
這個Attack的方式我們也可能
link |
23:22.500
產生另外一個不同的Perturbation
link |
23:24.500
那這個Perturbation呢
link |
23:26.500
丟到模型裡面
link |
23:28.500
模型覺得它是一個國際新聞
link |
23:30.500
那在Untargeted Classification
link |
23:32.500
裡面呢
link |
23:34.500
因為這兩個
link |
23:36.500
Sample最終都讓模型的預測
link |
23:38.500
出錯,因為它原本應該是
link |
23:40.500
科技類的新聞
link |
23:42.500
然後模型最後把
link |
23:44.500
這兩個東西都預測錯誤了
link |
23:46.500
所以
link |
23:48.500
這兩個Adversarial Sample
link |
23:50.500
都有達到我們原本的目標
link |
23:52.500
那相對來講
link |
23:54.500
有另外一種不同的目標
link |
23:56.500
叫做Targeted Classification
link |
23:58.500
那這個Targeted Classification呢
link |
24:00.500
就是我會指定說
link |
24:02.500
在如果它的Ground Truth
link |
24:04.500
是某一個Class A的話
link |
24:06.500
那我希望經過Perturbation之後
link |
24:08.500
模型都把它判斷成
link |
24:10.500
另外一個Class B
link |
24:12.500
所以舉例而言我可能會希望說
link |
24:14.500
所有跟Business
link |
24:16.500
就是商業相關的新聞
link |
24:18.500
我都希望呢它可以
link |
24:20.500
經過Perturbation之後
link |
24:22.500
變成一個
link |
24:24.500
被模型判斷成是一個
link |
24:26.500
科技類的新聞
link |
24:28.500
那這邊的例子呢就是
link |
24:30.500
它把一個
link |
24:32.500
ProperNum做一個更動之後
link |
24:34.500
它把它換成Twitter之後
link |
24:36.500
模型就覺得它是一個
link |
24:38.500
Science and Technology的新聞
link |
24:40.500
那如果說今天
link |
24:42.500
我指定說我要讓所有的Business
link |
24:44.500
這一類的新聞
link |
24:46.500
都被誤判成是
link |
24:48.500
科技類的新聞
link |
24:50.500
結果我產生一個Perturbation
link |
24:52.500
然後讓模型覺得它是一個體育新聞
link |
24:54.500
雖然模型的
link |
24:56.500
這個Perturbation也是爛掉的
link |
24:58.500
但是這個不符合我們一開始
link |
25:00.500
這個目標
link |
25:02.500
所以它就算是一個失敗的東西
link |
25:04.500
好下一個
link |
25:06.500
我們來看一個有趣的例子
link |
25:08.500
這個例子是在機器翻譯裡面的
link |
25:10.500
一個特別的目標
link |
25:12.500
這個目標叫做Universal suffix dropper
link |
25:14.500
也就是
link |
25:16.500
我要找到某一個東西
link |
25:18.500
然後把它丟到
link |
25:20.500
原本的句子裡面
link |
25:22.500
可以讓
link |
25:24.500
這個插入的句子
link |
25:26.500
後面的東西沒有被翻出來
link |
25:28.500
所以在圖片中
link |
25:30.500
這個例子原本正常的句子
link |
25:32.500
是黑色的前面這串字
link |
25:34.500
跟紫色的
link |
25:36.500
後面這串字所組成的
link |
25:38.500
那我們的目標呢
link |
25:40.500
就是我們想要找到一個
link |
25:42.500
Adversarial string
link |
25:44.500
就是一個字串
link |
25:46.500
是紅色這邊所顯示的東西
link |
25:48.500
然後當我們把這樣子的東西
link |
25:50.500
丟到機器翻譯的模型之後呢
link |
25:52.500
這個模型凹不出來的翻譯
link |
25:54.500
會直接忽略掉
link |
25:56.500
這個紫色的部分
link |
25:58.500
所以這個就是Universal suffix dropper
link |
26:00.500
它要達到的目的
link |
26:02.500
link |
26:04.500
下一個
link |
26:06.500
下一個例子
link |
26:08.500
是剛才有看到的
link |
26:10.500
Dependency parsing
link |
26:12.500
的這個例子
link |
26:14.500
那我們的目標呢
link |
26:16.500
就是我們要產生一個錯誤的Dependency tree
link |
26:18.500
總而言之呢
link |
26:20.500
就是不同的任務它會有很多不同的
link |
26:22.500
這個
link |
26:24.500
定標
link |
26:26.500
那下一個要素我們來看的是
link |
26:28.500
Transformation
link |
26:30.500
那Transformation要做的事情就是
link |
26:32.500
我們要怎麼
link |
26:34.500
給定一個原本正常的句子
link |
26:36.500
然後產生出很多種
link |
26:38.500
可能的不同的
link |
26:40.500
這個潛在的
link |
26:42.500
也就是我們要
link |
26:44.500
怎麼去更改原本的句子
link |
26:46.500
然後產生一個新的句子
link |
26:48.500
那這些產生的句子呢
link |
26:50.500
它不一定可以讓
link |
26:52.500
這個模型的output是爛掉的
link |
26:54.500
這個只是我們在
link |
26:56.500
產生最終的Example
link |
26:58.500
的時候的一個中間強誤
link |
27:00.500
那這些中間強誤呢
link |
27:02.500
還會經過Constraint的過濾
link |
27:04.500
然後還有Search method的一些
link |
27:06.500
結合之後
link |
27:08.500
才會產生最後的
link |
27:10.500
Example
link |
27:12.500
那首先呢
link |
27:14.500
我們來看
link |
27:16.500
World level的這個Transformation
link |
27:18.500
也就是
link |
27:20.500
以字詞為單位的
link |
27:22.500
這個
link |
27:24.500
Transformation
link |
27:26.500
那第一種替換方式叫做
link |
27:28.500
World Substitution,也就是我要把原本的
link |
27:30.500
字替換掉
link |
27:32.500
那要怎麼替換呢?我們替換的方式
link |
27:34.500
是用同義詞替換
link |
27:36.500
為什麼要用同義詞替換呢?
link |
27:38.500
因為你用同義詞替換
link |
27:40.500
才可以保留住原本的
link |
27:42.500
Semantic,就是語意
link |
27:44.500
所以今天假設你的任務
link |
27:46.500
它是一個應該要
link |
27:48.500
保持語意的任務,舉例而言
link |
27:50.500
Sentiment Classification的任務
link |
27:52.500
它就是一個
link |
27:54.500
語意很重要的任務
link |
27:56.500
所以我們就會希望說你在產生
link |
27:58.500
Adversarial Sample的時候
link |
28:00.500
你不應該去改變掉原本的句子的語意
link |
28:02.500
所以這時候
link |
28:04.500
我們的Transformation就會使用
link |
28:06.500
同義詞替換
link |
28:08.500
那同義詞替換呢
link |
28:10.500
這個要怎麼替換?我們就用
link |
28:12.500
WordNet這個一個
link |
28:14.500
Dataset來做替換
link |
28:16.500
那這個Dataset裡面呢
link |
28:18.500
它有各種不同的字的
link |
28:20.500
同義詞,所以給定一個
link |
28:22.500
Input句子,你就可以去找
link |
28:24.500
WordNet這個Dataset裡面
link |
28:26.500
每一個字它所對應的
link |
28:28.500
這個同義詞是什麼
link |
28:30.500
所以你可能就會去找
link |
28:32.500
這個Highly它所對應到的
link |
28:34.500
同義詞在WordNet上面
link |
28:36.500
是Extremely
link |
28:38.500
那你可能會找到RefMap
link |
28:40.500
這個字,它的同義詞是
link |
28:42.500
Erg, Allocate跟Connect
link |
28:44.500
那我們現在做的事情就是呢
link |
28:46.500
我們要產生Transformation
link |
28:48.500
我們就把原本的這個
link |
28:50.500
字替換成它的
link |
28:52.500
同義詞,所以就會產生
link |
28:54.500
Extremely Recommended或是
link |
28:56.500
Highly Urgent,或是我換成Allocate
link |
28:58.500
變成Highly Allocated
link |
29:00.500
或是我換成Connect
link |
29:02.500
變成Highly Connected
link |
29:04.500
那這幾個例子呢
link |
29:06.500
就是這幾個字的
link |
29:08.500
這兩個字的同義詞,就是這邊這個表格
link |
29:10.500
是我從這個WordNet上面
link |
29:12.500
直接找出來的
link |
29:14.500
那大家可能會發現說
link |
29:16.500
Highly換成Extremely
link |
29:18.500
聽起來是還蠻合理的
link |
29:20.500
不過Recommend你要換成
link |
29:22.500
Erg或是
link |
29:24.500
Connect的話,好像
link |
29:26.500
會有一點點微妙
link |
29:28.500
就是Recommend這個字呢
link |
29:30.500
它其實會有很多不同的意思
link |
29:32.500
那這個Erg可能是代表
link |
29:34.500
其中的某一個意思的同義詞
link |
29:36.500
Allocate可能是代表另外一個意思的同義詞
link |
29:38.500
那Connect又是代表某一個意思的同義詞
link |
29:40.500
所以當你直接無腦地
link |
29:42.500
用這個WordNet的
link |
29:44.500
同義詞替換的時候,你可能是
link |
29:46.500
沒有辦法考慮到這件事情的
link |
29:48.500
所以說呢
link |
29:50.500
你替換出來的結果,它的語意
link |
29:52.500
可能就不會跟原本的這個
link |
29:54.500
句子是
link |
29:56.500
類似的
link |
29:58.500
那這個時候要怎麼辦呢
link |
30:00.500
我們就需要
link |
30:02.500
這個Constraint來幫助我們把
link |
30:04.500
這些不符合語意的
link |
30:06.500
就是跟原本的語意差太多的
link |
30:08.500
句子把它濾掉
link |
30:10.500
那這個部分我們等一下會再
link |
30:12.500
繼續講
link |
30:14.500
好,那第二種呢
link |
30:16.500
這個詞的替換方式呢
link |
30:18.500
是我們用
link |
30:20.500
WordEmbedding
link |
30:22.500
空間裡面的
link |
30:24.500
距離來作為替換的基準
link |
30:26.500
那這個做法是怎麼樣呢
link |
30:28.500
這個做法是這樣子的
link |
30:30.500
我們有一個這個
link |
30:32.500
句子,就是原本這個
link |
30:34.500
I highly recommend it,那我今天想要把
link |
30:36.500
recommend這個字換掉
link |
30:38.500
那我去找recommend這個
link |
30:40.500
這個字
link |
30:42.500
它在某一個叫做
link |
30:44.500
這個訓練好的
link |
30:46.500
就是別人已經訓練好的
link |
30:48.500
Embedding space裡面,我去找
link |
30:50.500
它的Embedding是什麼,那假設我
link |
30:52.500
找出來呢,這個Embedding
link |
30:54.500
這個recommend的Embedding叫做10
link |
30:56.500
那在這個Embedding space裡面呢
link |
30:58.500
它的附近還分布了
link |
31:00.500
這些不同其他的字
link |
31:02.500
那像是這個剛才的comment
link |
31:04.500
或是suggest,或是endorse
link |
31:06.500
或是advocate
link |
31:08.500
那這個就是這個
link |
31:10.500
Embedding space裡面的
link |
31:12.500
不同的字
link |
31:14.500
那我可能就會說,我要替換的時候呢
link |
31:16.500
我就是在這個
link |
31:18.500
要被替換的字的
link |
31:20.500
某一個這個epsilon bolt
link |
31:22.500
所組成的neighborhood裡面
link |
31:24.500
我去找適合的字來替換
link |
31:26.500
所以當我們在選擇
link |
31:28.500
我們要替換什麼字的時候
link |
31:30.500
這個epsilon bolt
link |
31:32.500
就是
link |
31:34.500
就是半徑式
link |
31:36.500
epsilon的這個球
link |
31:38.500
那這個epsilon就是
link |
31:40.500
一個超參數,就是一個hyperparameter
link |
31:42.500
你要去選的,那這個epsilon
link |
31:44.500
如果選的不好,你可能會包含了
link |
31:46.500
一些奇怪的字
link |
31:48.500
link |
31:50.500
假設我們說,現在我們選的
link |
31:52.500
epsilon是這顆紅色的球
link |
31:54.500
那recommend這個字呢
link |
31:56.500
它的epsilon bolt所涵蓋的其他字
link |
31:58.500
就是endorse跟advocate
link |
32:00.500
所以你就會把原本的
link |
32:02.500
I highly recommend it,換成I highly endorse it
link |
32:04.500
或是I highly uphold it
link |
32:06.500
這就是你產生的pervasion
link |
32:08.500
那這個
link |
32:10.500
簡單講一下什麼是conterfeited
link |
32:12.500
globe embedding space,我相信globe
link |
32:14.500
embedding space大家應該都是有概念的
link |
32:16.500
不過這個conterfeited是什麼意思呢
link |
32:18.500
link |
32:20.500
link |
32:22.500
我們直接來看
link |
32:24.500
這個原本的globe embedding space
link |
32:26.500
原本的globe
link |
32:28.500
embedding space可能會長的
link |
32:30.500
是這個樣子的
link |
32:32.500
那這個是一個例子
link |
32:34.500
就是有很多不同的字,那這些字
link |
32:36.500
就是方位詞
link |
32:38.500
那在原本的globe embedding space
link |
32:40.500
這個相關的字詞
link |
32:42.500
會被
link |
32:44.500
放在embedding space裡面
link |
32:46.500
很相近的地方,所以舉例而言
link |
32:48.500
east這個字,它的neighbor
link |
32:50.500
可能會有north跟south
link |
32:52.500
還有west
link |
32:54.500
那western這個字
link |
32:56.500
相近的字詞可能會是eastern
link |
32:58.500
那eastward可能會是southward
link |
33:00.500
那這是為什麼呢,因為
link |
33:02.500
這些字啊,這幾個字
link |
33:04.500
它出現的context就是
link |
33:06.500
前後文會是相似的
link |
33:08.500
那這兩個字,因為它們的磁性比較接近
link |
33:10.500
呃不是磁性比較接近
link |
33:12.500
就是它們會出現的context是比較接近的
link |
33:14.500
所以它們在
link |
33:16.500
最後的globe embedding space裡面
link |
33:18.500
它們也會被放在比較近的
link |
33:20.500
比較近的地方
link |
33:22.500
那假設呢,今天我們想要
link |
33:24.500
用這樣子的一個embedding space
link |
33:26.500
來作為我們同義詞
link |
33:28.500
替換的一個
link |
33:30.500
工具的話,那可能會有一個問題
link |
33:32.500
就是當我們要把east
link |
33:34.500
這個字換掉之後,我們在它旁邊
link |
33:36.500
畫了一個epsilonbow
link |
33:38.500
那這個epsilonbow
link |
33:40.500
所包含的字可能會有north
link |
33:42.500
跟south還有west
link |
33:44.500
那如果你直接把東方換成
link |
33:46.500
北方或是南方之類的
link |
33:48.500
這可能就會讓原本的
link |
33:50.500
這個語意有很明顯的改變
link |
33:52.500
那為了解決這個問題呢
link |
33:54.500
這個有人就
link |
33:56.500
提出了一個叫做counterfeiting的方式
link |
33:58.500
那counterfeiting的方式呢
link |
34:00.500
它做的事情就是我們用
link |
34:02.500
語言學的一些
link |
34:04.500
這個constraint
link |
34:06.500
然後我們把同義詞
link |
34:08.500
拉近,然後反義詞
link |
34:10.500
拉遠,那在這邊這個
link |
34:12.500
例子裡面,就
link |
34:14.500
詞義上面east跟easter
link |
34:16.500
它是比較接近嘛
link |
34:18.500
所以我們就會把它拉近
link |
34:20.500
那east跟eastward也是比較接近
link |
34:22.500
所以我們就會把它拉近
link |
34:24.500
那east跟north呢
link |
34:26.500
它的語意
link |
34:28.500
就是它比較像是反義詞的概念
link |
34:30.500
所以我們就會把它
link |
34:32.500
拉遠,然後south跟west
link |
34:34.500
我們會想辦法讓它跟這個
link |
34:36.500
east這個字拉遠
link |
34:38.500
那經過counterfeiting這個
link |
34:40.500
過程之後呢,最後產生
link |
34:42.500
的embedded space,叫做
link |
34:44.500
counterfeited global embedded space
link |
34:46.500
那最後的結果可能就是
link |
34:48.500
east這個字
link |
34:50.500
它周圍分布的就是
link |
34:52.500
東方相關的字
link |
34:54.500
south這個字,它旁邊
link |
34:56.500
就是southward,west
link |
34:58.500
它旁邊也只會有western
link |
35:00.500
所以當你用這樣子的一個embedded space
link |
35:02.500
去做替換的時候呢
link |
35:04.500
你在它旁邊畫一個
link |
35:06.500
半徑式
link |
35:08.500
y的球的時候
link |
35:10.500
才不會包含到
link |
35:12.500
一些反義詞
link |
35:14.500
好,所以這個就是
link |
35:16.500
counterfeited global embedded space
link |
35:18.500
我想幫大家
link |
35:20.500
問個問題
link |
35:22.500
像現在啊
link |
35:24.500
除了用globe
link |
35:26.500
的embedding以外,現在很流行
link |
35:28.500
用bert這種contextualized
link |
35:30.500
embedding
link |
35:32.500
那我們等一下會講到
link |
35:34.500
怎麼用bert這種contextualized
link |
35:36.500
embedding嗎?或現在在做
link |
35:38.500
attack的時候,常常用到
link |
35:40.500
這種contextualized embedding嗎?
link |
35:42.500
等一下其實會
link |
35:44.500
講到用bert
link |
35:46.500
做替換,但是
link |
35:48.500
但是我們不太會用
link |
35:50.500
這個bert的
link |
35:52.500
embedding來做替換
link |
35:54.500
那這個原因是
link |
35:58.500
這個原因我等講完
link |
36:00.500
bert的substitution再一起解釋
link |
36:02.500
好啊好啊
link |
36:04.500
各位同學有問題就是
link |
36:06.500
你可以隨時發言
link |
36:08.500
或者是如果你想要
link |
36:10.500
先舉手再發言也是可以的
link |
36:14.500
好,承翰你就請繼續吧
link |
36:16.500
好,那我就繼續
link |
36:18.500
好,所以下一個就是
link |
36:20.500
剛才老師提到的
link |
36:22.500
用這個bert這樣的
link |
36:24.500
language model做
link |
36:26.500
world substitution
link |
36:28.500
那這個要怎麼做呢?
link |
36:30.500
我們的做法是這樣的
link |
36:32.500
我們有一個原本正常的句子
link |
36:34.500
那我們就選定一個我們想要把它換掉的字
link |
36:36.500
那在這個例子裡面
link |
36:38.500
我們要換掉的這個字是recmap
link |
36:40.500
那我們做的事情
link |
36:42.500
就是我們把這個recmap
link |
36:44.500
遮住,然後
link |
36:46.500
丟到一個bert裡面
link |
36:48.500
那這個遮住的部分,這個mask
link |
36:50.500
這個bert這個model
link |
36:52.500
它就會預測出來
link |
36:54.500
很多不同的字
link |
36:56.500
那這個上面這個機率分布
link |
36:58.500
是我實際用bert
link |
37:00.500
bert based on case,然後得到一個機率分布
link |
37:02.500
那它預測出來的結果
link |
37:04.500
bert覺得在這個mask的位置
link |
37:06.500
最有可能被填入的
link |
37:08.500
最有可能的是
link |
37:10.500
懷疑
link |
37:12.500
所以原本的這個句子呢
link |
37:14.500
是I highly recommend it
link |
37:16.500
經過bert的MLM的預測
link |
37:18.500
它就會把它改成
link |
37:20.500
I highly doubt it
link |
37:22.500
那其他預測出來的字包括了
link |
37:24.500
expect, doubt, appreciate, only
link |
37:26.500
所以很明顯的看到
link |
37:28.500
就是在這裡面的
link |
37:30.500
這幾個字裡面,機率最高的
link |
37:32.500
這個其實是
link |
37:34.500
跟原本的語意
link |
37:36.500
可以說是完全相反的
link |
37:38.500
那還有這個envy
link |
37:40.500
你也不知道換進來之後
link |
37:42.500
這句話跟原本的
link |
37:44.500
句子好像也
link |
37:46.500
也沒有什麼關係啊
link |
37:48.500
所以單純用bert MLM
link |
37:50.500
來換的話,可能會
link |
37:52.500
會有一些奇怪的結果
link |
37:54.500
好,所以這個是
link |
37:56.500
因為我們直接用mask
link |
37:58.500
那mask的時候
link |
38:00.500
我們如果直接讓它填入這個mask
link |
38:02.500
的話,bert它其實可以
link |
38:04.500
填入任何符合
link |
38:06.500
這個context的
link |
38:08.500
字詞
link |
38:10.500
那這個符合context不一定符合原本
link |
38:12.500
我們的語意
link |
38:14.500
所以為了要解決這個問題
link |
38:16.500
就有人提出了另外一個不同的方式
link |
38:18.500
這個方式呢
link |
38:20.500
是我們用
link |
38:22.500
reconstructed,就是我們不要這種mask
link |
38:24.500
那這是怎麼一回事呢
link |
38:26.500
也就是假設我們有一個
link |
38:28.500
原本的這個句子是I highly recommend it
link |
38:30.500
那我們今天一樣想要把recommend換掉
link |
38:32.500
但是我們在利用
link |
38:34.500
bert這個模型的時候
link |
38:36.500
我們不要把
link |
38:38.500
recommend這個字遮住
link |
38:40.500
我們不要把它遮住
link |
38:42.500
那即使我不遮住
link |
38:44.500
它最後在這個位置
link |
38:46.500
bert還是會有一個它predict出來的
link |
38:48.500
可能的字詞
link |
38:50.500
那這個可能字詞的機率分布長這個樣子
link |
38:52.500
那這個分布也是我實際上
link |
38:54.500
這個用bert之後
link |
38:56.500
得到的一個機率分布
link |
38:58.500
那大家可以看到這邊這個機率分布
link |
39:00.500
跟前面這一頁
link |
39:02.500
所得到的這個機率分布
link |
39:04.500
其實是看起來會比較合理
link |
39:06.500
舉例而言它機率最高的
link |
39:08.500
機率最高的就是
link |
39:10.500
原本的這個字,這個沒有很意外
link |
39:12.500
那其他的像是rate
link |
39:14.500
rate這個字呢
link |
39:16.500
換到原本的context裡面
link |
39:18.500
看起來是一個比較合理
link |
39:20.500
或是I highly review it
link |
39:22.500
看起來也是一個非常非常合理的
link |
39:24.500
替換
link |
39:26.500
那這個為什麼會是這個樣子呢
link |
39:28.500
因為當
link |
39:30.500
這個
link |
39:32.500
當你沒有把它match住的時候
link |
39:34.500
它最後output出來這個prediction
link |
39:36.500
就會跟原本這個很接近
link |
39:38.500
那跟原本這個很接近的
link |
39:44.500
跟原本很接近的
link |
39:46.500
不是很接近
link |
39:48.500
就是它最有可能
link |
39:50.500
應該就是它原本的那個字
link |
39:52.500
那它其他產生出來的
link |
39:54.500
機率很高的prediction
link |
39:56.500
就會是跟原本這個字的
link |
39:58.500
embedding非常接近的這些詞
link |
40:00.500
所以
link |
40:02.500
這個某種
link |
40:04.500
某種程度上其實它就是有
link |
40:06.500
用了contextualized embedding
link |
40:08.500
來做
link |
40:10.500
做這個
link |
40:12.500
就是找contextualized
link |
40:14.500
embedding裡面的
link |
40:16.500
接近的
link |
40:18.500
接近的neighborhood
link |
40:20.500
來做替換
link |
40:22.500
這樣有回答到老師的問題嗎
link |
40:24.500
link |
40:26.500
謝謝
link |
40:30.500
然後
link |
40:32.500
接下來我們來看
link |
40:34.500
一個比較不一樣的替換方式
link |
40:36.500
那它同樣是
link |
40:38.500
wear label的替換
link |
40:40.500
但是我們這邊替換的方式是用
link |
40:42.500
某些特定的規則來換的
link |
40:44.500
換的方式是我們把一個
link |
40:46.500
字詞的inflection form來
link |
40:48.500
更動
link |
40:50.500
inflection form就是
link |
40:52.500
某一個字的inflectional morpheme
link |
40:54.500
那看這段
link |
40:56.500
說明可能有點難
link |
40:58.500
理解,我們直接看實際的例子
link |
41:00.500
假設有一個這個句子
link |
41:02.500
還是一樣是這個句子,我們要換的是
link |
41:04.500
regmen這個字
link |
41:06.500
link |
41:08.500
inflection morpheme
link |
41:10.500
我們要換inflection morpheme
link |
41:12.500
的時候它可能產生的結果就是
link |
41:14.500
我在原本這個動詞
link |
41:16.500
去更動它的inflectional morpheme
link |
41:18.500
那inflectional morpheme
link |
41:20.500
其實就是這些
link |
41:22.500
表示時態或是表示
link |
41:24.500
動作的進行
link |
41:26.500
方式之類的這些
link |
41:28.500
這個
link |
41:30.500
morpheme
link |
41:32.500
那這些morpheme它是不會影響到
link |
41:34.500
這個字的
link |
41:36.500
原本的意思
link |
41:38.500
那這些morpheme它也有可能會把
link |
41:40.500
一個這個
link |
41:42.500
它有可能會把
link |
41:44.500
它的POS
link |
41:46.500
改變,所以這個
link |
41:48.500
I highly recommend it,它可能改變的是
link |
41:50.500
I highly recommend it, I highly recommend it
link |
41:52.500
I highly recommend it
link |
41:54.500
那這個原本它是一個
link |
41:56.500
base form的動詞
link |
41:58.500
它現在就把它改成
link |
42:00.500
第三人稱單數的或者是
link |
42:02.500
過去式或是動詞ing
link |
42:04.500
或者它也有可能把它改成名詞
link |
42:06.500
就是recommendation,所以這個就是
link |
42:08.500
inflectional morpheme的替換方式
link |
42:10.500
link |
42:12.500
你可能會想說,假設你把它
link |
42:14.500
改成一些像是這個
link |
42:16.500
它就違反了這個文法
link |
42:18.500
那就要看我們現在的
link |
42:20.500
tag有沒有關心說
link |
42:22.500
產生出來的perturbation可不可以是
link |
42:24.500
違反文法的,那假設
link |
42:26.500
我希望它不可以
link |
42:28.500
違反文法的話
link |
42:30.500
那其實
link |
42:32.500
這一個跟這個就是一個
link |
42:34.500
不合法的
link |
42:36.500
這個perturbation
link |
42:38.500
link |
42:40.500
接下來講一個
link |
42:42.500
算是蠻重要的方法
link |
42:44.500
這個方法是用
link |
42:46.500
gradient來做
link |
42:48.500
替換的
link |
42:50.500
好,那
link |
42:52.500
如果我們要用gradient來做替換的話
link |
42:54.500
我們就需要
link |
42:56.500
有辦法知道
link |
42:58.500
這個模型的gradient
link |
43:00.500
所以這個會需要
link |
43:02.500
我們知道,這個就是一個
link |
43:04.500
white box attack的scenario
link |
43:06.500
所以如果你是black box的話你就沒有辦法用這個方式來做替換
link |
43:08.500
link |
43:10.500
那這個方法做的方式是什麼呢
link |
43:12.500
就是我們有一個句子
link |
43:14.500
有一個模型,那我們就把它
link |
43:16.500
丟到模型裡面,forward過之後
link |
43:18.500
我們就會得到一個模型
link |
43:20.500
output出來的loss
link |
43:22.500
link |
43:24.500
我們就用這個loss backward
link |
43:26.500
那就是
link |
43:28.500
backward要backward到哪裡,backward到
link |
43:30.500
這個vary embedding space裡面
link |
43:32.500
那我們是用什麼對什麼
link |
43:34.500
為分呢,我們是用這個loss
link |
43:36.500
對原本的
link |
43:38.500
就是裡面的每個字的vary embedding做為分
link |
43:40.500
那假設我今天要
link |
43:42.500
替換的字是regmen
link |
43:44.500
這個字,那我就是對regmen
link |
43:46.500
的這個
link |
43:48.500
字的vary embedding 10
link |
43:50.500
做偏為分,那這個10
link |
43:52.500
它是一個,它會是一個向量
link |
43:54.500
所以你用這個
link |
43:56.500
partial over partial
link |
43:58.500
它也是一個向量,然後這個向量的
link |
44:00.500
維度就會是跟這個維度是一樣
link |
44:02.500
link |
44:04.500
那接下來我們做的事情呢
link |
44:06.500
是什麼
link |
44:08.500
我先講這個要怎麼做
link |
44:10.500
然後我再講一下為什麼要這樣做
link |
44:12.500
那這個做法呢,就是
link |
44:14.500
我們去找說
link |
44:16.500
partial over partial
link |
44:18.500
10,這個向量
link |
44:20.500
跟其他的embedding
link |
44:22.500
之間的這個
link |
44:24.500
這個向量,就是
link |
44:26.500
e1-e0,或是e2-e0
link |
44:28.500
或是e3-e0
link |
44:30.500
然後這個東西
link |
44:32.500
跟這個東西做
link |
44:34.500
double product之後
link |
44:36.500
我們用這個東西來衡量
link |
44:38.500
哪一個字
link |
44:40.500
應該要被換成
link |
44:42.500
regmen應該要被換成哪一個字
link |
44:44.500
那這個東西呢,它其實是代表
link |
44:46.500
一階的近似
link |
44:48.500
就是
link |
44:50.500
這個loss
link |
44:52.500
loss function在這個字附近
link |
44:54.500
的一階的近似
link |
44:56.500
那這個數值呢
link |
44:58.500
代表說當你把
link |
45:00.500
原本的regmen這個字
link |
45:02.500
e0,換成conmen這個字
link |
45:04.500
的時候,它的loss
link |
45:06.500
會變化多少,這是它的
link |
45:08.500
一階近似,那為什麼這個東西
link |
45:10.500
是一階近似呢
link |
45:12.500
那我們就看一下
link |
45:14.500
下面這個
link |
45:16.500
二維空間的例子
link |
45:18.500
那假設在二維空間裡面
link |
45:20.500
我們的input是這個
link |
45:22.500
x
link |
45:24.500
然後這個是它的loss function
link |
45:26.500
就是y等於
link |
45:28.500
l of x
link |
45:30.500
那今天我們有一個點
link |
45:32.500
是x0
link |
45:34.500
那它對應的這個loss呢
link |
45:36.500
是l of x0
link |
45:38.500
那我們就可以在
link |
45:40.500
這個地方
link |
45:42.500
算說l對
link |
45:44.500
x的微分是多少
link |
45:46.500
然後找到
link |
45:48.500
這條
link |
45:50.500
通過l of x0
link |
45:52.500
這個點的
link |
45:54.500
切線
link |
45:56.500
的切線方程式
link |
45:58.500
就會是y等於
link |
46:00.500
link |
46:02.500
這邊少寫一個x
link |
46:04.500
y等於這個
link |
46:06.500
partial l
link |
46:08.500
over partial x
link |
46:10.500
然後再乘以一個x
link |
46:12.500
然後加上l of x
link |
46:14.500
link |
46:16.500
假設說我有另外一個點
link |
46:18.500
x1,然後我想要用
link |
46:20.500
這一條這個一階
link |
46:22.500
近似,然後來看說
link |
46:24.500
當我把x0移到x1的時候
link |
46:26.500
它的
link |
46:28.500
一階近似會是多少
link |
46:30.500
那我們做的事情就是我們把
link |
46:32.500
x1帶到這個
link |
46:34.500
切線方程式裡面,因為切線就是代表說
link |
46:36.500
這個切線方程式
link |
46:38.500
代表的意義就是
link |
46:40.500
link |
46:42.500
在原本的這個
link |
46:44.500
l of y等於 l of x
link |
46:46.500
附近的一個一階近似
link |
46:48.500
那如果說x1跟x0很
link |
46:50.500
接近的時候,這個一階近似的
link |
46:52.500
準確度就會比較高,那如果很遠的話
link |
46:54.500
像是這個,它的一階近似的準確度
link |
46:56.500
比較低,所以
link |
46:58.500
這個
link |
47:00.500
我們要看x1這個點
link |
47:02.500
用這一條tangent line
link |
47:04.500
做的一階近似的時候,我們就是把它帶進去
link |
47:06.500
link |
47:08.500
我們就可以得到說,當我們把x0
link |
47:10.500
移到x1的時候,用一階近似
link |
47:12.500
它的這個數值
link |
47:14.500
會改變多少
link |
47:16.500
這個數值改變的
link |
47:18.500
幅度呢,就是
link |
47:20.500
x1-x2,也是它們的距離
link |
47:22.500
然後乘以它的斜率
link |
47:26.500
就是
link |
47:28.500
over partial x
link |
47:30.500
這個東西呢,就會是
link |
47:32.500
link |
47:34.500
用一階近似的時候
link |
47:36.500
當我們把x0移到x1之後
link |
47:38.500
它的
link |
47:40.500
loss的改變幅度
link |
47:42.500
所以套到剛才原本的那個意思裡面呢
link |
47:44.500
我們做的事情是什麼
link |
47:46.500
我們做的事情是,我們去算
link |
47:48.500
這個
link |
47:50.500
loss對
link |
47:52.500
這個e0這個embedding
link |
47:54.500
為分,然後
link |
47:56.500
再跟
link |
47:58.500
這幾個不同的
link |
48:00.500
向量做內集,那這幾個向量代表什麼
link |
48:02.500
這幾個向量就是代表說
link |
48:04.500
我把e0移到e1之後
link |
48:06.500
這個移動了多少
link |
48:08.500
e2移到,e0移到e2
link |
48:10.500
就是換成,從allocate換成recommend的時候
link |
48:12.500
我的這個worry embedding
link |
48:14.500
移動了多少,或是我把
link |
48:16.500
recommend換成suggest的時候
link |
48:18.500
我的worry embedding移動了多少
link |
48:20.500
那把這些移動的距離呢
link |
48:22.500
.product with partial l
link |
48:24.500
over partial e0,就代表說
link |
48:26.500
我們用一階近似來看的時候
link |
48:28.500
我們把
link |
48:30.500
這個
link |
48:32.500
原本的worry embedding換成後來的
link |
48:34.500
worry embedding之後
link |
48:36.500
它的loss會
link |
48:38.500
改變多少
link |
48:40.500
那如果它是正的話,就是表示說
link |
48:42.500
它的loss會增加,如果它是負的話
link |
48:44.500
它的loss會減少
link |
48:46.500
所以我們要找合法的
link |
48:48.500
就是我們要找這個
link |
48:50.500
可能的替換,就是我們去找說
link |
48:52.500
這個東西
link |
48:54.500
我們去取argmax
link |
48:56.500
最大的K格
link |
48:58.500
然後看說
link |
49:00.500
在所有的vocabulary,所有embedding space裡面的
link |
49:02.500
worry embedding
link |
49:04.500
哪些東西我們把它
link |
49:06.500
我們把recommend
link |
49:08.500
替換成哪些東西之後
link |
49:10.500
它的loss會變化
link |
49:12.500
最多
link |
49:14.500
那這個就是我們替換的方式
link |
49:16.500
這個
link |
49:18.500
這個有點
link |
49:20.500
我一個小問題啊
link |
49:22.500
那個一般啊
link |
49:24.500
我們在實作上
link |
49:26.500
會一定會找topK格
link |
49:28.500
worry嗎?有沒有可能
link |
49:30.500
就是現在gradient
link |
49:32.500
算出來的方向,如果跟
link |
49:34.500
ei-e0都是
link |
49:36.500
做那個大product
link |
49:38.500
都是負的,那會不會就
link |
49:40.500
就代表說
link |
49:42.500
現在把recommend變成
link |
49:44.500
任何其他的worry
link |
49:46.500
可能都不會讓
link |
49:48.500
loss變大,那是不是就有可能
link |
49:50.500
不選擇替換任何的worry呢
link |
49:52.500
有可能
link |
49:54.500
不過這個就是
link |
49:56.500
它attack就失敗了
link |
49:58.500
因為在一個整個
link |
50:00.500
句子裡面有很多不同的詞彙
link |
50:02.500
所以也許recommend沒有替換掉
link |
50:04.500
但是其他詞彙有替換掉
link |
50:06.500
搞不好最後的攻擊還是會成功的
link |
50:08.500
就是感覺要全部
link |
50:10.500
我個人是覺得不太可能
link |
50:12.500
因為如果你把它換成反義詞
link |
50:14.500
它一定是可以
link |
50:16.500
它應該會直接
link |
50:18.500
就是
link |
50:20.500
它應該就會是
link |
50:22.500
就一定要是正的
link |
50:24.500
了解了解
link |
50:26.500
有同學想問問題了
link |
50:28.500
那個
link |
50:30.500
不好意思
link |
50:32.500
不用講沒關係
link |
50:34.500
那個
link |
50:36.500
請問一下就是
link |
50:38.500
因為我們要攻擊的不是別人的model
link |
50:40.500
那我們要怎麼樣知道別人的model
link |
50:42.500
對一個東西的違反
link |
50:46.500
這個就是假設說你
link |
50:48.500
知道他的model是什麼
link |
50:50.500
那如果你不知道的話
link |
50:52.500
如果你不知道的話
link |
50:54.500
你可以用imitation attack的方式
link |
50:56.500
把他的model投過來
link |
50:58.500
然後把那個model當作是一個proxy
link |
51:00.500
所謂的imitation attack
link |
51:02.500
就是之後會講
link |
51:04.500
就是別人有一個model
link |
51:06.500
他是一個black box
link |
51:08.500
然後你用某種方法把這個model
link |
51:10.500
投過來
link |
51:12.500
然後投過來意思就是說你在你的local的地方
link |
51:14.500
有一個跟他幾乎是一模一樣的模型
link |
51:16.500
那在這個狀況下你就可以
link |
51:18.500
把它當成是一個white box的model來打
link |
51:20.500
這樣子
link |
51:22.500
這樣回答到你的問題了
link |
51:24.500
這個投的方法
link |
51:26.500
是指有點像teacher student那種嗎
link |
51:28.500
就是我找一堆資料
link |
51:30.500
然後讓我的model去學
link |
51:32.500
他的model的
link |
51:34.500
長相之類的
link |
51:36.500
去學他的輸出會長怎樣
link |
51:38.500
就是這樣子
link |
51:40.500
謝謝
link |
51:42.500
大家還有問題想問嗎
link |
51:46.500
大家有問題都可以隨時舉手
link |
51:52.500
如果暫時沒有
link |
51:54.500
那我們就請承翰繼續囉
link |
51:56.500
link |
51:58.500
接下來一個transformation的方式
link |
52:00.500
也是world level
link |
52:02.500
但他不是substitution
link |
52:04.500
他是insertion
link |
52:06.500
insertion就是我們要插一個字
link |
52:08.500
第一個你要先決定要插在哪裡
link |
52:10.500
那你也可以隨便插沒關係
link |
52:12.500
反正總而言之假設我們已經決定好
link |
52:14.500
我們要插在哪裡之後
link |
52:16.500
那我們要怎麼插呢
link |
52:18.500
有一種很簡單的方法就是你要用MLM來插
link |
52:20.500
就是Mass Language Model
link |
52:22.500
所以你有一個
link |
52:24.500
原本的句子是這個樣子
link |
52:26.500
然後你就是
link |
52:28.500
決定好說我要插在
link |
52:30.500
I跟I的中間
link |
52:32.500
那你就放一個Mass的這個頭文進去
link |
52:34.500
然後丟到word裡面
link |
52:36.500
然後他就會predict出來各種可能的
link |
52:38.500
prediction
link |
52:40.500
然後這些東西就是
link |
52:42.500
可能的word insertion
link |
52:44.500
可能的prediction
link |
52:46.500
那也有一種很簡單的
link |
52:48.500
transformation就是word deletion
link |
52:50.500
就是你把每個字拿掉
link |
52:52.500
link |
52:54.500
但這個
link |
52:56.500
這種的
link |
52:58.500
transformation
link |
53:00.500
很容易會影響到他原本的
link |
53:02.500
語意或是
link |
53:04.500
影響到他的文法正確性
link |
53:06.500
所以這個
link |
53:08.500
transformation的方式
link |
53:10.500
沒有到很常用
link |
53:12.500
那另外一種
link |
53:14.500
這個transformation
link |
53:16.500
剛才講的全部都是word level transformation
link |
53:18.500
就是你要怎麼把一個
link |
53:20.500
一個字詞
link |
53:22.500
換成某一個字詞
link |
53:24.500
或是把它拿掉或是新增一個新的字詞
link |
53:26.500
那我們現在
link |
53:28.500
看一下corrector level
link |
53:30.500
的這個transformation
link |
53:32.500
那corrector就是字元
link |
53:34.500
這個corrector就是CHA
link |
53:36.500
所以這個叫corrector
link |
53:38.500
那假設說
link |
53:40.500
我們原本的字
link |
53:42.500
是這些不同的字
link |
53:44.500
那corrector level
link |
53:46.500
的transformation就包括swap
link |
53:48.500
這個swap就是
link |
53:50.500
我們把相鄰的兩個
link |
53:52.500
這個corrector
link |
53:54.500
做交換位置
link |
53:56.500
像我把1跟a的位置互換
link |
53:58.500
那我把s跟i的位置互換
link |
54:00.500
或者是我們做substitution
link |
54:02.500
就是我把某一個corrector
link |
54:04.500
換成另外一個corrector
link |
54:06.500
像我把a換成x
link |
54:08.500
或者是我把t換成x
link |
54:10.500
之類的
link |
54:12.500
那另外一種可能的做法就是deletion
link |
54:14.500
那deletion就像
link |
54:16.500
把corrector拿掉
link |
54:18.500
或者是insertion就是你新加了一個
link |
54:20.500
原本不在這個字的corrector
link |
54:22.500
那這些這個
link |
54:24.500
corrector level的transformation
link |
54:26.500
其實是很常會
link |
54:28.500
發生在我們日常生活
link |
54:30.500
就是你打字的時候很容易會打錯字
link |
54:32.500
所以其實有人在設計這些
link |
54:34.500
corrector level的
link |
54:36.500
transformation的時候他會考慮說
link |
54:38.500
鍵盤上面
link |
54:40.500
哪些字是比較接近的
link |
54:42.500
那他就會把
link |
54:44.500
就是舉例而言
link |
54:46.500
像是
link |
54:48.500
假設我們要做substitution好了
link |
54:50.500
那他就會看說
link |
54:52.500
我今天要換掉artist裡面的這個t
link |
54:54.500
他就看鍵盤上面
link |
54:56.500
跟t比較接近的字是哪些
link |
54:58.500
鍵盤上面跟t比較接近就是
link |
55:00.500
r跟y還有g嘛
link |
55:02.500
所以他就可能會把它換成r跟y還有g
link |
55:04.500
那其實corrector level的transformation
link |
55:06.500
他其實是一個非常強的transformation
link |
55:08.500
為什麼會這樣講呢
link |
55:10.500
因為對人來說
link |
55:12.500
像是swap
link |
55:14.500
這樣子的一個transformation
link |
55:16.500
對人來說
link |
55:18.500
至少我來看
link |
55:20.500
乍看之下我不會看出這個詞跟原本的這個詞
link |
55:22.500
有什麼太大的差別
link |
55:24.500
可是對模型來說呢
link |
55:26.500
模型他在訓練的時候應該只有看過正常的字
link |
55:28.500
他不會看拼錯的字
link |
55:30.500
所以他看到一個拼錯的字的時候
link |
55:32.500
他可能就會直接爛掉
link |
55:34.500
他根本就不認識這個字
link |
55:36.500
他就是一個out of vocabulary的字
link |
55:38.500
所以這種corrector level的transformation
link |
55:40.500
他是一個很強的
link |
55:42.500
這個as a rotator
link |
55:44.500
link |
55:46.500
那接下來呢
link |
55:48.500
下一個
link |
55:50.500
ingredient就是constraint
link |
55:52.500
那講constraint之前
link |
55:54.500
我們先休息10分鐘
link |
55:56.500
好好好
link |
55:58.500
我們休息10分鐘
link |
56:00.500
我們10分鐘後再回來
link |
56:02.500
拜拜