写点什么

神经网络攻防:01. 模型到底是什么?

用户头像
P小二
关注
发布于: 2021 年 03 月 02 日
神经网络攻防:01.模型到底是什么?

常听做算法的同学说算法模型,那模型到底是什么呢?


具体来讲,狭义的机器学习模型或者深度学习模型是一个文件,它在经过训练后可以识别特定类型的模式。对模型进行训练后,可以使用它根据之前未见过的数据进行推理,并对这些数据进行预测。


假设你要构建一个应用程序,该应用程序可以根据用户的面部表情识别用户的情感。可以为模型提供具有特定情感标记的面部图像,对模型进行训练,然后即可在能够识别任何用户情感的应用程序中使用该模型。


问题:既然模型是一个文件,如果我拿到了一个模型文件,可以得到哪里信息?


我们以一个例子开始,在专栏的 Github 项目中我提供了三个 model 文件,分别为:


  • model.h5  keras 保存的模型

  • model.pt   Pytorch 保存的模型

  • model.pt   Pytorch 保存的模型


大家可以去 Github 下载这三个文件,以供后面的练习。


首先,模型文件的泄露其实相当于有一部分的源代码泄露了。我们可以从模型文件中得到很多信息。


以 model.h5 为例,h5 是 keras 支持的模型文件格式之一,它将网络结构和权重,模型训练的配置,优化器等信息都保存了下来,优点就是操作方便,缺点就是模型文件很大。keras 也可以只保存权重,不保存网络结构,大家可以去了解一下。


H5 文件是层次数据格式第 5 代的版本(Hierarchical Data Format,HDF5),它是用于存储科学数据的一种文件格式和库文件。我们可以使用工具来打开 H5 格式的文件,这里推荐一下 HDFView。



单独看 model_weights,H5 格式是组织得非常好的一种层次结构



点击 layer_names 可以看到模型的层



单击查看第一层 conv2d_1 中的 bias:0 的权重



点击 optimizer_weights 查看训练的信息



网络结构:Conv -- Conv -- MaxPool -- Dense -- Dense

优化器:    Adadelta

任务:       猜测图像分类


还有更多的信息等着你自己去探索吧。总之拿到这些信息之后,想要复现这个模型是非常容易的。


那如果不是 H5 模型文件怎么办?那就需要手动使用框架加载并打印或者导出权重等信息。不过有个开源工具帮你解决了这个问题,并可视化出来,它就是 netron。下图是它的界面:



netron 现在支持很多框架保存下来的模型文件格式,通用性已经算比较好。


netron 项目 Github 地址:

https://github.com/lutzroeder/netron


这次的练习就是用 netron 打开剩下的两个模型,看看能从文件中得到什么信息。


本专栏 Github 地址: 

https://github.com/AIPwn/HackingNeuralNetworks


这是《神经网络攻防》专栏的第一篇,下一篇,我们将谈论一下怎么攻击模型的输出层,欢迎关注。


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

P小二

关注

公众号:P小二 2017.12.09 加入

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

评论

发布
暂无评论
神经网络攻防:01.模型到底是什么?