产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

“看透”神经网络

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

评论

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

接口优化的常见方案实战总结

京东科技开发者

批处理 预处理 企业号 3 月 PK 榜 接口优化 异步处理

数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年2月刊

墨天轮

MySQL 数据库 oracle postgresql 性能优化

开发者进阶必备的9个Tips & Tricks!

SEAL安全

开发者 企业号 3 月 PK 榜 开发人员

软件测试/测试开发 | 功能测试转测试开发,该如何写简历?如何与其他竞争者中脱颖而出?

测试人

软件测试 自动化测试 测试开发

服务老是被攻击,如何设计一套比较安全的接口访问策略?

做梦都在改BUG

干货分享!PCBA元器件间距的可焊性设计

华秋电子

图数据库认证考试 NGCP 错题解析 vol.02:这 10 道题竟无一人全部答对

NebulaGraph

图数据库

全局视角看技术-Java多线程演进史

京东科技开发者

jdk 多线程 Thread 企业号 3 月 PK 榜

堡垒机有硬件吗?推荐使用硬件堡垒机吗?

行云管家

云计算 网络安全 云服务 堡垒机

Tapdata Cloud 基础课:新功能详解之「微信告警」,更及时的告警通知渠道

tapdata

数据库·

TiDB Operator恢复持久卷上的备份文件

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 备份 & 恢复

云数据库TiDB试用初体验

TiDB 社区干货传送门

6.x 实践

再创佳绩!阿里云 4 篇论文入选顶会 FAST 2023

云布道师

阿里云 云存储

小程序成生活“标配”,成互联网商业的重要阵地

没有用户名丶

小程序化

中移链元交易功能对接说明

BSN研习社

王者荣耀商城异地多活架构设计

Geek_7d539e

TiDB Operator备份TiDB集群到NFS持久卷

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 备份 & 恢复

一天约了4个面试,复盘一下面试题和薪资福利

王中阳Go

Go 面试 面试题 简历优化 大厂突击

如何通过C#/VB.NET代码在Word中更改字体颜色

在下毛毛雨

C# .net word文档 字体 段落

豆瓣评分9.0!《Java核心技术与面试》神作,已助1374人拿到Offer

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

新兴应用场景层出不穷,电源管理芯片市场前景广阔

华秋电子

面试官:JVM是如何分配和回收堆外内存的?

做梦都在改BUG

Java JVM 垃圾回收

喜讯!华秋电子荣获第六届“高新杯”十大优秀企业奖

华秋电子

面试官:你了解Spring Security 权限控制吗?

做梦都在改BUG

Java spring spring security

手写模拟Spring底层原理-Bean的创建与获取

京东科技开发者

spring 接口 aop 代码 bean

解决80%的工作场景?GitHub爆赞的Java高并发与集合框架,太赞了

做梦都在改BUG

Java 高并发 JUC JCF

从 Netflix 传奇看,结果导向的产品路线图如何制定?(下篇)

LigaAI

敏捷开发 研发管理 研发效能 it路线图 企业号 3 月 PK 榜

等保二级必须要上的设备有哪些?需要堡垒机吗?

行云管家

等保 堡垒机 等保二级

头一次见!阿里牛人上传的600页JVM垃圾优化笔记飙升GitHub榜首

做梦都在改BUG

Java 性能优化 JVM 垃圾回收

面试官:在高并发情况,你是如何解决单用户超领优惠券问题的?

做梦都在改BUG

Java redis 高并发

平安银行与易观千帆签约合作,加速数字用户资产增长

易观分析

金融 银行

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