back to index

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


link |
00:01.000
就是所謂的限制。那這個constraint呢,就是告訴我們說
link |
00:07.000
一個合理,valid adversarial sample,它應該要滿足什麼樣的條件。
link |
00:12.000
那這個adversarial example它的限制啊,
link |
00:19.000
它其實跟你的這個任務的goal是非常有關的。
link |
00:23.000
假設今天你的任務是一個應該要保持semantic的任務,
link |
00:28.000
那這個constraint就會要求說你attack產生出來的東西
link |
00:35.000
必須要保留這個語意上面的語意,它原本的語意。
link |
00:40.000
那假設今天文法是一個很重要的東西的時候,
link |
00:49.000
那你可能就會把這個文法加到這個constraint裡面。
link |
00:54.000
那也有可能我們希望說這個更動之後的sample跟原本的sample
link |
01:00.000
它不可以差得太多,那我們就會限制說這個overlap
link |
01:05.000
between original 還有preferred sample要足夠的高。
link |
01:10.000
好,那我們首先來看這個overlapping的衡量方式,
link |
01:14.000
我們會用什麼樣的衡量方式。
link |
01:16.000
那首先第一個我們來介紹一下這個Levenstein Added Distance。
link |
01:20.000
它計算的是原本的sample跟更動過後的sample
link |
01:26.000
它們的added distance有多少。
link |
01:30.000
那這個東西比較常是拿來衡量corrector-level transform,
link |
01:35.000
就是當我們在做corrector-level transform的時候呢,
link |
01:39.000
我們可能會做substitution,我們可能會做swap,
link |
01:42.000
我們可能會做deletion跟insertion。
link |
01:44.000
那我們當然會希望說原本的這個字
link |
01:50.000
跟它經過corrector-level transform的這個字
link |
01:53.000
它長得不可以差太多,不然你看就知道它是一個問題的東西。
link |
01:58.000
那我們就會用Levenstein Added Distance來衡量。
link |
02:01.000
那Levenstein Added Distance它計算的是A跟B這兩個字串的added distance,
link |
02:07.000
那它是用一個遞迴的方式來定義的,它的式子寫在這邊。
link |
02:11.000
那我們用一個實際的例子,這個例子是我在Wikipedia上面看的。
link |
02:16.000
那來介紹一下,解釋一下這個遞迴式是怎麼算出兩個字串的Levenstein Added Distance。
link |
02:24.000
那首先呢,這個假設我們原本的A,A0是Piton,然後B0是Satin。
link |
02:31.000
那我們要算A0跟B0這兩個字串的Levenstein Added Distance的時候呢,
link |
02:37.000
我們就看看它滿足哪一個條件。
link |
02:39.000
第一個條件是B0這個字串,它要是強度是0,那很明顯不是。
link |
02:44.000
A0的字串,強度是0,很明顯也不是。
link |
02:46.000
那第三個條件告訴我們說呢,這個A0跟B0是一樣的。
link |
02:51.000
A的第一個corrector跟B的第一個corrector是一樣的,很明顯也不是。
link |
02:56.000
所以最後我們要來看這個。
link |
02:58.000
那這個呢,就是你要去找B加上minimum的這三個。
link |
03:04.000
那反正我已經找出來了,就是minimum就可以是這個,就是A0的Tail。
link |
03:09.000
Tail就是去掉頭的剩下的部分叫Tail,還有B0的Tail。
link |
03:14.000
所以現在我們的Levenstein Distance就是1加上這個東西,
link |
03:19.000
也就是這兩個東西它的Levenstein Distance。
link |
03:22.000
那這兩個東西的Levenstein Distance呢,我們就看這邊的這個if else condition。
link |
03:32.000
那我們就看到說這兩個東西啊,它其實是符合這邊的這個condition,
link |
03:38.000
就是A的第一個corrector跟B的第一個corrector是一樣的,都是i嘛。
link |
03:43.000
所以這時候我們就繼續往下看,我們把這個東西這邊的i拿掉,
link |
03:50.000
然後繼續看這兩個字串的Tail,它們的Levenstein Distance是多少。
link |
03:55.000
那拿掉以後呢,我們又發現說A這個字串跟B這個字串,它們開頭還是一樣。
link |
04:02.000
那這件事情會再做好幾次,然後做到這個時候呢,你把這兩個T都拿掉之後,
link |
04:08.000
A剩下EN,然後B剩下ING。
link |
04:11.000
那這時候呢,前面這三個條件都不滿足,所以就是要看第四個條件。
link |
04:18.000
那結果最後反正我算出來minimum是這個啦。
link |
04:23.000
所以這時候呢,當你要把E跟i這個東西拿掉,然後算N跟NG這兩個Tail的Levenstein Distance的時候,
link |
04:32.000
這個原本的Levenstein Distance就要再加這邊這個E,所以Levenstein Distance再加E。
link |
04:38.000
然後我們來看N跟NG這兩個substring它的Levenstein Distance。
link |
04:44.000
那在看這兩個Levenstein Distance的時候呢,我們就發現說這兩個string它的開頭都是N。
link |
04:52.000
所以它就符合這個條件。
link |
04:54.000
所以我們就把N拿掉之後,來看剩下的Tail它們的Levenstein Distance是多少。
link |
05:02.000
那最後拿到最後,這個N被拿掉之後,這個變成一個空字串,然後這邊剩下一個G。
link |
05:07.000
所以當這個A是空字串的時候呢,它的Levenstein Distance,這兩個東西的Levenstein Distance就是這個B的長度。
link |
05:18.000
那現在B的長度剩下E,所以Levenstein Distance再加E,所以總共它的Levenstein Distance,這兩個string它的Levenstein Distance就是3。
link |
05:31.000
那實際上我們在算的時候不是用地回算,實際上有其他的比較快的算法可以不用用地回算。
link |
05:38.000
那大家如果有興趣的話大家可以去看WebPDF。
link |
05:41.000
我這邊有個小問題喔,這邊舉的例子是Character Level的Levenstein Distance。
link |
05:48.000
那一般我們在做NLP的Universal Attack的時候算的是Character Level的嗎?
link |
05:55.000
還是我們其實應該是會算Word Level或者是Token Level的Levenstein Distance?
link |
06:01.000
如果是Character Level的傳送的話我們會用Character Level的Levenstein Distance。
link |
06:08.000
然後如果是Word Level的話我們就應該直接看說它Perturbation的字的比例有多少。
link |
06:22.000
我不確定Word Level的Levenstein Distance要怎麼定義,我有點不確定。
link |
06:30.000
其實還是可以啊,我們就把每一個Word當作一個單位,本來算在Character上的就改成算在Word上的。
link |
06:37.000
就改成算在兩個Word Sequence上。
link |
06:40.000
對,感覺是可以嘛,就像是ASR的Error Rate那樣。
link |
06:45.000
對對對。
link |
06:46.000
不過好像比較不會這樣算。
link |
06:51.000
好,謝謝承翰。
link |
06:54.000
這邊還有一個問題,就是因為現在蠻多Deep Learning Model其實都是用Subword的Tokenization。
link |
07:02.000
那有針對Subword的算法或是做法之類的,就是First Node Tokenizer?
link |
07:15.000
不會,因為我們在做Perturbation的時候其實應該是以字為單位做Perturbation。
link |
07:20.000
所以,我先確認一下你的問題,你的問題是說當我們的Perturbation單位是Subword的時候我們要怎麼算他們的Overlap嗎?
link |
07:31.000
對對對。
link |
07:34.000
我們不太會在Subword Level做Perturbation,因為假設有一個Word它被Tokenized成兩個詞號。
link |
07:44.000
那如果你只有Perturb其中一個東西的話,那它可能會是一個完全不make sense的Perturbation。
link |
07:55.000
所以我們一般而言應該是以字為單位做Perturbation,所以不會有需要算Subword Level的Overlap的這種狀況。
link |
08:06.000
就是要以合理為主這樣?
link |
08:09.000
對。
link |
08:10.000
就是要以合理為主這樣?
link |
08:11.000
對,要以合理為主。
link |
08:13.000
OK,謝謝。
link |
08:15.000
好,感謝感謝。
link |
08:17.000
好,然後另外一個Overlap的算法就是算更改的字的比例有多高,就是算Percentage。
link |
08:28.000
那這個Percentage就是看你有改變多少Percent的字。
link |
08:34.000
那像是假設你換了一個字,那總共有四個字,那它就是改了25%的字。
link |
08:40.000
那一般而言我們要衡量一個Attack的好壞的時候,我們當然會拿它的SuccessRate來衡量,
link |
08:50.000
然後我們也會希望說它Perturb的這個字的比例應該要越低越好。
link |
08:55.000
所以這個比例我們會希望是越低越好的。
link |
08:57.000
好,那下一個東西,下一個Constraint我們來看的是有沒有合文法。
link |
09:07.000
那第一個這個Constraint的方式呢,就是PoS的Consistency。
link |
09:14.000
PoS就是part of,就是磁性。
link |
09:17.000
那這個東西關心的是當某個字它被替換掉之後,它被替換的字跟原本的字,它的磁性是不是一樣的。
link |
09:27.000
所以以這個,還是剛剛一直出現的那個例子為例,I highly recommend it。
link |
09:32.000
那這邊我們假設我們要把Recommend這個字做替換。
link |
09:37.000
那Recommend這個字它的PoS,你是用那個NLTK的PoS Tagger之後會得到,
link |
09:44.000
它是Verb,然後它是Present tense, not Serious Present Simple,就是它不是第三人稱,但它是現在式號。
link |
09:50.000
那假設說你用了某一個Transformation的方式,然後得到一個Perturbation,叫做I highly advocate it。
link |
09:58.000
那Advocate這個字呢,它的PoS也同樣是非第三人稱現在式。
link |
10:05.000
所以這個東西它就有符合我們的PoS Consistency這個限制。
link |
10:09.000
那也有可能啊,你的Transformation得到的結果是I highly recommendation it。
link |
10:18.000
那這個句子很明顯是不合文法的嘛。
link |
10:20.000
然後這個Recommendation這個字呢,你用NLTK的PoS Tagger,會得到的這個PoS是名詞。
link |
10:30.000
所以當它把一個動詞換成名詞的時候,它就不符合我們這個PoS的Consistency,所以這個一定是一個violation。
link |
10:38.000
那一個比較尷尬的例子是這個,也有可能它產生的這個Perturbation是I highly recommend it。
link |
10:46.000
那這個字呢,如果你把Recommended拿去做PoS Tagging,它得到的結果是Verb,它也是動詞,但是它是一個過去式的動詞。
link |
10:58.000
那這個時候啊,它雖然一樣是動詞,但是它的時態被改變了。
link |
11:04.000
這個就有點難去定義說它到底是不是一個合法的Transformation,這個就要看你的Constraint有下多嚴。
link |
11:12.000
我們會要求說它的時態一定百分之百要是一樣的,也就是它如果是第三人稱,非第三人稱然後是現代式,那它改出來的結果就一定要是非第三人稱的現代式。
link |
11:22.000
那為什麼這個PoS的Consistency是重要的呢?因為假設你沒有下這個Constraint的話,它可能就會產生一些不符合文法的句子。
link |
11:35.000
那即使它把一個動詞經過Perturbation之後產生另外一個動詞,那即使它都是動詞啊,它的時態只要不一樣,假設它把它改成動詞Ing的話,那這樣還是不符合文法。
link |
11:47.000
所以PoS Consistency可以幫助我們確保文法的正確性。
link |
11:55.000
那另外一個確保文法正確性的方式呢,就是我們拿一個現成的Toolkit,然後來衡量說我們經過Perturbation的這個句子,它到底有沒有文法錯誤。
link |
12:09.000
那有一個Toolkit叫做LanguageTool,然後它會告訴你說你的這個Input句子有多少錯誤。
link |
12:17.000
所以像是我們剛才產生的這個I highly recommendation,它就會被LanguageTool這個Toolkit標出來說這個文法是錯的。
link |
12:27.000
這個就是一個跟Grammarly差不多的東西啊,只是它是Open Source。
link |
12:32.000
那另外一個衡量文法的合理性的方式呢,是用Pretend Language Model所計算出來的Complexity。
link |
12:47.000
那這個東西就是仰賴Pretend Language Model,它看過了很多不同的Cohorts,很多不同的句子。
link |
12:55.000
那我們就會認為說這個Pretend Language Model它應該要學到人類的語言的某些Distribution。
link |
13:00.000
那我們假設說這些人類語言的Distribution,它看過的應該是合文法的Distribution。
link |
13:07.000
所以呢,它就會給比較合文法的句子比較高的機率,它就會給比較不符合文法的句子比較低的機率。
link |
13:16.000
那這個就是我們使用Language Model,從Perplexity可以得到文法合理性的一個方式。
link |
13:24.000
那實際上的做法呢,就是我們把不同的Perservation丟到Pretend過的GPT-2這個Model裡面。
link |
13:31.000
那這個模型呢,就會凹附出一個叫做Perplexity的東西。
link |
13:35.000
那Perplexity這個數值呢,代表說這個句子出現的可能性有多低。
link |
13:43.000
所以說這個Perplexity越大,表示說這個句子出現的機率越低。
link |
13:50.000
Perplexity越小,表示這個句子出現的機率越高。
link |
13:53.000
所以我們在用這個GPT-2當作是文法的Constraint的時候,我們可能會設一個Threshold,
link |
14:04.000
然後假設說這個Perplexity超過多少的時候,我們就要認為說它是一個不合法的Perservation。
link |
14:13.000
那這個GPT-2假設說它凹附出來說這個Perplexity是200,
link |
14:18.000
那這個比較合文法的,它就會凹附出一個相對低很多的Perplexity。
link |
14:22.000
那假設你說Perplexity超過50,我就把它全部當作是不合文法的話,
link |
14:29.000
那這個句子它就會被你的Constraint拿掉,只剩下這個句子。
link |
14:33.000
那看完這個Overlap跟文法的Constraint之後呢,我們最後看最常見的一個Constraint,
link |
14:43.000
就是Semantic Similarity的這個Constraint。
link |
14:46.000
那在很多的任務上面,像是這個前面看到的電影評論的分類,
link |
14:54.000
或者是這個News Title的Configuration,
link |
14:58.000
就很多跟語意相關的Test,我們都會希望說Perturb之前的句子,
link |
15:04.000
也就是原本的句子跟Perturb之後過的句子,
link |
15:07.000
它應該要相當程度的在語意上有很高的相似性。
link |
15:13.000
那這個要怎麼去做Constraint呢?
link |
15:16.000
那有很多不同不同的方式,那首先我們第一個來介紹的是,
link |
15:20.000
替換這個字跟字在Word Embedding Space上面的距離。
link |
15:25.000
那假設這是一個Word Embedding Space,
link |
15:28.000
那原本的字,就是剛才那個例子,I highly recommend it,
link |
15:31.000
那我們就把recommend這個字找到它在Word Embedding Space裡面的這個位置,
link |
15:36.000
然後我們這個潛在的Perturbation,我們把它換成command跟advocate這兩個字。
link |
15:42.000
那我們就去看說這兩個Word Embedding它的Cosine Similarity有多高。
link |
15:49.000
那舉例而言這兩個字我們會算出來Cosine Similarity,
link |
15:53.000
它的Cosine Theta是0.85,
link |
15:57.000
然後這recommend跟advocate這兩個字算出來的Cosine Similarity是0.63。
link |
16:04.000
那假設我們有一個Constraint告訴我們說這個Cosine Similarity要高於0.82,
link |
16:09.000
它才算是一個合理的Perturbation的話,
link |
16:14.000
那advocate這個字就會被去掉,然後只剩下command這個字。
link |
16:19.000
那這個地方你要用什麼樣的距離來當作衡量的標準,
link |
16:26.000
當然是看個人的選擇,
link |
16:29.000
你當然可以用這邊用Cosine Similarity,
link |
16:32.000
你也可以用L2的Euclidean Distance,或是L1的Euclidean Distance都可以。
link |
16:37.000
不過這邊其實重要的可能不是你選的是哪一種metric,
link |
16:42.000
而是你的Constraint的這個Threshold要怎麼定。
link |
16:47.000
因為這個怎麼定會影響到你最後產生出來的品質嘛。
link |
16:53.000
那很多人做的方式就是他就選一個他覺得合理的數字,
link |
17:00.000
那直接選一個他覺得合理的數字到底有多合理呢?
link |
17:04.000
那等一下會看一些實際的例子,
link |
17:08.000
大家就會知道說這個Threshold的選擇是非常非常重要的,
link |
17:13.000
而且會大大的影響最後產生出來的Azure Sample的品質。
link |
17:19.000
好,那我們看下一個來衡量兩個Perturbation的,
link |
17:26.000
衡量Perturbation跟原本的句子的Similarity的方式。
link |
17:30.000
那我們用的是一個叫做Universal Sentence Encoder的模型。
link |
17:34.000
那所謂的Universal Sentence Encoder就是一個很Universal的模型,
link |
17:39.000
他就是一個Sentence Encoder,那Sentence Encoder做的事情就是
link |
17:43.000
丟進去一個句子,然後他會output出一個Sentence Embedding,
link |
17:48.000
這個Sentence Embedding就是一個向量,
link |
17:51.000
然後這個向量代表了這個原本的句子。
link |
17:56.000
那當我們要算這個原本的句子跟經過Perturbation之後的句子有多像的時候呢,
link |
18:04.000
我們就把這兩個句子同時丟到,就各自丟到Universal Sentence Encoder裡面,
link |
18:10.000
然後得到他們各自對應的這個Sentence Embedding,
link |
18:14.000
然後我們再去算這兩個Sentence Embedding他們之間的Cosine Similarity有多高。
link |
18:20.000
那同樣的這邊你還是一樣要去定一個Threshold說
link |
18:24.000
Cosine Similarity高於多少的時候,我們就把它當成是一個合法的Perturbation,
link |
18:29.000
Cosine Similarity低於多少的話,我們就認為它是不合法的Perturbation。
link |
18:34.000
所以這個Threshold也是一樣會大大的影響到最終產生的結果。
link |
18:40.000
好,最後呢,講完了前面三個,最重要的一個方式就是
link |
18:45.000
我們要怎麼結合Conformation,然後找到一個滿足所有Constraint,
link |
18:52.000
又可以達到我們的目標任務的Adversarial Sample。
link |
18:57.000
那這件事情呢,就是Search Method它要來做的。
link |
19:02.000
那我們這邊簡單的講三個最常用的方式。
link |
19:09.000
第一種是Greedy Search,然後第二種也是Greedy Search,
link |
19:12.000
但是它在做Greedy Search的時候會考慮不同的字的重要性。
link |
19:16.000
那第三個就是基因演算法。
link |
19:19.000
那最常用的其實是第二個,然後基因演算法比較少人在用,
link |
19:27.000
那主要是因為基因演算法非常非常慢,
link |
19:30.000
然後還有另外一種更慢的,但是更慢的我就不講了。
link |
19:38.000
首先我們來看那個Greedy Search,那Greedy Search呢,
link |
19:42.000
它做的方式就是它有很多不同的Perturbation,
link |
19:49.000
那我們就是看說在每一個位置的Perturbation,
link |
19:53.000
哪一個Perturbation可以讓Model最終的Output變化最多。
link |
19:58.000
所以舉例而言,在I highly recommend it原本正常的句子上面,
link |
20:04.000
我們就產生了五個潛在的Perturbation。
link |
20:09.000
那前面兩個Perturbation呢,我們是把highly換成strongly跟inordinately,
link |
20:14.000
後面這三個例子呢,我們是在第三個詞的位置,
link |
20:17.000
把recommend換成urge,advocate跟command。
link |
20:20.000
那我們就把這五個不同的句子丟到這個test classifier裡面,
link |
20:25.000
然後我們就得到了這個模型的Output還有它相對應的Loss。
link |
20:31.000
那它就會告訴我們說,當你把highly換成strongly的時候,
link |
20:37.000
這個模型還是有很高的機率覺得它是一個正面的評論。
link |
20:42.000
但是當你把highly換成inordinately的時候,
link |
20:46.000
模型就會有,它覺得它是正面評論的機率就會大幅的降低。
link |
20:54.000
好,那這時候我們做的事情呢,就是我們會去看說,
link |
20:58.000
在這所有不同的Perturbation裡面哪一個東西它是最強的Perturbation。
link |
21:04.000
所謂最強的Perturbation就是,當它原本是positive的時候,
link |
21:07.000
我就希望我找一個最強的Perturbation,
link |
21:10.000
就是可以讓positive的機率降到最低的這個Perturbation,
link |
21:13.000
就稱為是最強的Perturbation。
link |
21:15.000
所以在這邊的例子裡面,在這五個東西,
link |
21:19.000
在這五個潛在的Perturbation裡面呢,
link |
21:22.000
I inordinately recommend it,它的正面的機率是0.51,
link |
21:28.000
所以我們就把它當作是最強的一個Perturbation。
link |
21:31.000
然後呢,第二強的是誰呢?是正面機率0.53的,
link |
21:35.000
I highly advocate it,它的ranking是2,
link |
21:38.000
然後依此類推,就是3,4,然後還有5。
link |
21:41.000
好,那做完這件事情之後呢,我們就開始換。
link |
21:45.000
我們就原本的這個字呢,原本的句子是I highly recommend it,
link |
21:49.000
它是一個正面的句子嘛,
link |
21:52.000
那我們就根據這個ranking來greedy地把字換掉。
link |
21:57.000
那ranking最高的是這個,所以我們就把highly換成inordinately,
link |
22:03.000
變成這個樣子。
link |
22:04.000
那已經換過的字呢,我們就不會再換第二次了。
link |
22:07.000
那ranking的下一個字呢,是第二高的是,
link |
22:11.000
當我把highly recommend it換成highly advocate it,
link |
22:16.000
所以第二個我們做的事情就是,
link |
22:18.000
我們再把這個I inordinately recommend it,
link |
22:21.000
換成I inordinately advocate it,
link |
22:24.000
然後做完這件事情呢,我們再把它丟到模型裡面,
link |
22:26.000
那丟到模型裡面,這個模型就告訴我們說,
link |
22:30.000
它覺得這是一個負面的評論,
link |
22:32.000
那我們的attack就成功了,然後這個過程就結束了。
link |
22:36.000
那要是沒有的話,我們就會看下一個ranking最高,
link |
22:40.000
而且還沒有被換過的字。
link |
22:41.000
那因為它是只關心這個ranking的高低,
link |
22:46.000
所以我們把它稱為是greedy search。
link |
22:51.000
那我在想說,既然有人做greedy search,
link |
22:54.000
一定也有類似做beam search的方法吧?
link |
22:57.000
有人在這個地方做beam search嗎?
link |
22:59.000
有,有做beam search。
link |
23:01.000
哦,了解了解。
link |
23:02.000
我沒有做beam search的同學,
link |
23:04.000
是因為我不想做動畫而已。
link |
23:07.000
好啊好啊,您做夠多動畫,太強了。
link |
23:11.000
沒有沒有,有beam search,
link |
23:14.000
就是有beam search,
link |
23:17.000
然後beam search的問題就是,
link |
23:21.000
你的beam塊越多的話,
link |
23:24.000
它的記憶體就要越大。
link |
23:26.000
所以其實用下面這個方法,
link |
23:30.000
就可以達到很不錯的attack水果,
link |
23:33.000
所以這個方法是最常用的。
link |
23:35.000
那beam search也是有人在用。
link |
23:37.000
好的。
link |
23:38.000
那第二個方法叫做greedy search with word importance ranking。
link |
23:44.000
那首先第一個步驟,
link |
23:46.000
這個跟greedy search的差別就是,
link |
23:48.000
它多了一個word importance ranking。
link |
23:50.000
那第一個步驟就是我們要去找出,
link |
23:52.000
每一個這個input句子裡面的每一個字,
link |
23:55.000
它的重要性有多高。
link |
23:58.000
那重要性有多高這個要怎麼找呢?
link |
24:01.000
這個等一下我們再來講。
link |
24:04.000
總而言之,假設我們用了某一個方法,
link |
24:06.000
這個word importance ranking的方式,
link |
24:09.000
找到了每一個字的ranking長這個樣子。
link |
24:13.000
它就告訴我說呢,
link |
24:14.000
對於這個word importance ranking的方法,
link |
24:16.000
它覺得這個原本的句子,
link |
24:18.000
最重要的這個字是rankman這個字,
link |
24:20.000
第二重要的字是highly這個字,
link |
24:22.000
那it跟it是兩個比較不重要的字。
link |
24:27.000
好,那當我們知道這件事情的時候呢,
link |
24:30.000
下一個步驟就是我們按照這個順序,
link |
24:33.000
來從最重要的字換到最不重要的字。
link |
24:37.000
所以我們來看一下這個表格。
link |
24:42.000
這個它跟greedy search是很像的,
link |
24:44.000
所以我們會列一個類似的表格。
link |
24:46.000
原本這個highly這個字呢,
link |
24:48.000
我們可能根據某一個transformation的結果得到,
link |
24:52.000
它可以被換成strongly跟inordinately。
link |
24:54.000
rankman這個位置的字呢,
link |
24:56.000
我們根據某一個transformation得到的結果,
link |
24:58.000
我們知道它可以換成urge,advocate跟comment。
link |
25:01.000
那剛剛的這個word importance ranking的結果,
link |
25:05.000
告訴我們說rankman這個字是最重要的,
link |
25:07.000
所以我們會先換rankman。
link |
25:09.000
然後highly這個字是第二重要的,
link |
25:12.000
所以我們會第二個才會去換這個highly這個字。
link |
25:16.000
所以原本這個句子它是highly recommended,
link |
25:20.000
那模型覺得它是一個正面的電影論。
link |
25:23.000
那接下來我們做的事情就是,
link |
25:25.000
我們先從最重要的字開始換。
link |
25:28.000
那這個最重要的衡量標準,
link |
25:29.000
是我們用word importance ranking得到的這個rank。
link |
25:33.000
那它覺得最重要的是rankman,
link |
25:34.000
所以我們就把rankman換掉。
link |
25:36.000
那我們要從candidate set裡面換成哪一個呢?
link |
25:40.000
我們就挑可以讓模型對於正面的機率降的最低的。
link |
25:47.000
那在urge,advocate還有comment這三個字裡面,
link |
25:51.000
我們來看這三個字的p positive,
link |
25:53.000
就是正面的機率。
link |
25:55.000
那最低的就是advocate這個字,
link |
25:57.000
所以我們就會先把advocate這個字換掉。
link |
26:00.000
那得到的結果就是這個highly advocated。
link |
26:05.000
那這個東西呢,我們再把它丟到模型裡面。
link |
26:09.000
那要是它已經可以讓模型覺得它是負面的評論的話,
link |
26:12.000
那我們就會停下來,
link |
26:14.000
不過很可惜到這個地方,
link |
26:16.000
模型還是覺得它是一個正面的評論,
link |
26:19.000
所以我們就要繼續做下去。
link |
26:21.000
那接下來呢,
link |
26:22.000
我們就要去移到word importance ranking第二重要的這個字。
link |
26:26.000
所以我們現在target是highly這個字,
link |
26:29.000
我們想要把highly這個字換掉。
link |
26:32.000
那我們要換highly的時候呢,
link |
26:37.000
我們一樣去看說在highly所有的candidate set裡面,
link |
26:41.000
哪一個字可以讓正面的機率降得最多。
link |
26:46.000
所以呢,在strongly跟inordinate這兩個字裡面比較,
link |
26:50.000
我們發現說inordinate這個字,
link |
26:52.000
它可以讓p positive明顯下降到0.5而已。
link |
26:56.000
所以我們就會把這個原本這個highly advocated,
link |
27:01.000
裡面的這個highly,
link |
27:02.000
換成I inordinately advocated。
link |
27:05.000
好,那得到這個結果之後呢,
link |
27:08.000
我們再把它丟到模型裡面,
link |
27:10.000
看看說模型覺得它是一個正面還是負面的定評論。
link |
27:14.000
那結果很幸運的,
link |
27:15.000
這個模型覺得它是一個負面的定評論,
link |
27:18.000
所以就在這邊就停下來了。
link |
27:21.000
好,那這個...
link |
27:23.000
好,那個宇翔,宇翔有問題想問。
link |
27:26.000
因為我覺得聽起來的時候有點疑惑,
link |
27:31.000
因為感覺這樣有點逐步代換的感覺,
link |
27:36.000
那會不會例如說我換了A,
link |
27:39.000
然後他換B,反而又變成又沒有text到這樣。
link |
27:44.000
當然有可能,
link |
27:45.000
但是你很難說你換了一個字,
link |
27:49.000
然後就全部再重新做一次story,
link |
27:51.000
這樣會很浪費時間。
link |
27:53.000
OK,所以這樣子的選擇,
link |
27:57.000
逐步這樣選選選,
link |
27:59.000
如果要是選了一部然後發現
link |
28:01.000
他attack效果沒有很好的話,
link |
28:02.000
就是再選另外一個。
link |
28:04.000
就不會再從trace到起點再重新開始選,
link |
28:07.000
而是會把這個效果比較差的先踢掉,
link |
28:12.000
然後再去選定其他的更新點。
link |
28:17.000
其實有些方法是...
link |
28:23.000
我覺得你剛才講的那個
link |
28:24.000
可能會比較像是data search。
link |
28:28.000
會有點不太像是beam search。
link |
28:31.000
就是...我想一下要怎麼講。
link |
28:35.000
你剛才講的意思應該是說
link |
28:37.000
假設我們把第一個字換掉之後,
link |
28:40.000
我們發現說可能第一個字換掉之後
link |
28:43.000
後面不管換什麼他都沒有辦法達到attack的結果,
link |
28:46.000
是這樣嗎?
link |
28:47.000
對對對。
link |
28:48.000
那這個時候有可能是因為我們第一個字換的不好,
link |
28:51.000
就是第一個字你原本換成advocate,
link |
28:54.000
那你也可能可以換成erge,
link |
28:56.000
那在beam search裡面的話,
link |
28:58.000
你可能會開三個不同的beam,
link |
29:00.000
然後三個不同的beam就是
link |
29:01.000
把第一個字換成這三個不同的字,
link |
29:03.000
然後就比較有可能可以達到好的結果。
link |
29:09.000
這樣回答到你的問題嗎?
link |
29:12.000
有一部分,
link |
29:13.000
可是我還是蠻好奇就是...
link |
29:17.000
因為感覺就是這個情況會蠻常發生的,
link |
29:21.000
還是就經驗上來講,
link |
29:22.000
就是這種逐步代換的這種方式其實並沒有到那麼容易attack失敗。
link |
29:29.000
它其實真的沒有那麼容易失敗。
link |
29:32.000
真的喔?蠻意外的。
link |
29:34.000
就是因為它換成的字其實都是很不合理的字啊,
link |
29:39.000
所以那個字,
link |
29:40.000
我所謂的不合理就是
link |
29:41.000
模型可能根本就沒有看過那個字,
link |
29:43.000
所以你看到那個字它就直接爛掉了。
link |
29:46.000
所以有可能是因為模型沒有看過這個字,
link |
29:50.000
然後它就爛掉了。
link |
29:52.000
那假設,
link |
29:54.000
例如說假設我都是用模型有看過的字去做類似的這個排版,
link |
30:00.000
從前面的挑選到現在的search,
link |
30:02.000
那其實就相對來說沒有那麼容易成功嗎?
link |
30:05.000
對對對,這是對的。
link |
30:07.000
OK好,謝謝。
link |
30:12.000
謝謝陳漢,
link |
30:13.000
那就我們繼續吧。
link |
30:15.000
然後這個Greedy search with over-importance ranking
link |
30:20.000
跟剛才的Greedy search最大的差別就是
link |
30:22.000
假設我們只有用Greedy search的話,
link |
30:25.000
那我們光看這個表格啊,
link |
30:27.000
最先會被換掉的是海底這個字,
link |
30:29.000
我們會先把它換成emodem,
link |
30:31.000
但是如果我們考慮over-importance ranking的時候,
link |
30:35.000
我們就會知道我們要最先換掉的是這個字。
link |
30:38.000
所以在這邊就是考慮over-importance ranking的時候,
link |
30:42.000
這個recommend這個字會被先換掉。
link |
30:45.000
那這個只是因為我這邊舉的例子,
link |
30:48.000
這個句子很短啊,
link |
30:50.000
所以最後結果好像這兩個差不多的。
link |
30:53.000
不過在某些狀況下,
link |
30:55.000
其實這個有用over-importance ranking
link |
30:57.000
會比沒有用over-importance ranking快非常非常多。
link |
31:02.000
那接下來就講一下
link |
31:04.000
這個over-importance ranking要怎麼得到。
link |
31:07.000
那第一個最簡單的方式就是
link |
31:10.000
leave one out,
link |
31:12.000
就是leave one out。
link |
31:14.000
那什麼叫leave one out呢?
link |
31:16.000
就是原本這個句子啊,叫做I highly recommend it。
link |
31:18.000
那我就把每一個字,
link |
31:21.000
句子裡面的每一個字一次拿掉,
link |
31:24.000
一次只拿掉一個。
link |
31:26.000
所以這個我拿掉I的話就會變成highly recommend it,
link |
31:29.000
我拿掉highly的話就變成I recommend it,
link |
31:31.000
然後我拿掉it的話呢,
link |
31:34.000
我拿掉recommend就會變成I highly recommend it,
link |
31:36.000
然後我拿掉it就是變成I highly recommend it。
link |
31:39.000
然後我們再把這些東西呢,
link |
31:42.000
拿掉一個字的叫做leave one out的句子,
link |
31:45.000
丟到模型裡面。
link |
31:47.000
那這個模型off出來的結果呢,
link |
31:50.000
它告訴我說當我把I這個字拿掉的時候,
link |
31:52.000
我還是覺得它非常正面。
link |
31:54.000
但是當我把recommend這個字拿掉的時候呢,
link |
31:57.000
模型就覺得它好像非常非常不正面,
link |
32:01.000
只有0.52的機率是正面的。
link |
32:05.000
那我們就看說呢,
link |
32:07.000
這個正面的機率跟原本的東西相比,
link |
32:11.000
差了多少。
link |
32:13.000
那在I這個意思呢,
link |
32:15.000
1減0.99是0.01嘛,
link |
32:17.000
在recommend這個意思裡面,
link |
32:18.000
1減0.52是0.48。
link |
32:20.000
那我們就用這個P positive的
link |
32:23.000
這個變化量來做ranking,
link |
32:26.000
所以就會得到說,
link |
32:27.000
變化最多的應該是最重要的字,
link |
32:29.000
變化第二多的是第二重要的字。
link |
32:32.000
好,那以此類推。
link |
32:34.000
那這個是
link |
32:37.000
當我們沒有辦法access到model裡面的
link |
32:40.000
內部的資訊的時候,
link |
32:42.000
我們只能從它off出來的結果
link |
32:44.000
來推測說
link |
32:46.000
這個模型覺得哪個字是最重要的。
link |
32:48.000
那其實要找說
link |
32:50.000
input的哪個東西是重要的,
link |
32:53.000
這個東西就是Explainable AI在做的事情。
link |
32:55.000
所以Explainable AI裡面
link |
32:57.000
可以用的東西你都可以拿來用。
link |
33:00.000
那我就講一個最簡單的東西,
link |
33:02.000
叫做就是用gradient。
link |
33:04.000
那做法很簡單,
link |
33:06.000
就是你今天有一個句子,
link |
33:08.000
然後你把它丟到text
link |
33:10.000
這個classifier裡面,
link |
33:12.000
然後forward之後你會得到一個
link |
33:14.000
模型的prediction,
link |
33:16.000
那假設模型對於這個句子的prediction
link |
33:18.000
正面的機率是1.0,
link |
33:20.000
負面的機率是0.0。
link |
33:22.000
那我們就把這個output
link |
33:24.000
對input做為分,
link |
33:27.000
就是我們backward。
link |
33:29.000
那backward的時候我們是
link |
33:31.000
怎麼對什麼做為分呢?
link |
33:33.000
為分的對象是我們用
link |
33:35.000
這個ground truth的label
link |
33:37.000
就是positive這個class
link |
33:39.000
的機率y1
link |
33:41.000
對每一個word embedding做為分。
link |
33:43.000
那我們就可以得到
link |
33:47.000
每一個字它的prediction
link |
33:50.000
對於word embedding的為分。
link |
33:52.000
那我們就取這個word embedding的
link |
33:54.000
none,
link |
33:56.000
就可以來當作
link |
33:58.000
這個word impotency ranking的基準。
link |
34:02.000
那舉例而言,
link |
34:04.000
在剛才這個例子裡面,
link |
34:06.000
我們就發現說regmen這個詞,
link |
34:08.000
output對regmen這個字的word embedding
link |
34:10.000
它得到的為分之後的
link |
34:12.000
這個none是最大的,
link |
34:14.000
所以我們就覺得它是一個最重要的字。
link |
34:16.000
那相反的這個it
link |
34:18.000
這個字它是最不重要的,
link |
34:20.000
因為它的none是最低的。
link |
34:22.000
那其實這個方法就是
link |
34:24.000
這個experimental AI裡面
link |
34:26.000
我們在看CNN
link |
34:28.000
的那個salience map,
link |
34:30.000
就是用output對input做為分,
link |
34:32.000
那這個其實也是同樣的概念。
link |
34:34.000
那這個
link |
34:36.000
用gradient看不一定是
link |
34:38.000
只單純用gradient看
link |
34:40.000
並不一定會是最好的方法,
link |
34:42.000
那其實還有很多不同的
link |
34:44.000
用gradient看的方法,像是
link |
34:46.000
smooth gradient, integrated gradient
link |
34:48.000
之類的東西都可以拿來試試看。
link |
34:50.000
不過因為這個
link |
34:52.000
這個方法是
link |
34:54.000
要有辦法去算這個
link |
34:56.000
模型的為分嘛,所以它是一個white box
link |
34:58.000
的scenario,那一般而言呢
link |
35:00.000
我們其實不會假設說
link |
35:02.000
我們有一個,我們有access到
link |
35:04.000
模型,所以
link |
35:06.000
這個,這樣子的一個
link |
35:08.000
word-imposed ranking其實是比較少用的,
link |
35:10.000
我們大部分還是用前面剛才講到的
link |
35:12.000
這個left one out。
link |
35:16.000
好,下面
link |
35:18.000
我們來講這個
link |
35:20.000
最後一個
link |
35:22.000
search method叫做基因演算法。
link |
35:24.000
然後我發現夏燕的
link |
35:26.000
那個動畫好像有點做錯,不過
link |
35:28.000
大家就
link |
35:30.000
大家就多多保管。
link |
35:32.000
好,那個基因演算法呢,
link |
35:34.000
這個它的核心概念就是
link |
35:36.000
那個演化嘛,然後還有
link |
35:38.000
天擇,那天擇的選擇方式
link |
35:40.000
就是看
link |
35:42.000
這個知識式的生存嘛,
link |
35:44.000
就是看哪一個個體
link |
35:46.000
它的遺傳變異是能夠
link |
35:48.000
讓它適應
link |
35:50.000
這個環境的
link |
35:52.000
壓力
link |
35:54.000
然後可以讓它活到最後。
link |
35:56.000
這個就是
link |
35:58.000
演化的一個核心概念。
link |
36:00.000
所以基因演算法也就是用
link |
36:02.000
這個適者生存的概念
link |
36:04.000
然後挑出最後我們要的這個東西。
link |
36:06.000
那直接看
link |
36:08.000
一個例子,就是
link |
36:10.000
我們現在要perturb的對象
link |
36:12.000
是I highly recommend this
link |
36:14.000
這個句子,然後呢
link |
36:16.000
我們要用基因演算法產生最終的
link |
36:18.000
ethereal sample,那怎麼做呢?
link |
36:20.000
首先第一個步驟
link |
36:22.000
就是要產生地靈子代
link |
36:24.000
就是generation zero
link |
36:26.000
那產生的方式就是我
link |
36:28.000
做一個perturbation
link |
36:30.000
那我們把perturbation產生的這些東西叫做
link |
36:32.000
這個
link |
36:34.000
generation zero
link |
36:36.000
link |
36:38.000
這些perturbation可能會
link |
36:40.000
就是它的perturbation就是在
link |
36:42.000
句子裡面的
link |
36:44.000
每個不同的字做perturbation
link |
36:46.000
然後組成generation zero
link |
36:48.000
然後我們就把
link |
36:50.000
這個generation zero
link |
36:52.000
generation zero的
link |
36:54.000
所有的這個
link |
36:56.000
個體丟到text classifier
link |
36:58.000
裡面,然後
link |
37:00.000
看這個classifier
link |
37:02.000
output出來的
link |
37:04.000
這個p negative
link |
37:06.000
是多少,那為什麼我們要看p negative呢?
link |
37:08.000
因為我們原本這個
link |
37:10.000
這個例子
link |
37:12.000
這個MovieReview它是一個正面的MovieReview
link |
37:14.000
那我們現在目標
link |
37:16.000
是要把它改成一個負面的MovieReview
link |
37:18.000
所以呢
link |
37:20.000
衡量一個個體
link |
37:22.000
它是不是一個好的
link |
37:24.000
ethereal sample
link |
37:26.000
就是看說它的
link |
37:28.000
負面的這個Review
link |
37:30.000
模型認為它是負面Review的
link |
37:32.000
機率有多高,也就是p negative有多高
link |
37:34.000
所以我們就把p negative
link |
37:36.000
當成是一個fitness
link |
37:38.000
fitness的中文是
link |
37:40.000
我不確定是什麼
link |
37:42.000
就是
link |
37:44.000
適合的程度吧
link |
37:46.000
就是適應的程度
link |
37:48.000
來比較好,那我們就把它當作
link |
37:50.000
是它的fitness
link |
37:52.000
那如果你說到這個步驟
link |
37:54.000
已經有某一個
link |
37:56.000
generation zero的某一個
link |
37:58.000
子代,不是,某一個個體
link |
38:00.000
它已經可以讓classifier
link |
38:02.000
產生錯誤的判斷
link |
38:04.000
那這個
link |
38:06.000
就結束這個
link |
38:08.000
經驗演算法,不然呢
link |
38:10.000
我們就繼續做下面的事情
link |
38:12.000
下面的事情是什麼呢,下面的事情是
link |
38:14.000
我們會把這個fitness
link |
38:16.000
做一個normalization,然後把它normalize
link |
38:18.000
成一個
link |
38:20.000
就是0到1的數字
link |
38:22.000
那這個數字呢
link |
38:24.000
代表了某一個叫做
link |
38:26.000
p parent的這個
link |
38:28.000
機率,那這個p parent是做什麼呢
link |
38:30.000
這個p parent做的事情是這樣的
link |
38:32.000
我們下一個步驟啊
link |
38:34.000
就是要產生
link |
38:36.000
子代,那這個子代呢
link |
38:38.000
是由氫代交配而產生的
link |
38:40.000
所以這個p parent
link |
38:42.000
就是代表說
link |
38:44.000
在這些generation zero的
link |
38:46.000
氫代裡面
link |
38:48.000
氫代就是parent
link |
38:50.000
就是在generation zero裡面呢
link |
38:52.000
它成為
link |
38:54.000
氫代的機率有多高
link |
38:56.000
然後我們就在這裡面做sample
link |
38:58.000
然後sample的機率是用
link |
39:00.000
p parent的這些機率
link |
39:02.000
所以
link |
39:04.000
我們sample出
link |
39:06.000
兩個p parent之後呢,下一個步驟
link |
39:08.000
就是要做crossover
link |
39:10.000
crossover的中文叫做互換
link |
39:12.000
那crossover這個
link |
39:14.000
動作呢,做的事情其實就只是
link |
39:16.000
對於每一個位子啊
link |
39:18.000
我就
link |
39:20.000
在這兩個氫代裡面
link |
39:22.000
任意的選一個字
link |
39:24.000
出來,所以
link |
39:26.000
在第一個位子我就選了we這個字
link |
39:28.000
在第二個位子我就選了ordinary
link |
39:30.000
這個字,那第三個位子跟
link |
39:32.000
第四個位子沒有差,因為它們沒有做preparation
link |
39:34.000
所以總而言之,我們在
link |
39:36.000
做完互換之後
link |
39:38.000
我們得到了一個這樣子的結果
link |
39:40.000
好,但是這個還沒有結束
link |
39:42.000
在做完互換
link |
39:44.000
之後呢,我們還要做
link |
39:46.000
mutation,mutation的中文是突變
link |
39:48.000
那mutation做的事情
link |
39:50.000
就是我們再做一次transformation
link |
39:52.000
把原本的這個東西
link |
39:54.000
再做一個選項
link |
39:56.000
那這個做選項的時候啊
link |
39:58.000
它會要求說
link |
40:00.000
已經被preferred過的這個詞
link |
40:02.000
不能再被換一次
link |
40:04.000
所以它現在可以換的就是剩下這兩個
link |
40:06.000
所以它可能就會把它換成
link |
40:08.000
we inordinately recommend lot
link |
40:10.000
這樣子
link |
40:12.000
好,那到這個時候呢
link |
40:14.000
一個
link |
40:16.000
一個generation的
link |
40:18.000
演化嘛,遺傳
link |
40:20.000
就是一個generation就產生
link |
40:22.000
就產生一個新的generation,那這個generation
link |
40:24.000
叫做G1
link |
40:26.000
所以一個generation要怎麼產生呢
link |
40:28.000
它要先透過
link |
40:30.000
這個crossover
link |
40:32.000
還有mutation之後才會產生一個
link |
40:34.000
新的子代
link |
40:36.000
那這邊原本有四個
link |
40:38.000
這個個體嘛,所以
link |
40:40.000
在下一個generation
link |
40:42.000
generation1的時候一樣也要
link |
40:44.000
產生四個個體
link |
40:46.000
那假設我們最後產生了這四個不同的個體
link |
40:48.000
它這個沒有空間,所以我就沒有畫
link |
40:50.000
所以我們一樣呢,把這個四個個體
link |
40:52.000
丟到classifier裡面
link |
40:54.000
也就是我們的victim model
link |
40:56.000
然後看看這個victim model output出來的
link |
40:58.000
p-negative是多少
link |
41:00.000
那第一個句子
link |
41:02.000
它的p-negative是0.42,第二個句子是0.76
link |
41:04.000
第三個是0.01,第四個
link |
41:06.000
是0.02好了,那這個時候呢
link |
41:08.000
我們就發現說
link |
41:10.000
第二個字
link |
41:12.000
它是已經可以讓
link |
41:14.000
classifier的output是改變的
link |
41:16.000
那這個時候attack就是
link |
41:18.000
成功的,我們就結束了整個流程
link |
41:20.000
那要是很不幸的這時候沒有
link |
41:22.000
成功的話,那就是再繼續
link |
41:24.000
做這個close-over
link |
41:26.000
然後做到成功或是
link |
41:28.000
超過某一個
link |
41:30.000
原本既定的限制為止
link |
41:32.000
好,那這個就是
link |
41:34.000
基因演算法
link |
41:36.000
好,所以到這邊我們就已經講完
link |
41:38.000
上面所有這個
link |
41:40.000
這個eventual attack裡面的
link |
41:42.000
四個要素了,到這邊有人有問題嗎
link |
41:44.000
link |
41:46.000
到這邊大家有問題要問嗎
link |
41:48.000
陳漢你剛才說
link |
41:50.000
還有比基因演算法
link |
41:52.000
更耗費運算資源的
link |
41:54.000
這邊是指什麼方法
link |
41:58.000
有一個叫做
link |
42:02.000
好像有一個叫做
link |
42:04.000
particle swarm optimization的東西
link |
42:06.000
然後
link |
42:08.000
那個東西
link |
42:10.000
那個東西有點複雜
link |
42:12.000
看起來也是很慢或是
link |
42:14.000
差不多慢
link |
42:16.000
就是
link |
42:18.000
我有點不太確定到底是基因演算法比較慢
link |
42:20.000
還是particle swarm optimization比較慢
link |
42:22.000
總而言之兩個都很慢
link |
42:24.000
好啊好啊
link |
42:26.000
然後大家有興趣的話
link |
42:28.000
就是我其實在
link |
42:30.000
前面的地方有放一篇
link |
42:32.000
就是我投影片下面都有放reference
link |
42:34.000
然後有興趣大家可以去看
link |
42:36.000
然後
link |
42:38.000
這邊有放一頁reference
link |
42:40.000
是這個text attack
link |
42:42.000
然後他是一個
link |
42:44.000
他是一個
link |
42:46.000
toolkit
link |
42:48.000
然後他可以拿來做NLP上面的attack
link |
42:50.000
然後我今天講的這些架構
link |
42:52.000
還有這個架構裡面每個
link |
42:54.000
東西他都有
link |
42:56.000
然後他裡面就有提到
link |
42:58.000
就是剛才我講的
link |
43:00.000
particle swarm optimization是怎麼做的
link |
43:02.000
然後大家有興趣的話可以再去
link |
43:04.000
看一下那個reference是怎麼做的
link |
43:06.000
link |
43:08.000
然後大家要用NLP的attack
link |
43:10.000
也可以用這個toolkit
link |
43:12.000
不過
link |
43:14.000
對可以試試看
link |
43:18.000
好那就
link |
43:20.000
繼續講
link |
43:22.000
那我再問一下
link |
43:24.000
有人會用RL系列的做法
link |
43:26.000
來解這邊的search problem嗎
link |
43:28.000
因為
link |
43:30.000
這個NLP跟以前不一樣的地方
link |
43:32.000
就是現在我們的問題
link |
43:34.000
我們在做attack的時候
link |
43:36.000
我們要optimization的問題其實是不可為的
link |
43:38.000
那他們遇到不可為的問題
link |
43:40.000
是不是可以用RL硬做
link |
43:42.000
其實有
link |
43:44.000
只是我沒有放進來
link |
43:46.000
link |
43:48.000
就是有RL的
link |
43:50.000
我其實可以加在下禮拜的toolkit裡面
link |
43:52.000
如果有有趣的做法的話
link |
43:54.000
也還蠻值得聽一下
link |
43:56.000
link |
44:00.000
剛才老師有提一個問題
link |
44:02.000
就是不可為的問題
link |
44:04.000
在NLP裡面要解決不可為的問題
link |
44:06.000
第一個當然是
link |
44:08.000
硬train
link |
44:10.000
那其實還有另外一個很有趣的做法
link |
44:12.000
是用
link |
44:14.000
就是把不可為的東西變成可以為的東西
link |
44:16.000
那這個
link |
44:18.000
這個今天可能會講
link |
44:20.000
我覺得這個可能是比RL還要更有趣
link |
44:22.000
好啊好啊
link |
44:24.000
link |
44:26.000
那講完這麼多
link |
44:28.000
不同的ingredient
link |
44:30.000
然後我們就來看這些ingredient要怎麼
link |
44:32.000
湊在一起然後產生一個
link |
44:34.000
實際的attack
link |
44:36.000
那我先介紹一個最重要的
link |
44:38.000
類型叫做
link |
44:40.000
同義詞替換攻擊
link |
44:42.000
這個同義詞替換攻擊
link |
44:44.000
那我介紹
link |
44:46.000
四個不同的
link |
44:48.000
同義詞替換攻擊
link |
44:50.000
然後這四個同義詞替換攻擊是
link |
44:52.000
最常在paper上面拿來當baseline的
link |
44:54.000
這個方法
link |
44:56.000
那首先第一個叫做textfuller
link |
44:58.000
然後這個是
link |
45:00.000
2020年2019年2020年的paper
link |
45:02.000
然後
link |
45:04.000
我剛剛講的這幾個四個
link |
45:06.000
我們就看它不同的
link |
45:08.000
它的goal 它的constraint 還有它的transformation
link |
45:10.000
還有它的search method
link |
45:12.000
那textfuller呢
link |
45:14.000
它用的constraint
link |
45:16.000
是world embedding space distance
link |
45:18.000
就是這兩個box
link |
45:20.000
就是限制semantic similarity的constraint
link |
45:22.000
然後還有限制文法的pos consistency
link |
45:24.000
那它的transformation
link |
45:26.000
是用goal的
link |
45:28.000
embedding space來做的
link |
45:30.000
那就是
link |
45:32.000
textfuller space
link |
45:34.000
可以達到同義詞替換攻擊的原因
link |
45:36.000
就是因為我們有做
link |
45:38.000
configurative
link |
45:40.000
所以同義詞會落在一個比較接近的空間裡面
link |
45:42.000
所以它可以拿來做
link |
45:44.000
這個同義詞替換攻擊
link |
45:46.000
那它的search method是
link |
45:48.000
greedy search with more important functions
link |
45:50.000
那這邊paper上面
link |
45:52.000
放了一個例子
link |
45:54.000
這應該也是
link |
45:56.000
這應該也是
link |
45:58.000
movie review的例子
link |
46:00.000
然後它原本的input text
link |
46:02.000
長這個樣子
link |
46:04.000
然後呢它就把constraint
link |
46:06.000
換成engineering
link |
46:08.000
然後situation換成circumstances
link |
46:10.000
然後totally換成fully
link |
46:12.000
然後這個模型呢
link |
46:14.000
它用的模型就是bird lsm或是cmn
link |
46:16.000
cmn的
link |
46:18.000
那個模型
link |
46:20.000
然後就讓這個模型覺得
link |
46:22.000
這是一個正面的
link |
46:24.000
review
link |
46:26.000
然後這其實看起來還蠻厲害的
link |
46:28.000
兩個詞看起來都是
link |
46:30.000
差不多的
link |
46:32.000
而且我們也不會覺得circumstances
link |
46:34.000
這個字是一個頻率很低的字
link |
46:36.000
fully也應該是一個頻率很高的字
link |
46:38.000
那大家有興趣的話
link |
46:40.000
可以再自己去看一下
link |
46:42.000
如果你真的用text fuller
link |
46:44.000
這個toolkit然後去攻擊一個
link |
46:46.000
bird lsm或是cmn
link |
46:48.000
然後產生出來的結果
link |
46:50.000
大家可以看一下是不是真的
link |
46:52.000
這麼漂亮
link |
46:54.000
link |
46:56.000
我們實際來看一下它的algorithm
link |
46:58.000
我不會詳細講algorithm的細節
link |
47:00.000
我只要讓大家看說
link |
47:02.000
我們剛才講的這四個要素
link |
47:04.000
它是怎麼出現在一個
link |
47:06.000
attack algorithm裡面
link |
47:08.000
首先呢
link |
47:10.000
第二行到第四行的地方
link |
47:12.000
它for each word in x
link |
47:14.000
x就是原本的input
link |
47:16.000
它要compute important score
link |
47:18.000
然後用某一個方法
link |
47:20.000
用importance ranking來compute
link |
47:22.000
所以這個地方就是我們要做search之前
link |
47:24.000
我們要先去得到
link |
47:26.000
每一個字的importance ranking
link |
47:28.000
然後在第七行的時候
link |
47:30.000
它會filter掉stop word
link |
47:32.000
所謂的stop word就是
link |
47:34.000
很常出現的那些字
link |
47:36.000
像是
link |
47:38.000
代名詞I
link |
47:40.000
it 之類的
link |
47:42.000
或者是慣詞的
link |
47:44.000
這些東西
link |
47:46.000
因為它很常出現在句子裡面
link |
47:48.000
然後我們會覺得說
link |
47:50.000
當你把它替換的時候
link |
47:52.000
句子的文法或是語意
link |
47:54.000
就像你把I換成
link |
47:56.000
X之類的它可能會變得有點奇怪
link |
47:58.000
那你把R換成了可能文法就會不對
link |
48:00.000
所以它在這邊就下了一個constraint
link |
48:02.000
然後接下來呢
link |
48:04.000
就是它要做search
link |
48:06.000
所以就是for each word in
link |
48:08.000
原本for each word in
link |
48:10.000
candidate set
link |
48:12.000
它要開始做search
link |
48:14.000
那它做search的方式呢
link |
48:16.000
是它首先要做transformation
link |
48:18.000
transformation就是
link |
48:20.000
我們剛才有看到說
link |
48:22.000
它的transformation用的是
link |
48:24.000
link |
48:26.000
這個word embedding space的
link |
48:28.000
nearest neighbor
link |
48:30.000
所以它這邊用的是
link |
48:32.000
這個word embedding space
link |
48:34.000
原本的字跟潛在的
link |
48:36.000
transformation的同範similarity
link |
48:38.000
然後來做替換
link |
48:40.000
然後這邊就是它有說
link |
48:42.000
它要top N
link |
48:44.000
所以這個就是一個similarity constraint
link |
48:46.000
然後另外它也有要求說
link |
48:48.000
替換掉的字
link |
48:50.000
跟原本被替換的字
link |
48:52.000
它的POS要是一樣的
link |
48:54.000
所以這邊又是另外一個不同的constraint
link |
48:56.000
那再來呢
link |
48:58.000
接下來就是開始
link |
49:00.000
替換的過程
link |
49:02.000
那在替換的過程它也會要求說
link |
49:04.000
替換完之後的句子跟原本的句子
link |
49:06.000
它的這個similarity
link |
49:08.000
要高於某一個threshold
link |
49:10.000
它才會算是一個
link |
49:12.000
合法的correlation
link |
49:14.000
那剩下就是其他的過程
link |
49:16.000
就是一個完整的
link |
49:18.000
attack algorithm
link |
49:20.000
它大概會長這樣
link |
49:22.000
就是你要先做immortal ranking
link |
49:24.000
然後再做search
link |
49:26.000
然後search的過程就是你要去
link |
49:28.000
把不同的transformation結合起來
link |
49:30.000
那在search的過程還有在transformation的過程
link |
49:32.000
你都需要把一些不合法的
link |
49:34.000
東西處理掉
link |
49:38.000
那接下來講第二個
link |
49:40.000
不同的evasion attack
link |
49:42.000
第二個不同的同一次替換攻擊
link |
49:44.000
就是pwss
link |
49:46.000
那pwss的全名叫做
link |
49:48.000
probability-weighted-worth-saliency
link |
49:50.000
那這個pwss
link |
49:52.000
它的
link |
49:54.000
重點呢就是
link |
49:56.000
它的
link |
49:58.000
importance ranking跟別人有點不太一樣
link |
50:00.000
它除了要考慮原本我們
link |
50:02.000
剛才講的這個leave-one-out的
link |
50:04.000
這個
link |
50:06.000
重要性
link |
50:08.000
它還會同時考慮說
link |
50:10.000
當你把它拿掉之後
link |
50:12.000
拿掉了這個字
link |
50:14.000
它所有替換的可能裡面
link |
50:16.000
哪一個可以讓這個pwss
link |
50:18.000
降得最多
link |
50:20.000
所以它在替換的時候會同時把
link |
50:22.000
這個leave-one-out的
link |
50:24.000
重要性跟
link |
50:26.000
這個替換之後的變化的重要性
link |
50:28.000
同時考慮進去
link |
50:30.000
那這邊有一個很有趣的東西
link |
50:32.000
就是它沒有下任何的constraint
link |
50:34.000
然後如果沒有下任何的constraint的話
link |
50:36.000
產生出來的東西其實還蠻危險的
link |
50:38.000
就是
link |
50:40.000
品質可能
link |
50:42.000
品質可能會有點
link |
50:44.000
問題
link |
50:46.000
link |
50:48.000
下面我們再看一個例子
link |
50:50.000
叫做bird attack, bird attack也是很新的
link |
50:52.000
也沒有到很新啦,2020的
link |
50:54.000
一個attack的方式
link |
50:56.000
那它的constraint它就是用
link |
50:58.000
universal sentence encoder的sentence similarity
link |
51:00.000
來要求說protect之後的
link |
51:02.000
結果跟原本的這個東西
link |
51:04.000
它要長得夠像,另外它也有要求說
link |
51:06.000
最後這個
link |
51:08.000
maximum number of modified words
link |
51:10.000
它必須要小於某一個固定的比例
link |
51:12.000
那它的transformation
link |
51:14.000
它就是用這個MLM
link |
51:16.000
那用MLM做,剛剛有講說
link |
51:18.000
它可能會產生一些奇怪的substitution
link |
51:20.000
所以你就要用universal sentence encoder
link |
51:22.000
來確保說
link |
51:24.000
替換之後的這個字
link |
51:26.000
它的這個
link |
51:28.000
這個
link |
51:30.000
語意還是有被保留住的
link |
51:32.000
那另外一個就是
link |
51:34.000
genetic algorithm,那genetic algorithm其實
link |
51:36.000
就是我們剛才
link |
51:38.000
它的重點就是它的search method是用我們剛才講的
link |
51:40.000
genetic algorithm,也就是
link |
51:42.000
做crossover跟做notation之後
link |
51:44.000
來產生可能的這個
link |
51:46.000
這個
link |
51:48.000
adversarial sample
link |
51:50.000
那它用的constraint包含了說
link |
51:52.000
產生的這個東西呢
link |
51:54.000
它必須要有足夠低的language model complexity
link |
51:56.000
然後它
link |
51:58.000
更改的字不能太多
link |
52:00.000
然後替換的時候
link |
52:02.000
word invariance space的距離
link |
52:04.000
也不可以太大
link |
52:06.000
好,那這邊放了一個
link |
52:08.000
這個實際的結果
link |
52:10.000
link |
52:12.000
這個是從bird attack這個parameter拿出來的
link |
52:14.000
那我們就看imdb
link |
52:16.000
這個結果好了
link |
52:18.000
imdb這個dataset呢,它用了三個不同的
link |
52:20.000
attack方法來做
link |
52:22.000
那原本呢,訓練在bird的這個
link |
52:24.000
model上面,imdb可以達到90.9
link |
52:26.000
的accuracy,那但是
link |
52:28.000
經過attack之後呢,用這三個
link |
52:30.000
不同的attack algorithm,得到的accuracy
link |
52:32.000
變成
link |
52:34.000
只有11.4,13.6
link |
52:36.000
45.7
link |
52:38.000
link |
52:40.000
這個attack accuracy當然是越低越好嘛
link |
52:42.000
所以從這邊看起來bird attack是一個最強的attack
link |
52:44.000
那我們也會希望說這個
link |
52:46.000
在preparation的
link |
52:48.000
結果,這個
link |
52:50.000
更改的字應該要越低越好
link |
52:52.000
所以就這三個
link |
52:54.000
這個方法來比的話,4.4%
link |
52:56.000
這個應該是最好的
link |
52:58.000
那另外一個很重要的衡量因素是
link |
53:00.000
query number,因為我們在
link |
53:02.000
前面講說
link |
53:04.000
我們要選怎麼替換的時候
link |
53:06.000
我們每一次替換之後,我們都要
link |
53:08.000
丟到model裡面,看說這個
link |
53:10.000
結果有沒有讓model的結果爛掉
link |
53:12.000
所以說query number如果
link |
53:14.000
越少的話,就表示說我用了
link |
53:16.000
比較少的這個
link |
53:18.000
transformation
link |
53:20.000
我用了
link |
53:22.000
比較少的transformation,就可以達到一個成功的attack
link |
53:24.000
所以這個東西是越少越好
link |
53:26.000
那genetic algorithm呢
link |
53:28.000
非常非常的慢
link |
53:30.000
它的query number
link |
53:32.000
它慢就是因為它的query number很高
link |
53:34.000
好,然後另外一個衡量的
link |
53:36.000
因素是這個similarity
link |
53:38.000
就是我希望我經過transformation之後
link |
53:40.000
跟transformation之前的sentence
link |
53:42.000
embedded similarity要夠高
link |
53:44.000
那所以這個東西要越高越好
link |
53:46.000
這是一個
link |
53:48.000
簡單的例子
link |
53:50.000
好,那
link |
53:52.000
即使我們下了這麼多的constraint
link |
53:54.000
那這個adversarial sample
link |
53:56.000
還是一個
link |
53:58.000
人一眼就看得出來的
link |
54:00.000
舉例而言
link |
54:02.000
這個句子是
link |
54:04.000
自某一個data set裡面
link |
54:06.000
拿出來的,它原本長這個樣子
link |
54:08.000
然後
link |
54:10.000
左邊的這個是
link |
54:12.000
原本的句子
link |
54:14.000
右邊這個是經過transformation的句子
link |
54:16.000
那藍色的是原本的
link |
54:18.000
字,紅色是經過transformation
link |
54:20.000
之後的字
link |
54:22.000
首先我們來看第一個句子
link |
54:24.000
就是它把romantic right
link |
54:26.000
改成sepi motorbike
link |
54:28.000
就是right跟motorbike
link |
54:30.000
這個你要是只看它的字
link |
54:32.000
好像的確是
link |
54:34.000
同一詞沒有錯,或是它的意思是節節
link |
54:36.000
可是如果你直接把這個句子
link |
54:38.000
裡面的right換成motorbike
link |
54:40.000
看起來的確是非常非常的奇怪
link |
54:42.000
所以這就是一個
link |
54:44.000
感覺是已經違反了semantic
link |
54:46.000
的一個
link |
54:48.000
一個句子,但是呢
link |
54:50.000
即使這個句子的semantic已經
link |
54:52.000
明顯跟這個字不一樣
link |
54:54.000
在這個
link |
54:58.000
因為它textful的這個
link |
55:00.000
textful的這個方式
link |
55:02.000
它是沒有限制那個
link |
55:04.000
universal sentence encoder
link |
55:06.000
所以它不會被濾掉
link |
55:08.000
那第二個是
link |
55:10.000
這個文法的
link |
55:12.000
這個它把一個
link |
55:14.000
動詞的
link |
55:16.000
pos從動詞的單句
link |
55:18.000
改成了第三人稱單數現代式
link |
55:20.000
所以這個就已經
link |
55:22.000
這個違反了它的那個
link |
55:24.000
文法的
link |
55:26.000
正確性了,所以對人來說
link |
55:28.000
你也會覺得看到這個句子的時候
link |
55:30.000
感覺有點怪怪的,那第三個字
link |
55:32.000
第三個句子它把great這個
link |
55:34.000
詞改成了
link |
55:36.000
這個我連看都沒看過的詞
link |
55:38.000
所以對人來說這也是一個很奇怪的東西
link |
55:40.000
所以對人來說其實這些at zero sample
link |
55:42.000
都是人一眼就看得出來的
link |
55:44.000
就是你就算不覺得它是at zero sample
link |
55:46.000
你也覺得它是一個奇怪的字
link |
55:48.000
那這個是為什麼呢
link |
55:50.000
這可能就是因為我們的constraint下得不夠強
link |
55:52.000
所以就有人把constraint
link |
55:54.000
這個加得更強
link |
55:56.000
就是有人就把
link |
55:58.000
這個textful的constraint
link |
56:00.000
從原本的可能是0.82的
link |
56:02.000
cosine similarity
link |
56:04.000
加強到0.97的cosine similarity
link |
56:06.000
然後這些cosine similarity是怎麼得到的呢
link |
56:08.000
他們是請
link |
56:10.000
工人去標註的
link |
56:12.000
也就是說我可能用cosine similarity等於0.9
link |
56:14.000
然後產生一些attack的結果
link |
56:16.000
然後產生出來的結果
link |
56:18.000
我就問這個
link |
56:20.000
工人說這些東西你覺得
link |
56:22.000
是不是合理的at zero sample
link |
56:24.000
他如果覺得不合理的話
link |
56:26.000
那我就把這個cosine similarity再調到0.92
link |
56:28.000
然後調成0.92之後
link |
56:30.000
再拿去attack
link |
56:32.000
然後attack出來的結果再給工人看
link |
56:34.000
然後弄到工人覺得
link |
56:36.000
這個
link |
56:38.000
這個
link |
56:40.000
similarity是足夠像之後
link |
56:42.000
就把這個當成一個
link |
56:44.000
好的cosine similarity
link |
56:46.000
那經過這個過程之後
link |
56:48.000
他們就發現說cosine similarity
link |
56:50.000
提高之後
link |
56:52.000
他可以讓工人覺得
link |
56:54.000
這個
link |
56:56.000
similarity是比較像的
link |
56:58.000
那這個衡量方式是一個
link |
57:00.000
1到5分的scale
link |
57:02.000
就是1就是覺得一點都不像
link |
57:04.000
2是覺得有點像
link |
57:06.000
3是覺得neutral
link |
57:08.000
就是既沒有不像
link |
57:10.000
也沒有像
link |
57:12.000
4是最高的
link |
57:14.000
所以原本的text fuller這個模型
link |
57:16.000
他得到的similarity大概是這個樣子
link |
57:18.000
他們把這個constraint加強之後
link |
57:20.000
就可以得到比較高的similarity
link |
57:22.000
那因為剛才有看到text fuller
link |
57:24.000
這個attack的方式
link |
57:26.000
他產生出來的
link |
57:28.000
position他的文法其實是有問題的
link |
57:30.000
所以他們就用language tool
link |
57:32.000
把這個
link |
57:34.000
當作他是
link |
57:36.000
他們就用language tool當成是一個他的constraint
link |
57:38.000
然後他們要求說這個產生的position
link |
57:40.000
他用language tool
link |
57:42.000
得到的grammatical error要是零
link |
57:44.000
所以他最後
link |
57:46.000
他的方法叫做
link |
57:48.000
text fuller adjusting
link |
57:50.000
他的grammatical error
link |
57:52.000
的比例都是零
link |
57:54.000
但是做完這件事情就發生一個
link |
57:56.000
有趣的結果
link |
57:58.000
原本的text fuller他的text access rate
link |
58:00.000
是非常非常高的
link |
58:02.000
但是
link |
58:04.000
經過剛才那一串操作之後
link |
58:06.000
把這個posise similarity的
link |
58:08.000
threshold調高
link |
58:10.000
然後把language model
link |
58:12.000
不是,把那個language tool的
link |
58:14.000
grammatical constraint加回來之後
link |
58:16.000
他的text access rate就
link |
58:18.000
暴跌到只剩下十幾%
link |
58:20.000
而已,所以
link |
58:22.000
這個就
link |
58:24.000
可以讓大家想一下說
link |
58:26.000
就是目前產生的
link |
58:28.000
zero sample他可能其實是
link |
58:30.000
仰賴著一些
link |
58:32.000
不合理的preservation
link |
58:34.000
所以才會讓模型
link |
58:36.000
根本就看不出來,所以access rate才會這麼高
link |
58:38.000
那要是你的constraint
link |
58:40.000
下的強一點,然後產生的
link |
58:42.000
東西是比較合理的preservation
link |
58:44.000
的話,那對model而言可能
link |
58:46.000
他就根本不會覺得他是一個zero sample
link |
58:48.000
所以你的attack也就會失敗
link |
58:50.000
好,所以這個是
link |
58:52.000
目前同一時間段攻擊的一些
link |
58:54.000
現況,那接下來
link |
58:56.000
我們介紹一個有趣的
link |
58:58.000
attack方式叫做Morpheus
link |
59:00.000
那Morpheus他的
link |
59:02.000
最大的特點
link |
59:04.000
就是他的transformation是用
link |
59:06.000
這個
link |
59:08.000
inflectional morpheme
link |
59:10.000
的替換來做的
link |
59:12.000
那這個東西為什麼可以算是一個
link |
59:14.000
合理的攻擊呢?其實是因為這樣啦
link |
59:16.000
就是大家
link |
59:18.000
如果不是母語的
link |
59:20.000
大家的母語如果不是英文的話
link |
59:22.000
其實我們自己在使用英文的時候
link |
59:24.000
也常常會把這個
link |
59:26.000
動詞的時態不小心
link |
59:28.000
弄錯
link |
59:30.000
那這個
link |
59:32.000
時態弄錯他其實是一個很
link |
59:34.000
實際發生的狀況
link |
59:36.000
如果說模型看到
link |
59:38.000
時態是錯的句子
link |
59:40.000
他的output就會爛掉的話
link |
59:42.000
那表示這個模型其實是
link |
59:44.000
非常不robust,所以就有人
link |
59:46.000
用了一個
link |
59:48.000
叫做Morpheus attack的方式
link |
59:50.000
就是把這個動詞
link |
59:52.000
動詞還有形容詞的
link |
59:54.000
這個inflectional form
link |
59:56.000
更改之後當作是一個
link |
59:58.000
attack,然後去看看
link |
01:00:00.000
model他的
link |
01:00:02.000
performance會不會因此
link |
01:00:04.000
而降低,然後結果發現
link |
01:00:06.000
模型的確會因為
link |
01:00:08.000
這個文法錯誤或是說
link |
01:00:10.000
inflectional form是錯的
link |
01:00:12.000
然後就讓他的prediction
link |
01:00:14.000
完全是爛掉了
link |
01:00:16.000
所以這個就是
link |
01:00:18.000
一個attack在實際生活中
link |
01:00:20.000
會發生的例子
link |
01:00:22.000
那今天最後一個
link |
01:00:24.000
主題啊,大概就是
link |
01:00:26.000
universal trigger,那我們把
link |
01:00:28.000
universal trigger講完之後就
link |
01:00:30.000
下課
link |
01:00:32.000
那universal trigger呢
link |
01:00:34.000
他是一個
link |
01:00:36.000
還蠻有名的attack,所以我把它拿進來講
link |
01:00:38.000
什麼是universal trigger啊
link |
01:00:40.000
一個universal trigger就是一個
link |
01:00:42.000
trigger string,trigger就是
link |
01:00:44.000
觸發的東西
link |
01:00:46.000
那這個string呢,他是跟
link |
01:00:48.000
原本的test是沒有關係的
link |
01:00:50.000
但是呢,只要加上這個string之後
link |
01:00:52.000
他就可以達到targeted attack
link |
01:00:54.000
link |
01:00:56.000
假設說我們原本的
link |
01:00:58.000
任務是
link |
01:01:00.000
sentiment analysis好了,那原本的句子
link |
01:01:02.000
是黑色的這些字
link |
01:01:04.000
那我們就
link |
01:01:06.000
加上了一個figure,就是紅色的這個東西
link |
01:01:08.000
那只要
link |
01:01:10.000
input的這個句子呢,加上
link |
01:01:12.000
這個figure之後,他就可以讓原本
link |
01:01:14.000
模型判斷是positive的
link |
01:01:16.000
這個
link |
01:01:18.000
這個
link |
01:01:20.000
這個句子,變成是一個
link |
01:01:22.000
negative的句子,然後
link |
01:01:24.000
這個
link |
01:01:26.000
trigger string,他是
link |
01:01:28.000
universal,所謂universal就是
link |
01:01:30.000
不管是哪個句子,你只要加上
link |
01:01:32.000
這個東西,他都可以讓positive變成
link |
01:01:34.000
negative,那這個東西你要
link |
01:01:36.000
怎麼去找他呢
link |
01:01:38.000
這個東西要找他分為
link |
01:01:40.000
幾個步驟,第一個步驟
link |
01:01:42.000
你要先決定說,你要
link |
01:01:44.000
讓這個trigger string,他有多少
link |
01:01:46.000
的字,然後再
link |
01:01:48.000
來做initialization
link |
01:01:50.000
那在picture裡面呢,他們的例子是說
link |
01:01:52.000
我們就用三個
link |
01:01:54.000
三個字當作是
link |
01:01:56.000
trigger string,然後trigger
link |
01:01:58.000
的initialization,就用
link |
01:02:00.000
the這個字,來當作initialization
link |
01:02:02.000
所以我們就把
link |
01:02:04.000
連續三個the,放到
link |
01:02:06.000
這個
link |
01:02:08.000
data裡面,然後就是
link |
01:02:10.000
加在這個句子的前面
link |
01:02:12.000
所以原本是an amazing
link |
01:02:14.000
thing,然後我們就會把
link |
01:02:16.000
這三個the,prepare到他前面
link |
01:02:18.000
然後丟到模型裡面,然後看他的p-
link |
01:02:20.000
是多少,那我們看p-的原因
link |
01:02:22.000
是因為我們現在要做target attack
link |
01:02:24.000
所以我們的目標是要讓p-越大越好
link |
01:02:26.000
那接下來
link |
01:02:28.000
我們做的事情呢,就是
link |
01:02:30.000
我們去算
link |
01:02:32.000
這個
link |
01:02:34.000
backward,然後得到
link |
01:02:36.000
合理的
link |
01:02:38.000
替換,呃就是
link |
01:02:40.000
我們要,不是合理的替換,就是可能的
link |
01:02:42.000
替換是什麼,好那
link |
01:02:44.000
這個做法是這樣子的,我們就把
link |
01:02:46.000
這些
link |
01:02:48.000
加上這個trigger string的
link |
01:02:50.000
example,丟到模型裡面
link |
01:02:52.000
然後forward,forward的時候我們會
link |
01:02:54.000
得到一個loss,然後我們再backward
link |
01:02:56.000
那backward到哪裡呢,一樣是backward到
link |
01:02:58.000
這個invading space,那invading space
link |
01:03:00.000
裡面呢,就會有很多不同的
link |
01:03:02.000
word invading,那原本的這個
link |
01:03:04.000
trigger是the,他invading在這裡
link |
01:03:06.000
然後其他散佈著
link |
01:03:08.000
各種不同的這個word invading
link |
01:03:10.000
那我們算的就是
link |
01:03:12.000
我們要backward的時候,我們是用
link |
01:03:14.000
這個loss function
link |
01:03:16.000
的loss
link |
01:03:18.000
對原本trigger的
link |
01:03:20.000
這個invading做
link |
01:03:22.000
偏微分
link |
01:03:24.000
偏微分之後的結果呢
link |
01:03:26.000
我們要乘上某一個東西,這個東西
link |
01:03:28.000
就是我們剛才講到的這個
link |
01:03:30.000
這個
link |
01:03:32.000
呃,1萬到1零的
link |
01:03:34.000
向量,這邊寫錯的應該是
link |
01:03:36.000
1萬減1零,1 2減1零跟1 3減1零
link |
01:03:38.000
link |
01:03:40.000
那我們得到這個東西之後呢
link |
01:03:42.000
我們
link |
01:03:44.000
就是找
link |
01:03:46.000
這個
link |
01:03:48.000
loss的偏微分跟
link |
01:03:50.000
EI減1零的double product
link |
01:03:52.000
哪一個東西是
link |
01:03:54.000
可以讓這個東西是最小的
link |
01:03:56.000
link |
01:03:58.000
為什麼這邊是找最小的,因為這邊
link |
01:04:00.000
我們做的是targeted attack
link |
01:04:02.000
所以他那個
link |
01:04:04.000
我們是要讓
link |
01:04:06.000
這個loss會是
link |
01:04:08.000
ground truth label等於negative的時候
link |
01:04:10.000
所以我們要讓ground truth label
link |
01:04:12.000
等於negative
link |
01:04:14.000
的時候的loss越小越好,所以這邊要取
link |
01:04:16.000
minimum,然後
link |
01:04:18.000
這個東西為什麼要是
link |
01:04:20.000
呃,這個點這個,然後再double product
link |
01:04:22.000
這個,這個前面有講嘛
link |
01:04:24.000
就是我們要找說
link |
01:04:26.000
用一些微分來近似的話
link |
01:04:28.000
這個在
link |
01:04:30.000
他附近,當他
link |
01:04:32.000
往這邊移的時候,這個loss
link |
01:04:34.000
會變化多少,那我們現在要找
link |
01:04:36.000
loss可以降最低的
link |
01:04:38.000
然後找到可以降最低的
link |
01:04:40.000
我們就把他挑出來
link |
01:04:42.000
挑出來挑出來,然後當作是
link |
01:04:44.000
下一輪的trigger
link |
01:04:46.000
所以我們就把trigger update成
link |
01:04:48.000
這三個可以讓loss降最低的
link |
01:04:50.000
link |
01:04:52.000
這個步驟就一直持續一直持續
link |
01:04:54.000
然後持續到最後
link |
01:04:56.000
等到他convert為止
link |
01:04:58.000
你就會找到你要的這個
link |
01:05:00.000
這個trigger
link |
01:05:02.000
好,那他的實驗
link |
01:05:04.000
結果呢,就是
link |
01:05:06.000
這個
link |
01:05:08.000
這邊,這個實驗
link |
01:05:10.000
結果有點
link |
01:05:12.000
就是可能會讓人覺得
link |
01:05:14.000
offensive吧,就是他加了
link |
01:05:16.000
某一個figure
link |
01:05:18.000
然後他就把
link |
01:05:20.000
原本這個squat,squat是一個
link |
01:05:22.000
question answer的data set,然後他的question是
link |
01:05:24.000
why did it work,然後呢他的context
link |
01:05:26.000
就是呃
link |
01:05:28.000
文章是這個,然後他在文章
link |
01:05:30.000
的後面呢加上了一個
link |
01:05:32.000
adversarial trigger
link |
01:05:36.000
然後
link |
01:05:38.000
結果他就讓
link |
01:05:40.000
模型原本的output是exercise變成
link |
01:05:42.000
to kill american people
link |
01:05:44.000
所以這個就是
link |
01:05:46.000
這就是一個有點危險的
link |
01:05:48.000
發言啦,就是如果模型
link |
01:05:50.000
output出來的東西長這個樣子的話
link |
01:05:52.000
那你把他deploy在現實生活中
link |
01:05:54.000
大家可能會覺得很有問題
link |
01:05:56.000
所以這個就是adversarial trigger
link |
01:05:58.000
為什麼很危險的地方
link |
01:06:00.000
好,那
link |
01:06:02.000
universal trigger他其實
link |
01:06:04.000
有點像是這個我們在前幾個禮拜
link |
01:06:06.000
講的這個
link |
01:06:08.000
講的那個prefix tuning
link |
01:06:10.000
在做的事情,就是當model固定的時候
link |
01:06:12.000
想要找到一個
link |
01:06:14.000
prefix,然後這個prefix可以讓
link |
01:06:16.000
模型output
link |
01:06:18.000
出一個我想要的東西
link |
01:06:20.000
那在prefix tuning裡面呢,我們做的事情是
link |
01:06:22.000
我們要加上一個prefix,讓他產生
link |
01:06:24.000
出來的東西是跟這個test有關
link |
01:06:26.000
然後他可以正確判斷這個test的
link |
01:06:28.000
一個prefix
link |
01:06:30.000
那現在在這個universal adversarial trigger
link |
01:06:32.000
裡面,我們要做的事情是我們要找到
link |
01:06:34.000
一個prefix,然後讓他可以讓
link |
01:06:36.000
模型產生一個
link |
01:06:38.000
我們想要,但是不太好的
link |
01:06:40.000
output,所以這個就是universal trigger
link |
01:06:42.000
好,那
link |
01:06:44.000
剩下的部分呢,我們就
link |
01:06:46.000
下禮拜再講,那今天就
link |
01:06:48.000
講到這個地方,有人有問題嗎
link |
01:06:50.000
好,欸謝謝,陳漢
link |
01:06:52.000
謝謝
link |
01:06:54.000
link |
01:06:56.000
看大家有沒有什麼
link |
01:06:58.000
問題要問呢
link |
01:07:04.000
好,請說
link |
01:07:06.000
不好意思,就是因為就感覺那個attack
link |
01:07:08.000
這個自然語言attack這個東西
link |
01:07:10.000
好像蠻多人在研究的
link |
01:07:12.000
就是這個東西主要拿來
link |
01:07:14.000
就是,就只是拿來
link |
01:07:16.000
真的是拿來攻擊一個語言的
link |
01:07:18.000
模型嗎
link |
01:07:20.000
還是他的主要的
link |
01:07:22.000
目的,實用的目的一直在做什麼
link |
01:07:24.000
實用的目的
link |
01:07:26.000
第一個當然就是有一個模型
link |
01:07:28.000
我們想要去攻擊他嘛,就是我們想要讓
link |
01:07:30.000
他的模型爛掉
link |
01:07:32.000
這是一個功能
link |
01:07:34.000
沒有錯,那另外一個很重要的功能就是
link |
01:07:36.000
當你開發出一個新的
link |
01:07:38.000
模型的時候,你必須要先知道
link |
01:07:40.000
他有可能有什麼failure mode
link |
01:07:42.000
那有什麼failure mode我們才有辦法
link |
01:07:44.000
去讓他更強健
link |
01:07:46.000
所以這個應該是
link |
01:07:48.000
adversarial symbol最重要的功能,就是
link |
01:07:50.000
adversarial symbol他功能並不是讓模型
link |
01:07:52.000
他當然可以讓模型爛掉
link |
01:07:54.000
但是對我們就是
link |
01:07:56.000
模型的deployer來說
link |
01:07:58.000
他的功能是他可以
link |
01:08:00.000
identify出一些模型的
link |
01:08:02.000
一些問題
link |
01:08:04.000
那舉例而言就是
link |
01:08:06.000
有些adversarial symbol
link |
01:08:08.000
他可能會幫助我們發現說模型會
link |
01:08:10.000
依賴某些特定的spherus correlation
link |
01:08:12.000
所以我們在創造出
link |
01:08:14.000
這些adversarial symbol的時候
link |
01:08:16.000
我們就是利用這個模型會有
link |
01:08:18.000
會仰賴spherus correlation
link |
01:08:20.000
這件事情才創造出來
link |
01:08:22.000
那當我們這些設計出
link |
01:08:24.000
模型的人去看這些adversarial symbol
link |
01:08:26.000
的時候,我們就會發現說
link |
01:08:28.000
原來這個模型
link |
01:08:30.000
他有這樣的弱點,那其實剛才有同學問到說
link |
01:08:32.000
attack攻擊的時候
link |
01:08:34.000
是不是只會攻擊那些
link |
01:08:36.000
是不是都會替換成
link |
01:08:38.000
這個
link |
01:08:40.000
比較不常見的字啊,那這個
link |
01:08:42.000
也是對的,所以我們就會發現說
link |
01:08:44.000
我們就會透過同一次替換攻擊發現說
link |
01:08:46.000
原來模型其實是
link |
01:08:48.000
對於他們有看過的字非常非常的不弱
link |
01:08:50.000
所以這也是,這應該才是
link |
01:08:52.000
這個attack最重要的功能
link |
01:08:54.000
所以就是
link |
01:08:56.000
要知道怎麼攻擊才知道怎麼防禦
link |
01:08:58.000
對,就是
link |
01:09:00.000
比較政治正確的講法是這樣子
link |
01:09:02.000
那那個就是
link |
01:09:04.000
有常常,就是有什麼情況下
link |
01:09:06.000
真的是要去攻擊別人
link |
01:09:08.000
好,這個
link |
01:09:10.000
因為只是讓一個
link |
01:09:12.000
電影的評價從
link |
01:09:14.000
手邊換,這樣其實也沒有什麼用
link |
01:09:16.000
好,我講一個實際的例子
link |
01:09:18.000
這個實際的例子是
link |
01:09:20.000
這個
link |
01:09:22.000
我找一下投影片
link |
01:09:24.000
這個實際的例子是
link |
01:09:26.000
link |
01:09:28.000
fake news detection
link |
01:09:30.000
fake news detection就是你要偵測
link |
01:09:32.000
那個
link |
01:09:34.000
這個
link |
01:09:36.000
這個
link |
01:09:38.000
假新聞嘛,那你偵測假新聞
link |
01:09:40.000
的時候
link |
01:09:42.000
你當然是
link |
01:09:44.000
對於一個模型的deployer來說
link |
01:09:46.000
你當然是希望說
link |
01:09:48.000
他可以正確的判斷說一個新聞是真的還是假的
link |
01:09:50.000
那如果說你今天
link |
01:09:52.000
在做
link |
01:09:54.000
你要去attack這個model的時候
link |
01:09:56.000
就是你要想辦法讓一個
link |
01:09:58.000
明明是假新聞的東西
link |
01:10:00.000
然後讓模型判斷說
link |
01:10:02.000
他覺得他不是假新聞
link |
01:10:04.000
那這個東西就是一個
link |
01:10:06.000
很實際的問題
link |
01:10:08.000
就是如果
link |
01:10:10.000
一個惡意的攻擊者他可以透過
link |
01:10:12.000
某一個惡意攻擊的方式
link |
01:10:14.000
把一個fake news
link |
01:10:16.000
經過protection之後產生一個
link |
01:10:18.000
就是讓模型覺得
link |
01:10:20.000
他是一個真的新聞的
link |
01:10:22.000
這個news的話
link |
01:10:24.000
那這個模型就
link |
01:10:26.000
反正這樣就會有問題
link |
01:10:28.000
所以這個就是一個實際的例子
link |
01:10:30.000
這樣有回答到你的問題嗎
link |
01:10:32.000
有,謝謝
link |
01:10:34.000
好,再來
link |
01:10:36.000
羽翔
link |
01:10:38.000
那個我想問一下
link |
01:10:40.000
就是像今天講的
link |
01:10:42.000
這些整篇的這個
link |
01:10:44.000
talk裡面的模型
link |
01:10:46.000
大家都指的是像CNN這種
link |
01:10:48.000
稍微規模比較小的模型嗎
link |
01:10:50.000
還是其實像BERT這種
link |
01:10:52.000
模型比較大的
link |
01:10:54.000
然後有經過大量progress
link |
01:10:56.000
那其實很容易被這種attack
link |
01:10:58.000
攻擊到,就是我還蠻好奇
link |
01:11:00.000
其實
link |
01:11:02.000
不管是CNN還是BERT
link |
01:11:04.000
都剛剛你講的那些攻擊
link |
01:11:06.000
全部都會對他們來說
link |
01:11:08.000
都是有效的
link |
01:11:10.000
ok
link |
01:11:12.000
然後下一個問題會就是說
link |
01:11:14.000
我們現在就是
link |
01:11:16.000
追求這樣就是這種比較
link |
01:11:18.000
不容易被攻擊
link |
01:11:20.000
換句話說就是比較弱化的模型
link |
01:11:22.000
那他這個模型他
link |
01:11:24.000
他的表現相對來說也會比較好
link |
01:11:26.000
就是如果說一個經過這個
link |
01:11:30.000
的模型
link |
01:11:32.000
他的表現對你來說
link |
01:11:34.000
其實attack的
link |
01:11:36.000
防禦是一回事,然後模型本身的訓練
link |
01:11:38.000
其實就表現性能又是另外一回事
link |
01:11:40.000
這樣的
link |
01:11:42.000
會不會有一些關聯之類的
link |
01:11:44.000
基本上我們當然是希望說
link |
01:11:46.000
就是他在正常的data上面
link |
01:11:48.000
要不論是夠好
link |
01:11:50.000
就是clean accuracy要夠高
link |
01:11:52.000
然後在經過attack之後
link |
01:11:54.000
他的robust accuracy也要夠好
link |
01:11:56.000
那目前看起來結果就是
link |
01:11:58.000
我們的防禦,就是下禮拜會講防禦的方向
link |
01:12:00.000
那經過防禦之後的模型
link |
01:12:02.000
其實都還是可以保持很高的clean accuracy
link |
01:12:04.000
然後
link |
01:12:06.000
反而是robust accuracy
link |
01:12:08.000
不會提高太多
link |
01:12:12.000
這樣回答到你的問題嗎?
link |
01:12:14.000
所以你的意思是說經過
link |
01:12:16.000
防禦的模型他的表現
link |
01:12:18.000
應該說經過防禦的這些訓練的
link |
01:12:20.000
模型他的表現
link |
01:12:22.000
不會有跌
link |
01:12:24.000
只是可能也沒有到相應的
link |
01:12:26.000
有更多的提高
link |
01:12:28.000
對,就是要看方法
link |
01:12:30.000
有些方法是
link |
01:12:32.000
有些方法是他可以
link |
01:12:34.000
提升clean accuracy
link |
01:12:36.000
有些方法是會稍微犧牲clean accuracy
link |
01:12:38.000
然後
link |
01:12:40.000
但是這個犧牲的比例其實是
link |
01:12:42.000
幅度不會很大
link |
01:12:44.000
OK
link |
01:12:46.000
最後一個問題是
link |
01:12:48.000
因為剛剛在
link |
01:12:50.000
談constraint的時候
link |
01:12:52.000
有提到上面這個
link |
01:12:54.000
USC sentence similarity
link |
01:12:56.000
那我自己其實對這件事蠻好奇
link |
01:12:58.000
就是
link |
01:13:00.000
這個算是有點岔出來
link |
01:13:02.000
就是順便問老師
link |
01:13:04.000
就是感覺給一個句子
link |
01:13:06.000
每個句義然後你去給他一個
link |
01:13:08.000
向量的點
link |
01:13:10.000
然後代表說他的意思
link |
01:13:12.000
然後你可能期待說他有一些好的性質
link |
01:13:14.000
但這件事情感覺蠻多人在做
link |
01:13:16.000
但我其實一直對這件事情有點不太能信服
link |
01:13:18.000
就感覺好像你丟進一個模型
link |
01:13:20.000
然後他出來這個向量
link |
01:13:22.000
然後感覺沒有一個很好的方式
link |
01:13:24.000
去鑑定說那確實是
link |
01:13:26.000
例如說class similarity比較高的
link |
01:13:28.000
那代表他的語意權比較接近之類的
link |
01:13:30.000
所以我還蠻好奇就是
link |
01:13:32.000
助教跟老師對
link |
01:13:34.000
這個問題的看法
link |
01:13:36.000
就是這個問題終究是有解的嗎
link |
01:13:38.000
還是我們現在就只是
link |
01:13:40.000
有點像是有什麼
link |
01:13:42.000
訓練好的模型是拿來用用
link |
01:13:44.000
然後就是看一下在這個模型底下
link |
01:13:46.000
class similarity相對高相對低
link |
01:13:48.000
我們就可以接受這樣
link |
01:13:50.000
我覺得這是個很棒的問題
link |
01:13:52.000
我猜承翰之後會講到
link |
01:13:54.000
這方面的議題對不對
link |
01:13:56.000
如果我們只是用這種sentence embedding
link |
01:13:58.000
來衡量句子和句子之間的相似度
link |
01:14:00.000
那畢竟我們不能夠保證說
link |
01:14:02.000
sentence embedding output
link |
01:14:04.000
接近的句子
link |
01:14:06.000
他一定就是語意接近的
link |
01:14:08.000
所以這會讓
link |
01:14:10.000
這些attack的方法其實是有問題的
link |
01:14:12.000
承翰之後還會繼續講這方面的議題嗎
link |
01:14:14.000
承翰之後還會繼續講這方面的議題嗎
link |
01:14:16.000
這個應該是
link |
01:14:18.000
跟我現在在做的研究比較關
link |
01:14:20.000
我應該是不會再cover相關的
link |
01:14:22.000
這個討論
link |
01:14:24.000
不過我覺得同學問題
link |
01:14:26.000
我想一下
link |
01:14:28.000
應該這樣講
link |
01:14:30.000
這個要看sentence encoder是怎麼訓練的
link |
01:14:32.000
然後現在sentence encoder
link |
01:14:34.000
像是Unreal Sentence Encoder
link |
01:14:36.000
他的訓練方式就是
link |
01:14:38.000
有一種dataset叫做paraphrase dataset
link |
01:14:40.000
所謂的paraphrase就是
link |
01:14:42.000
我忘記paraphrase的中文是什麼
link |
01:14:44.000
改寫改寫改寫
link |
01:14:46.000
改寫嘛
link |
01:14:48.000
他的意思是一樣的
link |
01:14:50.000
你就可以用類似contrastive
link |
01:14:52.000
或者是
link |
01:14:54.000
類似contrastive
link |
01:14:56.000
類似contrastive那系列的訓練方式
link |
01:14:58.000
然後訓練出來
link |
01:15:00.000
理想上的結果
link |
01:15:02.000
就是你應該要讓
link |
01:15:04.000
這個句意相近的句子
link |
01:15:06.000
很接近
link |
01:15:08.000
他的cosine條件是高的
link |
01:15:10.000
句意不相近的cosine條件是低的
link |
01:15:12.000
然後這件事情要怎麼衡量呢
link |
01:15:14.000
這件事情衡量的方式就是
link |
01:15:16.000
我們有一些dataset
link |
01:15:18.000
人標註說人覺得
link |
01:15:20.000
兩個句子的similarity是多高
link |
01:15:22.000
然後這個有點像是一個
link |
01:15:24.000
regression的test
link |
01:15:26.000
然後你就可以去看說
link |
01:15:28.000
model衡量出來的cosine similarity的高低
link |
01:15:30.000
跟人衡量出來的cosine similarity
link |
01:15:32.000
人衡量出來的感覺
link |
01:15:34.000
有多correlation
link |
01:15:36.000
correlation有多高
link |
01:15:38.000
這是STS那個benchmark的作法
link |
01:15:40.000
link |
01:15:42.000
所以現在
link |
01:15:44.000
NLP有一個很大的問題
link |
01:15:46.000
就是
link |
01:15:48.000
不管是哪一個model
link |
01:15:50.000
你都會有一個很大的問題
link |
01:15:52.000
就是這些東西總是要拿一個人用
link |
01:15:54.000
所以你要拿一個人用的話
link |
01:15:56.000
人就是要進來
link |
01:15:58.000
可是你的模型當要拿一個人衡量的時候
link |
01:16:00.000
就會很困難
link |
01:16:02.000
當然你沒有錢嘛
link |
01:16:04.000
你也沒有時間嘛
link |
01:16:06.000
而且每個人的標準都不一樣
link |
01:16:08.000
所以這個是一個很大的問題
link |
01:16:10.000
因為我昨天剛好在看那個
link |
01:16:12.000
deepcs
link |
01:16:14.000
CSE的論文
link |
01:16:16.000
又想到這個問題
link |
01:16:18.000
剛好今天你有講到
link |
01:16:20.000
我有跟詠松討論過這個問題
link |
01:16:22.000
我那時候跟他說
link |
01:16:24.000
我那時候跟他講
link |
01:16:26.000
我們在Attack的時候
link |
01:16:28.000
我們是一次換一個字
link |
01:16:30.000
然後我們是換那個cosine similarity
link |
01:16:32.000
可是因為我們在訓練
link |
01:16:34.000
Universal Sentence Encoder的時候
link |
01:16:36.000
我們是
link |
01:16:38.000
是拿兩個完全不一樣的句子
link |
01:16:40.000
來給他看
link |
01:16:42.000
我們在訓練的時候他只有看過兩個不同的句子
link |
01:16:44.000
然後不同的句子要
link |
01:16:46.000
語意不同他要覺得它是不像的
link |
01:16:48.000
那如果
link |
01:16:50.000
你給他看過
link |
01:16:52.000
你在testing的時候
link |
01:16:54.000
我們現在的scenario就是我們在testing的時候
link |
01:16:56.000
我們給他看一個原本的句子
link |
01:16:58.000
但是經過某些
link |
01:17:00.000
替換掉的字而已
link |
01:17:02.000
那其實他兩個句子長得是非常像的
link |
01:17:04.000
那我們根本就不知道他這個時候
link |
01:17:06.000
會有怎麼樣的behavior
link |
01:17:08.000
所以有可能
link |
01:17:10.000
就是我們現在在Attack的東西
link |
01:17:12.000
到底是Universal Sentence Encoder
link |
01:17:14.000
還是我們實際上是Attack這個
link |
01:17:16.000
Bird Model
link |
01:17:18.000
因為我們有可能只是在利用這些
link |
01:17:20.000
similarity的model
link |
01:17:22.000
它的一些弱點
link |
01:17:24.000
然後才能產生出一些不合理的結果
link |
01:17:26.000
然後我們就以這些不合理的結果攻擊這個模型
link |
01:17:28.000
然後最後我們就覺得說
link |
01:17:30.000
這個模型是很不robust
link |
01:17:32.000
但其實有可能只是因為我們產生了這些東西
link |
01:17:34.000
它是一個不合理的predation
link |
01:17:36.000
然後不合理的predation當然對於模型來說
link |
01:17:38.000
它當然沒有必要是正確的判斷
link |
01:17:40.000
那這個不合理的東西的來源
link |
01:17:42.000
就是因為我們用了一個
link |
01:17:44.000
不合理的體驗標準
link |
01:17:46.000
對,有可能是這個樣子
link |
01:17:48.000
link |
01:17:50.000
好,謝謝你的詳細的回答
link |
01:17:52.000
感謝
link |
01:17:54.000
好,承翰講得很好
link |
01:17:56.000
今天我們說Attack成功
link |
01:17:58.000
也許不見得是Attack成功
link |
01:18:00.000
我們目標的那個模型
link |
01:18:02.000
我們只是成功騙過了
link |
01:18:04.000
我們用模型計算constraint的時候
link |
01:18:06.000
我們用了constraint的那個模型
link |
01:18:08.000
謝謝助教跟老師
link |
01:18:10.000
好,接下來
link |
01:18:12.000
群茂
link |
01:18:14.000
我想要請問一下
link |
01:18:16.000
剛剛提到那些Attack的方式
link |
01:18:18.000
它很像是產生一些
link |
01:18:20.000
比較特別的data
link |
01:18:22.000
然後去進行攻擊
link |
01:18:24.000
那是不是可以就使用這些data來進行
link |
01:18:26.000
data augmentation之類的
link |
01:18:28.000
可以
link |
01:18:30.000
其實有一個
link |
01:18:32.000
就是
link |
01:18:34.000
defense也有一個方法
link |
01:18:36.000
就是
link |
01:18:38.000
做這個
link |
01:18:40.000
就是做data augmentation
link |
01:18:42.000
下禮拜會講
link |
01:18:44.000
所以說現在的論文
link |
01:18:46.000
其實也有一部分
link |
01:18:48.000
是利用這種方式去進行augmentation
link |
01:18:50.000
還是比較少
link |
01:18:52.000
其實蠻多的
link |
01:18:54.000
基本上他們只要提出一個Attack方式
link |
01:18:56.000
他們就會說
link |
01:18:58.000
如果我們這個Attack方式要怎麼defense
link |
01:19:00.000
做defense一定就是
link |
01:19:02.000
我們提出一個
link |
01:19:04.000
了解了解,那就這樣子,謝謝
link |
01:19:06.000
好,謝謝
link |
01:19:08.000
好,接下來靜治
link |
01:19:12.000
不好意思,那個我想要請問一下
link |
01:19:14.000
就是像我們今天
link |
01:19:16.000
談到的就是
link |
01:19:18.000
關於adversive attack
link |
01:19:20.000
大部分都是在講NLP的一些
link |
01:19:22.000
雲一分析之類的攻擊
link |
01:19:24.000
那像是Viper的助教
link |
01:19:26.000
你們有沒有看到一些
link |
01:19:28.000
可能是針對一些資訊安全相關的
link |
01:19:30.000
可能惡意城市
link |
01:19:32.000
或是惡意風暴之類的分析的一些應用
link |
01:19:34.000
上面,因為可能像目前
link |
01:19:36.000
有一些
link |
01:19:38.000
防火牆或是IPS
link |
01:19:40.000
IDS之類的設備
link |
01:19:42.000
他們也都會使用一些
link |
01:19:44.000
機器學習的模型來判斷說
link |
01:19:46.000
它是不是adaptive detection
link |
01:19:48.000
之類的一些判斷
link |
01:19:50.000
這樣子,那是不是也會有
link |
01:19:52.000
這些相關的研究在
link |
01:19:54.000
做分析說
link |
01:19:56.000
那是不是這些相關的攻擊
link |
01:19:58.000
都會在這上面
link |
01:20:00.000
那應用在這上面的話
link |
01:20:02.000
通常會是比較偏向於
link |
01:20:04.000
類似一開始處理image的那些攻擊
link |
01:20:06.000
還是會是比較偏向於NLP的話
link |
01:20:08.000
這方式來處理呢
link |
01:20:10.000
link |
01:20:12.000
對,我對這上面
link |
01:20:14.000
完全沒有涉略,所以
link |
01:20:16.000
可能沒辦法回答這個問題
link |
01:20:18.000
了解,謝謝
link |
01:20:20.000
我也完全沒有涉略,如果你正好在研究這方面的話
link |
01:20:22.000
我覺得這搞不好是一個挺好的題目啊
link |
01:20:24.000
就任何想要偵測
link |
01:20:26.000
惡意行為的模型
link |
01:20:28.000
都有可能遭到
link |
01:20:30.000
惡意攻擊的反制,所以這些
link |
01:20:32.000
要偵測惡意行為的模型
link |
01:20:34.000
我們都可以想想
link |
01:20:36.000
它有可能怎麼樣被attack
link |
01:20:38.000
然後怎麼defense
link |
01:20:40.000
好,謝謝老師
link |
01:20:42.000
好,然後這邊有一個
link |
01:20:44.000
留言區的問題啦
link |
01:20:46.000
OSIA問說
link |
01:20:48.000
拿慈海去pre-train
link |
01:20:50.000
是不是可以使模型
link |
01:20:52.000
更強健,不過我稍微
link |
01:20:54.000
rephrase一下這個問題
link |
01:20:56.000
我們今天都做pre-training
link |
01:20:58.000
pre-training有沒有讓模型
link |
01:21:00.000
更不容易被attack的
link |
01:21:02.000
有沒有讓模型更robust的呢
link |
01:21:04.000
我覺得
link |
01:21:06.000
應該是沒有吧
link |
01:21:08.000
因為如果這樣子會比較robust的話
link |
01:21:10.000
那照理來說BERT或是GD2
link |
01:21:12.000
BERT或是Orbita這種model
link |
01:21:14.000
它應該要非常非常robust
link |
01:21:16.000
因為它看過非常非常多資料嘛
link |
01:21:18.000
對,可是
link |
01:21:20.000
實際上它並沒有比較robust
link |
01:21:22.000
那我想同學的意思可能是說
link |
01:21:24.000
因為我剛剛有說
link |
01:21:26.000
有些字就是在cogus不常出現嘛
link |
01:21:28.000
可是理論上它應該要出現在字典裡面
link |
01:21:30.000
然後
link |
01:21:32.000
這個意思,懂懂懂
link |
01:21:34.000
然後我覺得可能
link |
01:21:36.000
會有一個小問題
link |
01:21:38.000
是說pre-train的時候
link |
01:21:40.000
用過,可是它fine tune的時候沒有用過
link |
01:21:42.000
它還是
link |
01:21:44.000
不會知道說它是什麼東西
link |
01:21:46.000
就是因為所謂的fine tune的時候
link |
01:21:48.000
沒有看過是說它沒有出現在fine tune的
link |
01:21:50.000
data set裡面嘛
link |
01:21:52.000
所以它不會知道說假設有一個很罕見的字
link |
01:21:54.000
就像我剛剛前面有一個例子
link |
01:21:56.000
有一個字是inordinate
link |
01:21:58.000
就是它不會知道說inordinate
link |
01:22:00.000
這個字,這個罕見的字
link |
01:22:02.000
當它出現在fine tune的data裡面
link |
01:22:04.000
我要把它怎麼處理
link |
01:22:06.000
所以如果它在fine tune的時候沒有看過
link |
01:22:08.000
它可能還是會有
link |
01:22:10.000
不好的performance
link |
01:22:12.000
然後還有另外一個可能的原因啦
link |
01:22:14.000
就是tokenization
link |
01:22:16.000
也是一個影響很大
link |
01:22:18.000
因為inordinate這個字
link |
01:22:20.000
它可能就會被
link |
01:22:22.000
後面的東西我不確定它是不是真的這樣做
link |
01:22:24.000
但是它可能會被tokenize成
link |
01:22:26.000
in這個prefix跟ordinate這個prefix
link |
01:22:28.000
所以這個時候
link |
01:22:30.000
模型會把它當成是
link |
01:22:32.000
就是惡意可能
link |
01:22:34.000
因為它覺得ordinate是一個正面的詞
link |
01:22:36.000
in是一個負面的詞
link |
01:22:38.000
所以in是一個negation的詞嘛
link |
01:22:40.000
所以它就覺得inordinate就是一個負面的組合
link |
01:22:42.000
那這個時候就算你用
link |
01:22:44.000
這個
link |
01:22:46.000
雖然它有看過這個字,它還是會覺得它是一個負面的字
link |
01:22:48.000
這是我的猜測
link |
01:22:50.000
所以我覺得
link |
01:22:52.000
重點應該是它在fine tune的時候
link |
01:22:54.000
有沒有頻繁的使用過這個字
link |
01:22:56.000
link |
01:23:00.000
好,謝謝
link |
01:23:02.000
承翰,我剛才看那個
link |
01:23:04.000
雨翔好像還有
link |
01:23:06.000
問題
link |
01:23:08.000
對,我剛才被人按到散線
link |
01:23:10.000
就是應該說接續前
link |
01:23:12.000
前衛同學的問題,就是還蠻好奇
link |
01:23:14.000
例如說像老師可能產學經驗比較豐富
link |
01:23:16.000
例如說
link |
01:23:18.000
這種模型deployment的時候
link |
01:23:20.000
會把attack當成就是
link |
01:23:22.000
QA process的其中一個環節
link |
01:23:24.000
你的意思是說
link |
01:23:26.000
一般在deploy模型的時候
link |
01:23:28.000
會不會
link |
01:23:30.000
把attack考慮進去
link |
01:23:32.000
對阿,例如說
link |
01:23:34.000
先檢測用attack這個流程
link |
01:23:36.000
在業界的時候,會不會用attack這個流程
link |
01:23:38.000
然後去看一下這個模型有沒有
link |
01:23:40.000
強電之類的
link |
01:23:42.000
link |
01:23:44.000
這是個很好的問題
link |
01:23:46.000
你下次可以去問問陳尚哲
link |
01:23:48.000
這個問題阿
link |
01:23:50.000
他其實有跟我講過他的答案
link |
01:23:52.000
他跟我說
link |
01:23:54.000
他說
link |
01:23:56.000
我這樣講
link |
01:23:58.000
會不會讓大家覺得今天有點浪費時間
link |
01:24:00.000
attack不一定
link |
01:24:02.000
是真正很危險的問題
link |
01:24:04.000
為什麼呢
link |
01:24:06.000
因為在真實的應用情景
link |
01:24:08.000
有更多的機會
link |
01:24:10.000
可以破壞你的系統
link |
01:24:12.000
不見得需要用attack
link |
01:24:14.000
這個技術
link |
01:24:16.000
link |
01:24:18.000
就像別人如果可以對你的影像系統
link |
01:24:20.000
做adversal attack
link |
01:24:22.000
他是不是都已經截取到
link |
01:24:24.000
輸入你的影像系統的那張image
link |
01:24:26.000
他可以截取這個
link |
01:24:28.000
他有更多的事情可以做
link |
01:24:30.000
所以
link |
01:24:32.000
不一定真的威脅性那麼大
link |
01:24:34.000
ok
link |
01:24:36.000
謝謝老師
link |
01:24:38.000
補充一下
link |
01:24:40.000
有一個東西叫checklist
link |
01:24:42.000
checklist這個東西
link |
01:24:44.000
他有一點就是在檢查說
link |
01:24:46.000
產生出來的model
link |
01:24:48.000
他的
link |
01:24:50.000
就是
link |
01:24:52.000
他有多robust
link |
01:24:54.000
他不太算是用adversal attack
link |
01:24:56.000
但他也是要檢查這個robust
link |
01:24:58.000
所以其實大家在deploy模型的時候
link |
01:25:00.000
業界應該還是會希望說
link |
01:25:02.000
以做NLP的人
link |
01:25:04.000
的角度來說
link |
01:25:06.000
我們弄出來的model
link |
01:25:08.000
他是對一些異常資料是有robust
link |
01:25:10.000
所以還是會做更新
link |
01:25:12.000
所以我剛才的答案不要讓大家誤會
link |
01:25:14.000
覺得說adversal attack
link |
01:25:16.000
不重要
link |
01:25:18.000
他仍然是一個重要的議題
link |
01:25:20.000
只是除了adversal attack以外
link |
01:25:22.000
可能還有其他的議題
link |
01:25:24.000
而今天大家能夠做的事情
link |
01:25:26.000
有限
link |
01:25:28.000
所以也許不是所有的模型都會把adversal attack
link |
01:25:30.000
納入考慮
link |
01:25:32.000
但是在未來
link |
01:25:34.000
今天AI的模型
link |
01:25:36.000
越來越多以後
link |
01:25:38.000
這是我們在未來都需要考慮的問題
link |
01:25:42.000
OK
link |
01:25:44.000
謝謝老師跟助教的補充
link |
01:25:50.000
link |
01:25:52.000
大家還有問題想問嗎
link |
01:25:54.000
如果沒有的話
link |
01:25:56.000
我們就謝謝陳漢
link |
01:25:58.000
今天的演講非常精彩
link |
01:26:00.000
謝謝
link |
01:26:02.000
link |
01:26:04.000
其實還有
link |
01:26:06.000
助教要講作業
link |
01:26:08.000
我們休息
link |
01:26:10.000
五分鐘
link |
01:26:12.000
我們五分鐘後再回來
link |
01:26:14.000
謝謝大家
link |
01:26:16.000
字幕由 Amara.org 社群提供