北京最好白癜风医院 http://www.znlvye.com/神经网络的可解释性一直是所有研究人员心头的一团乌云。传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解,但是即使我们知道“第号神经元被激发了一点点”也毫无意义,并不能帮助我们理解神经元在网络中的意义。为了解决这样的问题GoogleBrain的一些研究人员开发了神经网络特征可视化方法。年上半年的时候,谷歌大脑的人员就尝试将神经网络理解图像并生成图像的过程进行可视化。随后他们开源了他们的代码DeepDream。这个方法出乎他们意料的是,竟然促成了一个小小的艺术运动,很多人通过可视化神经网络的技术生成了各种魔幻的作品。去年在在线期刊Distill上,谷歌大脑的研究人员再次使用这项技术将单个神经元在网络中是如何工作的进行了可视化,这项工作让我们可以看到在网络中间的各个神经元如何一步步检测到图像中的各个事物,并且让我们看到随着网络层次的加深图像如何越来越复杂。雷锋网曾经在下面这篇文章中详细介绍过《谷歌的新CNN特征可视化方法,构造出一个华丽繁复的新世界》但是去年的这项工作漏掉了一项重要的事情:这些神经元如何像网络那样连接起来的?继去年发布神经网络特征可视化方法之后,今天GoogleBrain在神经网络的可视化上又进了一步。GoogleBrain将这项工作称为「神经网络的核磁共振成像」,我们知道核磁共振技术是生理学家可视化大脑工作机理的最有用的工具之一。GoogleBrain在Distill发布的「TheBuildingBlocksofInterpretability」这篇文章中,作者探讨了如何将特征可视化与其他可解释性技术相结合,进而可以了解网络如何一步步做出决策的。这让我们能够「站在神经网络之中」看着网络如何一步步做出决策的整个过程。目前作者已经公开其全部代码Lucid,并放出colabnotebooks以方便任何人使用Lucid来重现他们的文章。雷锋网AI科技评论将GoogleBrain在Distill上的研究内容全文翻译如下:可解释性的基石前言研究神经网络可解释性的技术往往都是单独研究的。这篇论文里,作者们提出了强有力的可视化界面,让读者得以把各种技术结合在一起;不仅如此,现在还可以探索合并后的空间的复杂结构。比如,尝试把特征可视化(一个神经元在寻找什么)和归因(它对输出的影响如何)结合起来,我们可以开始探究网络是如何把拉布拉多和豹猫区分开的。从网络中发现,识别狗时有好几个检测软塌塌的耳朵的检测器发挥了重要作用;而检测猫时就换成了尖耳朵的检测器背景随着神经网络越来越成功,新的需求也随之而来,那就是解释它们是如何做出决定的:包括基础性的研究证据说明它们在真实世界中的表现如何,如何检测模型的偏倚,以及纯粹为了科研目标。为了达到这些目标,我们不仅需要构建足够深入的抽象,而且也需要以丰富的可视化形式把它们表现出来。然而,目前关于可解释性的绝大多数研究都并没有做出很好的成果。(几个很有价值的是VisualizingRepresentations:DeepLearningandHumanBeings,Understandingneuralnetworksthroughdeepvisualization(arXiv:.),UsingArtificialIntelligencetoAugmentHumanIntelligence)整个机器学习社区的主要精力都花在了开发更强有力的新方法上,比如特征可视化(featurevisualization)、归因(attribution)以及降维,以便理解和推理神经网络的行为。然而,这些技术都是各自沿着不同的研究路径在前进,相应需要的把成果具体化、实例化的研究却被忽略了。另一方面,人机交互研究社区已经开始探索为神经网络设计丰富的用户界面,不过他们对机器学习领域的抽象方法并没有多少接触。对于如何使用这些抽象结果,目前都还是以相对标准的方法。所以最终我们看到的就是过于简单的界面(比如显著性映射图或者相关的抽象神经元),其中有许多的值是留着未解释的。更糟糕的是,有很多关于可解释性的技巧并没有完全实施到抽象中来,因为研究者们并没有遇到什么压力来让结果更通用化和组合化。在这篇文章中,作者们把现有的各种可解释性方法看作基础的、可以相互组合的基础结构,在它们基础之上构建丰富的用户界面。他们发现这些互相独立的技巧也能够以统一的形式组合起来,在最后得到的界面中发挥补充性作用。更重要的是,这种统一的形式可以让我们系统地探索可解释性界面的整个空间,让我们得以评估它们是否达到了特定目标。下文中将展示各种样式的界面,从中展示网络检测发现了什么,并且解释网络对物体的理解是如何逐步生成的,同时还把其中涉及到的信息保持在适合人类理解的尺度下。比如,我们将会看到一个看到了拉布拉多犬的网络是如何检测它软塌塌的耳朵的,以及这种检测行为是如何影响网络的分类结果的。这篇文章的研究基于的模型是谷歌GoogLeNet,选用它展现作者们的界面构建想法的原因是因为其中的神经元有强于一般网络的语义性。虽然这篇文章中作者们采用的是精心选择的任务和网络结构,其中的基础抽象手段和组合它们的方式还是可以用在其它领域的神经网络中。让隐藏层有意义近期关于可解释性的大部分工作都涉及神经网络的输入和输出层。可以说,这主要是由于这些层具有明确的含义:在计算机视觉中,输入层代表输入图像中每个像素的红、绿、蓝通道的值,而输出层由类标签以及它们相关的概率。然而,神经网络的强大之处是在于它们的隐藏层——在每一层,网络都会发现新的输入表示。在计算机视觉中,我们使用神经网络在图像中的每个位置运行相同的特征检测器。我们可以将每个图层的学习表示看作一个三维立方体。立方体中的每个单元格都是一个激活,或者神经元激活的数量。x轴和y轴对应图像中的位置,z轴是正在运行的通道(或检测器)。图中用于计算机视觉任务的神经网络的不同的隐含层如何组成了激活值的“立方体”。对立方体的不同分割方法可以把激活值具体到单个神经元、单个空间位置或者单个通道理解这些激活是很困难的,因为我们通常将它们作为抽象向量来工作:通过特征可视化,我们可以将这个抽象矢量转换成更有意义的“语义字典”。根据可视化结果,似乎可以认为网络中有一些检测器,分别对应软塌塌的耳朵、凸鼻子、猫头、毛茸茸的腿、草地等等。为了制作一个语义词典,我们将每个神经元激活与该神经元的可视化进行配对,并根据激活的大小对它们进行排序。激活与特征可视化的结合改变了我们与潜在数学对象的关系。激活现在映射到图标表示,而不是抽象的索引,其中许多表现形式类似于人类的思想,如“松软的耳朵”、“狗鼻子”或“毛皮”。语义词典的强大功能不仅仅是因为它们摆脱了无意义的索引,还因为它们用典型的例子表达了神经网络的学习抽象。通过图像分类,神经网络学习一组视觉抽象,因此图像是表示它们的最自然的符号。如果我们使用音频,更自然的符号很可能是音频剪辑。这很重要,因为当神经元看起来符合人类的想法时,很容易将它们缩减为单词。但是,这样做是一项有损失的操作——即使对于熟悉的抽象,网络也可能学到了更深的细微差别。例如,GoogLeNet具有多个「松软耳朵」检测器,它们可以检测到耳朵的下垂度,长度和周围环境略有不同。也可能存在视觉熟悉的抽象概念,但我们缺乏良好的自然语言描述,例如,在太阳浮于水面的地方拍摄特定的光线。此外,网络可能会学习到对我们来说异乎寻常的新抽象概念——在这里,自然语言会使我们完败!一般来说,规范化的例子是一种更自然的方式来表示神经网络学习的外来抽象,而不是原生的人类语言。通过为隐藏层带来意义,语义字典为我们现有的可解释性技术设置了可组合的构建块。正如我们将看到的,就像它们的基础向量一样,我们可以对它们应用降维。在其他情况下,语义词典允许我们进一步推进这些技术。例如,除了我们目前使用输入和输出层执行的单向归因外,语义词典还允许我们将特定的隐藏层归属到特定的隐藏层。原则上,这项工作可以在没有语义词典的情况下完成,但是结果意味着什么还不清楚。网络看到了什么?语义词典让我们能够对某个激活进行细致的考察,即每一个单个神经元能够检测到什么。建立了这种表示之后,我们同样也可以将一个激活向量作为整体来考虑。这里不再是将单个神经元可视化,而是将在给定空间范围内处于fire状态的神经元组合进行可视化。(具体来说就是,我们优化图像,以最大化激活点与原始激活向量的点积)将这种技术应用于所有的激活向量,使我们不仅可以看到网络在每个位置检测到的内容,而且还可以了解网络对整个输入图像的理解程度。mixed4d层激活可视化另外,通过跨层(例如「mixed3a」,「mixed4d」)的工作,我们还可以观察到网络对输入的理解是如何发展的:从检测早期图层中的边缘,到后期更复杂的形状以及物体的部分。同一幅猫狗图像,不同层的神经元对同一个区域的激活可视化不过,前面的这些可视化忽略了一个关键的信息——激活的量级大小。我们通过按照激活矢量的大小来缩放每个单元的面积,就可以指出网络在该位置检测到特征的强度了:如何组装概念?特征可视化帮助我们回答了「网络能够检测到什么」这个问题,但是它并没有回答网络如何组装这些单独的部分来达成后面的决策,或者为什么会做出这些决策。归因(Attribution)是一组通过解释神经元之间的关系来回答这些问题的技术。现在市场上有各种各样的归因方法,但到目前为止却似乎没有一个能够给出明确的、正确的答案;事实上,我们甚至有理由认为我们目前的所有答案都不太正确。尽管如此,就本文而言,确切的归因方法并不重要,所以我们作为案例,使用一种最简单的方法——线性逼近关系。这种方法可以很容易地用其他任何技术来代替,所以未来对归因的改进也会相应地改善基于它们的界面。关于归因方法有很多重要的研究,但就本文而言,确切归因方法并不重要。我们使用一种相当简单的方法,线性逼近关系,但很容易用其他任何技术来替代。未来对归因的改进,当然会相应地改善基于它们的界面。显著图的空间归因最常见的归因界面称为显著图(saliencymap)——一种简单的热图,突出显示输入图像中最能引起输出分类的像素部分。我们发现这种方法存在两个缺陷。首先,不清楚个别像素是否应该是归因的主要单元。这里每个像素的含义与其他像素极为纠缠,即使对简单的视觉变换(例如,亮度,对比度等)也会有很差的鲁棒性,此外单个的像素还远离高级概念(如输出类)。其次,传统的显著图是一种非常有限的界面类型——它们一次只能显示一个类的属性,并且不允许你更深入地探究单个点。由于它们没有明确地处理隐藏层,因此很难全面探索隐藏层的设计空间。作为一种改进,我们将归因视为另一个用户界面的构建块(buildingblock),并将其应用于神经网络的隐藏层。这样做了之后,我们同时也改变了我们的问题,我们不再问特定像素的颜色是否对「拉布拉多猎犬」的分类很重要,而是问在这个像素位置检测到的高级别想法(例如「松软的耳朵」)是否重要。这种方法与类激活映射(CAM)方法类似,但由于它们将结果解释回输入图像,因此它们错过了以网络隐藏层的丰富行为进行交互的机会。越向后的层的归因结果看起来有越强的语义性。就像我们期待的那样,归因的结果就是软塌塌的耳朵、凸鼻子、猫头之类的我们熟悉的局部特征令人惊讶的是,mixed4d层中下方的凸鼻子特征和网球的特征有不少重合之处,这个特征之后也为“网球”和“拿着苹果的奶奶”这样的识别结果提供了支持上图的界面为我们提供了较为灵活的归因关系。首先,我们从每个隐藏层的每个空间位置向所有1,个输出类显示属性。为了将这个1维的向量可视化,我们使用降维来产生多向显著图。在我们多尺度的激活网格上叠加这些显著图,从而提供归因空间的信息。激活网格能够将语义词典建立的视觉词汇属性固定下来。在某个像素上悬停,我们可以看到这个空间位置最有助于哪些类别的输出。也许最有趣的是,这个界面允许我们交互式地查看隐藏层之间的归因。悬停时,额外的显著图会遮盖隐藏层,这在某种意义上就相当于「将光线照入黑箱」。这种层到层的归因或许将成为界面设计促进传统意义上可解释性抽象概括的一个主要例子。通过这个图,我们开始考虑更高层次概念的归因。但是在某个特定位置上,会同时检测到许多概念,通过这个界面很难将它们分开。如果还继续
转载请注明:http://www.cvwkh.com/jcff/14730.html