提到生成模型,每个人首先要考虑的问题应该都是这两个——生成什么,如何生成。本文介绍的三篇论文就包含了三种生成模型(GNN、RL、VAE,即怎么生成),同时也介绍了这些生成模型各自当前的应用场景(场景图生成、序列生成、任务型对话生成,即生成什么)。
机器学习模型的一种分类方式就是将模型分为分类模型和生成模型,GAN 的出现使得生成模型一度大火,GAN 也开始被应用于各个领域,但是生成模型并不只是 GAN。除了 GAN 相关的模型,其他的生成模型也是很多人在研究的方向,AAAI 中收录的 1500 多篇文章中就有 100 多篇直接以「生成」命名的文章。本文对其中一些重要论文进行了解读。
Probabilistic Graph Neural Network(PGNN):Deep Generative Probabilistic Graph Neural Networks for Scene Graph Generation
Reinforcement Learning(RL): Sequence Generation with Optimal-Transport-Enhanced Reinforcement Learning
Action Learning: MALA: Cross-Domain Dialogue Generation with Action Learning
1. Probabilistic Graph Neural Network(PGNN)
论文链接:https://grlearning.github.io/papers/135.pdf
1.1 任务描述
视觉理解是计算机视觉中一个很重要的任务,而过去的几年中,很多专家将这个问题归结成图像分类、对象检测等任务。然而,理解一个场景并不仅仅是识别场景中的物体,物体之间的相互关系也是很重要的信息。为了表征这种语义,最近一些论文引入了场景图(scene graph)的概念,其中的节点表示对象,边则表示对象之间的关系。这个概念其实源于游戏,具体的介绍可以自己查一下 Wiki(wiki 对应链接:https://en.wikipedia.org/wiki/Scene_graph,很不幸这个介绍的中文版是空的),本身说的是游戏开发者们在画面编程的时候需要关注的东西,在做 Computer Graph(如 WebGL, OpenGL 等)时,这种关系就是程序员需要编程的东西之一,比如一个很简单的只有两个球的场景,哪个球在另一个球的左边,再或者一个游戏中如果定义一个骑士和一匹马之间有逻辑关系,那么这个骑士就可以被认为是与马一体的,这些东西都是需要在程序中进行编程的。本文的聚焦点就是这种场景图的生成,在本文中(如图 1 所示),这种场景图就也需要包含各个对象之间的关系,比如图 1 左边图中的橘子和苹果都在碗中,右边图中的小女孩是坐在马上的。
场景图(Scene Graph)示例(图源自论文)
为了生成场景图,过去的方法先是学习了这些边和节点的表达(嵌入),如 [1] 中通过在 Fixed Complete Graph 中间传递信息以生成场景图,[2] 则把各个对象看做一个序列,利用双向 LSTM 获取各个对象之间的信息。然后再用这些嵌入来获取各个节点和边的类型。但是这些方法并不能利用图像中丰富的结构信息,这些信息在输入时就包含在了这些图像输入中。本文作者基于 [3] 中提出的 Graph Network,进而提出了适合表征 Scene Graph 的 Probabilistic Graph Network(PGN)。在 PGN 中,边和节点都被表示成了用于 CNN 的特征向量,边和节点的种类则被表示成概率质量函数(probability mass function,PMF)。如图 2 所示,本文作者在建立 PGN 的过程中也使用了 Reinforcement Learning,因为整个 PGN 添加节点的过程是序列化的,而对于这种过程,Markov 是一个很好的决策工具。具体来说,作者首先利用 Deep Q-Learning 框架学习最优排序,从而依次在当前的 partial PGN 上增加新节点,这里 RL 的动作就是选择一个新节点,RL 的奖励 reward 则根据输入图像的 ground-truth 场景图进行定义。添加节点后,通过消息(上下文关系信息、对象共现信息和图片解释中的先验知识)传递来更新当前 PGN 的特征向量。然后使用更新的特性对 PMFs 进行微调。
1.3 算法细节
如前文所述,Scene Graph 是由 PGN 生成的。因此本节首先介绍了什么是 PGN,然后对其生成方法 Deep Generative Probabilistic Graph Neural Networks (DG-PGNN) 进行详细介绍。
Probabilistic Graph Networks:PGN 是基于一个图(文中为场景图)G = (V, E) 建成的。其中 V 为节点的集合,E 为边的集合。假设边的种类有 K 种,那么就有 K 个 E_k(k ∈ {1, . . . , K}) 矩阵,每个矩阵中包含了某条边属于某个类别的可能性,如 E_k(u, v) 就表示从节点 u 到节点 v 的边可以表示为 k 的可能性。因此,对于某一条边 (u, v),其概率质量函数(probability mass function,PMF)e_{u, v} = [E_1(u, v), . . . , E_K(u, v)]^T。正常来讲,PMF 的和应该是为 1,但是本文为了让边的可能性更多(不属于任何一类,也就是不存在;或是有很多种可能),取消了这一限制。同样的,每个节点也有自己的 PMF 以表征其类别,即 n_v ∈ R^M,其中 v 表示某个节点,M 表示节点种类数。同时,每条边和节点都由向量表示,节点向量在目标检测时获得(文中使用的 faster_rcnn_nas),边的向量则由边连接的两个节点合并得到。Q-Learning:在整个流程开始之前,要先建立一个 Complete PGN(如图 2 所示),这个 Complete PGN 包含了所有的节点和所有的边,可以为 Q-Learning 过程提供原始的特征向量和 PMF(用于更新),具体的建立方法在论文的附录中,有兴趣可以自己研究一下。总之,假设当前状态(某个 Partial PGN)的状态为 s,那么 Q-Learning 的输入是这样的:这里的 g 是整个图像的特征向量(Complete PGN 建立过程中 152 层 ResNet 的最后一层输出),置信度矩阵 p = [p(1), ..., p(N)],p(j) 代表第 j 个框的置信度(目标检测过程中),d 表示了当前节点的状态,如 d(v) = 1 则表示节点 v 已经被选择过,0 则表示其还没被选择过。o^n 和 o^e 都是目前 PGN 的特征向量(初始化为 0 向量),h 和 n 则分别为边向量和节点向量。这里的\Phi 就记录了选择的过程,因此可以发现一些共现现象。如当现在的图中有了「街道」这个词,那么下一步添加的节点就很可能是跟「车」相关的东西。每一步的动作则是在没有被选择过的节点中选择一个添加到图中,如果图已经建立完毕了,可以选择停止。如上文所述,这里的 reward 根据输入图像的 ground-truth 场景图定义。因此,假设一个动作-状态对为 (φ, ˆ s, ˆ a, ˆ r, ˆ φˆ0 , sˆ 0 ),则其目标函数为:其中 r 为当前 reward,A 表示可以选择的动作,\Phi(ˆ s + v)表示加入节点 v 后的\Phi。因此,参数的更新过程为:
更新:在 Q-Learning 选择了新的节点加入 PGN 后,首先这个节点与所有其他节点的边向量、PMF 以及其自己的节点向量都是从原始的 Complete PGN 中获取,然后通过后续的方法(见原论文附录)对 PMF、边向量、节点向量进行更新。本文实验基于 Visual Genome (VG) 数据集,使用 Top-K recall(R@K)作为评价标准,与当前的 SOTA 方法进行了比较,同时也对其本身模型进行了 ablation study,记录了在不使用 RL(DG-PGNN^o)、不使用图片注释(DG-PGNN^-)、使用 VGG(完整模型使用的 ResNet)提取 feature(DG-PGNN^+)下的实验结果。实验结果如表 1 所示。由表中可见,论文中完整 DG-PGNN 的结果几乎在各个任务中的表现都是最好的。
本篇论文使用了 PGN 来生成 scene graph,其重点主要有两个,一个是利用了 PGN 生成 scene graph,第二个则是利用 Deep Generative Probabilistic Graph Neural Networks (DG-PGNN) 学习 PGN 的过程。除此之外,这种 DG-PGNN 还可以用在其他需要学习结构的任务中(如知识图谱的建立等)。