【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

“看透”神经网络

  • 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


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-09-07 16:004186

评论

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

WBTT:“Fair Launch”如何做到更加公平

长安区块链

XMind for mac (XMind思维导图)v24.01中文版

iMac小白

深入探索智能问答:从检索到生成的技术之旅

不在线第一只蜗牛

人工智能 机器学习 深度学习 大数据

泛微与用友NCC的无缝对接,释放企业运营潜能!

聚道云软件连接器

案例分享

WBTT:“Fair Launch”如何做到更加公平

石头财经

Illustrator 2024 for Mac v28.1中文激活版下载

iMac小白

一文解析 Copycat Dex与 Bitcat Dex的区别

股市老人

AZ逃生:容灾部署最佳实践

焦振清

服务部署 弹性伸缩 机房容灾 AZ 逃生 同城多活

低代码开发应用解锁旅游业的创新潜力

不在线第一只蜗牛

低代码 低代码开发 旅游业

用 25,000 颗星撬动一个向量数据库的世界

Zilliz

Milvus Zilliz AIGC 向量数据库

Redis Desktop Manager for Mac中文激活版下载(Redis桌面管理工具)

iMac小白

现货比特币 ETF 的批准将如何重塑加密货币世界

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发

社媒引流对跨境电商的重要性

Ogcloud

云手机 海外云手机 跨境电商云手机

倒计时1天|解锁「PolarDB开发者大会」正确打开方式

阿里云瑶池数据库

数据库 阿里云 云计算, 开发者大会

都是 Copycat Dex的通证,eCAT 和 CAT 这两有啥区别?

股市老人

WBTT:“Fair Launch”如何做到更加公平

加密眼界

WBTT:“Fair Launch”如何做到更加公平

西柚子

海外云手机:跨境养号的新趋势

Ogcloud

云手机 海外云手机 跨境电商云手机 tiktok云手机

一文介绍VR虚拟现实汽车展厅看车体验

3DCAT实时渲染

VR虚拟现实 汽车虚拟仿真 汽车VR展厅

外贸网站建站:如何选择合适的外贸网站设计方案

九凌网络

【第七在线】打破传统束缚:智能商品计划助力服装企业创新发展

第七在线

抖音获取抖音视频详情 API (douyin.item_get_video)

技术冰糖葫芦

API

用原型实现Class的各项语法

快乐非自愿限量之名

Java class 开发语言

从抖音API看电商行业的未来趋势

技术冰糖葫芦

API

云计算与低代码开发:提升软件开发效率的完美组合

快乐非自愿限量之名

云计算 低代码

软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用

霍格沃兹测试开发学社

从0到1:实验室设备借用小程序开发笔记

CC同学

WBTT:“Fair Launch”如何做到更加公平

大瞿科技

海外视频直播APP/多语言语聊APP提交Google Play,Easy Done详细步骤

山东布谷科技胡月

源码 视频社交APP开发 直播平台源码 社交直播APP开发 海外直播App开发

Navicat Premium 15 for Mac(数据库开发工具)v15.0.36中文激活版

iMac小白

体育视频在线观看-赛事直播平台,源代码降低开发复杂程度

软件开发-梦幻运营部

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