利用激活图谱探索神经网络-Exploring Neural Networks with Activation Atlases(上)


  • 瞎白话
  • 正文
  • 概览
  • 简介
  • 查看单张图像
  • 聚合多张图像

  • 原文链接
  • 原文作者列表
    • Shan Carter
    • Zan Armstrong
    • Ludwing Schubert
    • Ian Johnson
    • Chris Olah
  • DOI: 10.23915/distill.00015
  • 这篇文章原文来自Distill,Distill是一个深度学习的文章平台,致力于产出清晰,动态,生动的深度学习文章。其官网上的标语是:Machine Learning Research Should Be Clear, Dynamic and Vivid. Distill Is Here to Help。总而言之,Distill提供了一些更为生动,通俗易懂的深度学习文章,对于初学者和深度学习研究人员都是不错的阅读材料。

Distill 的 首页

Distill 的娘家人,居然有d3.js的作者。

利用激活图谱探索神经网络

我们通过使用特征反演(feature inversion)可视化了一个图像分类神经网络中的数百万个激活,创建了一个能够揭示神经网络通常如何表示概念的可自由探索的特征激活图谱。


图1 InceptionV1神经网络的激活图谱显示了许多完全实现的特征,如电子器件(图中A部分),建筑物(图中B部分),食物(图中C部分),动物的耳朵,植物,以及水作为背景(图中D部分)等。网格单元被标记为它们最支持的分类。网格单元的大小也根据内部平均激活数量的密度来确定。


  • Introduction(简介)

神经网络能够学习到比任何人类直接设计的系统更准确地分类图像的能力。一个自然而然的问题就是,神经网络究竟学习到了什么以至于能取得如此好的分类能力呢?

特征可视化尝试通过让我们看到“神经网络的视角”来回答这一问题。这些研究起始于对的单个神经元的可视化和尝试找到这些神经元在响应什么。因为神经网络中的神经元并不是单独工作的,这就导向了对简单的神经元组合的特征可视化。相应的另一个问题就是,我们应该研究哪些神经元组合的特征可视化呢?一个自然的回答就是根据激活值来挑选那些对于特定输入有较大响应的神经元。

这些方法十分有趣,因为我们可以通过特征可视化理解神经网络的隐藏层。这些隐藏层是神经网络胜过传统机器学习方法的核心,而从历史上看,我们对它们的作用知之甚少。特性可视化通过将隐藏层连接回输入来解决这个问题。

然而,激活值可视化有一个很大的缺陷,那就是它只能让你看到网络是如何看待单个的输入的。这样激活值可视化就无法给出整个网络层次的全局视图。当我们想要一张整个森林的地图时,一次检查一棵树是不够的。

有一些能够给出全局视图的技术,但这些技术也有一些缺点。举例来说,Karpathy的CNN codes visualization通过获取每个图像并根据它们在神经网络中的激活值来组织它们,进而提供数据集的全局视图。展示模型所认为的相似图像确实有助于我们推断网络对哪些特征做出了响应,但是特征可视化使这些联系更为明确。Nguyen等人使用t-SNE算法获得了更多样化的神经元可视化,通过对图像进行聚类,为t-SNE优化过程生成不同的初始化方式。这揭示了关于神经元检测到的内容的更全局的视图,但仍然仅仅关注于单个神经元。

本文将介绍激活图谱(activation atlases) 这一技术。一般来说,我们使用了类似于CNN codes 的技术,但没有展示输入数据而是平均激活的特征可视化图像。通过将这两种技术结合,我们就能够得到“神经网络视角”的全局视图。


图2 几种特征可视化技术的对比。上图中A表示的是单个神经元的特征可视化,将单个神经元可视化会使隐藏层有一定的意义,但却忽略了神经元之间的交互作用——它只向我们展示了高维激活空间的一维正交探针。B表示的是两个神经元组合的特征可视化,成对的相互作用揭示了相互作用的效果,但它们只显示了数百维空间的二维切片,而且许多组合是不现实的。C展示了空间激活的特征可视化。空间激活通过对可能激活的子流形进行采样,向我们展示了许多神经元的重要组合,但它们仅限于在给定的示例图像中出现的那些。D展示的是激活图谱提供的特征可视化。激活图谱通过对多种可能的激活进行采样,为我们提供了一个更全面的概况。

这些图谱不仅仅揭示了一个模型的抽象视觉表示,在后面的文章中我们将给出图谱可以展示模型使用了高层次的错误特征表示的例子。当然,激活图谱也有它的局限性。具体而言,激活图谱的生成依赖于我们用于采样的激活值对应的输出图像的数据分布(在我们的示例中,我们使用了从ImageNet数据集训练集中随机选择的100万张图像)。结果就是,示例中的激活图谱仅仅能显示样本数据分布对应的激活值。虽然明白这些局限性很重要,我们也会在后续深入讨论这些局限性,但是激活图谱仍然能够让我们对神经网络学习到的特征表示有了一种全新的认识。


图3 一个错误分类的示例,灰鲸加上棒球被神经网络认为更像是大白鲨而不是灰鲸或者棒球本身,下文将讲解错误分类的原因。


  • Looking at a Single Image(查看单张图像)

在深入了解激活图谱之前,让我们来简要地回顾一下如何使用特征可视化来让激活向量能被人所理解(”this is what we call see through the network’s eyes”)。这项技术先前在Build Blocks这篇文章中介绍过,而且也正是激活图谱技术的基石。

在这篇文中中,我们将集中于InceptionV1(也被大家称作GooglenNet)这一神经网络。在2014年ImageNet大型视觉识别挑战赛中,它赢得了分类任务的冠军。InceptionV1由许多层组成,我们称之为“mixed3a”、“mixed3b”、“mixed4a”等,有时简称为“3a”。每一层都是在前一层的基础上依次构建的。


图4 Inceptionv1的模型结构概览图。InceptionV1建立了对图像的多层理解,它是在ImageNet ILSVRC上训练的,每个层实际上都有几个组成部分,但在本文中,我们将重点讨论这些较大的block。

为了可视化InceptionV1如何查看图像,第一步是将图像输入到网络中并前向传播到感兴趣的层。然后我们收集激活值——每个神经元激活的数值。如果一个神经元被它所显示的东西所激发,它的激活值将是正的。

不幸的是,这些激活值的向量只是无单位数的向量,并不是特别容易被人理解的。这就是特性可视化的用武之地。粗略地说,我们可以把特征可视化看作生成能够让网络产生特定激活向量的理想化的图像。虽然我们通常使用网络将图像转换成激活向量,但在特征可视化中,我们走的是相反的方向。我们从特定层的激活向量开始,通过迭代优化过程创建图像。

因为InceptionV1是一个卷积网络,每层每幅图像都不只有一个激活向量。这意味着相同的神经元在前一层的每个batch上运行。因此,当我们通过网络传递整个图像时,每个神经元将被评估数百次,对于图像的每个batch一次。我们可以分别考虑每个神经元对每个batch的激活量。

图5 单张输入图像中不同的batch的特征可视化。图中INPUT IMAGE表示输入图像,IMAGE PATCH表示卷积运算的基本单位,ACTIVATIONS表示的是这一个Image Patch 对应的网络激活值,FEATURE VISUALIZATION表示的是单个Image Patch对应的特征可视化图像,最后ACTIVATION GRID中不同的方格中是不同的Image Patch对应的特征可视化图像。


图6 单张输入图像中的不同batch的特征可视化,右侧的可视化图像生成自InceptionV1网络的mixed4d层。

最终的结果是一个特征可视化网格,每个Image Batch一个。这向我们展示了网络如何看到输入图像的不同部分。


  • Aggregating Multiple Images (聚合多张图像)

“激活网格”能够展示神经网络是如何看待一个单张图像的,但如果我们想更多呢?如果我们想要看到网络如何响应数以百万计的训练集中的图像呢?

当然,我们可以一个一个的查看训练集中所有图像对应的“激活网格”。但是,这样的方法对于大规模的数据集是不适用的,而且人类本身也不擅长对无结构的样本的比较。就像是我们通过直方图理解统计规律,如果我们想要看到数百万个特征可视化图像中的模型就需要一种汇总和组织特征可视化图像的方法。

让我们先从收集数百万张图像的激活值开始,我们随机从每张图像的激活值中选择一个Image Batch对应的激活值(spatial activation)。这样我们就得到了数百万个激活向量,每个激活向量都是高维向量,比如说512维。面对如此复杂的数据,我们需要对其进行组织和汇总才能得到一个全局视图(big picture)。

值得庆幸的是,我们拥有现代化的降维技术。像t-SNE,UMAP这样的算法,能够将像激活值向量这样的高维向量降维到2维平面上同时保留原始维度空间的局部结构。降维算法可以用来组织我们的激活向量,但是我们还需要将其聚合成更易于管理的元素,投影图上有一百万个点的话将会难以解释。为此,我们将在通过降维创建的2D布局上绘制网格。对于网格中的每个单元,我们将平均化所有位于该单元边界内的激活,并使用特征可视化来创建图标表示。


图7 激活图谱的生成过程示意图。首先将一组随机选取的100万张图像输入网络,每张图像收集一个随机的空间激活。然后将激活向量通过UMAP算法降维后投影到2维平面上,在二维平面上绘制点,相似的激活向量被放置在相近的位置。最后在二维平面上绘制一系列网格,并将同一个网格内所有点对应的激活向量平均化然后通过特征反演(feature inversion)可视化平均后的激活向量。网格单元的大小与该落在网格内的激活向量对应的点数成正比。

我们使用Feature Visualization这篇文章中描述的正则化来执行特征可视化(特别是转换鲁棒性)。对每个激活向量还计算一个属性向量,属性向量对每一个类别都有一个值,并近似于激活向量对每个类别影响的大小。激活图谱中显示的网格内的属性是该网格内的激活向量的属性向量的平均值。

这个平均属性可以被认为是显示网格倾向于支持什么类别。在较浅的层中,平均属性是非常小的,而最支持的类别是相当随机的,因为像纹理这样的低级视觉特征在没有上下文的情况下往往没有什么区别。


图8 激活图谱的一小部分和其中每个网格所给出的“可能的标签”。

整个激活图谱乍一看有点让人信息过载,这反映了模型所学习到的抽象概念的多样性。让我们来深入的看一下整个激活图谱。


图9 激活图谱的左上角。如果我们看图集的左上角,就会看到像动物头的样子。不同类型的动物之间存在某些区别,但似乎更多是哺乳动物的元素(如眼睛,毛皮,鼻子)的集合,而不是其他非哺乳动物类的集合。我们还添加了标签,以显示每个平均激活最倾向于的类别。请注意,在网络浅层的某些层中,这些属性标签可能会有些混乱。


图10 激活图谱中的皮毛和四足动物的腿部。从左上角往下移动我们开始看到不同类型的皮毛和四条腿动物的背部。


图11 继续往下,我们发现不同的动物腿和脚搁在不同类型的地面上。


图12继续往下,我们开始失去任何可识别的动物部位,并看到孤立的地面和地板。我们看到属性标签开始变成 “沙洲”之类的,也有像地面上发现的诸如“门垫”或“蚂蚁”之类的东西。


图13 这些多沙的岩石背景慢慢融入海滩和水域。在这里,我们看到了水面之上和之下的湖泊和海洋。尽管该网络确实具有“海滨”之类的某些类别,但我们看到属性标签有许多海洋动物,而没有任何视觉上的提及动物本身。尽管并不意外,但可以放心的是,用于分类“海滨”类别的海洋的激活与分类“海星”或“海狮”时使用的激活相同。在这一点上,湖泊与海洋之间也没有真正的区别。“湖边”和“河马”的属性与“海星”和“黄貂鱼”混合在一起。


图14 现在,我们跳到激活图谱的另一侧,在那里我们可以看到文本检测器的多种变体。 当识别诸如“菜单”,“网站”或“书皮”之类的类时,这些将很有用。


图15 向上移动,我们看到关于人的许多变体。在ImageNet中,很少有专门用于识别人物的类,但是很多图像中都存在人物。我们看到属性大都是人们使用的东西(“锤子”,“长笛”),人们穿的衣服(“领结”,“足球衫”)和人们参与的活动(“篮球”)。在这些可视化中,肤色具有统一性,我们怀疑这是用于训练的数据分布的反映。

图16 最后,重返左部,我们可以看到主要由颜色组成的圆形食物和水果-我们可以看到诸如“柠檬”,“橙色”和“无花果”的属性标签。


图17 此外,我们还可以在总的激活图谱上划线追踪特征可视化图像的变化,不仅仅是因为这些区域本身就很重要,曲线上的特征可视化图像的变化似乎也是人类可以理解的。以水果举例来说,我们可以追踪一个与尺寸和数量相关的变化路径。


图18 相似的,对“人”这一个类别来说,我们也可以找到一条与图像中人数相关的路径。

图19 在于地面相关的特征可视化图像中,我们能够找到一条从“水”到“海滩”再到“岩石悬崖”的路径。


图20 在与植物相关的区域,我们可以找到一条似乎与植物模糊程度相对应的路径。由于照相机的典型焦距,这可能被用来确定物体的相对大小。近距离拍摄小昆虫的照片比拍摄大动物(如猴子)的照片有更多模糊化背景树叶的可能。

需要注意的是,这些路径是在低维投影中构造的。在低维度的投影中,它们是平滑的路径,但我们并不知道这些路径在原始的高维激活空间中是怎样的。


利用激活图谱探索神经网络-Exploring Neural Networks with Activation Atlases (上)相关推荐

  1. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)

    前面, 介绍了DNN及其参数求解的方法(深度学习之 BP 算法),我们知道DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸.那么,人们又是怎么解决这个问题的呢?本节的卷积 ...

  2. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)

    前面我们说了CNN的一般层次结构, 每个层的作用及其参数的优缺点等内容.深度学习之卷积神经网络(Convolutional Neural Networks, CNN)_fenglepeng的博客-CS ...

  3. 卷积神经网络Convolutional Neural Networks深度解析I

    知识的广度来自知识的深度,学习如果不成体系那是多可怕的一件事儿,希望我们在未来的学习道路上坚守初心,不要给自己留下遗憾,以自己喜欢的方式生活,做自己喜欢做的事,宠爱自己,做一个独一无二的自己! 对于文 ...

  4. 基于激活聚类的后门检测:Detecting Backdoor Attacks on Deep Neural Networks by Activation Clustering

    Detecting Backdoor Attacks on Deep Neural Networks by Activation Clustering 网址:https://arxiv.org/abs ...

  5. 利用Theano理解深度学习——Convolutional Neural Networks

    注:本系列是基于参考文献中的内容,并对其进行整理,注释形成的一系列关于深度学习的基本理论与实践的材料,基本内容与参考文献保持一致,并对这个专题起名为"利用Theano理解深度学习" ...

  6. 《DeepLearning.ai》第十课:卷积神经网络(Convolutional Neural Networks)

    第十课:卷积神经网络(Convolutional Neural Networks) 1.1 计算机视觉(Computer vision) 通常如果处理大图用传统的神经网络需要特别大的输入,因此需要大量 ...

  7. 深入解析神经网络(Neural Networks)工作原理

    目录 1. 神经网络的基本组成部分 2. 神经元和激活函数 3. 前向传播 4. 反向传播 5. 神经网络的层次结构 6. 神经网络的应用 7. 使用Python和TensorFlow库实现简单神经网 ...

  8. 图神经网络 | (2) 图神经网络(Graph Neural Networks,GNN)综述

    原文地址 本篇文章是对论文"Wu Z , Pan S , Chen F , et al. A Comprehensive Survey on Graph Neural Networks[J] ...

  9. 图神经网络 Graph Neural Networks 系列(1)图神经网络基础知识介绍

    图是一种对一组对象(节点)及其关系(边)进行建模的数据结构.近年来,利用机器学习分析图的研究越来越受到重视,因为图具有很强的表现力,即图可以作为社会科学(社会网络)和自然科学等多个领域中大量系统的表示 ...

最新文章

  1. 【许晓笛】 EOS智能合约案例解析(1)
  2. RESTful Web 服务 - 消息
  3. 【小白成长撸】--二分查找
  4. 物理层协议有哪四大特性
  5. 计算机基础函数运用,计算机应用基础第十二讲:EXCEL中函数的实际运用.doc
  6. SQL Server 中系统表的作用
  7. Dubbo即将毕业,晋升为Apache顶级项目?
  8. xampps mysql无法启动
  9. redis配合LUA脚本
  10. QODBC查询Oracle中文乱码问题
  11. mysql实现oracle的同义词_Oracle 同义词synonym 学习
  12. 联合办公室出租,富有办公成效
  13. 如何在Mac系统上查看端口占用和释放端口的情况?
  14. 第6章 垃圾邮件识别
  15. python数据挖掘入门与实践-第一章-用最简单OneR算法对Iris植物分类
  16. Android 开发基于 Jenkins 实现持续集成
  17. Arduino与Proteus仿真实例-TFT显示屏(ILI9341驱动器)SPI驱动仿真
  18. C# 中 throw ( 抛出异常 )的用法
  19. Android:访问存储失败.FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted)
  20. HTML中input输入框动态模糊匹配

热门文章

  1. 实用Python程序设计测验:数字统计
  2. 移动端cpu天梯图2020_笔记本CPU排行天梯图2020
  3. Appium JAVA ios 设备 AUT not install
  4. Generality
  5. VMware拟收购云应用管理服务商Wavefront
  6. 小学生计算机课如何上,如何上好小学信息技术课
  7. 2018春招京东实习编程题解
  8. revit怎么看服务器文件,Revit载入族后,如何快速找到族文件?
  9. GD32E230开发笔记-GD32选型
  10. windows,打印机无打印任务,仍不断打印