写点什么

“看透”神经网络

  • 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:004690

评论

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

深入理解 HDFS(四):Socket

冰心的小屋

hdfs NameNode IPC Server HDFS client 通信渠道

在langchain中使用自定义example selector

程序那些事

程序那些事 大语言模型 langchain

利用uplugin对比Webpack和Rollup插件系统

OpenTiny社区

前端

一文详解TextBrewer

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

堡垒机-企业最好的家人,信息安全的守门人

行云管家

互联网 网络安全 信息安全 堡垒机

直播源码硬核技术分析:主播PK功能

山东布谷网络科技

直播源码

速度提升10倍,腾讯基于Iceberg的数据治理与优化实践

腾讯云大数据

数据湖

桌面应用打包:pyinstaller | 京东物流技术团队

京东科技开发者

Python pyinstaller 桌面应用 企业号 8 月 PK 榜

解锁Spring组件扫描的新视角

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

10分钟了解Flink Watermark水印

程序员半支烟

Java 大数据 flink 程序员

融云荣登36氪WISE2023「全球化最佳基础设施」榜单

融云 RongCloud

全球化 通信 运营 融云 wise

InnoDB 单表数据量超过 2000W 出现性能问题

红袖添香

MySQL innodb 索引 B+树 缓冲池

杭钢集团:以一体化管控赋能为引领提升五大能力

用友BIP

数智化转型

AI概念引爆ChinaJoy,聆心智能助力数字娱乐产业新应用

硬科技星球

《这就是ChatGPT》读后感

叶轩子

人工智能 深度学习 ChatGPT

DFS算法解析

数新网络官方账号

算法 DFS 深度优先搜索

什么是数字化管理,对企业价值几何?

优秀

数字化转型 数字经济 数字化管理

C4D软件都应用在影视后期什么领域?

Finovy Cloud

搭载KaihongOS的工业平板、机器人、无人机等产品通过OpenHarmony3.2 Release版本兼容性测评

极客天地

5 小时玩转阿里云 Flink 实时湖仓,速速报名!

Apache Flink

大数据 flink 实时计算

R2在全渠道业务线的落地 | 京东云技术团队

京东科技开发者

测试 质量 企业号 8 月 PK 榜 R2

MySQL事务ACID原理

红袖添香

MySQL 数据库 事务 ACID MySQL InnoDB

关于ANCE OS兼容性评估 & Linux智能全栈调优KeenTune介绍 | 第 93-94 期

OpenAnolis小助手

QA sig 龙蜥大讲堂 KeenTune ANCE

实时入库不用愁,HStore帮分忧

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

HDC 2023丨以HarmonyOS技术赋能艺术,引领鸿蒙生态媒体体验升级

最新动态

LMOps 工具链与千帆大模型平台

Baidu AICLOUD

LLMOps 大模型微调 千帆大模型平台 LMops

以数驱动 | 智能分析云助力流程制造行业绿色高效运营

用友BIP

智能分析

一条SQL如何被MySQL架构中的各个组件操作执行的?

砖业洋__

MySQL MySQL架构 MySQL优化器 MySQL执行器 MySQL存储引擎

MySQL 体系结构

红袖添香

MySQL 存储引擎 InnoDB存储引擎

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