首页 > 通知公告 > >一图抵千言:带你了解最直观的神经网络架构可视化
通知公告

一图抵千言:带你了解最直观的神经网络架构可视化

时间:2018-10-04 04:18作者:admin打印字号:

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  Keras 是一个高级深度学习框架,因此它具有生成美观的可视化图的巨大潜力。(注:如果你想使用用于 Jupyter Notebook 的交互训练图,我写了一个:livelossplot(ed/livelossplot)。)然而在我看来,Keras 的默认可视化选项(使用 GraphViz)并非一流:

  这张图在配色方面还可以做得更好,不过我喜欢它简洁的形式。图中还清晰地说明了通道数量,将每一个复杂的层清晰地分解为其构造块,保留了所有的细节(注意 3 级层级结构)。

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  每个可视化的图像都是不同的——不仅是风格不同,它强调的重点和抽象的内容也不同。那么哪些是重要的呢?层数、层与层之间的连接、卷积核大小还是激活函数?这都要视情况而定。抽象意味着「独立思考事物联系和属性的过程」。东风三家公司发布合并公告 大国企继续...!难点在于确定哪些要重点强调,以及哪些可以简要概括。

  这些主题中的每一个都可以写一篇硕士论文,而将所有的合并在一起就可以写一篇博士论文(尤其是对人们如何进行可视化以及应该将哪些内容抽象进行细致的研究)。

一图抵千言:带你了解最直观的神经网络架构可视化

  这很可爱对吧?但这张图没有什么艺术性可言。它只是散射振幅的图形表示,这张图中的每条线都是一个传播子,每一个顶点都表示点和点的交互。这张图可以直接变成下式:

一图抵千言:带你了解最直观的神经网络架构可视化

  虽然这张图呈现了计算结构,但还是有些啰嗦(比如将偏置项作为单独的操作添加进去)。此外,它掩盖了网络最重要的部分:操作中的核心参数(如卷积核的大小)以及张量的大小。尽管有这么多的不足,我还是推荐大家阅读完整的论文:

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  要明确的是:只要我们不混淆艺术价值和教育价值,则数据艺术自身就有价值。如果你喜欢我的观点,那么我鼓励你用像火花或五颜六色的大脑这样的 3D 动画可视化真正的卷积网络。

一图抵千言:带你了解最直观的神经网络架构可视化

  以另一个复杂的理论——量子场论为例。如果你想要呈现电子-正电子的湮没过程,就要创建一个 μ 子-反 μ 子对,下图是费曼图(一阶项):

一图抵千言:带你了解最直观的神经网络架构可视化

  你可以手动绘制网络。像 Chris Olah 那样用 Inkscape、如果你喜欢 LaTeX 的话可以用 TikZ,也可以用其他工具。你也可以自动生成图像。

  如果目的是呈现网络架构同时说明内部工作原理的话,这样的图就显得非常有用了。在教程中它们似乎尤其有用,例如 。

一图抵千言:带你了解最直观的神经网络架构可视化

  图示可用于解释由更小的模块(例如几个后面的卷积)组成的复合模块。看一下这个 Inception 模块的图:

一图抵千言:带你了解最直观的神经网络架构可视化

  有人会辩解:开发新算法和调参是真正的科学/工程,但视觉呈现则属于艺术领域,且毫无价值。我完全不同意这种观点!

一图抵千言:带你了解最直观的神经网络架构可视化

  机器之心《全球500强上市公司人工智能战略适应性报告》重磅发布。17个行业,140家上市公司,纵览500强落地人工智能的成与败。返回搜狐,查看更多

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  我所说的「理解」不是指精神上的启蒙,而是建立一个我们能够使用的心理模型(用于解释、简化、修改和预测 what-if 情景等)。一般而言,图表会比口头说明更清晰:

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  这个结构适用于小型序列网络架构。我发现它对训练和「Starting deep learning hands-on: image classification on CIFAR-10」这样的课程很有用。但对更高级的项目则毫无用武之地(有人建议我用这篇 git 日志中的分支可视化工具())。显而易见,我不是唯一一个试着用 ASCII 美化神经网络可视化图的人:

  在了解网络架构之前,我们先来关注一下网络的基本构建模块——层。例如,可以用下式描述长短期记忆模型(LSTM)单元:

  当然,如果你对矩阵乘法熟悉的话,可以很容易地解出这些等式。但解出这些等式是一回事,理解它们就是另一回事了。我第一次看到 LSTM 的公式时就可以解出来,但我不知道它们是什么意思。

  注意,这里的节点表示张量,箭头表示操作。我发现这张图非常清楚——我们可以看到张量的形状、卷积操作以及池化操作。因为原始的 U-Net 架构不是很复杂,因此我们可以不看它的层级结构。

  但对大型模型而言,解释性的图可能太过复杂或太过具体,以至于它们无法在一个图内呈现所有可能的层。所以就要用抽象图。一般而言,节点表示运算,箭头表示张量流。比较 VGG-19 和 ResNet-34:

  你可能觉得我是想让深度学习的文章看起来更具吸引力。可是让图表更好看也没什么坏处啊。当我在进行数据探索时,我一般会用好看的配色方案,以使读者获得更好的阅读体验。我的主要观点是将可视化图像转变为更高效的沟通手段。

  该项目没有处于积极开发状态,但它支持 TensorFlow.js。由于它是开源且模块化的(用了 Vue.js 框架),它可以作为创建独立的可视化项目的起点。在理想情况下,用 Jupyter Notebook 或单独的浏览器窗口工作,就像用 displaCy 分解句子一样。

  《理解 LSTM 网络》是一篇关于 LSTM 的好文章,这篇文章一步步解释了 LSTM 的原理。这篇文章使我灵光一现,将一组看似随机的乘法集合转换为写作(阅读)数据的合理方法。

  下面就来了解一下神经网络架构的(数据)可视化。下图是 VGG16 的架构,VGG 16 是用于图像分类的标准网络。

  神经网络是复杂、多维、非线性的数组运算。如何在避免过于复杂或重复的情况下呈现深度学习模型架构的重要特征呢?又该以何种方式清晰直观、启发性地呈现它们呢?(好看也是加分项!)无论研究还是教学项目对此都没有固定标准。本文我们就来了解一下可视化整个神经网络架构和特定模块的工具和技巧。

一图抵千言:带你了解最直观的神经网络架构可视化

  我猜你肯定会说:「这显然是数据可视化」。就本例而言,我们的意见出现了分歧。虽然这张图的配色方案很好,而且相似结构的重复看起来很愉快,但要根据这张图实现这个网络还是有难度的。当然,你能得到这个网络架构的重点——即层的数量以及模块的结构,但是要想重现该网络只有这些还不够(至少在没有放大镜的情况下是无法实现这个网络的)。

  这篇文章提供了一些有关从下而上创建网络图所遇到的挑战的见解。虽然我们可以使用所有 TensorFlow 的操作,包括辅助操作(例如初始化工具以及日志工具),但做出一张通用的、可读的图依旧是个挑战。如果读者重视的东西我们却不重视,那就没法做出将 TensorFlow 计算图转变为有用的(比如发布就绪)图的通用工具。

  我希望你能意识到你已经在用视觉表示——代码(文本就是一种视觉表示!)——来与计算机进行交互。对某些项目而言,代码就足够了,尤其是如果你用的是简洁的框架(如 Keras 或 PyTorch)。对更复杂的架构来说,图会增加一些解释性的价值。

  当然,对于运行程序的计算机而言,代码没有缩进或者变量命名比较模糊可能无伤大雅。但对人类则不然。学术论文不是一种发现方式,而是交流方式。

  我会把下方的图作为数据可视化的很好示例。迷幻的图像不意味着就是数据艺术。这个例子的重点在于网络架构抽象化以及相关数据的呈现(激活给定通道的输入图像)。

一图抵千言:带你了解最直观的神经网络架构可视化

  AlexNet 是突破性的架构,它使卷积网络(CNN)成为处理大型图像分类任务的主要机器学习算法。介绍 AlexNet 的论文呈现了一张很好的图,但是好像还缺点什么……

  我可能更偏向于「使事情更简单」,就像我在 Java 中处理复杂张量运算一样,而且提前可视化结果是一件很酷的事情。在量子力学和深度学习中,我们都可以用张量结构做大量线性代数的运算。事实上,甚至有人用 Pytorch 实现爱因斯坦求和约定。

  不需费力也能看出这张图的上半部分被意外裁掉了,而这张图会贯穿后续所有的幻灯片、参考文献等。在我看来,这说明在深度学习的研究中,可视化并不受重视(当然也有一些例外,比如线上期刊 Distill)。

一图抵千言:带你了解最直观的神经网络架构可视化

  TensorBoard 可以说是最常用的网络可视化工具。下图所示是一个 TensorFlow 网络图:

一图抵千言:带你了解最直观的神经网络架构可视化

  为了让图像变得清楚,出版物一般会为数据艺术留有一定的空间。例如,在一个用于检测皮肤状态的网络中,我们可以看到 Inception v3 特征提取层的图。很明显,作者只是使用该模型并用图表示了出来,而没有解释其内部工作原理:

一图抵千言:带你了解最直观的神经网络架构可视化

一图抵千言:带你了解最直观的神经网络架构可视化

  我们可以看到每一步的张量大小以及操作(用颜色标记)。它不是抽象的——盒子大小与张量形状相关。但厚度和通道数量并不成比例。

一图抵千言:带你了解最直观的神经网络架构可视化

  我们可以看出,上图存在一些冗余,因为有一些重复使用的单元。由于图像可能很长,最好是找到其模式并对其进行合并。这样的层级结构使理解概念以及从视觉角度呈现它们变得更加简单(除非我们只想创建 GoogLeNet 的数据艺术图)。

  很美吧。对我来说,它看起来就像是有生命的——像是一个带有细胞器的细胞。但是我们能从中推断出什么吗?你猜得到它其实就是 AlexNet 吗?

上一篇:湖南一品佳餐饮管理有限公司牵手MCHR实现企业人力资源流程电子化
下一篇:没有了