攻击AI模型之DeepFool算法

姓名:张安琪  学号:17021211235

转载自:https://www.leiphone.com/news/201806/koeGa9d5MRm7QdYZ.html,有删节。

【嵌牛导读】:白盒攻击中鼎鼎大名的DeepFool算法是怎样的?

【嵌牛鼻子】:DeepFool算法

【嵌牛提问】:什么是DeepFool算法?

【嵌牛正文】:

DeepFool基本原理

在《攻击AI模型之FGSM算法》中,我们介绍了FGSM的基本原理。一个很好的问题就是,我们究竟对原始图像做了多大修改就可以欺骗AI模型呢?换个说法就是,如何尽量少的修改原始图像就可以达到欺骗AI模型的目的呢?首先我们先看下我们对原始图像做了哪些修改。假设我们原始图像为x0file,对抗样本为x1file,将原始图像保存成向量。

#原始图像数据

x0_img = image.load_img(x0_file, target_size=(299, 299))

x0 = image.img_to_array(x0_img)

同样的方法,将对抗样本生成的图像保存成向量。

#对抗样本数据

x1_img = image.load_img(x1_file, target_size=(299, 299))

x1 = image.img_to_array(x1_img)

计算原始图像和对抗样本之间的差值,转换成无符号的字节类型后保存成图像。

#计算变化量

d=x1-x0

im = Image.fromarray(d.astype(np.uint8))

im.save(out)

以我们经典的小猪图像为原始图像,效果如下图所示。

FGSM算法生成的对抗样本图像,效果如下图所示。

对抗样本相对原始图像的变化量,效果如下图所示。

DeepFool最早由S. Moosavi-Dezfooli, A. Fawzi,和P. Frossard在《DeepFool: a simple and accurate method to fool deep neural networks》中提出。以最简单的二分类问题为例,如图所示,假设分割平面是一个直线,直线的两侧分别对应不同的分类结果。

如果想改变其中某点的分类结果,一定要跨过分割平面。显然最短的移动距离就是垂直分割平面进行移动。在线性代数里面,点x到直线Ax+By+C=0的距离定义为:

向量化表示距离如下,其中w为参数矩阵。

推而广之,在二分类问题中,当分割平面不是线性时,我们假设当移动的距离很小时,分割平面相对该点可以认为依然是一个线性的分割平面,每次迭代时,该点都以很小的移动距离不断逼近分割平面。

由于移动距离很小,可以使用该点的梯度代替参数矩阵w。多分类问题时,与二分类问题类似,只不过在迭代计算时需要考虑该点向不同分类标签移动时要选取一定距离最短的那个。

攻击图像识别模型

以攻击InceptionV3模型为例,介绍生成攻击样本的基本原理。Keras内置了这个模型,我们直接使用就可以了。从模型中直接获取第一层的输入作为输入层,最后一层的输出为输出层。

model = inception_v3.InceptionV3()

model_input_layer = model.layers[0].input

model_output_layer = model.layers[-1].output

然后加载我们攻击的图片,比如我们的小猪。这里需要特别强调的是,NumPy出于性能考虑,默认的变量赋值会引用同样一份内存,所以我们需要使用np.copy手工强制复制一份图像数据。

img = image.load_img("../picture/pig.jpg", target_size=(299, 299))

original_image = image.img_to_array(img)

hacked_image = np.copy(original_image)

为了避免图像变化过大,超过肉眼可以接受的程度,我们需要定义阈值。

max_change_above = original_image + 0.01

max_change_below = original_image - 0.01

下面我们要定义最关键的三个函数了,我们定义损失函数为识别为烤面包机的概率,因此我们需要使用梯度上升算法,不断追求损失函数的最大化,变量objecttypeto_fake定义的就是烤面包机对应的标签,在InceptionV3中面包机的标签为859。

object_type_to_fake = 859

有了损失函数以后,我们就可以通过Keras的接口获取到对应的梯度函数。最后通过K.function获取一个Keras函数实例,该函数的输入列表分别为输入层和当前是训练模式还是测试模式的标记learning_phase(),输出列表是损失函数和梯度。关于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] )

除了迭代环节,DeepFool与FGSM的算法完全相同。在迭代环节,我们通过NumPy的inalg.norm函数对梯度进行处理,然后迭代更新图片内容。

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函数,其函数原型为:

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

其中ord表示矩阵的范数。

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

ord=2,求特征值,然后求最大特征值得算术平方根,第二范式,也是默认值

axis表示处理类型。

axis=1表示按行向量处理,求多个行向量的范数

axis=0表示按列向量处理,求多个列向量的范数

axis=None表示矩阵范数。

在我的Mac本经过2分钟27次迭代训练,获得了新的家猪图像,但是机器学习模型识别它为烤面包机的概率却达到了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算法被识别为烤面包机的家猪的图片效果如下。

计算相对原始图像的修改量,如下图所示,显然比FGSM修改量少。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容