写点什么

神经网络攻防:03. 使用 API 修改神经网络参数

用户头像
P小二
关注
发布于: 2021 年 03 月 04 日
神经网络攻防:03.使用API修改神经网络参数

前面两篇,我们介绍了模型文件相关的一些基础知识,也用可视化工具得到了一些模型的信息并通过工具修改输出层的 bias 来让模型预测值改变。


问题: 修改 bias 的操作是否可以在程序中进行呢?这样篡改操作有什么缺点和局限性呢?


在本篇中我们将使用 Keras API 来修改输出层的 bias,达到任何图片都可以绕过验证的目的。


Keras 加载模型并使用其他手写体图片预测:



model = keras.models.load_model('./model.h5')shownDigit = np.argmax(model.predict(processedImage))
if shownDigit == 4: print("Access Granted")else: print("Access Denied")
复制代码


我们会得到验证失败:


Access Denied
复制代码


Keras 提供了直接在修改 bias 的 API,我们来试试:



layer_name = model.layers[-1].namefinal_layer = model.layers[-1]print("Layer name:",layer_name)print("Bias name:", final_layer.bias.name)print("Bias value:",final_layer.bias.numpy())
update_bias = final_layer.bias.numpy()update_bias[4] = 100final_layer.bias.assign(update_bias)print("New Bias value:",final_layer.bias.numpy())
复制代码


我们把分类为 4 的 bias 设置为了 100,运行结果:

Access DeniedLayer name: dense_2Bias name: dense_2/bias:0Bias value: [-0.03398215  0.15133834 -0.04235273 -0.03443589 -0.03148068 -0.03133481 -0.14359292 -0.04240401  0.01841561  0.0588899 ]
New Bias value: [-3.3982150e-02 1.5133834e-01 -4.2352729e-02 -3.4435891e-02 1.0000000e+02 -3.1334814e-02 -1.4359292e-01 -4.2404007e-02 1.8415609e-02 5.8889896e-02]
Access Granted
复制代码


可以看到 bias 的值已经修改了,而且我们通过了验证。


这种在神经网络最后一层通过篡改单个权重的方法,会对每个预测都产生巨大的影响。这种方法太过强大会导致很容易被发现,而且模型文件的获取也比较艰难,攻击难道较大。


具体代码和模型,在本专栏 Github 项目中。

地址: 

https://github.com/AIPwn/HackingNeuralNetworks


下一篇,我们将训练自己的分类模型并通过在图片中做一个标记作为后门,让模型遇到后门就产生我们期望的结果。


往期回顾:

开篇词——你所不知道的神经网络攻防

01.模型到底是什么?

02.攻击模型的输出层



发布于: 2021 年 03 月 04 日阅读数: 7
用户头像

P小二

关注

公众号:P小二 2017.12.09 加入

架构师,创业者,关注AI与安全

评论

发布
暂无评论
神经网络攻防:03.使用API修改神经网络参数