丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給兜哥帶你學(xué)安全
發(fā)送

2

攻擊AI模型之DeepFool算法

本文作者: 兜哥帶你學(xué)安全 2018-06-26 15:22
導(dǎo)語(yǔ):白盒攻擊中鼎鼎大名的DeepFool算法是怎樣的?

雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng)) AI 科技評(píng)論按:本文為“兜哥帶你學(xué)安全”系列之三,首發(fā)于AI科技評(píng)論,未經(jīng)許可不得轉(zhuǎn)載。

概述

在前面文章《對(duì)抗樣本的基本原理》中,我們介紹了生成對(duì)抗樣本的基本思路,其中大體思路分為白盒攻擊和黑盒攻擊,區(qū)別在于黑盒測(cè)試把模型當(dāng)做黑盒,只能輸入樣本獲得預(yù)測(cè)結(jié)果,白盒在黑盒的基礎(chǔ)上還可以獲取模型的參數(shù)、梯度等信息。本文將介紹白盒攻擊中鼎鼎大名的DeepFool算法。

DeepFool基本原理

在《攻擊AI模型之FGSM算法》中,我們介紹了FGSM的基本原理。一個(gè)很好的問(wèn)題就是,我們究竟對(duì)原始圖像做了多大修改就可以欺騙AI模型呢?換個(gè)說(shuō)法就是,如何盡量少的修改原始圖像就可以達(dá)到欺騙AI模型的目的呢?首先我們先看下我們對(duì)原始圖像做了哪些修改。假設(shè)我們?cè)紙D像為x0file,對(duì)抗樣本為x1file,將原始圖像保存成向量。

#原始圖像數(shù)據(jù)
x0_img = image.load_img(x0_file, target_size=(299, 299))
x0 = image.img_to_array(x0_img)

同樣的方法,將對(duì)抗樣本生成的圖像保存成向量。

#對(duì)抗樣本數(shù)據(jù)
x1_img = image.load_img(x1_file, target_size=(299, 299))
x1 = image.img_to_array(x1_img)

計(jì)算原始圖像和對(duì)抗樣本之間的差值,轉(zhuǎn)換成無(wú)符號(hào)的字節(jié)類型后保存成圖像。

#計(jì)算變化量
d=x1-x0
im = Image.fromarray(d.astype(np.uint8))
im.save(out)

以我們經(jīng)典的小豬圖像為原始圖像,效果如下圖所示。

攻擊AI模型之DeepFool算法


FGSM算法生成的對(duì)抗樣本圖像,效果如下圖所示。

攻擊AI模型之DeepFool算法


對(duì)抗樣本相對(duì)原始圖像的變化量,效果如下圖所示。

攻擊AI模型之DeepFool算法


DeepFool最早由S. Moosavi-Dezfooli, A. Fawzi,和P. Frossard在《DeepFool: a simple and accurate method to fool deep neural networks》中提出。以最簡(jiǎn)單的二分類問(wèn)題為例,如圖所示,假設(shè)分割平面是一個(gè)直線,直線的兩側(cè)分別對(duì)應(yīng)不同的分類結(jié)果。

攻擊AI模型之DeepFool算法


如果想改變其中某點(diǎn)的分類結(jié)果,一定要跨過(guò)分割平面。顯然最短的移動(dòng)距離就是垂直分割平面進(jìn)行移動(dòng)。在線性代數(shù)里面,點(diǎn)x到直線Ax+By+C=0的距離定義為:

攻擊AI模型之DeepFool算法


向量化表示距離如下,其中w為參數(shù)矩陣。

攻擊AI模型之DeepFool算法


推而廣之,在二分類問(wèn)題中,當(dāng)分割平面不是線性時(shí),我們假設(shè)當(dāng)移動(dòng)的距離很小時(shí),分割平面相對(duì)該點(diǎn)可以認(rèn)為依然是一個(gè)線性的分割平面,每次迭代時(shí),該點(diǎn)都以很小的移動(dòng)距離不斷逼近分割平面。

攻擊AI模型之DeepFool算法


由于移動(dòng)距離很小,可以使用該點(diǎn)的梯度代替參數(shù)矩陣w。多分類問(wèn)題時(shí),與二分類問(wèn)題類似,只不過(guò)在迭代計(jì)算時(shí)需要考慮該點(diǎn)向不同分類標(biāo)簽移動(dòng)時(shí)要選取一定距離最短的那個(gè)。

攻擊AI模型之DeepFool算法


攻擊圖像識(shí)別模型

以攻擊InceptionV3模型為例,介紹生成攻擊樣本的基本原理。Keras內(nèi)置了這個(gè)模型,我們直接使用就可以了。從模型中直接獲取第一層的輸入作為輸入層,最后一層的輸出為輸出層。

model = inception_v3.InceptionV3()
model_input_layer = model.layers[0].input
model_output_layer = model.layers[-1].output

然后加載我們攻擊的圖片,比如我們的小豬。這里需要特別強(qiáng)調(diào)的是,NumPy出于性能考慮,默認(rèn)的變量賦值會(huì)引用同樣一份內(nèi)存,所以我們需要使用np.copy手工強(qiáng)制復(fù)制一份圖像數(shù)據(jù)。

img = image.load_img("../picture/pig.jpg", target_size=(299, 299))
original_image = image.img_to_array(img)
hacked_image = np.copy(original_image)

為了避免圖像變化過(guò)大,超過(guò)肉眼可以接受的程度,我們需要定義閾值。

max_change_above = original_image + 0.01
max_change_below = original_image - 0.01

下面我們要定義最關(guān)鍵的三個(gè)函數(shù)了,我們定義損失函數(shù)為識(shí)別為烤面包機(jī)的概率,因此我們需要使用梯度上升算法,不斷追求損失函數(shù)的最大化,變量objecttypeto_fake定義的就是烤面包機(jī)對(duì)應(yīng)的標(biāo)簽,在InceptionV3中面包機(jī)的標(biāo)簽為859。

object_type_to_fake = 859

有了損失函數(shù)以后,我們就可以通過(guò)Keras的接口獲取到對(duì)應(yīng)的梯度函數(shù)。最后通過(guò)K.function獲取一個(gè)Keras函數(shù)實(shí)例,該函數(shù)的輸入列表分別為輸入層和當(dāng)前是訓(xùn)練模式還是測(cè)試模式的標(biāo)記learning_phase(),輸出列表是損失函數(shù)和梯度。關(guān)于K.function的使用建議閱讀Keras的在線文檔。

cost_function = model_output_layer[0, object_type_to_fake]
gradient_function = K.gradients(cost_function, model_input_layer)[0]
grab_cost_and_gradients_from_model =
K.function([model_input_layer,K.learning_phase()],
[cost_function, gradient_function] )

除了迭代環(huán)節(jié),DeepFool與FGSM的算法完全相同。在迭代環(huán)節(jié),我們通過(guò)NumPy的inalg.norm函數(shù)對(duì)梯度進(jìn)行處理,然后迭代更新圖片內(nèi)容。

r= gradients*cost/pow(np.linalg.norm(gradients), 2)
hacked_image +=r
hacked_image = np.clip(hacked_image, max_change_below, max_change_above)
hacked_image = np.clip(hacked_image, -1.0, 1.0)

這里需要特別介紹下linalg.norm函數(shù),其函數(shù)原型為:

x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False)

其中ord表示矩陣的范數(shù)。

  • ord=1,列和的最大值,第一范式

  • ord=2,求特征值,然后求最大特征值得算術(shù)平方根,第二范式,也是默認(rèn)值

axis表示處理類型。

  • axis=1表示按行向量處理,求多個(gè)行向量的范數(shù)

  • axis=0表示按列向量處理,求多個(gè)列向量的范數(shù)

  • axis=None表示矩陣范數(shù)。

在我的Mac本經(jīng)過(guò)2分鐘27次迭代訓(xùn)練,獲得了新的家豬圖像,但是機(jī)器學(xué)習(xí)模型識(shí)別它為烤面包機(jī)的概率卻達(dá)到了86.086%。

batch:20 Cost: 18.707792%
batch:21 Cost: 26.560178%
batch:22 Cost: 37.765652%
batch:23 Cost: 50.175613%
batch:24 Cost: 65.024394%
batch:25 Cost: 71.812165%
batch:26 Cost: 73.846906%
batch:27 Cost: 86.086935%

基于DeepFool算法被識(shí)別為烤面包機(jī)的家豬的圖片效果如下。

攻擊AI模型之DeepFool算法


計(jì)算相對(duì)原始圖像的修改量,如下圖所示,顯然比FGSM修改量少。

攻擊AI模型之DeepFool算法


參考文獻(xiàn)

  • S. Moosavi-Dezfooli, A. Fawzi, P. Frossard: DeepFool: a simple and accurate method to fool deep neural networks. In Computer Vision and Pattern Recognition (CVPR ’16), IEEE, 2016.

  • 劉焱,《web安全之強(qiáng)化學(xué)習(xí)與GAN》,機(jī)械工業(yè)出版社

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。

攻擊AI模型之DeepFool算法

分享:
相關(guān)文章

知情人士

AI安全三部曲 《web安全之機(jī)器學(xué)習(xí)入門》《web安全之深度學(xué)習(xí)實(shí)戰(zhàn)》 《web安全之強(qiáng)化學(xué)習(xí)和GAN》 作者 公眾號(hào):兜哥帶你學(xué)安全
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)