回覆列表
  • 1 # 機器之心Pro

    想要讓深度學習系統走向大街小巷、走進千家萬戶,就要在演算法研發階段給出系統的魯棒性檢驗。對於影象對抗性攻擊的討論正是如火如荼,攻防雙方都是妙手頻出的狀態。例如,來自 MIT 和 UC Berkeley 的兩位博士生,Anish Athalye 和 Nicholas Carlini 就接連攻破了 7 篇 ICLR 2018 接收的對抗防禦文章,指出,你們的防禦策略不過都是基於「混淆梯度」(obfuscated gradient)現象的「虛假安全感」。雖然 Ian Goodfellow 迴應稱「混淆梯度」不過是之前「梯度遮擋」(gradient masking)的老調重彈,而且聲稱「遍歷了 ICLR 8 篇對抗防禦論文」的作者是不是漏掉了我參與的 ICLR 入選論文《Ensemble Adversarial Training: Attacks and Defenses》呀?但 Ian 的回擊仍然不妨礙 Athalye 和 Carlini 成為名噪一時的攻方代表。

    影象領域的攻擊防禦如此熱鬧,是因為影象識別的應用場景直指安防、自動駕駛這類關乎生命安全的方向,而當 2017 年,當國內外業界裡,無論是雄踞一方的巨頭還是嶄露頭角的新秀,都爭先恐後地釋出「智慧音箱」,進而用跳樓價在家居語音入口這個還遠不成氣候的領域裡圈地盤的時候,學界對於語音對抗性攻擊的關注,也終於在視覺之後水漲船高了。

    比如,上文中提到的「拳打 ICLR」的博士生之一,UC Berkeley 的 Nicholas Carlini 就與其導師一起,在《Audio Adversarial Examples: Targeted Attacks on Speech-to-Text》一文中給出了對 Mozilla 實現的百度 DeepSpeech 論文的一個白箱、定向、需要直接輸入的攻擊。給定任意一個波形,甚至不必須是語音,音樂乃至無聲都可以,就能用最佳化的辦法生成一個 99.9% 相似的、但是會被語音識別系統轉寫成完全不同的另一段話的新波形。

    本文接下來,就將沿著這篇工作展開,簡單聊聊對抗樣本的分類,然後驗證一下作者提供的對抗樣本的攻擊效果。

    首先聊聊對抗樣本的分類。

    「白箱、定向、需要直接輸入」這三個修飾「攻擊」的形容詞,其實都在從攻擊的力度層面對對抗樣本進行分類。閱讀對抗樣本相關工作的時候,我們首先可以問這樣三個問題:

    1 對抗樣本的製造過程中,是否擁有模型結構及引數的知識?

    如果答案是肯定的,那麼攻擊是「白箱」攻擊。如果答案是否定的,則為「黑箱」攻擊。

    瞭解模型結構和引數,換言之瞭解模型的預測行程的過程,就能夠有的放矢地進行對抗樣本的構建,這無疑是更容易的,因此最先成功的以及當前大部分的對抗樣本都是白箱攻擊。

    是否有成功的黑箱攻擊呢?在影象領域,有,Ian Goodfellow 在 2016 年參與的一篇文章,《Practical Black-Box Attacks against Machine Learning》,就給出了一個「利用原模型生成樣本及標籤,建立合成訓練集(synthetic dataset)、利用訓練集建立原模型的替代網路(substitute network)、再利用替代網路最佳化建立對抗樣本」的解決方案。

    但是在語音領域,尚沒有成功的黑箱攻擊。本文就是一個白箱攻擊,攻擊的物件是 Mozilla 去年年底開源的語音識別模型 DeepSpeech 0.1.0 版本。DeepSpeech(GitHub: https://github.com/mozilla/DeepSpeech)是對百度矽谷 AI 實驗室(SVAIL)2014 年的論文《Deep Speech: Scaling up end-to-end speech recognition》的一個 TensorFlow 實現,在 LibriSpeech clean test corpus 上達到了 6.0% 的詞錯率(WER)。

    插一句,看到這裡還是很唏噓的,百度是最早站在深度學習研究一線的 BAT 了,這篇文章的作者列表裡赫然有當年的百度 AI 研究總負責人吳恩達和矽谷 AI 實驗室總負責人 Adam Coates。然而去年一年裡,吳恩達、Adam Coates 以及吳恩達的繼任者林元慶已經先後離開百度,百度的 AI 研究力量,也隨著李彥宏「從沒說過 All in AI」的宣言,散落天涯了。

    2 對抗樣本能保證模型錯誤的型別嗎?

    如果答案是肯定的,那麼進行的是定向(targeted)攻擊,否則則是非定向(untargeted)攻擊。

    具體一點解釋,對於非定向攻擊來說,能讓一個區分動物的模型把貓識別成任何其他動物,都算是攻擊成功。而對於定向攻擊來說,構建對抗樣本的時候的目標要更加明確:例如,目標是讓模型把貓識別成狗,那麼如果模型把貓識別成了兔子,仍然要說定向攻擊是失敗的。

    本文是一個定向攻擊,如下圖所示,給定一個聲波 x,可以造出一個干擾項 δ,讓 x+δ 能夠被機器識別成指定的、與 x 不同的標籤。

    不過!Mozilla DeepSpeech 在今年 1 月底更新了 v0.1.1,進行了一些依賴項調整,重新訓練了引數,但並沒有改動主要結構。然而在後文,當我用新版本測試作者給出的對抗樣本的時候,發現攻擊樣本已經不能「指哪兒打哪兒」地篡改語音內容了,而是會輸出一段亂碼,換言之,一旦白箱設定稍有收縮、引數改動,定向攻擊就會退化成非定向攻擊。

    3 對抗樣本可以進入現實場景嗎?

    這個問題聽起來非常寬泛,但其實是衡量對抗樣本威脅性的一個重要指標。

    如果答案是否定的,樣本需要直接作為輸入進入模型,那麼其威脅性是有限的。例如本文中的音訊樣本,只能直接以 WAV 格式交給模型,才能有攻擊效果;如果用播放器播放再用麥克收音,攻擊就完全失效了——不只是從定向攻擊退化成非定向攻擊,而是完全沒有攻擊效果。

    如果答案是肯定的,那麼語音攻擊的樣本就可以在不知不覺中喚醒你的語音助手然後進行特定的操作。去年浙江大學的《DolphinAttack: Inaudible Voice Commands》,就利用了諧波以及麥克風和人耳接受聲音訊率的範圍不同,實現在人感知不到的情形下透過麥克風喚醒 Siri、Google Assistant 和 Alexa 等系統並執行相應語音命令的操作。當然,考慮到這類攻擊必須利用專業裝置、裝置距離麥克風不超過 1.5 米,以及供應商可以在系統端透過設定允許頻率範圍進行防禦等等特點,這類攻擊真實的「威脅性」並沒有那麼高,但是它確實是可以進入現實場景的攻擊。

    影象領域裡進入現實場景的樣本攻擊就更多了,有可以打印出來放在待識別物體周圍擾亂分類的貼紙,也有哪怕不是直接進入模型,而是被攝像機捕捉,也仍然能進行攻擊的畫素改變技術。

    總之,白箱還是黑箱、是否定向、是否可以進入現實場景,是根據攻擊的威脅性對對抗樣本進行分類的三個相對重要的角度,除此之外,也有是否對壓縮魯棒、是否可遷移等其他衡量標準,大家可以閱讀論文做詳細瞭解。

    解釋完一連串的形容詞之後來看看對抗樣本的測試攻擊效果。

    作者在個人網站上(https://nicholas.carlini.com/code/audio_adversarial_examples/)公佈了一些對抗樣本的樣例。人耳聽起來幾乎一樣的一段語音,(聽起來都是一個帶著咖哩口音的大叔在說「that day the merchant gave the boy permission to build the display」,只不過後兩個樣本中背景裡有輕微的雜音)會被系統分別識別為三句截然不同的話。

    我利用 Google Colab 薅了一點點 GPU 資源測試了下 DeepSpeech 對攻擊的反應。關於 Google Colab 的用法,可以參考之心之前的文章:Colab詳細使用教程。

    首先把上面三個音訊檔案放在 Google Drive 上,並透過右鍵選擇「Get Sharable Link」拿到對應的 id(連結中 id= 後面的部分)。

    然後開一個 Colab Notebook,在選項欄 Edit ==》Notebook Setting 裡選擇 GPU。

    安裝 DeepSpeech 包:

    下載模型 0.1.0 版本:

    注意,最新版是 0.1.1,作者用的版本是 0.1.0,不要下錯。

    驗證模型檔案的 MD5 sum:

    進行授權登入以載入資料:

    載入資料:

    執行預訓練好的模型進行推斷:

    注意,不同於 github 上給的命令,引數順序是:模型、音訊檔案、字母表、lm(非必須)、trie(非必須)

    引數說明:

    extra0a.wav 識別結果:還是有一點不準的。

    extra0b.wav 識別結果:

    extra0c.wav 識別結果:

    復現了對抗結果。

    接下來我們試驗一下 v0.1.1 對對抗樣本的反應。

    新版本是一個針對這篇論文進行調整的模型嗎?版本的主要改動說明中並未對此進行說明,但是,版本的提交者確實是知曉這篇論文的存在的,他提出了一個至今仍然開放的 issue(GitHub: https://github.com/mozilla/DeepSpeech/issues/1179),但是並沒有人迴應。

    讓我們看看新版本的效果:

    extra0a.wav 識別結果:分割好了一點。

    extra0b.wav 識別結果:亂碼了。

    extra0c.wav 識別結果:仍然是亂碼。

    模型結構未變,引數變了,對抗樣本就從定向變成非定向了。

    出於好奇,我還拿訊飛聽見的英文聽寫功能(beta 版)測試了一下:對抗並沒有效果,而且識別效果也還不錯。

    總體而言,作者能夠對一個固定結構、固定引數的模型實現有效的白箱定向攻擊,但是這種攻擊是不可遷移、不可擴充套件的。文章的貢獻在於在語音方面開始了對「定向」的探索。因為不同於自動駕駛等視覺場景,對於現階段的語音模型與系統來說,非定向攻擊並沒有太大的威脅性。在自動駕駛場景裡,一個能夠讓「禁行」、「急轉彎」路牌無法被準確識別的非定向攻擊,就會造成嚴重的後果。但是在語音系統中,非定向攻擊造成的後果不外乎「語音助手變成了語音廢柴」,並不會威脅使用者的隱私、財產或者生命安全,從「人工智障時代」一路走來的使用者對這種程度的漏洞還是有相當的寬容度的。因此,能夠對語音系統產生影響,推動其進步的對抗樣本必然是以定向為基礎的。我們也期望有更多以定向為基礎,穿透語音識別系統中不同模型的整合,更加深入語音識別本質的,對抗樣本攻擊的出現。

  • 中秋節和大豐收的關聯?
  • 華為手機系統更新安裝失敗怎麼辦?