特征可视化 Feature Visualization

 

Feature Visualization::https://distill.pub/2017/feature-visualization/

tensorlow中tensorboard可视化展示训练过程

特征可视化 Feature Visualization_第1张图片特征可视化让我们看到,在ImageNet数据集训练下,GoogLeNet把图像分割成了多个图层

编者按:近日,谷歌大脑团队Chris Olah、Alexander Mordvintsev和Ludwig Schubert在distill发布了文章,介绍GoogLeNet在神经网络特征可视化上的最新进展。在文章中,作者用图文形式介绍了优化对特征可视化的“双刃剑”作用,并指出,特征可视化作为最有希望解释神经网络的工具,它本身还有诸多问题亟待解答。那他们的依据是什么呢?请跟着这个传奇团队中最年轻的90后“辍学”科学家Chris Olah去一探究竟。

随着神经网络应用范围的不断扩大,越来越多的人开始觉得,神经网络需要被注解。而近年来,业界也正在努力解释神经网络是什么,这些研究主要集中在两大类:特征可视化和属性。

特征可视化 Feature Visualization_第2张图片特征可视化可以解释(部分)神经网络到底在图片中寻找什么样本

本文将围绕特征可视化研究展开讨论。虽然特征可视化是一种强大的工具,但它在具体操作上涉及诸多细节,因此文章将涉及一些优化可视化品质的简单技巧。

优化

一般来说,神经网络在输入上是可做区分的,如果我们想知道各种输入各自会产生什么结果——无论是内部神经元连接环或最终输出——我们都可以直接用相关工具进行反复调试。

特征可视化 Feature Visualization_第3张图片从随机噪声开始,我们用图像激活特定神经元

道理虽然简单,但其中的优化步骤却很复杂。

优化目标

我们想要什么样的样本?这是这类工作的一个核心问题,它关系到具体操作时是直接找一个现成的数据集还是从头创建一个新的,毕竟可选择的范围太广了。

特征可视化 Feature Visualization_第4张图片不同的优化目标显示神经网络正在寻找的不同对象 layer:层 x,y:空间位置 z:途径 k:类

如果目标是了解个别特征,那可以选取在神经网络的局部和整体中都有不错表现的高质量样本(本文图片筛选方案)。

如果目标是了解整个图层,那可以直接用DeepDream取预训练模型中最“有趣”的某一层。

如果目标是从一个分类器创建输出类的样本,那有两个选择,在softmax之前优化逻辑层,或在softmax之后优化概率层,通过logits和probabilities来找出规律。经试验,我们发现后者的效果并不尽如人意,调整logits会获得更好的图像。

当然,以上的三条只是粗浅的建议,读者大可以进行更多尝试。值得注意的一点是,基于深度学习的图像风格迁移是近年来新兴起的技术,它证明了神经网络能够理解多种图片风格类型,通过它,我们能更快掌握模型保留和舍去的部分,帮助高效优化目标。

为什么要进行优化?

也许有人会有疑问,优化确实提供了一个可以输出我们所需内容的目标,但为什么要这么麻烦呢?直接取一个可以达成相同效果的数据集不是更方便?事实证明,只有通过优化,我们才能知道模型真正需要的是什么,从抓住影响输出的图片本身,到抓住影响输出的图片核心。如下图所示:

特征可视化 Feature Visualization_第5张图片通过数据集训练,模型能分辨出对象是什么

特征可视化 Feature Visualization_第6张图片优化使模型能从相关性中分离本质

此外,优化比数据集更灵活。如果我们想研究神经元如何共同表达信息,我们可以处理一张特定的图,只在目标神经元激活位置做调整,而不做其他改变。这种灵活性还可以帮助实现神经网络特征训练的可视化。只有通过优化,我们才能脱离数据集,进行更多的探索。

多样性

对于神经网络模型,训练数据选取的全面性、完整性至关重要,这直接影响模型的准确性。不够丰富的样本影响的不仅是模型精度,还可能产生误导。在这方面,数据集展现出了它的优势。通过数据集,我们可以找到各种不同的样本,它们带来的不单单是一个被强烈激活的神经元,还有整个激活范围、激活程度。

特征可视化 Feature Visualization_第7张图片

相比较之下,优化只能产生一些非常积极的样本,当然如果我们有足够的想象力,它也可以产出非常消极的样本。那优化究竟能不能提供这种多样性呢?

通过优化实现多样性?

神经网络的一个给定功能是对广泛的输入做出响应。例如,经训练的分类器能根据面部特写和更宽的特征图像识别出狗,即使目标是一大群长相各异的狗。早期曾有学者做过这类尝试,他们在整个训练集上记录激活展示这种多样性,把它们聚类并进行优化,从而揭示各种影响的不同方面。

另一批学者则试图通过在数据集中抽取不同图片,将其作为优化的样本。他们的想法是利用多重优化找出神经元激活特征,但效果有限。后来他们转变了思路,把可视化类和生成模型结合在一起,获得了更多不同的样本,效果显著。

而我们采取的做法更简单:增加一个diversity term,即多样性项,来实现多个样本互相不同的目标。这样,样本的多元化可以有大量不同形式,但我们目前对它的优点还缺乏了解。我们推想的一种可能性是惩罚余弦相似性,另一种则是仿照风格迁移,强制特征以不同形式显现。

在较低级别的神经元中,多样性项可以揭示特征所代表的不同方面:

特征可视化 Feature Visualization_第8张图片

中图为多样性项下优化呈现的4种不同弯曲

不同的特征可视化能帮助我们更精准地确定神经元的激活程度,以及调整激活程度。通过检查数据集,我们也能预测何种输入能激活目标神经元。让我们先举一个例子:

特征可视化 Feature Visualization_第9张图片

数据集样本

特征可视化 Feature Visualization_第10张图片

简单优化

数据集样本是一些狗,通过简单优化,乍看之下我们可能会判断狗头顶部的神经元被激活,因为优化只显示狗的双眼和一条向下弯曲的边缘弧线。

特征可视化 Feature Visualization_第11张图片

多样性优化

然而,多样性优化得到的特征推翻了这一推论。除了向下弯曲的弧线,图中还有一些向上弯曲的弧线,甚至还有质地、纹理、颜色等信息,而原本非常突出的眼部特征在这里反而被弱化了。这证明皮毛位置部位的神经元其实也被激活了。

在更高级别的神经元中,这种由多样性带来的差异更加显著。以下是另一个示例:

特征可视化 Feature Visualization_第12张图片

数据集样本


特征可视化 Feature Visualization_第13张图片

简单优化

特征可视化 Feature Visualization_第14张图片多样性优化

从这两个例子中可以看出,多样性项虽然在操作上更简单,但它也存在一些缺点,如在多样性项强制差异化的高压下,模型会出现许多无关的伪像(如眼睛)。此外,经优化的图像也更不自然,在上图中,人们希望看到的是足球和其他球的明显不同。这种情况下,之前提到的在训练集上记录激活能实现更自然的分离,但是它对理解模型和数据不会有太大帮助。

多样性也刷新了我们对一个基本问题的看法:虽然神经元在上两个例子中表现出的激活状态大体一致,但也有部分神经元出现了一些奇怪的混合。如下图中,一个神经元同时被两种动物的面部,甚至汽车激活。

特征可视化 Feature Visualization_第15张图片数据集样本

特征可视化 Feature Visualization_第16张图片

简单优化


特征可视化 Feature Visualization_第17张图片多样性优化下显示的猫、狐狸和汽车

这样的案例证明,神经元不一定是神经网络的基本语义单位。

神经元之间的相互作用

如果神经元无法解释神经网络,那会是什么?在现实生活中,神经元通过协同工作表示神经网络中的图像,单个神经元是激活空间的基本方向,我们并不清楚它是否会比其他方向上的更特殊。Szegedy等人曾做过实验,发现随机方向和基本方向意义基本一致。最近Bau、Zhou等人也发现比起随机方向,基本方向更具可解释性。而我们的结论和他们大体相同:随机方向看起来可以被解释,但是它的速度比基本方向慢。

特征可视化 Feature Visualization_第18张图片

数据集样本和被激活空间随机方向的优化样本

我们还可以通过对神经元进行数学运算来定义激活空间中的有趣方向,如,将“黑白”神经元添加到“马赛克”神经元中,我们就能获得一个黑白的马赛克。这和Word2Vec生成词向量有些类似。

特征可视化 Feature Visualization_第19张图片通过优化两个神经元,我们可以了解它们如何相互作用

上图展示了神经元是如何共同生成图像的,为了更好地理解其中的相互作用,我们可以仿照在生成模型的潜在空间中插值,在神经元之间进行插值。

特征可视化 Feature Visualization_第20张图片

当然,这只揭示了相互作用的表面,我们并不知道如何挑选有意义的方向,也不知道这些意义是来自方向,抑或是来自相互作用。差值只能展示少数方向上的相互作用,事实上,这样的方向有数百个之多。

特征可视化的“敌人”

如果你想实现特征可视化,你可能只是在优化图像,并使相应神经元得以激活。但不幸的是,这并不是真正有效的,相反的,你可能会得到一些神经网络光学错觉图——一种充满噪声和无意义高频模式的图像,而且神经网络对它们反响强烈。

特征可视化 Feature Visualization_第21张图片无论怎么调整学习速度,你都会得到噪声

这些模式似乎是一种欺骗性的图像,现实中其实并不存在激活特定神经元的操作。如果进行了长期优化,神经元确实可以展示它所检测到的目标,但这些图像是被高频模式支配的。这些模式看起来和对抗样本产生的现象紧密相关。

特征可视化 Feature Visualization_第22张图片

倒退时,每一个图像都会出现一些棋盘形状的方格

这些高频图向我们表明,虽然基于优化的特征可视化表现出了一些优势,但这是一把双刃剑,如果不对图像进行限制,我们可能会适得其反。

规范化的谱

处理这些高频噪声一直是特征可视化研究的主要挑战和总体思路之一。如果想获得有用的可视化图像,你需要事先用一些规范化、约束的方法来使结构更自然。如果关注过近年来关于特征可视化的论文,你会发现虽然各家尝试的方法不同,但他们的成果都推动着规范化进程。

基于模型规范化程度判断,我们可以把这些方法都放在一个频谱上。一方面,如果我们使用完全不规范的方法,那得到的会是一个反例;另一方面,我们搜集了数据集中的样本,并根据前文所讨论的限制一一运行。在以下这些方法中,我们最终筛选出了3个规范化的选择。

特征可视化 Feature Visualization_第23张图片

弱正则化:避免误导相关性,但与现实联系也较少;强正则化:更具现实意义,但存在误导风险

规范化的三个类别

让我们对规范化的这三个中间类别进行更深入的思考。

频率惩罚(Frequency penalization)直接针对的是高频噪声。它能直接惩罚相邻像素间的差异,或者在每个优化步骤中间接惩罚高频噪声。但是,这个方法也阻碍了一些合理的高频噪声,如边缘噪声。这一点可以通过使用保留边缘的双边滤波器的改善。

特征可视化 Feature Visualization_第24张图片

转换鲁棒性(Transformation robustness)则依然是寻找能激活目标神经元的优化样本,即使我们稍稍做了一些转变。就图像而言,少量变化是行之有效的,尤其是针对更常规的高频噪声。具体地说,就是在优化步骤前对图片做一些随机改动,如旋转、放大或缩小。

特征可视化 Feature Visualization_第25张图片

习得先验(Learned priors)。在之前的规范化操作中,我们用简单的方法把样本变得更自然,接下去要做的,当然就是搜集真实数据并在这基础上建立模型。依靠这个更强大的模型,之后的做法就跟使用数据集训练差不多了,它能产出更逼真的特征可视化效果,但也有一点值得注意,就是我们不知道什么这个可视化效果的来源是什么,它原本的面貌是什么。

对于这些,一种方法是建立生成器,如GAN或VAE,把潜在空间中的点映射到样本数据。另一种方法是学习一个先验概念,让你能够访问概率的梯度,之后就可以进行联合优化。当对一个类的先验概率和概率进行优化时,一个以该特定类为条件的数据生成模型就会恢复。最后,再使用Wei等人的生成模型,至少在颜色分布上面,这个模型可以通过惩罚输出补丁和数据集上搜集到的最近补丁之间的距离达到更优效果。

预处理和参数化

在上一节中,我们介绍了一些降低高频梯度的方法,但不涉及特征可视化本身。事实上,我们目前还不清楚是否真的存在这么一个规范化的手段,它能抵制高频噪声,也能允许它们形成梯度不断推进。如果它不是一种规范化的方法,那这个过程中的梯度是如何转换的?

像这样的转换其实是一种非常强大的工具,在优化中,它被称为“预处理”(preconditioning)。你可以把它看作为实现相同目的在梯度上做出的最陡的下降。

不同距离概念下,最陡梯度下降的三个方向

图中三个方向的梯度下降都出于同一目标,但产生的效果完全不同。可以发现,在相关空间(最后一幅图)中进行优化会降低高频,而使用L∞则会增加高频。

特征可视化 Feature Visualization_第26张图片预处理和转换鲁棒性的结合提高了图像质量

结论

近年来神经特征的可视化取得了很大进展,作为一个社区,我们制定了一些原则性的方法、一些重要的挑战,并找到了应对这些挑战的方法。

为了使神经网络能够被解释,特征可视化作为最有希望、最有发展前途的研究方向之一,它的地位尤为突出。但就其本身而言,我认为它永远都不能给出一个完全令人满意的答案,特征可视化只是一个基本的构建模块,它的作用是和其他工具相结合,让人们能理解这些系统。

在改进特征可视化方面,我们还有很多重要的工作要做,其中有一些突出的问题,包括了解神经元之间的相互作用、找出对理解神经网络最有意义的单位,以及对特征的各个方面进行全面观察。

你可能感兴趣的:(计算机视觉与图像处理,深度学习,计算机视觉和数字图像处理)