インストールとグラフ畳み込みを用いた学習の動作例の確認②|DGL(Deep Graph Library)を動かす #2
当シリーズでは、DGL(Deep Graph Library)について確認していきます。
Overview of DGL — DGL 0.4.2 documentation
#1ではDGLのドキュメントを元に、インストールと動作事例の確認を行いました。
インストールとグラフ畳み込みを用いた学習の動作例の確認①|DGL(Deep Graph Library)を動かす #1 - Liberal Art’s diary
動作事例の確認にあたって、#1では詳細について流す形となったため、#2では#1の題材における重要ポイントについて詳細を確認していきます。
DGL at a Glance — DGL 0.4.2 documentation
以下、目次になります。
1. Define a Graph Convolutional Network(Step3)について
2. Train then visualize(Step3)について
3. まとめ
1. Define a Graph Convolutional Network(Step3)について
1節ではStep3の"Define a Graph Convolutional Network"について詳しく確認を行っていきます。
まず上記の記載では、ノードの分類(node classification)を行うにあたってGCN(Graph Convolutional Network)を用いたとされています。より詳細は論文を参照していますが、簡単な定義についてはまとめられているのでそちらを確認していきます。まず、層目における番目のnodeをと定義し、そのノードの特徴ベクトル(feature vector)をとしています。次に、に隣接するnodeをとし、次の層のの表現を得るにあたってを集めるとされています。この後に、非線形の活性化関数を用いたアフィン変換(affine transformation)を行うとされています。
次に、GCNの図示について行われています。は前述の内容の式化を行っていると考えるとわかりやすいと思います。また、ここで定義を行っているGCNをメッセージ伝達の枠組み(message-passing paradigm)で考えるとしています。
上記では実装が記載されています。コメントを参照しながらGCNLayerクラスのforwardメソッドを確認すると、g.ndataでnodeの特徴量を設定し、g.sendでnodeからedgeに情報を送り、g.recvで全てのノードに情報を集め、g.ndata.popでnodeの特徴量を取得し、最後に線形変換を行っていることがわかります。
次に上記では、PyTorchのような書き方で先ほどのGCNLayerを利用してネットワークを実装しています。__init__でgcn1とgcn2を定義し、forwardでネットワーク構造全体を定義しています。
大体の流れが掴めたのと基本的にはPyTorchベースの実装となっていることがわかりましたが、具体的な処理を確認するにあたってはdgl.DGLGraph()のsendやrecvなどはもう少し詳細について確認する必要がありそうです。とはいえページ記載の内容については把握できたので今回はここまでとします。
2. Train then visualize(Step5)について
2節ではStep5の"Train then visualize"について詳しく確認を行っていきます。
まず上記では学習について一通り行っています。PyTorchの基本的な記法にしたがって、net(G,inputs)でこれまで定義してきた内容に沿ったネットワークの出力を取得し、logitsに代入しています。logitsに対し、softmax関数を適用し、logpを得ています。そしてlogpと正解データであるlabelsを比較し、lossを作成しています。これに基づき、誤差逆伝播や学習を行っています。Step3ではGraph Neural Network特有の処理がいくつか見られましたが、Step5は基本的なPyTorchの記述にしたがっています。
また、可視化については基本的にはNetworkX(さらに裏側ではmatplotlibを使用)を用いているようです。
3. まとめ
#2では#1の題材における重要ポイントについて詳細を確認を行いました。
#3では以下を参考にDGL(Deep Graph Library)の基本的な内容について抑えていきます。