分析深度生成模型的训练过程 (Analyzing the Training Processes of Deep Generative Models)

深度生成模型是针对非监督学习和半监督学习的一种强有力的解决方案。通过深度生成模型,深度学习在没有外部数据标签或者带标签数据集过小的情况下仍然能继续工作。与其他的深度模型,比如卷积神经网络,更强有力的深度生成模型,也意味着其训练过程对训练者的要求更高。一方面,生成模型既有着确定性的函数,又包含随机变量;另一方面,生成模型是一种自上而下不断生成细节的过程,而诸如卷积神经网络则是从细节中不断提取高层特征的自底向上的过程。综合这两方面,如果理解深度生成模型的训练过程,以及如何对其过程进行诊断就变得尤其重要。本文就考虑用可视分析的手段来帮着这个分析过程。

对于深度生成模型的可视分析面临巨大的挑战。一方面,整个训练过程需要考虑数以百万计的时间序列。这些时间序列来自于神经元的激活值、神经元连接的权重、梯度值等等。如何对大量时间序列进行有效的可视化就变得尤其重要。另一方面,如果训练过程失败,如何找到错误的源头也是一件十分困难的任务。为了解决这些挑战,本文提出了可视分析系统DGTracker,能对训练过程中的时序变化进行多层级彻底的可视分析。这里的多层次包括快照级 (snapshot-)、神经层级 (layer-)和神经元级 (neuron-layer)。

我们首先介绍一下深度生成模型的背景知识。生成模型主要应用于这样一个问题:假设有一个图片集X,我们希望通过生成模型来生成与X中图片类似的图片。我们已经知道神经网络如果足够深、具有足够多的参数,那么集合可以拟合任意的函数。而深度生成网络实际上就是试图使用神经网络来拟合图片集X的分布。需要注意的是,这里的拟合只是一种间接的方式,并不直接得到分布的解析解。最终产生的效果是:这个网络从一个简单分布中随机得到一个输入向量z,然后通过生成模型产生图片x’。常用的生成模型有两类:变分自编码器VAE和生成对抗网络GAN。这里简要对GAN进行介绍。如图1所示,GAN包括两部分:生成器和分辨器。生成器的作用就是从输入z产生图片x’,其中的关键结构就是逆卷积层,实际上是一个解码器的作用。而分辨器的目的就是判断输入的图片是来自于X还是由生成器生成,其中的关键结构就是卷积层,可以看作一个解码器。最终训练的目的是使得生成器生成的图片尽量没法被分辨器区分,而分辨器则尽量得到更好的分辨能力。

图1:一个生成对抗网络的结构

图1:一个生成对抗网络的结构

在作者开始其可视分析系统的设计之前,作者首先进行需求分析。作者召开了三次workshop,分别邀请机器学习、计算机视觉和可视媒体领域的研究者进行研讨。这些研究者主要提出的需求包括四点:1. 需要将总概览的性能统计值(如loss)和训练中的细节动态信息结合起来;2. 需要能探索数据在网络中的流动过程;3. 需要能帮助探测网络中的异常,这里的异常可以是神经元、链接、神经层,也可以是训练数据;4. 能探索神经元之间的交互关系。

整个系统的工作流程如图2所示。模型训练过程中的时间序列作为系统的输入。DGMTracer提供数据流的可视化和时序动态的可视化,两者的侧重点分别是神经层与神经元的连接关系,以及时间变化情况。其中的可视化和交互可以支持分析人员进行快照级 (snapshot-)、神经层级 (layer-)和神经元级 (neuron-layer)的分析。

图2:DGMTracker的系统工作流程

图2:DGMTracker的系统工作流程

分析人员首先从损失函数的折线图中,选择感兴趣的快照(也就是训练epoch)进行探索,进入快照级可视化。这一步的主要目的的找到异常的神经层。其可视化基于基本的图可视化,如图3所示。节点和边分别表示神经层和层之间的连接。神经层也可以根据之间的关系组织成层次结构,在图可视化中则采用选择——展开的方式来探索。每个节点中通过折线图展示该层中神经元激活值的时序动态信息,包括激活值的最大值、最小值和均值。通过这个视图可以很容易观察到该层是少数还是多数神经元有突变,或者是整个层都比较波动。

图3:快照级中图可视化和折线图

图3:快照级中图可视化和折线图

图4:通过折线图观察神经层的异常情况

图4:通过折线图观察神经层的异常情况

分析人员选择了异常的神经层之后,就进入神经层级的分析,器目的是找到异常神经元。其基本的可视化形式就是用折线图来对各个神经元的激活值的时序变化进行可视化,如图5所示,从折线图中可以很容易找到激活值异常的神经元。但面临的一个主要问题是严重视觉遮挡。为此作者采用了蓝噪音采样 (Blue-noise sampling) 技术来缓解这个问题,它能保证采样后的折线在空间上分布均匀,异常数据得到保留。具体算法实现请参看原论文。卷积层或者逆卷积层中的神经元可以看作是多维的张量,作者还允许分析人员对时间序列进行各个维度的聚集操作,来减少其数量,减少视觉遮挡。

图5:神经层级中的折线图

图5:神经层级中的折线图

当分析人员确定了异常的神经元之后,就进行了神经元级的可视化,去诊断找到其出现的源头。这里作者采用了基于责任分派 (credit assign) 的结果,它能对于每一个神经元,求得前一层和后一层各个神经元对其的影响力大小。然后作者对这个数据进行可视化,如图6所示。其中(a)就是对相邻两层神经元之间的影响力直接用图的形式进行可视化,用颜色表示影响力的大小的正负。其缺点是神经元数量过大时,难以进行可视化。因此,作者采用聚类方法对神经元进行处理,然后将将神经元聚类按网格进行排列,默认情形下只展示粗略的影响力信息,如图(b)所示。当使用者鼠标指向某个神经元时,则展示细节的影响力信息,如图(d)所示。而对于卷积层或者逆卷积层,研究者希望能将神经元对应到图像二维空间的位置上。这里作者根据影响力情况反推出每个神经元受图像那个部分影响最大,然后将神经元分别安置到那个位置,从而使得使用者能将神经元对应到图片的各个部分,如图(c)(e)所示。例如图(e)中,神经元受图片中的左上角部分影响最大。

图6:神经元层中的对神经元之间影响力进行可视化

图6:神经元层中的对神经元之间影响力进行可视化

最后作者用了若干例子来展示其可视分析系统的用法。这里只介绍其中一个例子:分析人员想要理解为什么GAN的提出者认为直接使用原始的损失函数会导致训练过程停滞。在损失函数折线图中,其数值很快变成0。通过观察各个神经元层的梯度值变化,发现它们也很快就变为了0。接着作者选择最后全连接层,观察其在真实图片和合成图片下激活值的变化,如图7所示,发现它们分别变味了1和0。这就解释了为什么整个训练过程会停滞。

图7:神经元对真实图片和合成图片激活值的可视化

图7:神经元对真实图片和合成图片激活值的可视化

总起来看,这篇论文提出了一个可视分析系统DGMTracker能帮助人们了解和诊断深度生成模型,尤其是其中的三层级探索流程对达到这一任务起到了重要的作用。

[1] Analyzing the Training Processes of Deep Generative Models. Mengchen Liu, Jiaxin Shi, Kelei Cao, Jun Zhu, and Shixia Liu. IEEE Trans. Vis. Comput. Graph, 24(1): 77-87, 2018.

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>