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

link |
大家好,我是江承翰,那我們就繼續上禮拜講的東西。
link |
剛剛稍微耽誤了一點時間,不好意思,希望今天可以兩個小時內講完。
link |
上禮拜我們已經講了 NLP 裡面最重要的 evasion attack。
link |
我們也講了要怎麼去 control evasion attack 裡面的 adversarial sample。
link |
那當初我們講的是說,因為 NLP 的 input 是 discrete,所以它跟 CV 或是 audio 是不一樣的。
link |
我們必須要用一些很特別的方法才能找出一個合理的 adversarial sample。
link |
那這個有沒有其他方法不要用這些大量的 transformation 還有 constraint,
link |
還有 search method 才能達成這個 goal? 其實是有的。
link |
那今天來介紹剩下兩個來 construct evasion attack 裡面的 adversarial sample 的方式。
link |
但是它做的事情是我們直接訓練一個模型,
link |
這個模型的目標就是要產生一個 adversarial example。
link |
那首先我們第一個介紹的例子是我們直接用一個 autoencoder 來生成一個句子,
link |
然後這個句子就會是一個 adversarial example。
link |
那這個想法其實很簡單,就是我訓練一個 generator,
link |
那這個 generator 它是一個 autoencoder,
link |
那這個 autoencoder 做的事情就是當它看到一個正常的 input 的時候,
link |
它就要去改寫這個正常的 input,
link |
然後改寫出來讓它最後 output 出來的是一個 adversarial example。
link |
那這個 generator 它的目標就是要生出一個足夠好的 example,
link |
那這個 example 要好到可以去讓 classifier 的 output 是爛掉的。
link |
也就是說原本有一個 text classifier,
link |
然後當你餵進去這個 autoencoder,
link |
也就是 generator output 出來的 sample 的時候,
link |
我們希望它可以跟原本你把這個東西餵進去的時候,
link |
那另外為了要訓練這個 generator,
link |
它多訓練了一個 classifier,
link |
那這個 classifier 它的目標就是要正確的判斷
link |
這個 autoencoder output 出來的東西。
link |
有一點點像是 GAN,但它有點不太一樣。
link |
就是 autoencoder 它要生出一個 sample,
link |
然後 classifier 它要足夠強,
link |
可以去正確的判斷出這個 autoencoder output 出來的東西是哪一個 class。
link |
GAN 要判斷的是在 GAN 裡面,
link |
它的 discriminator 它要做的是什麼?
link |
是要判斷它的 input 是生成出來的,
link |
這個 input,這個是 movie-review 的例子,
link |
所以它這個 input 是正面的情緒還是負面的情緒?
link |
那對於一個好的 classifier,
link |
不管你做了什麼 perturbation,
link |
它只要是合理的 perturbation,
link |
所以這個 generator 它做的事情,
link |
它要去 construct 一個 adversarial sample,
link |
使得一個不 robust classifier 它可以被騙過。
link |
另外它用的這個 robust classifier,
link |
它做的事情其實就是 defense,
link |
就是它要去想辦法可以去正確的判斷說,
link |
今天進來的不管是 adversarial sample 還是正常的 input,
link |
就要交替的在 attack 跟 defense 這兩個 step,
link |
就是有時候要 train 一下這個 autoencoder,
link |
然後使它 output 出來的這個 example 是足夠好的,
link |
那有時候要 update 這個 classifier,
link |
不管它是 adversarial sample 還是不是 adversarial sample,
link |
在 attack step 的時候,
link |
它要怎麼去訓練這個 autoencoder。
link |
那在 attack step 的時候呢,
link |
它原本那個 robust classifier 就是不會用到,
link |
它只會用到原本的這個 test classifier,
link |
這個 test classifier 是本來就已經訓練好的,
link |
然後你要先訓練好一個不 robust classifier,
link |
然後才會去訓練這個 generator。
link |
好,那這個 attack step 呢,
link |
一個是 reconstruction loss,
link |
一個是 similarity loss,
link |
那這兩個 loss 呢,寫出來長這個樣子,
link |
代表原本的 input 跟 autoencoder output,
link |
那 reconstruction 這個 loss 呢,
link |
這個 autoencoder output 要跟 input 足夠像,
link |
第一個就是 reconstruction loss,
link |
reconstruction loss 呢,
link |
要求說它在 token level 要長得足夠像,
link |
那 similarity loss 它要求的是,
link |
這邊兩個的 token embedding 要足夠像,
link |
我們在講那四個要素裡面的那個 constraint,
link |
我們有講到一個 sentence encoder 的 similarity,
link |
input 跟 output 它的 similarity 要足夠像,
link |
這個就失去了我們要 attack 的這個目標了,
link |
所以它除了這兩個 loss 之外啊,
link |
它還另外多加了一個叫做 adversarial loss,
link |
那這個 adversarial loss 它要做的事情呢,
link |
就是它要想辦法去騙過這個 classifier,
link |
使得呢,這個 classifier 當它看到一個 adversarial symbol 的時候,
link |
所以說在 attack step 的時候呢,
link |
它就是用這三個不同的 loss 去訓練這個 generator,
link |
那另外呢,這個除了 attack step 它也要,
link |
它另外一個步驟是 defense 的 step 嘛,
link |
那它 defense 的 step 呢,它要做的就是,
link |
它要訓練這個 autoencoder 跟另外一個 robust classifier,
link |
那為什麼會說它是 robust 呢?
link |
另外呢,我們也希望它看到 adversarial symbol 的時候,
link |
它的這個 output 呢,也是可以是正確的,
link |
所以我們說它是個 robust classifier,
link |
那這個 robust classifier 啊,
link |
跟前面一頁我們看到這個 classifier 是不一樣的,
link |
這個 classifier 呢,它在 attack step 的時候,
link |
可是這個 robust classifier 它在訓練的時候呢,
link |
在 defense step 的時候,
link |
我們就是要訓練一個 robust 的這個分類器,
link |
那這個 defense step 它訓練這個 classifier,
link |
它也會同時訓練這個 autoencoder,
link |
那它用了一樣是三個不同的 loss,
link |
那這三個 loss 呢,跟剛才也還蠻像的啊,
link |
就是我要要求說這個 generator,
link |
它生出來的 output 要跟 input 值夠像,
link |
不管是在 token label 上面要像,
link |
或是在 sentence embedding label 要像,
link |
那另外一個 loss 呢,就是 defense loss,
link |
所謂的 defense loss 呢,
link |
就是我要要求說這個 classifier,
link |
它要有足夠的能力去辨識今天的 input,
link |
當今天的 input 是 x 或是 x star,
link |
不管是這個正常 input 還是 adversarial input,
link |
那這個就是 defense loss,
link |
所以它的這個 training 呢,
link |
會交替的在 attack 跟 defense 運作,
link |
它就是 update 這個 generator,
link |
為什麼這個 defense 的時候,
link |
它也要訓練這個 autoencoder,
link |
如果你不訓練這個 autoencoder 的話,
link |
如果你不訓練這個 autoencoder 的話,
link |
在這個 defense step 的時候,
link |
我們的目標是要生成一個正常的 input,
link |
但是它是對 robust classifier 來說,
link |
所以如果你沒有 update 它的話,
link |
它要怎麼生成一個是 adversarial,
link |
但是可以讓 robust classifier 的 output 是正確的這個句子,
link |
就是不管是 autoencoder 的 input 還是 output,
link |
都會被這個 test classifier 拿來重新做訓練,是嗎?
link |
我們要訓練這個 autoencoder 的時候,
link |
不管是在 attack step 還是在 defense step,
link |
然後對這個 autoencoder 的參數做為分之後,
link |
做 gradient descent,
link |
這個 autoencoder 其實你是沒有辦法回分過去的。
link |
當我們把一個 input 丟到 generator 裡面的時候,
link |
它要 output 出一個 adversarial sample,
link |
那這個 adversarial sample 是怎麼被 output 出來的呢?
link |
它就 output 出這個 time step 的 token,
link |
它的一個 distribution,
link |
那假設說在這個 autoencoder,
link |
它 output 出來的第一個 token,
link |
它的 probability distribution 長得是這個樣子,
link |
就是我們會去 sample 出一個 token,
link |
從這整個 probability distribution 裡面做 sample,
link |
就得到我們的 adversarial sample 的第一個 token,
link |
做到這個 adversarial sample 的整個句子被產生出來之後,
link |
我們就得到一個 adversarial sample。
link |
那當我們要做這個 backward 的時候呢,
link |
就是我們在 backward 的時候,
link |
所以你要 backward 的時候,
link |
我們先來看一下這個 autoencoder,
link |
它的 output 是怎麼被送到後面的 classifier 裡面,
link |
那我們可能會比較知道怎麼解決這個問題。
link |
那這個 autoencoder 呢,
link |
它的 output 經過 sample 之後,
link |
我們就會要把它丟到後面的 classifier 裡面。
link |
那我們要把一個句子丟到 classifier 的時候呢,
link |
我們要先做 embedding lookup,
link |
把這個句子裡面的每個 token 都轉換成它所對應的 embedding 的時候,
link |
它才可以被餵到 classifier 後面的一些 network 裡面。
link |
所以我們就對每個 token 做 embedding lookup 之後呢,
link |
那這些 embedding 就丟到這個 classifier 裡面。
link |
那我們來看一下這邊這個過程是怎麼做的。
link |
就是 autoencoder 它經過 sample 之後,
link |
它會產生一個 one-hot vector,
link |
那這個 one-hot vector 呢,
link |
假設以 i 這個 token 為例的話,
link |
那這個 one-hot vector 的第三個 entry 就代表
link |
在 classifier 的這個 embedding 裡面第三個 word embedding。
link |
當你去乘以 classifier 的這個 embedding table 的時候,
link |
你就會得到這個代表 i 的這個 word embedding。
link |
所以這個就是 embedding lookup 實際上在做的事情。
link |
這個 sampling 的這個過程,
link |
讓這個東西產生出這個 one-hot vector 的,
link |
應該不能說 one-hot vector,
link |
這個就是 autoencoder 產生出來這個 vector,
link |
產生出這個 vector 的過程是一個可以為分的過程。
link |
叫做 Gambel-Softmax 的 re-parameterization trick。
link |
那這件事情我先直接講一下它怎麼做的,
link |
就是當我們從一個 autoencoder output 出來,
link |
然後假設它這個 pi 這個 distribution 呢,
link |
然後我們分別以 pi1, pi2, pi3, pi4 來表達。
link |
我們要從這個裡面做 sampling,
link |
我們應該要得到一個 one-half vector,
link |
拿這個 one-half vector 去乘以
link |
這個 worry embedding table,
link |
我們就會得到我們要的那個 worry embedding。
link |
sampling 這件事情會讓我們不能為分,
link |
然後呢,它可以達到 sampling 的功能,
link |
那這個解決方法就是使用 Gauss-Belsof-Max,
link |
就是當你得到這個 output distribution pi 之後呢,
link |
你把它做一個 log transform,
link |
就是 pi1 變成 log pi1,
link |
加上我們一個非常神秘的 distribution,
link |
那這個神秘的 distribution
link |
就是一樣是有四個不同的 class,
link |
我就用 g1, g2, g3, g4 來代表它。
link |
那這個神秘的 distribution 呢,
link |
它的每一個 class 的這個 probability 啊,
link |
它都是從一個叫做 Gauss-Belsof-Max
link |
01 的 distribution,
link |
那個 iid sample 出來的。
link |
所以假設你有這個 n 個 class,
link |
你就要從 Gauss-Belsof-Max 裡面
link |
然後 sample 出這 n 個不同的
link |
transform 的這個 distribution pi
link |
g of i 的這個 distribution,
link |
那得到 g of i 這個 distribution 之後呢,
link |
一樣是四個 class 的 distribution 嘛,
link |
那這個 distribution 你就可以取 arcmax,
link |
取 arcmax 的意思就是你要找說
link |
在這四個 class 裡面哪一個東西的
link |
哪一個 class 它的機率是最大的,
link |
在這個第三個 class 它的機率是最大的,
link |
所以你就得到一個這樣的 distribution。
link |
那因為這個 gampil-softmax
link |
你從這個 gampil-01 這個 distribution 裡面
link |
做 RID sample 的時候呢,
link |
所以有可能你這次 sample 出來的
link |
經過 log transform 的這個
link |
pi distribution 之後呢,
link |
gampil sampling 的這個隨機性,
link |
不是,這個 arcmax 取 arcmax,
link |
就是 gi 這個 distribution 取 arcmax
link |
它會跟你從 pi 這個 distribution
link |
不是說你用這個 distribution
link |
那你用 gampil sample next,
link |
加上 gampil 這個 nodes,
link |
就一定是這個 V3 的這個 class
link |
它是 G1 的最大的一個 class 的
link |
得到這個東西叫 gampil-softmax,
link |
因為 gampil-softmax 的這個分布啊,
link |
我們要做 sampling 的這個過程,
link |
是我們可以不用做這個 sampling,
link |
但它可以跟我們有做 sampling
link |
它得到的這個 distribution
link |
為什麼這裡 sampling 這件事這麼重要?
link |
做 argmax 到底會有什麼問題?
link |
我覺得做 argmax 這邊會有的問題就是,
link |
如果你要計算 autoencoder 裡面的參數
link |
因為當你 autoencoder 參數
link |
pi 那個 distribution 稍微變了一下,
link |
丟到接下來的 classifier 裡面啊,
link |
丟進去給 classifier 的東西
link |
包括那個 classifier 的部分,
link |
就會變成說 autoencoder 參數有變,
link |
但是最後你的 loss 是完全沒有變的,
link |
所以根本就算不出那個 gradient,
link |
所以 gradient 算出來都是零。
link |
因為你不管這邊是取 sample 還是取 argmax,
link |
就是,就算你這邊用了 compare solve max,
link |
做到一個跟 argmax 很像的事情,
link |
變成這個 distribution,
link |
但是做到跟 argmax 很像的事情,
link |
然後 with temperature scaling,
link |
那 solve max 大家都很熟嘛,
link |
把所有的這個 distribution 每個元素,
link |
然後取一個 exponential 之後,
link |
做一個 normalization,
link |
那這邊跟一般的 solve max 不一樣的,
link |
就是他在取這個 exponential 的時候,
link |
這個除以一個 temperature,
link |
那只要你的 T 這個 temperature,
link |
T 我們叫 temperature,
link |
output 出來的這個 distribution y,
link |
長得非常非常像是 one hard vector,
link |
這個 convert all solve max,
link |
然後 with temperature scaling,
link |
這個 uniform distribution,
link |
他就會比其他的 class 還要大非常非常多,
link |
我們要讓這個 g i output 出來的東西,
link |
temperature scaling,
link |
這邊出來的結果跟你 sampling,
link |
跟你做 sampling 出來的結果,
link |
去 backpropagate 到 autoencoder,
link |
autoencoder 他就可以被 update,
link |
就是 autoencoder output 出來的這個 part,
link |
我們把他做一個 log transform,
link |
iid sample 出來的這個 noise,
link |
原本經過 log transform 的 probability 之後呢,
link |
我們經過 softmax with temporary scaling 之後,
link |
非常接近 one-hot 的一個向量,
link |
在這個 vocabulary 上面的機率分布,
link |
然後其他的都是非常非常接近一個數值,
link |
直接乘到這個 embedding table 上面,
link |
原本我們如果直接取 sample softmax 的話,
link |
這邊會是一個 one-hot vector 嘛,
link |
然後剩下都是 0 的這個 one-hot vector,
link |
所以當你直接乘以這個 embedding table 之後呢,
link |
就會等於是你在這個 embedding table 做 logout,
link |
這個第三個字的 word embedding,
link |
他不完全是一個 one-hot vector,
link |
他其實是一個很接近 one-hot vector,
link |
但是他並不是 one-hot vector 的一個向量,
link |
所以呢,他最後包覆出來的這個 word embedding,
link |
他不完全是裡面最大的這個東西的 word embedding,
link |
他會摻雜一些其他字的 word embedding,
link |
我們就可以成功地做 backward regression,
link |
我們就可以成功地訓練這個 generator.
link |
Gambel softmax 來取,
link |
那 Gambel softmax 取到的 output,
link |
但不是 one-hot 的 vector,
link |
那我們把這個 one-hot vector 啊,
link |
乘以 embedding table,
link |
我們要送到 classifier 裡面的這個 embedding,
link |
那這個 embedding 丟到 classifier 裡面呢,
link |
我們就是用這個 embedding 來做 forward,
link |
經過這個 word embedding 做 backward,
link |
所以他的 gradient 就可以 backward 到
link |
這個 autoencoder 裡面,
link |
那這個就是用 Gambel softmax 來解決,
link |
你要做的事情是 sequence generation,
link |
然後你這個 sequence generation 的 output,
link |
常常會用 Gambel softmax 的方法,
link |
來讓他的 gradient 可以 propagate 到
link |
就是你也可以直接用 RL 應勸這個 generator,
link |
就是用 reinforcement learning 來訓練
link |
如果 Gambel softmax 那邊,
link |
是會 output discrete 的 token,
link |
那你可以用 Gambel softmax,
link |
來讓整個 network 還是可以 end-to-end trade,
link |
那假設你不知道 Gambel softmax 的話,
link |
可能是一個比 RL 還要簡單的做法。
link |
在做 auto encoder 這邊,
link |
就是 Gambel softmax,
link |
是 discrete 的行為的時候,
link |
生這個 adversarial sample 的方式,
link |
就是我要訓練一個 generator,
link |
然後這個 generator 做的事情,
link |
就是他要生一個 adversarial sample,
link |
那這個 generator 的目標呢,
link |
就是他要生出來的這個 adversarial sample,
link |
他可以成功的讓 classifier 他的 output 爛掉,
link |
所以原本這個 I highly recommend it,
link |
他應該會 output 出來的這個,
link |
但是你經過 generator 的 calculation 之後呢,
link |
他 output 出來的這個 positive 的機率呢,
link |
那這個 generator 的目標,
link |
我們先講一下 generator 做的事情是什麼,
link |
那 generator 他做的事情啊,
link |
他不是實際上去生一個 sequence,
link |
比較像是一個 sequence tagging test,
link |
就是他們對於 input 的每個字,
link |
他要決定他要做什麼樣的 action,
link |
包含了這個五個不同的 action,
link |
那 0 這個 action 就代表說,
link |
我對這個 token 什麼事都不要做,
link |
代表說我要 replace 一個 super word,
link |
是替換的方式是從 wordnet 裡面,
link |
super word 我有點不太知道他的意思是什麼,
link |
但我不確定 super word 的意思是什麼,
link |
是例子說什麼漢堡是一種三明治之類的,
link |
可是我覺得感覺比較像是 subordinate word,
link |
他要 replace with 這個同義詞,
link |
你要 replace with 一個 neighbor word,
link |
就是 wordnet 裡面有定義一些 neighbor word
link |
就像 elsa 跟 donkey 這樣子,
link |
原本,這個 I highly recommend it,
link |
然後丟到 generator 裡面,
link |
那他對於這個句子的每一個 token,
link |
不同 class 的一個 distribution,
link |
他用 RL 直接硬 train 這個 generator,
link |
你要 reinforcement learning 來訓練的時候,
link |
你要去定義他的 reward 是什麼,
link |
那他這邊定義的 reward 方式很簡單,
link |
這個原本的 ground truth 的
link |
所以原本的 ground truth 是 1.0 嘛,
link |
所以我們就拿這個當成 reward,
link |
然後來訓練這個 generator,
link |
那個 policy gradient,
link |
如果不知道 policy gradient 是什麼,
link |
最養生的 reinforcement learning 的方式,
link |
好,那他就直接硬 train 這個 generator,
link |
怎麼去產生一個 adversarial sample 的
link |
或是說 inference 的時候呢,
link |
現在的 input 是不是 adversarial sample,
link |
或是 audio 上用的其實都差不多,
link |
adversarial training,
link |
那所謂的 adversarial training 呢,
link |
然後生出來的 adversarial sample
link |
再加到 training data 裡面,
link |
就是不是 adversarial 的 training data,
link |
那你就拿這些 training data 呢,
link |
先去訓練一個 classifier,
link |
你就拿這個 training data 裡面的
link |
你會得到一些 adversarial training data,
link |
這個 benign 加上 adversarial training data
link |
然後去訓練一個新的 test classifier,
link |
你再拿這個原本的 benign training data
link |
去 attack 這個新的 test classifier,
link |
這個新一代的 adversarial training data,
link |
然後這些 adversarial training data
link |
再跟原本的 benign training data
link |
更新的 test classifier,
link |
比較 robust 的 test classifier,
link |
你要跑這個 attack algorithm
link |
這個 agnews 這個 dataset,
link |
光是要這個跑 testing data 裡面的
link |
attack 用 text folder,
link |
train 在這個 benign training data 裡面
link |
這個一個 epoch 大概是一分鐘啦,
link |
然後你這個跑完一個 epoch 之後
link |
這個 data 你就要 attack 十五個小時,
link |
然後再跑一分鐘的 training,
link |
然後再跑十五個小時的 attack,
link |
實際上要做 attack 的這件事情,
link |
因為最花時間的就是 attack 的步驟,
link |
projected gradient descent 之類的東西,
link |
然後找到一個 adversarial sample,
link |
projected gradient descent,
link |
然後我們找到一個 adversarial sample 之後,
link |
那我們就直接把這個 adversarial sample
link |
就是假設我有一個正常的 benign 的
link |
那這個 training data 的每一個字
link |
他都會有他對應的 word embedding,
link |
丟到這個 test file 裡面,
link |
他 forward 之後會得到一個 loss,
link |
那你把這個 loss 做 backward 之後呢,
link |
那他 backward 是 backward 到哪裡?
link |
對 word embedding 的
link |
每一個 input 的 embedding 做為一倍,
link |
那我們以 recommend 這個詞為例,
link |
我們在這個 word embedding space 裡面
link |
這個 recommend 這個 word embedding 的
link |
某一個這個 epsilon ball,
link |
就是半近似 epsilon 的一個球體裡面,
link |
這個 epsilon ball 的某一個點,
link |
然後呢,這個他的 loss 是最大的,
link |
這個 quadratic gradient descent
link |
當我們找到這個 epsilon ball 裡面
link |
這個讓 loss 最大的一個點之後呢,
link |
我們就把原本的這個 word embedding
link |
讓 loss 會是最大的 word embedding,
link |
他們各自對應的 word embedding,
link |
然後我們再拿這些 word embedding
link |
投入到這個 test code 裡面,
link |
objective 就是我們要去 minimize,
link |
用這些這個 adversarial word embedding 裡面
link |
在某一個 word 的 word embedding 附近
link |
當我們要找一個 epsilon ball 裡面
link |
使得他 loss 最大的一個點的時候,
link |
他的那個 loss 的 landscape
link |
他在每個字的 epsilon ball 裡面
link |
他的 output 不能變化太多嘛,
link |
讓他的 generalization 能力
link |
word embedding space 裡面的
link |
electrical encoding,
link |
那個 electrical encoding 最大的差別就是
link |
來做 adversarial training,
link |
一樣也是 adversarial training 的
link |
這個,你用 epsilon ball
link |
epsilon ball 裡面的某一個字
link |
當作是你的 adversarial sample,
link |
你這個 epsilon ball 的這個半徑
link |
epsilon ball 他會有的問題,
link |
hyper-rectangle 就是高維空間中的
link |
那他們的 word embed 你就取
link |
當作 adversarial symbol,
link |
那為什麼要選convex set呢?
link |
找一個adversarial symbol,
link |
那當我們這個空間是convex set的話,
link |
這個adversarial symbol
link |
所形成的最小的convex set,
link |
叫做adversarial sparse
link |
convex combination,
link |
我們現在要在這個convex top裡面
link |
找一個adversarial symbol,
link |
然後這個adversarial symbol
link |
找到的adversarial word embedding,
link |
就是在這個裡面的adversarial word embedding
link |
拿去當作adversarial symbol,
link |
它要怎麼找這個adversarial symbol,
link |
這個線性組合的coefficient,
link |
這個每一個linear coefficient
link |
然後這些coefficient加起來要是1,
link |
使得這個模型的loss會被maximize,
link |
它可以被這個式子來characterize,
link |
就是這些同義式的embedding,
link |
V of S就是它的embedding名字,
link |
這個就是它的adversarial,
link |
這是convex hull裡面的某一個點,
link |
然後我們希望這個convex hull
link |
它可以maximize模型的loss,
link |
linear combination的coefficient,
link |
然後使得這個loss可以被maximize,
link |
那它除了要maximize這個loss,
link |
這個linear coefficient的entropy,
link |
那所謂的minimize這個entropy
link |
也就是這些we're embedding的weighting,
link |
它要越接近一個one-hot vector,
link |
你替換的一定是某一個we're embedding,
link |
convex-hot裡面的任意一個字,
link |
它一定是替換成某一個embedding,
link |
所以當你加上這個coefficient的時候
link |
linear combination的weighting
link |
靠近某一個特定的字的we're embedding,
link |
在找這個zero sample的時候
link |
可以maximize這個loss的we're embedding,
link |
然後它就把這個we're embedding
link |
丟下去模型裡面做adversarial training,
link |
那這個就是ASCC這個defense方式
link |
那除了這個做adversarial training
link |
你也可以直接做adversarial data augmentation,
link |
那adversarial data augmentation
link |
就是great, terrific, fantastic, amazing
link |
對,就是你會先有一個predefined的
link |
這個input and output裡面
link |
input and output的問題
link |
跟那個半徑太大的input and output的問題是一樣的
link |
它一定會是比原本這個convex set還要大
link |
因為他們都一直強調這個convex hole
link |
因為其實說在embedded space到底長怎樣
link |
其實convex這件事情他們都沒有控制
link |
convex hole它by definition
link |
那個adversarial data augmentation
link |
那adversarial data augmentation
link |
就是你先訓練了一個unrobust classifier
link |
你拿這個classifier去attack
link |
就會得到一些adversarial training data
link |
那拿這些adversarial training data
link |
再加上原本乾淨的training data之後
link |
然後這樣子就叫做adversarial data augmentation
link |
這個就是adversarial training的
link |
因為用這個adversarial training的時候
link |
所以說我們才要attack一次就好了
link |
在testing的時候做的defense
link |
那testing的時候做的defense
link |
當它今天有一個testing data進來的時候
link |
就要想辦法把它變成不是惡意攻擊的版本
link |
discriminate probation
link |
就是它先偵測這個input是不是adversarial
link |
那今天假設進來的是一個adversarial sample的時候呢
link |
不是adversarial sample的版本
link |
第一個是一個perturbation discriminator
link |
那這個discriminator的功能呢
link |
那這個它的perturbation discriminator
link |
它就會去抽出每一個字的contextualized embedding
link |
然後假設最後一層的contextualized embedding長這樣
link |
它就拿這些最後的contextualized embedding
link |
每一個token的contextualized embedding
link |
那classification的目的呢
link |
那舉例而言這個i它沒有被perturb過
link |
那這個recommence它也已經被改過
link |
這個electra後面那個discriminator在做的事情
link |
那當這個第一個presentation discriminator
link |
每個token有沒有被perturb過的時候
link |
那下一個階段就是embedding estimator
link |
那這個embedding estimator
link |
它要去recover那個被perturb的token
link |
就是原本的那個input sequence
link |
假設某一個token它被perturb過
link |
一樣丟到一個birth initialized的模型
link |
就是它要去估計說這個mask的token
link |
然後所以它會去用一個regression head
link |
去估計出來這個embedding長什麼樣子
link |
那估計完這個embedding長什麼樣子之後
link |
你要實際上找到這個embedding
link |
對應的這個token是哪個token
link |
這個估計出來的embedding之後
link |
挑在一個既有的這個embedding tokens
link |
那這個embedding tokens裡面
link |
每個字它對應的embedding是什麼
link |
所以它其實就是一個embedding table
link |
然後它要去做kernel的logout
link |
換到原本被perturb過的那個句子裡面
link |
那把它丟到我們原本的classifier裡面
link |
它有分為training跟testing兩階段
link |
你要訓練這個perturbation discriminator
link |
跟embedding estimator
link |
construct一下一個zero sample
link |
perturbation discriminator跟embedding estimator
link |
把queen的testing data
link |
變成一個髒的perturb testing data之後呢
link |
你就會先用perturbation discriminator
link |
你就會用embedding estimator去估計說
link |
然後再經過這個embedding lookup
link |
在原本的這個token embedding course裡面
link |
最接近的那個void embedding是哪一個
link |
你才能去control對應的x2 sample
link |
去改它的inflectional motion的這個攻擊
link |
前面那個regression hat是什麼
link |
例如說768維的regression
link |
然後讓它去固定embedding是這樣
link |
這個做法聽起來真的跟electra非常像
link |
electra的perturbation跟
link |
你要看你的attack的perturbation是什麼
link |
如果你的perturbation真的就是
link |
你就是用Bird MLM做perturbation的話
link |
如果你的perturbation是同時激光攻擊
link |
它本身特色是reconstruct嗎
link |
你如果沒有reconstruct的話
link |
我直接train一個很robust的模型
link |
我都可以透過reconstruct這個步驟
link |
下一個方法叫做frequency guiding word substitution
link |
就是有人發現說NLP的evasion attack
link |
這個acquired blend of fact and fiction
link |
這是SST2這個Movie Review的Dataset裡面
link |
那他就把clever這個字改成braining
link |
他在training data裡面的
link |
frequency然後再取log之後的
link |
然後fiction換成fabrication
link |
在training data裡面都只有出現一次
link |
你的input有沒有被recept過
link |
他在training data裡面的頻率
link |
我們去算他的log occurrence
link |
這個是0 這個是7.1 這個是12.1
link |
那我們要去設一個threshold就是說
link |
舉例而言假設我定的這個threshold是
link |
當這個training data的log occurrence
link |
emodern而已 因為他在training data裡面
link |
highly,extremely,strongly這三個字
link |
這三個字呢 在training data裡面的
link |
occurrence,log occurrence分別是7.4
link |
換成extremely 選擇得到一個
link |
highly,extremely recommended這個句子
link |
adversarial 那我們要怎麼判斷呢
link |
這個test classifier裡面
link |
那這個test classifier就會output出
link |
inordinately recommended
link |
它output出來 它覺得最有可能的這個class
link |
是negative 它機率有0.76
link |
它negative這個class的機率
link |
atmospheric sample
link |
所以因為這個gamma我們假設我們定是
link |
0.75 所以它已經大於我們這個threshold
link |
inordinately recommended當作是一個
link |
這個atmospheric sample
link |
就是正常的concept class是這個
link |
classifier裡面 它就可以正確
link |
然後並且把atmospheric sample
link |
換成不是atmospheric sample的
link |
你要知道這個atmospheric sample
link |
inflectional morpheme的攻擊
link |
那inflectional morpheme應該不會有所謂
link |
偵測inflectional morpheme
link |
它還需要設這個delta跟gamma
link |
這兩個threshold 所以它也會有
link |
development set 你才能去設一個好的
link |
threshold 那這些threshold
link |
也不能保證你在test的時候會有好的結果
link |
inflectional attack 那