1. はじめに
今LeashBELKAと言うKaggleのテーブルデータコンペに取り組んでいるのですが、分子構造をニューラルネットモデルで扱う際にグラフ理論への理解が不可欠なので一旦さらっと概念だけまとめておこうと思います。
2. 何に使うもの?
データ同士の関係性を「ノード(頂点)」と「エッジ(辺)」で表したい時に使います。
例えば水分子の構造でグラフを作るなら、水素原子や酸素原子そのものを「ノード」、結合を「エッジ」としてそれぞれ行列で表し、これらを組み合わせることで分子同士の複雑な相互作用を学習することができます。
つまり情報を損なうことなくデータ同士の多次元的なつながりをビットでうまく表すことができるツールがグラフというわけです。
・ちなみに
このケースはノード同士がエッジで繋がっていてお互いに方向は無い、という「無向グラフ」に分類されます。その逆の有向グラフの例としては交通ネットワーク、Webページのリンク構造等があります。これらにはどっちからどっちていう方向がありますよね。
3. 図で書いてみる
1,2,3,4,5という5個のデータ群(グラフ)を行列として表したい場合は以下のようになります。この行列を隣接行列といいます。あまりにも手書きすぎますがご容赦ください。
↓無向グラフ
↓隣接行列
おわりに
さらっと概念だけ書いてみました。実際は分子情報から隣接行列を生成して、それらをニューラルネットにぶち込むというGNNモデルの解説をしたかったのですが、力尽きたので今日はこの辺で。今KaggleのコンペでGNN使ったモデルで色々試行錯誤中なので、落ち着いたら別記事でGNNの解説をしたいと思います。