Kaggle 分子コンペ振り返り - コンペ概要・GCNの適用について

はじめに

本記事では2019年6月~8月にかけて開催され、約2800チームが参加したKaggleのコンペ Predicting Molecular Properties(通称分子コンペ)について、振り返りを兼ねてまとめたいと思います。
www.kaggle.com

f:id:rishigami:20190829024137p:plain

 

コンペ概要

まず初めに本コンペのポイントをいくつか挙げます。

  • 分子内の2つの原子間の磁気的相互作用(scalar coupling constant、以下sc)を予測する問題。
  • trainとtestで共通して与えられたfeatureは分子の構造ファイル(xyzファイル)のみ。
  • 原子と結合からなるグラフと見なせる分子データを扱うにあたりGraph Convolutional Networks(GCN)が活用された。

1点目の問題設定についてですが、磁気的相互作用scの予測となっています。scは量子化学計算によって3次元の分子構造から正確に求めることができますが、非常に計算コストが高い(1分子あたり1日〜1週間)ことが知られています。機械学習を用いてscを簡便に求める方法が見つかれば、医薬品化学分野などに役立てることができると考えられます。

2点目についてはtrainとtestで共通して与えられたfeatureは各原子の種類や位置情報を含んだxyzファイルのみで、特徴量の作成においては後述する外部ライブラリーの利用が必要となりました。

3点目についてですが、グラフ構造と見なせる分子データを扱うにあたって、近年注目を集めているGCNが活用され(GBTを上回る?)高い性能を示した興味深いコンペとなりました。

データ

データ数について

分子数は約13万個でtargetとなるscの値はtrain約460万、test約250万となっています。

xyzファイルについて

 trainとtestに共通するfeatureとして原子数や分子名、分子内の原子の座標情報などを含んだxyzファイルが与えられています。これだけでも位置情報を元にした特徴量(例:2つの原子間距離)は比較的容易に作成できますが、RDKitDScribeのような外部ライブラリを使用することで分子の特徴を化学構造に基づいて数値として表す記述子を更に作成することができます。

scalar couplingについて

targetとなるscは2つの原子間の磁気的相互作用ですが、2つの原子の組み合わせによって以下の8つのタイプに分けられています。

1JHC, 2JHC, 3JHC, 1JHN, 2JHN, 3JHN, 2JHH, 3JHH

例えば1JHCは隣あうHとC(例:H-C)、2JHNは間に1つ別の原子が結合しているHとN(例:H-C-N)、3JHHは間に2つ別の原子が結合しているHとH(例:H-C-C-H)を表します。

各タイプごとにデータ数やscの値の分布が異なってくるため、タイプの違いをどのように扱うかもポイントの一つとなっていました。(全てまとめて予測、○HC, ○HN, ○HHでまとめて予測、各タイプ毎に予測、etc...)

またscの値はFermi Contact (fc)、Spin-dipolar (sd)、Paramagnetic spin-orbit (pso)、Diamagnetic spin-orbit (dso)の4つの値の和として表されます。これらの値はscalar_coupling_contributions.csvとして別途与えられていました。これを活用してscそのものではなくfc、sd、pso、dsoの値を個別に予測してから和をとる方法も取られていました。

f:id:rishigami:20190829023850p:plain

Additional Dataについて 

メインで与えられたfeatureは分子内の各原子の位置情報のみですが、Additional Dataとして双極子モーメント、マリケン電荷位置エネルギーなどのデータがtrainにのみ与えられていました。これらを利用するためにはAdditional Dataのtestの値を別モデルで予測する必要があります。

評価指標

評価指標はLog of Mean Absolute Errorで以下の式で表されます。

 \displaystyle score = \frac{1}{T} \sum_{t=1}^{T} \log \left( \frac{1}{n_{t}} \sum_{i=1}^{n_t} \lvert y_i - \hat{y_i} \rvert \right) 

  •  T:scのタイプの数
  •  n_{t}:各タイプのデータ数

scの8つのタイプごとにLog of Absolute Errorを計算し、それらの平均をとります。

Graph Convolutional Networks (GCN)

 コンペ序盤はいかに特徴量を作成するかがメインで、GBTやシンプルなNNによる解法が中心でしたが、中盤から終盤にかけてはけろっぴ先生のStarterKitを皮切りにGCNによる解法が注目されるようになりました。

GCNではグラフ構造における畳み込み演算を定義しNNを構成します。分子は原子をノード、結合をエッジとしたグラフ構造としてみなすことができるため、その物性予測等にGCNを用いることができます。記述子をインプットとする従来の機械学習手法では局所構造しか考慮することができないという問題がありました。GCNには注目する原子近傍の情報を畳み込みによってうまく抽出することで、より適切な範囲の結合の情報を考慮できるというメリットがあります。

以下では特にGoogleによる化合物の物性予測論文で提案されたMessage Passing Neural Networks (MPNN)について説明します。

arxiv.org

Message Passing Neural Networks (MPNN)

f:id:rishigami:20190829014100p:plain

 MPNNでは既存のGCN手法を

  • Message functions  M_{t} とVertex update functions  U_{t}からなるMessage passing phase.
  • Readout function  RからなるReadout phase.

の2段階の枠組みとして整理しています。

Message passing phaseではまずmessages(近傍の情報) m^{t+1}_{v}を対象となるノード hとエッジ eによって更新します。

 \displaystyle m^{t+1}_v = \sum_{w∈N(v)} M_{t}(h^{t}_{v},h^{t}_{w},e_{vw})

次に各ノードをmessagesに基づいて更新します。

 \displaystyle h^{t+1}_{v} = U_{t}(h^{t}_{v}, m^{t+1}_{v})

f:id:rishigami:20190829021932p:plain

Readout phaseでは更新されたすべてのノードを元にグラフ全体の特徴を抽出します。

 \displaystyle \hat{y} = R({h^{T}_{v} \, | \, v∈G})

f:id:rishigami:20190829022021p:plain

論文中ではmessage functionを  M(h_{v},h_{w},e_{vw})=A(e_{vw})h_{w}としています。ここで A(e_{vw})はエッジ e_{vw}を(ノードの次元数×ノードの次元数)の行列に変換するneural networkです。

またupdate functionとしてはGRU、readout functionとしてはset2setが使用されています。

GCNの本コンペへの適用

 既存のGCN研究では分子ごとの物性予測が主な対象となっていました。しかしながら今回のコンペの予測対象は分子内の2つの原子の相互作用です。そのため既存のGCNを適用するにあたっては更新された対象となる2つのノード情報 h_{atom1}, h_{atom2}を用いる必要があります。(分子全体を考えるReadout phaseは不要となる?)

f:id:rishigami:20190829005040p:plain

けろっぴ先生のStarterKitでも説明されています。 

その他GCNモデル

MPNN以外にdiscussionやkernelで話題に挙がっていた幾つかのGCNモデルをまとめます。

GNNの参考資料

GNNに関して参考となる資料のリンクをまとめます。

最後に

本記事では分子コンペの振り返りということで、コンペの概要からGCNの適用についてまで簡単にまとめました。上位陣の解法を読む際などにお役立て頂ければと思います。