# Attack 種類 請回顧第一週提到的 attack 的種類。 前幾週提到的 attack 都是對 Test data 做手腳,又叫做 evasion attack,今天要講到的是對 train data 做手腳,又叫做 poison attack。 ## Backdoor attack 老師說 Backdoor attack 是 poison attack 的一種,但是大多文獻有些並沒有明確區分開來。 老師認為有「trigger」行為的才算 Backdoor attack,也就是 training data 中有對某些 data 加上「trigger」後改掉 label,例如加了「黃色紙條」的 STOP sign。 ## 分類方法 這週的論文用了六種分類方法: - Outsourcing attack - Pretrained attack - Data collection attack - Collaborative learning attack - Post-deployment attack - Code poisoning attack 下面會一一介紹。 不過老師有說也有別種分類方法,是「class 類別」對上「trigger 類別」: - 一對一 - 專門讓一種 class 加上特定一種 trigger 後變成別的 class - 一對多 - 專門讓一種 class 加上多種 trigger 後變成多種別的 class - 多對一 - 讓多種 class 加上特定一種 trigger 後變成別的 class - 多對多 - 讓多種 class 加上多種 trigger 後變成多種別的 class --- # Outsourcing attack / dirty-label attack 受害者只有訓練資料,但是缺乏訓練資源,人才,只好讓其他 provider 來幫你訓練。 >通常會提供你要什麼模型,要怎樣的參數,或者懶人一點說要求多高的準確率 >老師說這確實挺方便的 但就是因為這樣,你不知道 provider 有沒有偷加了 triggered 圖片;這又通常叫做 dirty-label attack。 這種攻擊是最簡單的,因為攻擊者可以完全的存取模型。 # Pretrained Attack 現在很常見有人在網上發佈 pretrained 的 model 供其他人使用,但就有可能有不肖人士散步的是帶有後門的模型。 這樣其他人做 fine tune 的時候就有可能會將 trigger 的特徵傳下去,讓你的 STOP sign 有可能變成速限標誌。 # Data Collection Attack 使用者下載公開的資料,此時這些資料就有被 triggered 的可能。 但是通常這個會有點難度,因為要 triggered 的圖片不可以讓肉眼辨識出來,並且因為攻擊者無法控制存取整個流程,所以會需要一些額外的知識跟攻擊目的。 >想要成功的話通常會同時需要 clean label attack >clean label attack 下面會介紹 # Clean Label Attack \[Shafahi et al. NeurIPS’18\] 叫做 Clean Label Attack 是因為肉眼看來這些圖片都跟他的 label 有對到。 但是實際做 test 的時候,就會有一個(多個)類別被辨識成其他特定一類。 例如講義上介紹的,看起來像青蛙的圖片 label 就是青蛙,像飛機的圖片 label 就是飛機,但是 tesing 的時候飛機總是被認成青蛙。 方法就是產生那些有毒的圖片後,丟給 model 做訓練,之後模型就中毒了。 >根據不同形式的訓練,中毒情形也不同 >例如對一個健康的 pretrained model,fine tune 時加入有毒圖片,中毒情形尤鉅 ## Generating Poisoned Data $$ \mathbf{p}=\underset{{\mathbf{x}}}{\text{argmin}}||f(\mathbf{t})-f(\mathbf{x})||_2+\beta ||\mathbf{x}-\mathbf{b}||_2 $$ 其中 - $\mathbf{b}$ 是我們產生有毒圖片的 Base - $\mathbf{t}$ 是我們想要模型犯錯的圖片 - 希望模型把 $\mathbf{t}$ 認成 $\mathbf{b}$ - $f(\mathbf{t})$ 就是模型算完後讀 logit 值 所以上面公式就是希望產生一個 $\mathbf{p}$,他的輸出 logit 跟目標 $\mathbf{t}$ 的 logit 很像,但又跟 $\mathbf{b}$ 距離不會差太遠。 ## 概念效果 假設 $\mathbf{b}$ 是青蛙,$\mathbf{t}$ 是飛機。 因為因為這樣會產生一張 label 是青蛙,但是他的輸出 logit 跟飛機很接近的圖片,這樣一來 Dicision boundary 就會沒辦法很好的區分出青蛙跟飛機。 或者說我們人工的把 boundary 從原本的樣子,把他拉到涵蓋一部份飛機的區域。 ## 實驗情境 有兩種情境,Transfer Learning 跟 End-to-end re-training。 以下兩個情境都是先有一個攻擊者 train 好的 model,然後再用這個 model 產生 1 張有毒圖片,接著將這一張毒圖片加進訓練集中。 - Transfer Learning:這種情境比較簡單 - 因為 Transfer Learning 凍結了最後一層以外的權重,但通常 decision boundary 大多在最後 1 層全連接層 - 此時如果拿有毒圖片做 fine tune,就很容易讓健康的 boundary 發生改變 - 例如該篇 paper 的實驗中,Transfer Learning 可以 100% 攻擊成功 - 並且模型還對攻擊成功的圖片持有非常高的 confidence - End-to-end re-training:這種情境比較困難 - 由於是將整個 model 重新訓練,所以當初用來產生有毒圖片的 $f$,跟現在重新訓練後得到的 $f$,是不太可能會一樣的,因此在實驗上的效果沒有很好 - 根據作者的實驗圖片,可以看到在 clean model (攻擊者自己的模型) 上, poison 圖片因為被產生的分長像 target,所以幾乎跟 target 重疊 - 但是在重訓好的模型上,可以看到 target 跟 base 除了有產生一些偏移,但是大都位在中心附近 - 但是 poison 圖片卻重新回到了靠近 base 的地方 ## 浮水印圖片 而作者解決 End-to-end 的方法也很暴力,就是換種有毒圖片,叫做浮水印 (Watermarked) 圖片,產生的方式也很直覺: $$ \mathbf{p}=\gamma\cdot\mathbf{t}+(1-\gamma)\cdot\mathbf{b} $$ 就是看 $\mathbf{b}$ 要參雜多少比例的 $\mathbf{t}$。 另外作者同時還搭配「Multiple poison instance attacks」,也是很直覺的技巧,加多一點有毒圖片,吃多一點毒,就比較容易中毒了。 # Malare Attack 另一種 Data Collection Attack。 背景是有一家防毒軟體公司,想要蒐集各種好壞軟體的 binaries,來去讓 model 學會哪樣會是健康軟體哪樣是有毒軟體。 那麼這時候攻擊者就會對他提供的健康軟體加入某些 pattern 或 structure,model 學到之後,只要攻擊者也在他的有毒軟體加上那些 pattern 或 structure,model 就也會以為是健康軟體. 也就是跟上面相同的概念,把 decision boundary 挪移。 # Image Scaling Attack Xiao (2019) - Camouflage Attacks on Image Scaling Algorithms 也是另一種有趣的 Data Collection Attack。 通常做訓練的時候,會把圖片做「Scaling」,並且通常是由某個「Scaling Function」來達成。 所以這篇的作者就是就是對這個 Scaling Function 動手腳,他設計了一個演算法將未縮放的圖片跟縮放的目標圖片做結合,例如 56x56 的數字 8 跟 28x28 的數字 6,產生一張有毒的 56x56 肉眼看起來像數字 8 的圖片。 但是這個有毒圖片丟進 Scaling Function 會變成數字 6,不過他的 label 依舊是原本的 label 數字 8。 # Collaborative learning attack 老師說 Collaborative 泛指所有的 Distributed Learning。 例如常見的 Federated Learning,有個主要發起人提供一個 global server,下放一個 model 的結構,然後開放很多 clients 上傳使用自己的資料訓練後的一些結果,例如 gradient 等等,然後中央 server 會 aggregate 這些資料。 起初的目的是為了保護某些 client 訓練資料的隱私,但是這就有可能讓攻擊者透過上傳有毒資料進行攻擊。 ## Distributed Backdoor Attack 這種攻擊善用了 Distributed 這個特性。 如果只有一位攻擊者想要在圖片放入多種 trigger,那麼他很有大的機率會被「Detect」到,下面會介紹如何 detect。 但如果今天可以有很多位攻擊者協同,那麼就可以一人負責塞一種 trigger,降低被偵測到的機率,且也更容易產生更大的效果。 # Post-deployment attack 在模型發佈後做的攻擊。 - Weight tamper attack - 直接改 model 的 weight,這個比較偏向軟體層面。 - Bit flip attack - 直接改 memory 裡面的某個 bit,這個比較偏硬體的部分。 但是這兩種想要成功非常困難,因為需要取得系統的權限來達到該種程度的修改。 不過高風險高報酬,一旦成功,幾乎防不了,因為就是直接底層上修改內容了。 # Code poisoning attack 攻擊者上傳有毒的 ML code。 通常攻擊者會設計特定的 loss function,讓同時提升攻擊者希望的某個目標。 但是這也很難,因為攻擊者不能確定使用者用了怎樣的資料,或是用在怎樣的模型上面。 # Trigger 的多樣性 Trigger 除了有那種在定點放置小正方形的 Static Trigger,還有其他類似浮水印效果的 Dynamic Trigger,Dynamic 就更難偵測。 此外也可以設計出一種 Trigger 對不同 class 有不同效果,例如同種 Trigger 可以讓蜜蜂跟高鐵都判定成金魚。 ## Model Wattermarking 有壞處,當然也可以用在好處。 可以利用一個 model 被「觸發 triggered」的時機或情形,來判別該 model 是你設計的 model。 # Defense 以下防禦方法只適用於,防禦者可以完全存取訓練資料的時候。 ## Discrete Cosine Transformation / DCT 將圖片做 Discrete Cosine Transformation,會發現不同種類的 backdoored image 有不同的 Frequency pattern。 一旦偵測到某些 pattern 就可以剔除掉那些圖片。 ## Activation Pattern 有被放置 backdoor 的圖片,在 model 中的 activation pattern 跟沒有放置的會不一樣。 >就是中間權重算好分數後的激活函數,在兩種圖片上運作方式通常會很不一樣 >例如 ReLU 可能就是有 backdoor 的話某個區塊偏好 0,沒 backdoor 則是大於 0 所以可以對每張圖片的 Activation pattern 做 clustering,看看是不是真的可以區分出有毒跟沒毒的圖片。 但是使用的時候也挺受限的,因為分群的時候不可能總是完整的分出有毒或沒毒,有可能只是單純有兩種不同特徵的圖片造成了兩種 activation pattern ## Defense from Model Analysis 這個情境是有個壞人製造了一種 trigger,他可以讓所有的 class 加上這個 trigger 後都變成特定 class。 >上面的多對一 這篇 paper 他們的結果是: - 有被 triggered 圖片訓練的 model,其所有 class 到 target class 的「距離」會比較小 這個距離是指改變的量。 所以論文的他們的實驗,他們對一個中毒的 model 進行「反向工程」: - 計算出讓「所有」圖片會辨識成第 $i$ 種 class 所需的最少量「距離」的 trigger 圖片 - 檢查這些圖片有沒有某些「距離」特別小的,或是有特殊 pattern 的 用這個方法他們真的就可以偵測出模型有沒有中毒,並且中毒的目標是第幾 class。 --- # Robustness Statistics 上面提到的防禦方法,都是「偵測」有沒有中毒,或是圖片有沒有毒。 現在要介紹的是另一種方法,改成希望 model 對有毒圖片有「抵抗力」,不會因為一些 noise 而產生劇烈的變化結果。 ## Classic Parameter Estimation 對於沒有加入 noise 的 1D 高斯函數,可以透過計算得到平均值跟標準差: $$ \frac{1}{N}\sum_{i=1}^{N} X_i\rightarrow \mu $$ $$ \frac{1}{N}\sum_{i=1}^{N} (X_i-\bar{X})^2\rightarrow\sigma^2 $$ 但如果加了 noise 就不行。 ## Assumption on Noise 在介紹如何處理有 noise 的情況,我們先給予 Assumption。 我們下面都會說 Adversary 只能最多有 $\epsilon$ 比例為有 noise 的,或者說「corrupted」的。 ## Total Variation Distance 並且我們介紹我們希望的目標,Total Variation Distance。 $$ d_{TV}(f(x), g(x))=\frac{1}{2}\int_{-\infty}^{\infty}\left|f(x)-g(x)\right|dx $$ 我們希望用某個方式「估計的」高斯分佈,跟理論上的高斯分佈,要滿足: $$ d_{TV}(f(x), g(x))\le O(\epsilon) $$ 其中 $f$ 是我們估計的, $g$ 是理論上的。 >其實相反也行 ## Median Absolute Deviation / MAD 如果直接用原始計算平均值跟標診差的方式,遇到有 noise 就會壞掉。 但是如果改成用 Median 跟 MAD 分別計算平均值跟標準差,就不會有問題,可以滿足上面的 $d_{TV}$。 $$ \hat{\mu}=\text{median}(X),\ \hat{\sigma}=\frac{\text{MAD}}{\phi^{-1}\left(\frac{3}{4}\right)} $$ MAD 可以看[維基百科的例子](https://en.wikipedia.org/wiki/Median_absolute_deviation#Example),直白來說就是「偏差值的絕對值」的「中位數」,而偏差值是將每個值減去中位數所得。 ## 證明 1 首先我們先證明: $$ \text{Pr}[|\text{med}(S)-\mu|>t\sigma]\le 2\text{exp}\left(-2n(\phi(t)-\frac{1}{2}-\epsilon)^{2}\right) $$ 其中 S 是我們採樣到的 $x$ 值集合,是 $\epsilon$-corrupted,size 為 n,並且 $t\ge \phi^{-1}(\frac{1}{2}+\epsilon)$ 別忘記標準高斯函數的 CDF 和他的反函數: $$ \phi(t)=\underset{X\sim \mathcal{N}(0,1)}{\text{Pr}}[X\le t] $$ > $phi(t)$ 得到的是一個機率 > $phi^{-1}(t)$ 得到的是一個代表標準高斯上的值 首先我們可以知道,med($S$) 最大就是 S :::danger 待補 ::: ## Tukey Median 如果對每個維度做一次上面 1 維的統計,誤差會從 $O(\epsilon)$ 變成 $O(\epsilon \sqrt{d})$。 所以聰明的人們開發了拓展到高維度高斯用的 Median,Tukey Median。 他會對每個點算出一個「Depth」 $$ \text{depth}(S,\eta)=\inf_{||v||_2=1}\frac{|\{X\in S:\left\langle X-\eta, v\right\rangle\ge 0\}|}{n} $$ 上面翻成白會來說就是,對 $S$ 的每個點 $\eta$: - 從「通過該點 $\eta$」的「每個超平面 $v$」中,找到一個平面 $v$ - $v$ 在這裡是超平面的法向量,$\left\langle X-\eta, v\right\rangle\ge 0$ 代表每個點到 $\eta$ 的向量跟法向量的內積大於等於 0,或者說從 $S$ 中的點,把內積大於 0 的點蒐集起來 - 然後除以總共點的數量 $n$,得到 - 該平面可以讓最多的點分在其中一邊,另一邊最少點 - 最少點的比例,就是該點的「Depth」 - 雖然上面的式子好像看不到相關操作的符號:) 所以如果超平面的點在超維空間中位於邊緣,那麼他的「Depth」就會最小;反之如果位於較中心的點,「Depth」就會比較大。 而我們的 Tukey Median 就是求得深度最深的點,也就是最為中心的點: $$ \text{Tukey}(S)=\underset{\eta}{\text{argmax}}\text{ depth}(S,\eta) $$ ## NP-hard 雖然用 Tukey median 來去算上面提到的 MAD,確實滿足 $O(\epsilon)$ 的要求,但是要找到這樣的解是一個 NP-hard 的問題。 # Efficient Algorithm in High Dimensions :::danger 待補 :::