Graph U-Netsを読んだのでメモ
はじめに
Graph U-Netsを読んだのでメモ.
概要
Graph Neural NetworkでU-Netを作りたいというもの.そのためにgraph Pooling (gPool)とgraph Unpool (gUnpool)を提案する.
Graph Pooling Layer
ここでの目標は,グラフから情報量の多いノードをサンプリングして部分集合を得ること.学習パラメータ,ノード上の特徴ベクトルをで定義して,ノードの情報量を次のスカラー値で定義する.
最終的にが大きいノードをサンプリングして新たなグラフを得る.
より具体的な話に入るためいくつかの変数を導入する.ここでは個のノードを持つグラフを考え,このグラフは隣接行列とノード上の次元特徴ベクトルを表す特徴行列をとして定義する.
すると,graph pooling layerは次のように定義される.
2式目のrankはから値の大きいtop-kのインデックスを選択する関数で,やはからidx番目の要素を取り出すことを意味する.最後の式は,取り出された各ノードの値に情報量を表す量を乗じる演算を表している.
上記の定式化により学習パラメータはbackpropで学習可能.ただこれでより良いノードを選択可能な写像になる気はしないがどうなのか.
Graph Unpooling Layer
基本的な戦略はgPoolの逆関数を定義しようというもの.ここでは次のような定式化を考える.
は対応する解像度(ノードからノードへのdownsampling)のgPoolで選ばれたノードのインデックスを表す.は現在のグラフにおける特徴行列では新たなグラフの特徴行列の初期値(全ての要素が0の行列).はの要素をを元ににコピーしていくというもの.非常にstraightforwardな手法.
Graph U-Nets
Pooling,Unpoolingが定義できたので,任意のgraph convolutionとU-Netsに従ったskip-connectionを使ってU-Netぽくモデルを作りましたという話.一応少しの工夫はあるがtrivialなので割愛.
まとめ
Kipf & WellingのGCNやGATと比較して性能は上.実装もそこまで難しそうではないのでGNNの選択肢の一つとして考えられそう.ただやっぱりがあんまり腹落ちしないところではある.