機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

GraphNVP: An Invertible Flow Model for Generating Molecular Graphsを読んだのでメモ

はじめに

GraphNVP: An Invertible Flow Model for Generating Molecular Graphsを読んだのでメモ.Generative flowを使ってmolecular graphを生成する初めての試みとのこと.

GraphNVP

Generative Flowの一般的な話は何度か記事にしているのでここでは割愛.

今回は,molecular graphをgenerative flowを使って生成するのが目的.ここではグラフの生成を,ノードの隣接関係の記述とノードの表現(ラベル)の二つに分けて考える.

定義として,グラフをG=(A,X)とし,A\in\{0,1\}^{N\times N\times R},X\in\{0,1\}^{N\times M}をそれぞれ,adjacency tensorとfeature matrixとする.ただし,隣接関係の種類をR,ノードのラベルの種類をMとした.グラフG=(A,X)が与えられた時にz=f_\theta(G)\in\mathbb{R}^{D=(N\times N\times R)+(N\times M)}となるようなモデルを作る.今回はモデルとしてGenerative flowを考えているので,潜在変数の次元数はデータの次元数と同じになることに注意.目的関数は変数変換の公式から次のように表現される.

\displaystyle
\log(p_G(G))=\log(p_z(z))+\log\left(\left|\det\left(\frac{\partial z}{\partial G}\right)\right|\right)

\frac{\partial z}{\partial G}f_\thetaGに関するヤコビアンを表し,p_zは潜在変数のpriorで今回はガウス分布とする.

Graph Representation

今回考えているグラフGは離散的に表現されているのに対し,上で議論したモデルは連続な分布を考えている.このギャップを埋めるため,uniform noiseを加えるdequantizationと呼ばれるテクニックを使う.A,Xそれぞれに一様分布からサンプリングされたノイズを加えることで連続的な表現にしようというもの.

\displaystyle
A’=A+cu;\: u\sim U[0,1)^{N\times N\times R}\\
X’=X+cu;\: u\sim U[0,1)^{N\times M}

c0\lt c\lt 1のハイパーパラメータで,論文の実験ではc=0.9にしたそう.

Coupling layers

ここではadjacency tensor Aに関するカップリング(adjacency coupling layer)とfeature matrix Xに関するカップリング(node feature coupling layer)の二つのカップリング方法を提案する.

まずnode feature coupling layerから考える.l層目の出力として得られるnode feature matrixをz_X^{(l)}とする.するとz_X^{(l-1)}を入力とするl層目のnode coupling layerは次のように表現される.

\displaystyle
z_X^{(l)}[l,:]\leftarrow z_X^{(l-1)}\odot\exp\left(s(z_X^{(l-1)}[l^-,:],A)\right)+t(z_X^{(l-1)}[l^-,:],A)

複雑なように見えるが基本的にはrealNVPのaffine coupling.s,tはそれぞれAz_X^{(l-1)}l^-行目を入力として,scaleとtranslationの度合いを返す関数(任意の関数でいいため今回は多層のGraph Neural Netとのこと)で,\odotアダマール積.ll^-は,coupling layerなので変換されるノードと,変換のパラメータを推論するためのノードを意味する.なのでz_X^{(l)}l^-行目の値に関しては恒等写像となる.

\displaystyle
z_X^{(l)}[l^-,:]\leftarrow z_X^{(l-1)}[l^-,:]

Adjacency coupling layerもほぼ同様の表現で,次のように表される.

\displaystyle
z_A^{(l)}[l,:,:]\leftarrow z_A^{(l-1)}[l,:,:]\odot\exp\left(s(z_A^{(l-1)}[l^-,:,:])\right)+t(z_A^{(l-1)}[l^-,:,:])

Node feature coupling layerとの違いはs,tの入力が1変数の多層パーセプトロンになっただけ.

上記の二つのlayerを実装する際には論文のFigure 2に示したように,1ノードずつの変換として表現する(ということを多分言っている.maskingという表現がひっかかって自信はない).これが実験的に良かったらしい.ただそのような変換にすると計算結果が順序に依存してしまうが,permutation-invariantなmasking patternにするとパフォーマンスが落ちてしまうとのことで苦肉の策らしい.

Two-step Molecular Graph Generation

グラフから潜在表現に落とす側の計算はnode feature couplingもadjacency couplingもそれぞれ独立して計算可能だが,逆の計算はnode feature couplingにadjacency tensorが必要となるため,adjacency coupling側から計算が必要ということ.

まとめ

グラフにもgenerative flowが来たかという感じ.個人的には,Kipf & Wellingとかの形に近いgraph convはinvertibleだと思うのでGNNをそのままgenerative flowのモデルとして組める気がするのだがどうだろう.