“知物由學”是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。“知物由學”希望通過一篇篇技術乾貨、趨勢解讀、人物思考和沉澱給你帶來收穫的同時,也希望開啟你的眼界,成就不一樣的你。當然,如果你有不錯的認知或分享,也歡迎通過郵件(zhangyong02@corp.netease.com)投稿。
以下是正文:
對於很多計算機程式,在黑客眼中,他們不是想享受這些程式提供的服務,而是想如何利用這些程式獲得一些非法的收入。帶黑帽子的黑客通常會利用程式中最微小的漏洞進入系統,竊取資料並造成嚴重破壞。
100%真正的黑客
但由深度學習演算法驅動的系統應該可以避免人為干擾吧?黑客如何通過神經網路訓練TB量級的資料?
但,事實證明,即使是最先進的深層神經網路也很容易被愚弄。用一些小技巧,你可以強迫神經網路顯示你想要的任何結果:
我修改了這張貓的圖片,以便它被認為是烤麵包機。
因此,在你啟動一個由深度神經網路打造的新系統之前,你需要了解如何攻破它們以及如何保護自己免受攻擊。
神經網路作為安全警衛
假設我們執行了一個像Ebay這樣的網站,在我們的網站上,我們希望阻止人們銷售違禁物品,例如活動物甚至一些野生的保護動物。
如果你擁有數百萬級別使用者,那麼實行這些規則就很困難。你可以聘請數百人手工審查每一個拍賣物品,但這意味著很高的成本。相反,我們可以使用深度學習來自動檢查違禁物品的拍賣照片,並標記違反規定的拍賣照片。
第一步,我們需要從這個場景中帶著問題走出來,我們可以發現,這個問題其實就是一個典型的影像分類問題。為了達到目的,我們將訓練一個深層卷積神經網路,告訴什麼是違禁物品什麼是合法的物品,然後我們將它執行我們網站上,來保證網站規則能夠有效的實施。
首先,我們需要一個過去拍賣清單的數千個影像的資料集。我們需要合法和違禁物品的影像,以便我們可以訓練神經網路來區分它們:
為了訓練神經網路,我們使用標準的反向傳播(BP)演算法。我們通過一個圖片,傳遞該圖片的預期的結果,然後遍歷神經網路中的每個圖層,稍微調整它們的權重以使它們在為該圖片生成正確輸出方面表現的更好一些:
我們用數千張照片重複數千次,直到模型能夠準確地產生正確的結果。最終我們可以打造一個可靠的用於影像分類的神經網路:
注意:閱讀下文你需要了解卷積神經網路的原理,如果你想了解卷積神經網路如何識別影像中的物件,請參考其他資料。
但事情並不像看起來那麼簡單...
卷積神經網路是用於影像分類的最受歡迎的模型。無論它們出現在影像中的哪個位置,它們都可以識別複雜的形狀和圖案。在許多影像識別任務中,它們的效能可以超過常人的判斷。
有了這樣的強大的模型,將影像中的幾個畫素更改為更暗或更亮應該不會對最終預測產生很大影響吧?當然,它可能會稍微改變最終的預測,但它不應該將影像從“違禁”轉換為“合法”。
我們期望的是:對輸入照片的小改動只會對最終預測產生微小的變化。
但在2013年的一篇名為神經網路的神奇屬性的論文中,人們發現這並非總是如此。如果你確切的知道改變那些畫素點可以使影像最大可能的發生改變,你就可以故意迫使神經網路對給定的圖片做出錯誤的預測,而圖片的外觀改變的並不是很多。
這意味著我們可以有意地製作一張圖片,該圖片顯然是一種被禁止的專案,但卻完全愚弄了我們的神經網路:
為什麼會這樣?機器學習分類器的工作原理是找出它試圖分辨的東西的分界線。以下是在圖表上顯示的一個簡單的二維分類器的示例,該分類器將紅點(合法)與綠點(違禁)分開:
現在,該分類器的可以做到100%的正確率。找出一條線將紅點和所有綠點完美的分開。
但是,如果我們想誘使它將一個紅點誤分類為綠點,該怎麼辦?
如果我們在邊界旁邊的紅點的Y值上新增一小部分,我們可以將它簡單地推到綠色區域:
因此,要欺騙一個分類器,我們只需要知道從哪個方向來推動點越過線。如果我們不想過於狡猾,理想情況下我們會盡可能少地提出這一點,但理想總歸是理想情況,黑客通常不會再理想情況下進入。
在使用深度神經網路的影像分類中,我們所分類的每個“點”是由數千個畫素組成的整個影像。這給了我們數以千計的可能值,我們可以通過調整這些數值來突破決策線。如果我們確保以對人類來說不太明顯的方式調整影像中的畫素,我們可以欺騙分類器而不會使影像看起來被改動。
換句話說,我們可以對一個物體進行真實拍攝,並且非常輕微地改變畫素,以便影像可以完全欺騙神經網路,使其認為影像是其他東西:
把一隻貓變成烤麵包機,基於網路的Keras.js演示的影像檢測結果
如何欺騙神經網路
我們已經討論過訓練神經網路來分類照片的基本過程:
1. 利用照片訓練神經網路。
2. 檢查神經網路的預測,看看其效能。
3. 使用反向傳播調整神經網路中每層的權重,使最終預測逐漸接近正確答案。
4. 用幾千張不同的訓練照片,重複步驟1-3。
但是,如果不是調整神經網路層的權重,而是調整輸入影像本身,直到我們得到我們想要的答案為止呢?
那麼讓我們把已經訓練好的神經網路再訓練一遍。但讓我們使用反向傳播來調整輸入影像而不是神經網路圖層:
以下是新演算法:
1. 利用照片訓練神經網路。
2. 檢查神經網路的預測,看看其效能。
3. 使用反向傳播調整使用的照片,使最終預測逐步接近我們想要得到的答案。
4. 用相同的照片重複步驟1-3幾千次,直到網路給到我們理想的答案。
在這之後,我們將擁有一個影像,可以在不改變神經網路內部的任何東西的情況下愚弄神經網路。
唯一的問題是,通過隨意調整單個畫素,對影像的更改可以太過明顯,以至於你會看出它們。他們會出現變色斑點或波浪區域:
你可以看到貓周圍的綠色變色斑點和白色牆壁上的波浪圖案。
為了防止出現這些情況,我們可以為我們的演算法新增一個簡單的約束。被黑客入侵的影像中的任何一個畫素都不能從原始影像中改變很多,比如0.01%。這迫使我們的演算法以一種愚弄神經網路的方式來調整影像,而不會讓它看起來與原始影像太不同。
下面是我們新增該約束時生成的影像的樣子:
即使這幅影像看起來與我們一樣,它仍然愚弄了神經網路!
Let’s Code It!
首先我們需要一個預先訓練的神經網路來愚弄。我們不是從頭開始訓練,而是使用Keras,Keras是深受歡迎的深度學習框架,它帶有幾個預先訓練好的神經網路。我們將使用Google的Inception v3深度神經網路的副本,該網路已經過預先訓練,可以檢測1000種不同型別的物件。
Keras中的基本程式碼使用這個神經網路來識別圖片中的內容。在執行它之前,確保你已經安裝了Python 3和Keras:
當我們執行它時,它正確地檢測到波斯貓的形象:
$ python3 predict.py
This is a Persian_cat with 85.7% confidence!
現在讓我們開始調整影像,直到它能夠愚弄神經網路,讓神經網路認為這隻貓是一個烤麵包機。
Keras中沒有內建的方式來訓練輸入影像,所以我不得不手動編碼訓練步驟。
程式碼如下:
圖為部分程式碼
如果我們執行它,它最終會生成一個可以欺騙神經網路的影像:
$ python3 generated_hacked_image.py
Model's predicted likelihood that the image is a toaster: 0.00072%
[ .... a few thousand lines of training ....]
Model's predicted likelihood that the image is a toaster: 99.4212%
注意:如果你沒有GPU,則可能需要幾個小時才能執行。如果你確實已經使用Keras和CUDA正確配置了GPU,則執行時間不應超過幾分鐘。
現在讓我們再次測試通過原始模型執行鑑別這張經過技術更改的圖片:
$ python3 predict.py
This is a toaster with 98.09% confidence!
我們成功的欺騙了神經網路,認為貓是烤麵包機!
我們可以用黑客技術生成影像做些什麼呢?
我們這樣篡改影像被稱為“產生敵對的例子”。我們故意製作一段資料,以便機器學習模型將其誤分類。這是一個巧妙的技巧,但為什麼在現實世界中這很重要?
研究表明,這些被黑客篡改的影像具有一些令人驚訝的特性:
即使將它們列印在紙上,被篡改的影像仍然可以欺騙神經網路!因此,你可以使用這些被黑客篡改的影像來欺騙物理相機或掃描器,而不僅僅是直接上傳影像檔案的系統。
欺騙一個神經網路的影像往往也會欺騙其他神經網路,如果他們接受類似資料的訓練,就會完全不同的設計。
所以我們可能會對這些被黑客入侵的圖片做很多事情!
但是,我們如何建立這些影像仍然存在很大的侷限性!因為我們要想攻擊就需要直接訪問神經網路本身。因為我們實際上生成圖片的過程,就需要神經網路的參與,所以我們需要它的一個副本。在現實世界中,沒有公司會讓你下載他們訓練的神經網路的程式碼,所以這意味著我們不能攻擊他們嗎?
NO!研究人員最近表明,你可以訓練自己的神經網路來反映另一個神經網路,通過探測它來了解它的行為。然後你可以使用你的替代神經網路來生成被黑客入侵的圖片,這些圖片仍然會欺騙原始網路!這被稱為黑盒攻擊。
黑盒攻擊的應用是無限的,這裡有一些例子:
1. 自動駕駛汽車看到停車標誌誤認為綠燈,這可能會導致車禍!
2. 欺騙內容過濾系統讓非法內容通過。
3. 欺騙ATM檢查掃描器,例如支票上的筆跡。
而這些攻擊方法並不僅限於影像。你可以使用相同型別的方法來處理其他型別資料的分類器。例如,你可以欺騙病毒掃描程式將你的病毒識別為安全程式碼!
我們如何保護自己免受這些攻擊?
所以現在我們知道有可能存在欺騙神經網路(以及其他的機器學習模型)的事情,我們又該如何防禦呢?
簡短的回答是,沒有人知道如何完美防禦。防止這些型別的攻擊仍然是一個正在進行的研究領域。瞭解最新該領域發展的最好方法是閱讀Ian Goodfellow和Nicolas Papernot的cleverhans部落格,他們是該領域最有影響力的兩位研究人員。
但是到目前為止,我們知道一些關於這方面的情況:
1. 如果你擁有大量被黑客篡改的影像,並將其納入未來的訓練資料集中,這似乎會使你的神經網路更能抵禦這些攻擊。這就是所謂的對抗訓練,這可能是現在考慮採用的最合理的防禦方法。
2. 還有另一種有效的方法稱為Defensive Distillation,你可以訓練第二個模型來模擬你的原始模型,但是這種方法是全新的而且相當複雜的。
3. 幾乎所有研究人員迄今為止嘗試過的其他想法都未能有效預防這些攻擊。
由於我們還沒有最終防禦方案,所以我們應該考慮到底如何確定使用神經網路的場景,以便減少這種攻擊會對你的業務造成損害的風險。
文中原始碼可關注網易雲易盾“yidun_163yun”回覆“原始碼”獲取~
附錄:
1.論文:神經網路的神奇屬性。
2.預先訓練好的神經網路。
3.訓練自己的神經網路來反映另一個神經網路。
4.Defensive Distillation。