查看原文
其他

激活地图集:深入探索图像分类的神经网络

Google 谷歌开发者 2019-11-01

文 / Shan Carter,Google AI 软件工程师


神经网络已经成为图像相关计算任务的事实标准,目前正部署于多个场景,范围涵盖从在图像库中自动标记照片到自动驾驶系统的多个领域。这些机器学习系统已得到广泛使用,变得无处不在,这是因为其执行准确率要高于人类在不使用机器学习技术的情况下直接设计的任何系统。但由于这些系统的基本细节是在自动化训练过程中习得,因此有时候要了解网络如何处理给定任务仍然有点困难。

我们与 OpenAI 的同事联合发表《使用激活地图集探索神经网络》(Exploring Neural Networks with Activation Atlases) 一文,向大家介绍一项新技术,该技术有助于回答以下问题:当我们为图像分类神经网络提供图像时,它从中 “看” 到什么?激活地图集为我们提供一种了解卷积视觉网络的新途径,让我们可以从全局、分层次且人类可理解的角度,大致了解网络隐藏层中的概念。我们认为激活地图集揭示了图像的机器学习字母表,即一组简单的原子概念,这些概念经组合及重新组合,最终形成更复杂的视觉想法。我们还会发布一些 Jupyter 笔记,助您着手制作自己的激活地图集(https://github.com/tensorflow/lucid#activation-atlas-notebooks)


激活地图集的详细视图,源自 InceptionV1 视觉分类网络的其中一层。其中揭示了网络用来分类图像的多个视觉检测器,例如不同类型的水果状纹理、蜂巢图案和织物状纹理


下图所示的激活地图集是使用卷积图像分类网络 Inceptionv1 构建,而该网络曾在 ImageNet 数据集上进行训练。通常,我们会向分类网络展示一张图像,然后让其从 1,000 个预定类中为该图像指定一个标签,这些类包括“培根蛋面”、“通气管” 或 “煎锅” 等。为此,我们的网络会经过大约十层,逐步评估图像数据。其中每层由数百个神经元构成,而每个神经元根据不同类型的图像块,在不同程度上进行激活。某一层的某个神经元可能对狗的耳朵作出积极响应,而前一层的另一个神经元可能对高对比度的垂直线作出响应。
注:Inceptionv1 链接

https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models

激活地图集的构建方法是从一百万张图像中收集神经网络每一层的内部激活向量。这些激活向量由一组复杂的高维向量表示,并通过 UMAP 投射到有用的 2D 布局中。UMAP 是一种降维技术,能够保留原始高维空间的某些局部结构。 

注:UMAP 链接

https://github.com/lmcinnes/umap


这涉及到整理激活向量,但我们还需要将向量汇总,以便于管理。若保留所有向量,则数量过多,无法快速消耗。为此,我们在创建的 2D 布局中绘制网格。我们平均分配网格中每个单元格内的所有激活向量,然后使用特征可视化创建图像表示。


左侧:将一百万张随机图像构成的图像集输入网络,每张图像收集一个随机空间激活向量。中间:将激活向量输入 UMAP,以将其降到二维。然后针对这些激活向量绘制地图,并将相似的激活向量放置在彼此附近。右侧:随后我们绘制一个网格,平均分配单元格内的激活向量,然后对平均后的激活向量执行特征反演

  

以下只是神经网络其中一层的激活地图集(请记住,这些分类模型可能有六层或更多层),揭示了网络为在此层分类图像所学习的所有视觉概念。乍看之下,该地图集可能有些令人不知所措,因为涵盖的内容太多!这种多元化反映出模型所开发的视觉抽象和概念的多样性。


Inception v1 多层中其中一层 (mixed4c) 的激活地图集概览,大约是网络的中间层


在这张详图中,我们可以看到不同类型的叶子和植物的检测器


我们可以在这张图上看到不同的水、湖泊和沙洲检测器


我们可以在这张图上看到不同类型的建筑物和桥梁


正如我们之前提到的,该网络中还有很多层。我们来看看这层之前的层,了解当我们深入探索网络时,这些概念如何越来越细化(每个层在前一层的激活向量上构建其激活向量)。


在早前的 mixed4a 层中,有个模糊的 “哺乳动物” 区域


到了网络的下一层 mixed4b,动物和人类已被分开,中间区域出现一些水果和食物


到 mixed4c 层,这些概念得到进一步细化,并分化成很小的 “半岛”


至此,我们看到整体结构逐层演变的过程,而每个单一概念也在该过程中变得更加具体和复杂。如果仔细观察三层中用于分类具体对象(例如 “卷心菜”)的区域,我们便可清楚地看到这一点。


左侧:与其他层相比,这个早期层非常不明确。中间:到了中间层,这些图像清楚地呈现叶状物,但也可能是任何一类植物。右侧:到了最后一层,图像非常具有针对性,呈现的是叶子弯曲成圆球状的卷心菜


另一个值得注意的现象是:当您逐层移动时,不仅概念会得到细化,而且新概念似乎并不在旧概念的组合之内。


您可以看到沙子和水在中间层 mixed4c(左侧和中间)是非常不同的两个概念,两者都极有可能归类为“沙洲”。但是与后一层 mixed5b(右侧)相比,这两个概念似乎融合成一个激活向量


除了针对特定层放大整个地图集的某些区域,我们还可以在特定层为 ImageNet 1,000 类中的一类创建地图集。这将展示网络最常用来分类特定类(例如 “赤狐”)的概念和检测器。


在这张图中,我们可以更清楚地看到网络为分类“赤狐”所关注的区域,其中包括尖尖的耳朵、被红色皮毛包围的白色鼻子,以及树木繁茂或白雪皑皑的背景


在这张图中,我们可以看到 “瓦屋顶” 检测器许多不同的尺度和角度


在这张 “野生山羊” 图中,我们看到作为检测器的角和棕色皮毛,以及岩石山坡等可能发现这种动物的环境


与瓦屋顶检测器一样,“朝鲜蓟” 也有许多大小不同的检测器,用于检测朝鲜蓟的纹理,不过还有一些紫色花朵检测器。这些检测器可能是用来检测朝鲜蓟植物的花朵


这些地图集不仅展示模型中具有细微差别的视觉抽象概念,还揭示了深深的误解。例如,通过查看 “大白鲨” 激活地图集,我们可以看到水和三角形的鳍(与预期相符),但我们也看到外形类似棒球的东西。这暗示此研究模型采用了捷径,将红色的棒球针脚与大白鲨张开的嘴合并在一起。



我们可以测试这一点,方法是使用一块棒球图像,将模型的特定图像分类从 “灰鲸” 切换为 “大白鲨”。



我们希望激活地图集能够成为一款有用的工具,可以在提升机器学习普及度和可解释性的众多技术中占有一席之地。为了帮助您入门,我们发布了一些 Jupyter 笔记,您只需通过 Colab 点击,即可立即在浏览器中执行。这些笔记是以之前发布的工具包 Lucid 为基础进行构建,其中包括许多其他可解释性可视化技术的代码。我们期待了解您的发现!

注:Colab 链接

https://colab.research.google.com/

Lucid 链接

https://github.com/tensorflow/lucid



更多 AI 相关阅读:



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存