神经网络是怎么“看”东西的?激活图告诉你
点击上方关注,All in AI中国
作者——Jesus Rodriguez
可解释性是深度神经网络的最大挑战之一,尤其是对处理图像等非结构化数据集的神经网络而言是非常难的。换句话说,理解图像分类模型是如何构建其认知,是很困难的。虽然图像分类模型已被证明比人类等效系统更有效,但由于缺乏可解释性,限制了其适用程度。因为我们无法审计或有效地排除这些模型的故障。最近,来自谷歌和OpenAI的研究人员发表了一篇论文,提出了一种可视化的图像分类方法。
这篇研究论文的题目是"使用激活图探索神经网络"(https://distill.pub/2019/activation-atlas),它介绍了一种叫做激活图的技术,帮助我们理解当呈现出一个图像数据集时,神经网络"看到"了什么。激活图借鉴了神经科学的一些观点,试图理解神经网络中关于图像的表示。当我们通过眼睛接收视觉感官信号时,大脑的新皮质区处理这些信息。不同类型的视觉信号激活不同的神经元,这些神经元连接在一起,激活对感知对象的认知。认知不是由单个神经元构建的,而是由相互连接的神经元群构建的。
连接在一起构建特定认知表示的神经元这一"比喻"非常适用于图像分类模型。图像分类可解释性方面的最初工作主要集中在理解单个神经元所创造的表征,这虽然有帮助,但在试图理解网络层所产生的表征时会受到限制。其他的技术,比如成对激活(pairwise activations),专注于探索神经元之间的连接,考虑到图像分类模型的维数很高,这些技术往往不能很好地解决问题。
激活图
谷歌和OpenAI提出的技术起源于去年的"可解释性的构建块"(https://distill.pub/2018/building-blocks/)一文中介绍的方法,即调用特征可视化。从概念上讲,特征可视化是一种研究思路,它试图让我们"通过网络的眼睛"来回答这个问题。它开始于对单个神经元开始可视化研究(https://distill.pub/2017/feature-visualization/),并试图确定它们对什么有反应。 由于神经元不是独立工作的,这就导致了将特征可视化应用于"神经元的简单组合"(https://distill.pub/2017/feature-visualization/#interaction)。将特征激活应用于神经元群,对识别哪些神经元需要应用该方法提出了挑战。显而易见的答案似乎是研究对给定输入进行激活的神经元。但是,这种方法有一个限制,即它不能提供网络的完整视图,而只能提供为特定输入激活的部分。
让我们试着用一个基于人类大脑的基本类比来解释这一点。想象一下,当我们阅读不同的单词时,我们的大脑皮层会有多个区域被激活。在这个场景中,特征可视化意味着(我们所阅读的单词中)代表不同字母的神经元被激活。虽然这些信息仍然是相关的,但它并不能提供一个完整的画面,因为这些字母可以以多种方式组合形成不同的单词,换句话说这将导致不同相互连接的神经元被激活。
激活图建立在特征可视化的基础上,但是扩展它我们需要提供网络的全局视图。激活图的重点不在于输入图像、触发激活,而是提供常见神经元组合的可视化。在我们的单词识别示例中,激活图将显示常见单词组合的激活,从而更全面地了解其相关认知是如何在网络中创建的。
从技术的角度来看,激活图是通过从一百万幅图像中收集我们神经网络每一层的内部数据来构建的。这些活动由一组复杂的高维向量表示,通过UMAP(一种维数减少技术,保留了原始高维空间的一些局部结构)被投影到有用的二维布局中。下图说明了单个神经元的特征可视化与激活图之间的区别。
为了测试激活图谱的想法,谷歌和OpenAI创建了一个卷积神经网络(CNN),名为InceptionV1。体系结构由许多层组成,我们称之为"mixed3a"、"mixed3b"、"mixed4a"等,有时缩写为"3a"。每一层都是在前一层的基础上依次构建的。
要将激活图应用于InceptionV1,第一步是将图像输入网络并将其运行到感兴趣的层。让框架收集活动的数量。如果一个神经元被它所显示的东西所激发,它的激活值将是正值。结果如下图所示:
当使用单一的图时,激活图的好处与之前的一些图相比并不明显。激活图的主要贡献之一是,它可以无缝地应用于数百万幅图像的数据集。为了验证这一点,谷歌和OpenAI使用100万张随机数据集测试了InceptionV1。在这个过程中,该模型为每幅图像收集一个随机的立体激活,然后通过UMAP将其压缩为二维。然后它们被绘制出来,相似的活动被放置在彼此附近。最后,该模型绘制一个网格,对单元内的激活进行平均,并对平均激活运行特征反转。整个过程如下图所示:
为了在不同的图像分类模型上测试激活图,谷歌和OpenAI发布了一个非常引人注目的演示(https://distill.pub/2019/activation-atlas/app.html)。对于每个神经网络,你都可以通过模型"看到"相关解释。此外,该代码也可以直接用于不同的Jupyter notebooks上(https://colab.research.google.com/github/tensorflow/lucid/blob/master/notebooks/activation-atlas/activation-atlas-simple.ipynb)。
应用激活图是我所见过的在神经网络可解释性方面最具创造性的工作之一。通过提供对整个网络的可视性,激活图为我们提供了对神经网络不断发展的认知构建过程的独特视角,并提供了一种"查看黑盒子内部"的干净机制。
编译出品