提到生成模型,每個人首先要考慮的問題應該都是這兩個——生成什麼,如何生成。本文介紹的三篇論文就包含了三種生成模型(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 還可以用在其他需要學習結構的任務中(如知識圖譜的建立等)。