知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络
?本文由? 網(wǎng)易云 發(fā)布。
?
“知物由學(xué)”是網(wǎng)易云易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學(xué)習(xí)才知道事物的道理,而后才有智慧,不去求問就不會知道。“知物由學(xué)”希望通過一篇篇技術(shù)干貨、趨勢解讀、人物思考和沉淀給你帶來收獲的同時,也希望打開你的眼界,成就不一樣的你。當(dāng)然,如果你有不錯的認(rèn)知或分享,也歡迎通過郵件(zhangyong02@corp.netease.com)投稿。
?
以下是正文:
?
對于很多計算機程序,在黑客眼中,他們不是想享受這些程序提供的服務(wù),而是想如何利用這些程序獲得一些非法的收入。帶黑帽子的黑客通常會利用程序中最微小的漏洞進入系統(tǒng),竊取數(shù)據(jù)并造成嚴(yán)重破壞。
?
?
100%真正的黑客
?
但由深度學(xué)習(xí)算法驅(qū)動的系統(tǒng)應(yīng)該可以避免人為干擾吧?黑客如何通過神經(jīng)網(wǎng)絡(luò)訓(xùn)練TB量級的數(shù)據(jù)?
?
但,事實證明,即使是最先進的深層神經(jīng)網(wǎng)絡(luò)也很容易被愚弄。用一些小技巧,你可以強迫神經(jīng)網(wǎng)絡(luò)顯示你想要的任何結(jié)果:
?
?
我修改了這張貓的圖片,以便它被認(rèn)為是烤面包機。
?
因此,在你啟動一個由深度神經(jīng)網(wǎng)絡(luò)打造的新系統(tǒng)之前,你需要了解如何攻破它們以及如何保護自己免受攻擊。
?
神經(jīng)網(wǎng)絡(luò)作為安全警衛(wèi)
?
假設(shè)我們運行了一個像eBay這樣的網(wǎng)站,在我們的網(wǎng)站上,我們希望阻止人們銷售違禁物品,例如活動物甚至一些野生的保護動物。
?
如果你擁有數(shù)百萬級別用戶,那么實行這些規(guī)則就很困難。你可以聘請數(shù)百人手工審查每一個拍賣物品,但這意味著很高的成本。相反,我們可以使用深度學(xué)習(xí)來自動檢查違禁物品的拍賣照片,并標(biāo)記違反規(guī)定的拍賣照片。
?
第一步,我們需要從這個場景中帶著問題走出來,我們可以發(fā)現(xiàn),這個問題其實就是一個典型的圖像分類問題。為了達到目的,我們將訓(xùn)練一個深層卷積神經(jīng)網(wǎng)絡(luò),告訴什么是違禁物品什么是合法的物品,然后我們將它運行我們網(wǎng)站上,來保證網(wǎng)站規(guī)則能夠有效的實施。
?
首先,我們需要一個過去拍賣清單的數(shù)千個圖像的數(shù)據(jù)集。我們需要合法和違禁物品的圖像,以便我們可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)來區(qū)分它們:
?
?
?
為了訓(xùn)練神經(jīng)網(wǎng)絡(luò),我們使用標(biāo)準(zhǔn)的反向傳播(BP)算法。我們通過一個圖片,傳遞該圖片的預(yù)期的結(jié)果,然后遍歷神經(jīng)網(wǎng)絡(luò)中的每個圖層,稍微調(diào)整它們的權(quán)重以使它們在為該圖片生成正確輸出方面表現(xiàn)的更好一些:
?
?
我們用數(shù)千張照片重復(fù)數(shù)千次,直到模型能夠準(zhǔn)確地產(chǎn)生正確的結(jié)果。最終我們可以打造一個可靠的用于圖像分類的神經(jīng)網(wǎng)絡(luò):
?
?
注意:閱讀下文你需要了解卷積神經(jīng)網(wǎng)絡(luò)的原理,如果你想了解卷積神經(jīng)網(wǎng)絡(luò)如何識別圖像中的對象,請參閱第3部分[1]。
?
但事情并不像看起來那么簡單...
?
卷積神經(jīng)網(wǎng)絡(luò)是用于圖像分類的最受歡迎的模型。無論它們出現(xiàn)在圖像中的哪個位置,它們都可以識別復(fù)雜的形狀和圖案。在許多圖像識別任務(wù)中,它們的性能可以超過常人的判斷。
?
有了這樣的強大的模型,將圖像中的幾個像素更改為更暗或更亮應(yīng)該不會對最終預(yù)測產(chǎn)生很大影響吧?當(dāng)然,它可能會稍微改變最終的預(yù)測,但它不應(yīng)該將圖像從“違禁”轉(zhuǎn)換為“合法”。
?
?
我們期望的是:對輸入照片的小改動只會對最終預(yù)測產(chǎn)生微小的變化。
?
但在2013年的一篇名為神經(jīng)網(wǎng)絡(luò)的神奇屬性[2]的論文中,人們發(fā)現(xiàn)這并非總是如此。如果你確切的知道改變那些像素點可以使圖像最大可能的發(fā)生改變,你就可以故意迫使神經(jīng)網(wǎng)絡(luò)對給定的圖片做出錯誤的預(yù)測,而圖片的外觀改變的并不是很多。
?
這意味著我們可以有意地制作一張圖片,該圖片顯然是一種被禁止的項目,但卻完全愚弄了我們的神經(jīng)網(wǎng)絡(luò):
?
?
為什么會這樣?機器學(xué)習(xí)分類器的工作原理是找出它試圖分辨的東西的分界線。以下是在圖表上顯示的一個簡單的二維分類器的示例,該分類器將紅點(合法)與綠點(違禁)分開:
?
?
?
現(xiàn)在,該分類器的可以做到100%的正確率。找出一條線將紅點和所有綠點完美的分開。
但是,如果我們想誘使它將一個紅點誤分類為綠點,該怎么辦?
?
如果我們在邊界旁邊的紅點的Y值上添加一小部分,我們可以將它簡單地推到綠色區(qū)域:
?
?
?
因此,要欺騙一個分類器,我們只需要知道從哪個方向來推動點越過線。如果我們不想過于狡猾,理想情況下我們會盡可能少地提出這一點,但理想總歸是理想情況,黑客通常不會再理想情況下進入。
?
在使用深度神經(jīng)網(wǎng)絡(luò)的圖像分類中,我們所分類的每個“點”是由數(shù)千個像素組成的整個圖像。這給了我們數(shù)以千計的可能值,我們可以通過調(diào)整這些數(shù)值來突破決策線。如果我們確保以對人類來說不太明顯的方式調(diào)整圖像中的像素,我們可以欺騙分類器而不會使圖像看起來被改動。
?
換句話說,我們可以對一個物體進行真實拍攝,并且非常輕微地改變像素,以便圖像可以完全欺騙神經(jīng)網(wǎng)絡(luò),使其認(rèn)為圖像是其他東西:
?
?
把一只貓變成烤面包機,基于網(wǎng)絡(luò)的Keras.js演示的圖像檢測結(jié)果
?
如何欺騙神經(jīng)網(wǎng)絡(luò)
?
我們已經(jīng)討論過訓(xùn)練神經(jīng)網(wǎng)絡(luò)來分類照片的基本過程:
?
但是,如果不是調(diào)整神經(jīng)網(wǎng)絡(luò)層的權(quán)重,而是調(diào)整輸入圖像本身,直到我們得到我們想要的答案為止呢?
?
那么讓我們把已經(jīng)訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)再訓(xùn)練一遍。但讓我們使用反向傳播來調(diào)整輸入圖像而不是神經(jīng)網(wǎng)絡(luò)圖層:
?
以下是新算法:
?
在這之后,我們將擁有一個圖像,可以在不改變神經(jīng)網(wǎng)絡(luò)內(nèi)部的任何東西的情況下愚弄神經(jīng)網(wǎng)絡(luò)。
?
唯一的問題是,通過隨意調(diào)整單個像素,對圖像的更改可以太過明顯,以至于你會看出它們。他們會出現(xiàn)變色斑點或波浪區(qū)域:
你可以看到貓周圍的綠色變色斑點和白色墻壁上的波浪圖案。
為了防止出現(xiàn)這些情況,我們可以為我們的算法添加一個簡單的約束。被黑客入侵的圖像中的任何一個像素都不能從原始圖像中改變很多,比如0.01%。這迫使我們的算法以一種愚弄神經(jīng)網(wǎng)絡(luò)的方式來調(diào)整圖像,而不會讓它看起來與原始圖像太不同。
?
下面是我們添加該約束時生成的圖像的樣子:
?
?
即使這幅圖像看起來與我們之前的一樣,它仍然愚弄了神經(jīng)網(wǎng)絡(luò)!
?
Let’s Code It!
?
首先我們需要一個預(yù)先訓(xùn)練的神經(jīng)網(wǎng)絡(luò)來愚弄。我們不是從頭開始訓(xùn)練,而是使用Keras,Keras是深受歡迎的深度學(xué)習(xí)框架,它帶有幾個預(yù)先訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)[3]。我們將使用Google的Inception v3深度神經(jīng)網(wǎng)絡(luò)的副本,該網(wǎng)絡(luò)已經(jīng)過預(yù)先訓(xùn)練,可以檢測1000種不同類型的對象。
?
Keras中的基本代碼使用這個神經(jīng)網(wǎng)絡(luò)來識別圖片中的內(nèi)容。在運行它之前,確保你已經(jīng)安裝了Python 3和Keras(詳細代碼獲取見文末):
?
當(dāng)我們運行它時,它正確地檢測到波斯貓的形象:
?
$ python3 predict.pyThis is a Persian_cat with 85.7%confidence!
?
現(xiàn)在讓我們開始調(diào)整圖像,直到它能夠愚弄神經(jīng)網(wǎng)絡(luò),讓神經(jīng)網(wǎng)絡(luò)認(rèn)為這只貓是一個烤面包機。
?
Keras中沒有內(nèi)置的方式來訓(xùn)練輸入圖像,所以我不得不手動編碼訓(xùn)練步驟。
?
代碼如下(詳細代碼獲取見文末):
?
?
圖為部分代碼
?
如果我們運行它,它最終會生成一個可以欺騙神經(jīng)網(wǎng)絡(luò)的圖像:
?
$ python3 generated_hacked_image.pyModel's predicted likelihood that theimage is a toaster: 0.00072%
[ .... a few thousand lines of training....]
Model's predicted likelihood that theimage is a toaster: 99.4212%
?
注意:如果你沒有GPU,則可能需要幾個小時才能運行。如果你確實已經(jīng)使用Keras和CUDA正確配置了GPU,則運行時間不應(yīng)超過幾分鐘。
?
現(xiàn)在讓我們再次測試通過原始模型運行鑒別這張經(jīng)過技術(shù)更改的圖片:
?
$ python3 predict.pyThis is a toaster with 98.09%confidence!
?
我們成功的欺騙了神經(jīng)網(wǎng)絡(luò),認(rèn)為貓是烤面包機!
?
我們可以用黑客技術(shù)生成圖像做些什么呢?
?
我們這樣篡改圖像被稱為“產(chǎn)生敵對的例子”。我們故意制作一段數(shù)據(jù),以便機器學(xué)習(xí)模型將其誤分類。這是一個巧妙的技巧,但為什么在現(xiàn)實世界中這很重要?
?
研究表明,這些被黑客篡改的圖像具有一些令人驚訝的特性:
?
?
?
所以我們可以用這些被黑客篡改的圖片做很多事情!
?
但是,我們?nèi)绾蝿?chuàng)建這些圖像仍然存在很大的局限性!因為我們要想攻擊就需要直接訪問神經(jīng)網(wǎng)絡(luò)本身。因為我們實際上生成圖片的過程,就需要神經(jīng)網(wǎng)絡(luò)的參與,所以我們需要它的一個副本。在現(xiàn)實世界中,沒有公司會讓你下載他們訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的代碼,所以這意味著我們不能攻擊他們嗎?
?
NO!研究人員最近表明,你可以訓(xùn)練自己的神經(jīng)網(wǎng)絡(luò)來反映另一個神經(jīng)網(wǎng)絡(luò)[4],通過探測它來了解它的行為。然后你可以使用你的替代神經(jīng)網(wǎng)絡(luò)來生成被黑客入侵的圖片,這些圖片仍然會欺騙原始網(wǎng)絡(luò)!這被稱為黑盒攻擊。
?
黑盒攻擊的應(yīng)用是無限的,這里有一些例子:
?
而這些攻擊方法并不僅限于圖像。你可以使用相同類型的方法來處理其他類型數(shù)據(jù)的分類器。例如,你可以欺騙病毒掃描程序?qū)⒛愕牟《咀R別為安全代碼!
?
我們?nèi)绾伪Wo自己免受這些攻擊?
?
所以現(xiàn)在我們知道有可能存在欺騙神經(jīng)網(wǎng)絡(luò)(以及其他的機器學(xué)習(xí)模型)的事情,我們又該如何防御呢?
?
簡短的回答是,沒有人知道如何完美防御。防止這些類型的攻擊仍然是一個正在進行的研究領(lǐng)域。了解最新該領(lǐng)域發(fā)展的最好方法是閱讀Ian Goodfellow和Nicolas Papernot的cleverhans博客,他們是該領(lǐng)域最有影響力的兩位研究人員。
?
但是到目前為止,我們知道一些關(guān)于這方面的情況:
?
由于我們還沒有最終防御方案,所以我們應(yīng)該考慮到底如何確定使用神經(jīng)網(wǎng)絡(luò)的場景,以便減少這種攻擊會對你的業(yè)務(wù)造成損害的風(fēng)險。
?
云安全(易盾)基于網(wǎng)易20年技術(shù)積累及安全大數(shù)據(jù),為互聯(lián)網(wǎng)各行業(yè)提供反垃圾、驗證碼、注冊保護、登錄保護、活動反作弊、應(yīng)用加固、DDoS 防護等整體安全解決方案,全程提供完善的技術(shù)支持,助力產(chǎn)品建立安全防護體系。?
原文地址:http://mp.weixin.qq.com/s/RV3jUJiOYCD-SjDRRX5spw
?
了解 網(wǎng)易云 :
網(wǎng)易云官網(wǎng):https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網(wǎng)易云社區(qū):https://sq.163yun.com/
?
總結(jié)
以上是生活随笔為你收集整理的知物由学 | 未来安全隐患:AI的软肋——故意欺骗神经网络的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从源码全面剖析 React 组件更新机制
- 下一篇: [摘抄] Bezier曲线、B样条和NU