在传统的软件工程(Software 1.0)中,根据客户反馈调整产品的过程往往要求理解软件工作原理的和出现异常的原因。这些一般可以通过源代码检查与调试的方式获得。但是,假如你们的深度学习模型没有完全达到预期效果该怎么办?在深度学习模型上进行调试工作会比较困难,这是因为问题不在于数据或者理论框架而是在于模型的编码知识中。要使模型进入最终状态,你需要:
理解模型的作用:为什么模型会输出这个结果?
修补模型:在不损失整体性能的情况下,修正模型在某种特殊情况下的预测。
在本系列文章中,将列出几个解决上述问题的办法,这些办法适用于大部分视觉任务中。(神经网络相关的技术可被称为Software 2.0)
一、 深度神经网络的可视化
每一个数据科学家都遇到过模型表现异常的情况。而解决这类问题的方式往往又因为缺乏合适的相关工具而只能凭直觉判断(经验主义):想象哪里会出错、调整超参数或者清洗数据。
尽管这些做法看起来比较“天真”,但确实出奇的有效果。这些做法可以帮助我们解决观察到的问题。
然而,随着深度学习和可解释性方法的发展,我们得到了一种有力的工具用于理解我们的模型--模型可视化。在第一部分,将介绍深度可视化相关方法。
1. 通过 Activation Maximization 进行可视化
激活最大化(AM)的核心思想是寻找最大化激发某个神经元的对应输入图像。首次尝试通过正式的技术将网络激活追溯到数据域的有2009年Erhan等人提出的《VisualizingHigher-Layer Features of a Deep Network》
(https://www.researchgate.net/publication/265022827_Visualizing_Higher-Layer_Features_of_a_Deep_Network),他们将深度置信网络中隐藏神经元的首选输入模式和 MNIST 数字数据集中学习到的堆叠去噪自编码进行了可视化。2014年Simonyan等人利用这种方法进一步最大化了输出层 CNN 神经元的激活
(https://arxiv.org/abs/1312.6034),2013年Zeiler和Fergus等人提出的基于反卷积神经网络的可视化方法Deconvnet(https://arxiv.org/abs/1311.2901)也是这个领域中比较有代表性的研究。
通过DeconvNet实现的特征可视化目前被广泛应用于描述网络深度越来越深的情况下,CNN是怎样学习越来越复杂的特征的:
2. 代码反转
另一种叫做代码反转的方法与AM类似,但它不是最大化某些神经元的输出,而是针对特定DNN层重建激活层(参看Mahendran等人提出的“使用自然图像可视化深度卷积神经网络”(https://arxiv.org/abs/1512.02017))。
从VGG-M最后一个全连接层提取特征获得右下角图像的四种重建
然而,激活最大化(AM)和代码反转生成的图像都与自然图像有着较大差异。与色彩像素可能组合成的特征空间相比,真实图像的流形(manifold)相对低维。因此,上述技术可以很容易地找到满足目标的这种组合(激活神经元或再现层编码),但还远未达到产生可识别的图片的水平:
这种效果归根于CNN的识别特性,其在训练集之外基本上是未被指明的。将优化目标偏向具有自然图像先验的自然图像已被证明可以显着提高合成图像的质量:
数据项强度C在反转深度表示中的作用。选择较小的C值会产生更多的正则化的重建。图片源自Mahendran.
然而,它们(CNN)仍会在输入域中产生各种各样的“组件”。最有趣的可能是他们倾向于生成不能形成完整物体的重复部分,例如多个头部连接到同一个身体,或只有多个眼睛没有面部:
激活最大化(AM)作用于AlexNet,VGG-M,VGG-VD-16倒数第二层,针对“青蛙”,“黑天鹅”,“鹅”和“自动售货机”等类别。在softmax标准化之前,倒数第二层直接为不同的类编码。
随着层数加深,效果会更加明显:
输入激励产生的方式是导致这种现象发生的原因之一。可以通过:
(1)增强目标区域的亮度和颜色。
(2)设置越来越多的神经元响应区域。
来增强神经元的激活。
另一个原因是高阶神经元的多面性:它们不只是对单个刺激产生反应,而是激活响应很多不同类型的特征。综上所述,上述技术合成了揭示神经元不同方面的原型。例如,“杂货店”可以被重建为水果和蔬菜的图像以及商店内部或者建筑物。适当地使用上述技术可能会产生一系列不同的图像:
但是通过简单的激活最大化方法,它可能会生成一个混合了这些概念的图像。
Nguen.等人的工作(https://arxiv.org/abs/1602.03616)对激活最大化弱点进行了很好的总结,并介绍了一种叫做多面特征可视化(MFV)的技术。
3. 多面特征可视化
MFV的主要思想是:
(1)识别激发神经元的不同类型图像。
(2)使用每种图像的均值作为激活初始值
结果表明,每次AM都会收敛到该神经元的不同层面。
为了处理可视化产生的重复片段,作者引入了叫做“中心偏移正则化”的技术:
简而言之,多面特征可视化(MFV)通过揭露同一神经元的不同方面来改进激活最大化(AM),并且提供了关于特征学习的更多见解。了解更多请参看论文(https://arxiv.org/abs/1602.03616)。
4. GANs
如果不提及目前最热门的生成式模型方法之一——生成对抗网络(GAN),这项调查将是不完整的。
Nguyen等人提出的《针对最大化激活的深度生成网络(DGN-AM)》
(https://arxiv.org/abs/1605.09304)并不是一个真正的生成对抗网络,但它们有很多共通之处。训练生成器和判别器网络管道,旨在将合成图像与真实图像分开。图像生成器DNN用于生成激活最大化(AM)过程的先验图像。它被训练为接收代码(例如标量矢量)并输出看起来尽可能接近真实图像的合成图像。为了产生可视化的神经元优选输入,图像生成器DNN的输入代码被优化以达成生成器网络输出激活感兴趣的神经元图像:
从这种先验开始,对比随机噪声不仅可以获得相比先前更好的结果而且还可以展示出良好的泛化能力,例如通过使用ImageNet训练过的模型进行可视化:
在MIT Places数据集上训练的AlexNet DNN输出单元的首选激励
使用辅助分类器GAN进行条件图像合成(https://arxiv.org/abs/1610.09585)起初并不是用在模型可解释性问题上的,但是也可以用于此目的。因为该项研究中引入的AC-GAN模型就是学习生成以类别为条件的图像。紧挨着生成器和判别器模型,该模型还具有一个额外的分类器网络(在本例中为Inception-v3)。使用此网络正确分类的生成样本可用作首选输入进行可视化。
二、 初步结论
深度可视化可以帮助理解你的网络。它有助于深入了解所你的模型所学习的功能。而且,这里回顾的方法有一些共同点:它们为DNN本身提供解释,而不是针对特定输入样本的决策。因此,这些技术无法直接告诉我们,输入的哪一部分导致了神经网络的某种决策。之前的部分将会针对这一问题进行介绍,专门介绍热映射技术。