序列生成_PR Structured Ⅴ:GraphRNN——将图生成问题转化为序列生成
本文使用 Zhihu On VSCode 創作并發布
Paper | Code本文一作實在是太大佬了,讓我和小伙伴焦慮了好一陣子。作者主頁送你們,將這份焦慮傳遞下去。
Introduction
圖生成有很多用處:
本文摘要直接指出了圖生成問題的難點:
圖生成模型需要學習到圖的結構分布,然而圖具有非唯一 (non-unique),高維以及給定圖的邊之間存在復雜、非局部的依存關系。
因此直接對復雜的圖分布直接進行建模,并從這些分布中進行有效采樣是一項挑戰。
目前,圖生成面臨的挑戰有:
GraphRNN
為解決上述問題,本文提出了 GraphRNN,以 autoregressive (or recurrent) 作為一系列新節點和邊的添加方式繪制 graph,來捕獲圖中所有節點和邊的復雜聯合概率。
GraphRNN 可以視作一種級聯形式,由兩個RNN組成:
符號定義
GraphRNN 思路
Key Idea: 將不同節點順序下的圖表示為序列,并在這些序列上構建一個自回歸的生成模型。
將graph建模成序列
定義從graphs到sequences的映射
:其中,每個元素
表示節點和先前所有節點之間的邊的鄰接向量 (如圖一,注意下面的向量依次對應右上方的graph)。由此,
的序列就可以表示整個無向圖,這里用一個反向的映射表示在此基礎上,對于圖分布
的學習就可以轉化為聯合分布 的邊緣分布:這時,我們只需要學習
就可以了。由于它又是個序列模型,所以可以分解為條件分布的乘積:定義最后一個元素
為序列終止 EOS。GraphRNN 框架
即使
被分解成了 ,這仍然很棘手。因為它需要在之前的節點的連接基礎上,得到節點 如何與之前的節點連接。這又是一個復雜的概率關系,本文打算用RNN來建模這種關系,包含狀態轉移函數和輸出函數:- 是一個編碼了到目前為止生成的圖的狀態的向量;
- 是最近一個生成節點的鄰接向量;
- 指定了下一個節點鄰接向量的分布 。
文中指出,
可以用任意神經網絡表示(本文開源代碼用了兩個GRU)。 也可以是任意形態分布。算法總結為:
利用 BFS 處理變長度的序列
由于RNNs需要固定長度的輸入向量,然而
的長度是隨著 i 變化的,因此本文旨在利用 BFS (廣度優先搜索) 的節點序列,而不是任意節點序列,來學習圖的生成。這樣做的好處,據說是不是一般性?將式1改為
BFS 以一個隨機順序
為輸入,將 作為起點,按照 中的先后順序將它的鄰居依次添加到 BFS 隊列中。好處如下:
BFS 是一對多的,一個 BFS 序列可以轉化為多個節點排序。因此我們需要訓練的數量少了。
BFS排序通過減少 edge-level RNN 中進行的邊緣預測的數量,來使學習變得更容易。因為如果我們新加入一個節點,那么它的連接邊只能處在BFS搜索前沿的節點(當搜索完成時,可以想象成樹的葉子節點)定義描述就是:
Proposition 1. Suppose
is a BFS ordering of nodes in graph , and but for some then and這個性質是我們可以將可變長度的
定義為固定長度的 M 維向量,表示節點 與當前BFS隊列中最大大小為M的節點之間的連通性:至于這個 M 怎么去估計,見本文附錄吧。
擴展到具有節點、邊特征的Graph
GraphRNN可以擴展到具有節點和邊特征的Graph生成,在節點順序
下,圖 與它的節點特征矩陣 和邊特征矩陣 相關聯。因此,可以將 的定義擴展為 。在 模塊,用一個 MLP 來生成 ,edge-level RNN 來生成 。作者的開源代碼好像并沒有這部分,我已經在github上發了issues。
總結
以上是生活随笔為你收集整理的序列生成_PR Structured Ⅴ:GraphRNN——将图生成问题转化为序列生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python mysql ssl,pyt
- 下一篇: java表达式语句_Java基础知识笔记