インストールとグラフ畳み込みを用いた学習の動作例の確認①|DGL(Deep Graph Library)を動かす #1

f:id:lib-arts:20200307165121p:plain

別のシリーズでGraph Neural Networkのサーベイを元にした研究トレンドの把握を行いました。

上記シリーズを元に大体の概要は掴めたのですが、実装についても確認してみれればということで、Section8のApplicationsで取り扱われていたDGL(Deep Graph Library)について確認していきます。

サーベイ論文の確認と追加調査⑨(Applications)|Graph Neural Networkの研究を俯瞰する #9 - Liberal Art’s diary

今回は下記のDGLのドキュメントを元に、インストールと動作事例の確認を行います。

Overview of DGL — DGL 0.4.2 documentation

以下、目次になります。
1. DGLのインストール
2. 動作事例の確認(Graph Convolutional Networkの学習)
3. まとめ


1. DGLのインストール
1節ではまずライブラリのDGL(Deep Graph Library)のインストールを行います。

f:id:lib-arts:20200307170846p:plain

Install DGL — DGL 0.4.2 documentation

上記に記載がありますが、簡単な動作確認を行うレベルであれば、pipを使ってCPU用のDGLをインストールします。

$ pip install dgl

上記を実行することでインストールを行うことができます。

$ pip freeze | grep dgl
dgl==0.4.2

またインストールの確認としては、上記のように"pip freeze | grep dgl"を実行した際に、dglのバージョンが出力されたら、インストールができています。


2. 動作事例の確認(Graph Convolutional Networkの学習)
2節ではGraph Convolutional Networkの学習を行う動作事例の確認を行います。

DGL at a Glance — DGL 0.4.2 documentation

具体的には上記に沿って実行していきます。

f:id:lib-arts:20200307173849p:plain

まず問題設定について確認しますが、上記に記載されています。karateクラブの34名のメンバーのソーシャルネットワークを可視化したものであるとされています。クラブのソーシャルネットワークは大きく二つのコミュニティに分けることができるとされており、片方が講師(instructor; node0)でもう片方がクラブの代表(club president; node33)であるとされています。上記の図では二つのコミュニティに分けられていますが、タスクはそれぞれのノードがnode0のコミュニティに属するか、node33のコミュニティに属するかを学習して予測することであるとされています。

f:id:lib-arts:20200307175456p:plain

Step1としてはグラフの作成(Creating Graph)について記載されています。ここではグラフにノードとエッジを追加することで問題設定にあるkarateクラブの34名のソーシャルネットワークを作成しています。

f:id:lib-arts:20200307175646p:plain
この際にグラフの属性を出力したのが上記ですが、78個のエッジを追加しているのにも関わらず156エッジとなっているのは、無向グラフ(undirected graph)においては0->1と1->0を同一に見なすためです。隣接行列が常に対称となることからもわかる通り、1つの向きのないエッジの追加は2つの向きのあるエッジの追加と対応していると考えることができます。

f:id:lib-arts:20200307180131p:plain

また、可視化を実行すると上記のようになります。一番最初の問題設定の図と同様になっていますが、色がついていないことがポイントです。

f:id:lib-arts:20200307180556p:plain
Step2では、ノードやエッジに特徴量(features)の付与を行なっています。ここではone-hotベクトルの形式で特徴量を与えているとされています。

f:id:lib-arts:20200307180910p:plain

特徴量の追加について記載のコードを実行すると上記のようになります。上記では、それぞれのノードやエッジに対応するインデックスの位置の数字が1で、他が0になっていることが確認できます。

f:id:lib-arts:20200307181153p:plain

Step3ではGCN(Graph Convolutional Network)の定義について記述されています。

[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks
詳しくは上記の論文の手法をベースにしたとされています。全体の流れを優先したいため、論文と実装の中身については#2で確認するものとします。

f:id:lib-arts:20200307181739p:plain
Step4ではデータの用意と初期化を行なっています。

f:id:lib-arts:20200307184200p:plain
Step5では学習と可視化について記載されています。基本的にはPyTorchのモデルと同様の学習を行うとされています。

f:id:lib-arts:20200307184344p:plain

コードを元に実行すると上記のように実行ができます。loss.backward()で誤差逆伝播を行い、optimizer.stepで学習を行うということはPyTorchの用法とさほど変わりないようです。

f:id:lib-arts:20200307184558g:plain

また、学習結果の可視化としては上記のようにアニメーションで可視化を行なっています。


3. まとめ
#1ではDGL(Deep Graph Library)のインストールとグラフ畳み込みを用いた簡単な学習のコードの実行を行いました。
#1は全体の流れを掴むのを中心としたため#2では、今回取り扱ったコードの詳細をもう少し詳しく確認していきます。