平面グラフで高速に動作するアルゴリズムで一般グラフの場合を学習する
これやってる人いるかな。普通に気になる。
yutaka1999氏のスライドがあり、平面グラフ判定は本気を出すとでできるなどと書かれていてびっくりする。
Max-Cut
e-archive.informatik.uni-koeln.de
平面グラフでのMax-Cutはらしい。速すぎ
Max-Cutのベンチマーク
http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1941-09.pdf
現時点での最速? http://mauricio.resende.info/doc/gmaxcut.pdf
数万頂点程度
実験するなら平面グラフと一般グラフの両方でやりたいね
平面グラフでもNP-hardな問題
ほとんど。。。Max-CliqueはPだけど自明すぎてア
Independent Set (Vertex Cover), Dominating Set, Feedback Vertex Set, Traveling Salesperson Problem...
Feedback Vertex Set
http://www.eda.ce.titech.ac.jp/ueno/Files/papers/TTU12-ICNC.pdf
Degree at most 3系ではいくつか簡単なアルゴリズムもあるっぽい
It is known that MinFVS is NP-hard for bigraphs while it can be solved in time for chordal bipartite graphs, in time for convex graphs, and in time for permutation graphs.
らしい。すご(やっぱそんなにうれしくねえ)
Pre-training Graph Neural Networks
https://arxiv.org/pdf/1905.12265.pdf
読んだ。大抵のGNNのタスクはnode classificationだけど、化学や生物の分野だとlocal similarityやgraph全体の特徴が重要になることが多い。 この論文では、自然言語処理で行われるような、Context PredictionやMasking, Negative SamplingなどをGNNに持ち込んで、pre-trainingに成功したとのこと。
Context Prediction
node embeddingsを用いて、近傍のstructureを推定する
Masking
node, edge attributesをmaskして、GNNにそれを予測させる
BERTは同様の方法でめっちゃpre-trainしてるみたい。
Graph-level
Domain-specificな他taskで学習するか、graph edit distance / graph structure similarityなどについてself-trainingするか
Macでcupyをインストールする
えー。また競プロとは全然関係のない記事です。同じことをやっていそうな人が少なくてエラーが出てこなかったのでまとめます。
手順1: CUDA対応MacBook Proを購入する
えー。MacBook Mid 2012-2014 15 inchしか対応していないと思います。しかも15 inchじゃないとだめです。頑張りましょう。ぼくは2012年のにしました。
手順2: OSを戻す
2019年8月時点で、macos Mojaveに対応しているCUDA driverがないので、Mojave以前にOSを戻す必要があります。cmd+R+shift+optionでインターネットリカバリをして、一度Lionを経由して、Sierra (10.12.6)にしました。多分High Sierraだと無理です。
CUDA driverとCUDA Toolkitをいれる。
9.0以降のものはcompute_70
以降のNVCC対応なんですが、cupyのインストール時にnvcc fatal : Unsupported gpu architecture 'compute_70'
と怒られることになりそうなので、8系を入れます。8系はSierraまでしか対応していないです。
古いバージョンのCommand Line Toolを入れる
https://developer.apple.com/download/more/
こちらからダウンロードできます。Xcode CLT (Command Line Tools) 7.3を入れました。
pip install cupy
LDPATHを調整する
が天才すぎる。
#!/bin/sh for file in $1/* do b=`basename $file` ln -vs $file /usr/local/lib/$b done
を作って、
$ ./hoge.sh /Developer/NVIDIA/CUDA-8.0/lib
する。
これでいけるかと思います。cp.arange(10)
とかやるとカーネルが呼び出されるはずなのでこれがちゃんと動くとオッケーです。
mdj982ゼミまとめ
Quadratic Assignment Problem (NP-hard)
Given , ()
ただしはとの要素ごとの積の和
Graph Isomorphism
図は省略するが、同型なグラフがあったときに、頂点のラベル付けの置換行列をとすると、はとなる。
同型ならとなる。
Subgraph Isomorphism
頂点の個数が違っていたとしてもdummyの頂点を用意していて頂点数を揃える。
とを比較したときに、1が0に対応するのだけ許さないことにする。
HがGのsubgraphならとなる。
誘導部分グラフ同型
隣接行列を拡張。辺がない頂点間をとする隣接行列を考える。対角成分は0で、dummyの頂点を含むも0
HがGの誘導部分グラフならとなる。
縮約
縮約があるものだと難しい
QAPのソルバー
heuristicsで1e6オーダーまでできるらしい
APX-hardなのでheuristics強い。
Graph Edit Distance
- erase edge
- erase vertex
- add edge
- add vertex
ここまでで同型なグラフを作る。各頂点/辺に関してコストが違っていてもよい。QAPのように、事前にdummyの頂点を追加しておくと、頂点を消す操作は、へ投げる操作、頂点を加える操作は、から頂点をもってくる操作に対応する。
- に関するコスト(mappingに関するコスト)
と展開され、をにマッピングするコストはとなる。
辺の属性が2値であるならば、をコストとして振り分けてやると、同じ属性ならば, 違う属性ならになって便利
max-cutのformulationと似ていそう
On Asymptotic Behaviors of Graph CNNs from Dynamical Systems Perspective
https://arxiv.org/pdf/1905.10947.pdf
PFNで著者と話したのでメモ
GCNの表現能力についての問題。畳み込みの際に用いるの特異値が小さい場合、レイヤー数に対して指数的に表現能力が落ちてしまうという問題。
連結成分数に対応して大きさが決まる特定の空間で、それの要素は、頂点のベクトルが取りうる特徴量(のsubset)を表すが、が同じ連結成分に所属し、次数が同じ場合、それらの特徴量が一致してしまうというようなが存在し、特異値が小さい場合に、GCNのイテレーションを繰り返すたびに、この固有空間との距離が一定の割合以下に縮んでしまうということを証明したっぽい。
Graph Matching Networks for Learning the Similarity of Graph Structured Objects
https://arxiv.org/pdf/1904.12787.pdfを読む。
Contribution
- GNNで1つのグラフを入力とし、similarity判定に使えるvectorを出力する方法
- Graph Matching Networkと呼ばれる、入力は2つのグラフで、出力がそのsimilarity scoreのネットワークを提唱。Cross-graph attention mechanismというらしい。まあ要は2つのグラフ間でいろいろやっている。計算量はなのでさすがにだいぶ遅いが、精度はかなりすごいらしい
Experiments
- Synthetic graph edit-distanceを学習する
- binary function similarity search
- mesh retrieval (何これ)
Notes
- Weihuaのやつはisomorphism testであってsimilarityではなさそう(WL kernel, similarity判定にはそれほど強くないのか?←Globalなsimilarityには確かに弱そう)
- Related Workがおもしろい。Similarity basedなkernelがいくつか紹介されている。walks or paths (Borgwardt & Kriegel), limited-sized substructures (Horváth et al. 2004) , subtree (Shervashidze & Borgwardt 2009)など
- kernelはhand-craftedなので大変だねという話
- Metric Learningというのがあるらしい。2点間の距離を学習するらしい
Deep Graph Similarity Learning
Embedding models
要はベクトルを出力するモデル。事前に各グラフについてベクトル化しておくとクエリごとが楽。Encoder, Propagator, Aggregatorにわかれる。
Encoder: 頂点ラベル(イテレーションごとに異なる)、辺ラベル(イテレーション間で同じ)を初期化
Propagator: とは、頂点から頂点へ向かう情報であり、2頂点のラベルと、辺ラベルでupdate。頂点ラベルは、その頂点のラベルとその頂点に向かうすべての頂点からのメッセージでupdate
Aggregator: イテレーションのあと、各ノードの特徴量をaggregateする。aggregateという単語ややこしいな
Graph Matching Networks
Embedding modelのpropagatorにおいてというのが増えた。2つのグラフの個の組合せについてを計算する。ノードラベルのアップデートには、メッセージの他に、これらの情報を加えてアップデートする。
感想
例によってなんでうまくいくか全然イメージできないな。まあうまくいかないイメージもできないんだけど。discriminative powerについてWL test以外の観点から調べてみたさがある
NeurIPSレビューと課題
S2V-DQNがZhuwenの論文に書かれていたよりもずっと強力であることがわかった。
細かく追えていないがaggregateがGNNよりも一般的に見えるし普通にGNNより強いのでは?という気分になってきた。
Weightedの場合も自然にエンコードできるのは強そう。
ところでGNNのWeighted対応版を知らないけどうまくやるにはわりとdrasticな転換が必要そう。
Exploiting Edge Features for Graph Neural Networksという論文があったので読んでいきたい。