写点什么

“看透”神经网络

  • 2019-09-07
  • 本文字数:3517 字

    阅读完需:约 12 分钟

“看透”神经网络

大家最诟病深度学习的一点就是理论基础不够系统,模型就像一个黑盒子,这就更加凸显了深度学习模型可视化的重要性了。

本文以实战经验为主,除去数据的可视化部分,我们说以下几个主要的方向(1)模型结构的可视化(2)卷积参数的可视化(3)激活区域的可视化(4)训练过程的可视化。

01

模型结构的可视化

所谓模型结构的可视化,就是为了方便更直观的看到模型的结构,从而方便进行调试,下面对 2 个主流的框架进行展示。

1.1 caffe 网络结构可视化

定义一个简单的 3 层的模型(模型可以查看我们 git,代码太长此处不展示),我们可以采用几种方案进行可视化;第一种,利用 caffe 自带的可视化方法;第二种,利用开源项目 netscope;由于 netscope 可视化效果更好,因此我们采用 netscope 进行可视化,工具网址如下:


相关链接:


http://ethereon.github.io/netscope/#/editor



可视化后的结果如上图,可以看到网络的结构是通过卷积+激活函数的堆叠,同时网络的数据输入层和最后的全连接层作为了 loss 层和 acc 层的输入。


当我们想要看每一层的参数时,就可以将鼠标放上相应的结构块;



当然,还可以使用 caffe 自带的脚本进行可视化,在 caffe 根目录下的 python 目录下有 draw_net.py 这个脚本。


draw_net.py 执行的时候带三个参数,第一个参数是网络模型的 prototxt 文件,第二个参数是保存的图片路径及名字,第三个参数是 rankdirx,他有四种选项,分别是 LR, RL, TB, BT。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。默认为 LR。

1.2 tensorflow 网络结构可视化

在 tensorflow 中要进行可视化,必须使用 name scope 来确定模块的作用范围,添加部分名称和作用域,否则网络图会非常复杂。与上面类似,我们同样定义一个三层的卷积网络(代码还是看 git)。


要想利用 tensorboard 进行可视化,必须在 session 中通过 summary 存储网络图,只需要在训练代码中添加命令即可,summary = tf.summary.FileWriter(“output”, sess.graph)。


最后利用 tensorboard 命令来查看训练结果和可视化结果,网络的可视化结果如下。



可以看出,网络的结构可视化和 caffe 的差不多。除了 caffe 的网络结构可视化是输入模型配置文件,大部分的深度学习框架都使用了 python 进行开发,模型结构的可视化与 tensorflow 结果差不多。相比较来说,caffe 的模型可视化方法更加简单直接,独立于代码,可以更便捷地看到每一层的参数配置。

02

卷积参数可视化

前面我们可视化了网络的结构,从而对要训练的网络就有了整体的把握。当我们得到了训练结果之后,一个模型常有百万千万级别的参数,我们能否通过可视化的方法,来评判一下这个网络结构的好坏呢?通常情况下,我们希望网络结构学习到的权重,模式足够丰富,这样才有强大的表征能力。

2.1 浅层卷积参数可视化

网络的早期卷积学习到的是通用的特征,由于大部分网络的输入都是彩色图,所以数据层的通道数为 3。正好我们平时用的彩色图的通道就是 3 维,这时候如果直接将这 3 组通道转换为一个彩色图,我们就可以很直观的可视化这第一层的卷积参数,对于任意以输入图为 3 通道彩色图的网络结构来说,这都是通用的。


下面是 alexnet 学习到的权重的第一层卷积的可视化。



这其中有一些卷积核为灰度图,说明三个通道的对应参数相近,学习到的是与颜色无关的特征。有的为彩色图,说明 3 个通道的特征差异大,学习到的是与颜色有关的特征。这与上面人眼和感知特性也是相通的,在底层,学习到的是边缘,形状,颜色等敏感等信息。


细心的读者应该可以注意到,上面的参数,具有一定的互补性和对称性。

2.2 高层卷积参数可视化

到了高层,由于输入的通道数不再为 3,所以无法像第一层那样,将其投射到图像空间进行直观的可视化。


这时候就有了两种思路。分别是 dataset-centric 和 network-centric 方法。他们的区别就是,第一个要可视化核函数,必须要使用真实的输入数据。第二个,则是通过生成一个随机图片,然后进行迭代的方法,来最大化响应层的神经元的激活,这个时候为使得输入的图片更加平滑,可以考虑使用 GAN 等方法。


主要的研究方法包括两种,反卷积法【2】和梯度计算法【3】。


反卷积方法的核心思想就是利用上采样从特征空间逐步恢复到图像空间。假设我们要可视化第 1 个 feature map 的一个 unit,即特征图的一个像素的 activation,则首先从数据集中计算一下多个输入图像各自经过前向传播后在这个 unit 上产生的 activation,取出 activation 最大的一些图像,这些图像作为输入图。


然后将输入图分别在这个 unit 上产生的 activation 进行反向传播,其他位置置为零。其中与 pooling 对应的就是 uppooling,它通过在 max pooling 的时候记录下最大激活位置,在反卷积的时候进行恢复。与卷积对应的操作就是转置卷积操作,这是被用于图像分割的方法,也是通常意义上所说的反卷积。


反卷积的结果,就是一个重建的图。



梯度计算法包括标准的梯度计算法以及它的一些改进版本 integrated gradients,guided backprop,基本原理如下,在训练的过程中固定网络的参数不变,学习输入。



反卷积法和梯度计算法可视化出来的结果,可以反映出神经元学习到的类别的轮廓,但是结果不够精细。GoogleBrain 团队的 deep dream【4】研究,对 inception 网络进行了逐层的特征可视化,揭示了每一个网络层的特性。该项目是通过输入随机噪声和想让网络学习的图像的先验知识,最后可视化网络学习到的该类的结果,虽然不是现实存在的图像,但是却具有该类别的特性,如同人类梦境中生成的不真实却又有辨识度的场景一样。


下面展示了 layer 4c 层的一个神经元的结果。


03

激活热图可视化

可视化了卷积参数,它可以反映出所学习到的网络的参数本身有什么样的特点,它是从神经元的角度解释了 CNN,而激活热图可视化考虑从输入图像的角度解释 CNN。它从输入图像中找出激活卷积层中特定神经元的选择性模式,来反应网络到底学习到了什么信息。


特征图可视化的结果是 sensitivity map,也叫 saliency maps,以 CAM(Class Activation Mapping)【5】方法及其变种为代表。


CAM 利用 GAP(Global Average Pooling)替换掉了全连接层,将输出通道调整为输出类别数,再加权然后通过 softmax 层得到结果,可视化原理图如下:



看上图,最后输入 softmax 的特征图,等于 k 个 featuremap 的加权和,其中 w 系数包括 c 维,c 等于类别数目。等到了热力图之后,直接上采样到原图中就能得到激活区域,因为 featuremap 保留了原图的空间关系。

04

训练过程可视化

最后,我们通过 tensorflow 可视化开源框架来展示在项目中的可视化,由于我们前面已经有许多期文章讲述过可视化的各个模块细节,所以此处就不再做技术细节展示,而只展示结果。


项目是这个:


https://github.com/carpedm20/DCGAN-tensorflow,我们用来生成了一批嘴唇数据。

4.1 loss 可视化

loss 等标量指标可视化可以反应网络的学习情况,是必须关注的。



4.2 中间结果可视化


对于图像生成任务,没有什么比查看中间结果更加有说服力的了。

4.3 网络结构可视化


tensorflow 可视化网络结果虽然比 caffe 更加复杂,但也更加细致,关注关注没有坏处。


另外,还可以查看权重的直方图分布等等,对于网络的性能判断也有辅助作用。


参考文献


[1] Erhan D, Bengio Y, Courville A, et al. Visualizing higher-layer features of a deep network[J]. University of Montreal, 2009, 1341(3): 1.


[2] Zeiler M D, Fergus R. Visualizing and Understanding Convolutional Networks[J]. 2013, 8689:818-833.


[3] Simonyan K, Vedaldi A, Zisserman A. Deep inside convolutional networks: Visualising image classification models and saliency maps[J]. arXiv preprint arXiv:1312.6034, 2013.


[4] https://distill.pub/2017/feature-visualization/ 


[5] Zhou B, Khosla A, Lapedriza A, et al. Learning deep features for discriminative localization[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 2921-2929.


[6] How convolutional neural network see the world - A survey of convolutional neural network visualization methods

作者介绍

言有三,真名龙鹏,曾先后就职于奇虎 360AI 研究院、陌陌深度学习实验室,6 年多计算机视觉从业经验,拥有丰富的传统图像算法和深度学习图像项目经验,拥有技术公众号《有三 AI》,著有书籍《深度学习之图像识别:核心技术与案例实战》。

原文链接

https://mp.weixin.qq.com/s?src=11&timestamp=1567841881&ver=1837&signature=ReZUMBVtUDn4WRb9pTeSIuVntViSxlYaTyF328OsSRW7v0MJvdHyj9zpQgTtraWRl5Eev-bEwsVlJ6I5JouZdjrbI3MezeWX5L9Gtl*ipMWYzg1KNBALjkHl7X7xMLy&new=1


2019-09-07 16:004313

评论

发布
暂无评论
发现更多内容

RESAR 性能工程:一个性能项目真正体现价值的方式

zuozewei

内容合集 签约计划第二季

【量化】用数据验证巴菲特推荐的指数定投的收益真相

恒生LIGHT云社区

数据 金融科技 量化投资 量化

DotNet项目利用拦截器记录访问日志

为自己带盐

日志 dotnet 28天写作 12月日更

黑客进行网络欺骗攻击的手段有哪些?

喀拉峻

黑客 网络安全 安全

基于社交网络的客户智能 ( AI ) 推荐系统研究

索信达控股

推荐系统 推荐算法 个性化推荐

【实战】网络安全学习:内网渗透实例

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 内网渗透

常见序列化算法学习笔记一

风翱

序列化 12月日更

埃文科技荣获“郑州市企业技术中心”

郑州埃文科技

埃文科技 ip技术 企业技术中心

使用kubernetes,你真的降本了吗

Geek_cd6rkj

Docker Kubernetes 云原生 成本治理 提效降本

从0开始学VUE - 运行第一个VUE项目

恒生LIGHT云社区

JavaScript node.js Vue 前端

企业数字化的4个痛点,低代码平台如何解决?

J2PaaS低代码平台

低代码 数字化 低代码平台

英特尔深耕元宇宙算力技术,剑指开“元”盛世

科技新消息

Linux一学就会之Linux计划任务与日志的管理

学神来啦

Linux centos 运维 SSH linux云计算

公安合成作战平台建设解决方案,情指勤一体化合成作战系统搭建

电微13828808271

聚势聚能,共擎共飞 PKS安全先进计算2021生态大会将启

InfoQ 天津

百分点大数据技术团队:Elasticsearch多数据中心大规模集群的实战经验

百分点科技技术团队

利用Java反射处理private变量

FunTester

Java 工具 反射 Groovy FunTester

自身的强大,无惧任何威胁!

Tiger

28天写作

14. 《重学JAVA》-- 内部类

杨鹏Geek

Java 25 周年 28天写作 12月日更

西南林业大学:用宜搭打造智慧校园,节省百万费用

一只大光圈

钉钉 低代码 数字化 高校 钉钉宜搭

质量基础设施一站式服务平台建设,检验检测系统平台开发搭建

电微13828808271

公安情报研判分析系统开发,情指勤一体化实战平台

电微13828808271

TDengine典型用户案例|内容合集

TDengine

tdengine 时序数据库 技术专题合集

哪些企业需要做等保测评?快速过等保测评用什么堡垒机好呢?

行云管家

网络安全 等保 等保测评 等保2.0

RocketMQ和Kafka的差异对比

编程江湖

大数据

「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配

尔达Erda

大数据 spark 程序员 云原生 心得

CSS之选择器(七):empty

Augus

CSS 12月日更

开发者故事|朝九晚六大小周,我就是快乐的技术人

尔达Erda

程序员 云原生 经验分享 成长笔记 思考路径

Rainbond 5.5 发布,支持Istio和扩展第三方Service Mesh框架

北京好雨科技有限公司

istio PaaS rainbond

云原生监控高可用集群 Thanos 架构剖析 | 内容合集

耳东@Erdong

内容合集 签约计划第二季

低代码如何让中小型企业蓬勃发展?

低代码小观

低代码 企业管理系统 低代码平台 中小企业

“看透”神经网络_AI&大模型_言有三_InfoQ精选文章