Technical Hedgehog

機械学習と気になる技術を語るはりねずみ

Kaggle創薬コンペにおけるDeep Learningの適用

創薬においてコンピュータの活用はますます盛んになってきており、2012年にはKaggleでコンペも開催されました。このコンペは標的に対する分子の活性を推定するというタスクでした。

用いられた手法としては1位はDeep Learning、2位は非Deepな機械学習手法でありスコアにこそ大差はありませんでしたが、創薬においてDeep Learningの適用可能性を示したことで当時は話題になったそうです。だいぶ前のコンペなの解説記事はすでに多くありますが、コンペを通じて創薬の概要とDeep Learningがどのようなアプローチで適用されたのかを紹介してみます。

f:id:kamujun:20190423182833p:plain:w450

!Caution!
できる限りの調査をしましたが、私は製薬や医療に詳しい人ではないので誤った解釈をしてしまっている可能性があります。「ここ間違っている」と言う点がありましたら指摘いただけると幸いです。

では、はじめにコンペのタスク背景となる創薬について概要を説明してみます。

創薬の大きな流れ

創薬における作業は作業は大きく分けて基礎研究、試験、承認といったステップで進んでいきます。

f:id:kamujun:20190423144916p:plain
創薬プロセス(製薬の未来より)

探索研究

探索研究や基礎研究と呼ばれるフェーズでは一般的に以下の様な流れとなるそうです。

ターゲットの選定

体の中のタンパク質等の働きをもとに、病気の改善につながるターゲットを選定します。例えば炎症を引き起こす物質としてプロスタグランジンの一種があるそうですが、これは酵素「プロスタグランジンH合成酵素」によって合成されるそうです。この酵素をターゲットとして働きを弱める化合物が発見できれば、それはすなわち抗炎症薬と言われるものとなります。このように、ターゲットを探すことから薬作りが始まります。

リード化合物の探索

ターゲットに対して反応を示す化合物であるリード化合物を探します。リード化合物を探す理由は全くヒントがない状態から薬となる化合物を作るのでは無く、効果がある化合物をベースに発展させていくほうが現実的なためです。

リード化合物を探す方法の一つとしては、経験的に効果があると知られている物質から求める方法です。19世紀に生まれた炎症薬であるアスピリンは、ヒポクラテスが熱や痛みに対して処方したとされるヤナギからリード化合物を見つけ、発展させていったそうです。

2つ目の方法としては、数千、数十万以上の化合物に対して活性の反応を得る方法でスクリーニングと呼ばれる手法です。候補とする化合物は分子量や形など一定の条件をもとに用意し、様々な活性を一度に調べる中からリード化合物となるものを見つける方法です。

以上の方法から薬のタネを探すのがこのフェーズの目的です。

リード化合物の最適化

リード化合物に対して様々な合成を行い、薬候補となる化合物を作成します。発見したリード化合物そのままでは効果が限定的であったり、副作用がある場合もあります。そこで少し手直しを行うことで効能をあげたり、副作用を低減させることが最適化の目的です。

試験・承認・市販

その後のフェーズでは動物や人間を用いた試験(前臨床・臨床(1相、2相、3相))において効果や安定性が確認された後、国に承認されて晴れて市販されるようになります。

基礎研究から承認まで平均で13~14年もかかり、候補として研究を始めた分子が新薬として世に出る確率は3万分の1とも言われているようです。各フェーズにおいて、効果があまり出ない、副作用が強すぎる、製造工程を安価にできないなどで研究が中止されることも多々あるそうです。お金も莫大に掛かるでしょうから厳しい世界ですね…

Kaggle創薬コンペ

ここで話題を変えてKaggleに目を向けると、このコンペはリード化合物の探索をコンピュータ上で行うバーチャルスクリーニングを想定しているのでは無いかと思われます。コンペの目的は15種類のターゲットに対して各分子の活性がどれくらい示すかを推定するタスクであり、これはまさにタンパク質に対してどの化合物が反応を示すかを調べることを意識していそうです。

これからは与えられたデータセットの解説とコンペの結果、そして1位となったDeep Learningの手法を見ていきます。

Data Set

データセットはすべてコード化されているため何を意味しているかは分かりません。つまりドメイン知識を用いることができません。

15個のターゲット毎にファイルが分かれており「ACT1」のように表現されています。コンペ後に出された論文を見るに、ACT1は「3A4」と呼ばれるデータセットに該当すると思われ、生体異物を代謝する酵素シトクロムP450 3A4」に関する各化合物の反応を記したものでありそうです。ちなみに、この酵素は主に肝臓や小腸に分布しており、薬物治療の最適化(薬が代謝排出されずに吸収されやすいようにするなど)を考える上で重要な酵素であるとみなされることが多いそうです。

Training Set

以下の通り情報が与えられています。

  • Column 1
    分子ID。「ACT1_M_80」のように、「ターゲットコード+分子コード」で表現されています。 分子コードはすべてのターゲットで共通であり一意につけられているようです。(つまりACT1_M_80とACT15_M_80は同一の分子)

  • Column 2
    活性値。ターゲットごとに単位が異なっているため同一のスケールでは無いことは留意しておく必要があります。

  • Column 3〜
    分子の記述子。 コンペ中ではこれ以上の説明がなくラベルの意味は不明となっていましたが、この論文中でatomic pair(AP)やdonor−acceptor pair(DP)であると明かされました。いずれも原子同士の組み合わせを表現しているようです。
    APでは元素や結合している非水素元素数、π電子数をもとにラベル付けされているようです。
    DPではカチオン、アニオン、中性ドナー、中性アクセプター、極性、疎水性物質、その他で分類しているそうです。
    (ここまで来るとちょっと追いきれないのでそれぞれの意味は他に譲ります…)

中身を見てみると0以上の数値データで表現されている非常にスパースなデータであり、5%のみが0以外と論文では説明されています。記述子のラベルそれぞれがどんな意味を持つのかは論文でも言及されておらず最後まで不明なままでした。

Test Set

レーニングセットから活性値を除いたフォーマットになっています。コンペでは15種類のテスト用データセットに記載されている分子について、それぞれの活性値を推定して提出することとなります。

コンペの評価は相関係数Rの二乗で求められます。詳細はこちらです。

コンペ結果

コンペの最終結果であるPrivate Leaderboardは以下の表となっています。

f:id:kamujun:20190423160033p:plain:w600
Merck Molecular Activity Challenge Private Leaderboard

1位はGeorge Dahl率いるトロント大学のチームによるDeep Learningを用いた手法でした。このチームにはDeep Learningにまつわる研究に対してチューリング賞を受賞したGeoff Hintonもアドバイサーとして参加していたようです。

2位はData Robotチームによる機械学習(Random Forests, PCA, GBM, KNN, Neural Nets, Elastic Net, GAM, SVMなど)を用いた手法でした。機会学習自動化プラットフォームを提供している事で有名なData Robot社ですが、この年の年初に企業してコンペに参加したようです。

このコンペにおいてはわずかにDeep Learning手法が上回った結果となりました。これからは1位を獲得したDeep Learning手法を見ていきます。

Deep Learningを用いたモデル

主催であるMerckと1位チームの共著で発表された論文Deep Neural Nets as a Method for Quantitative Structure−Activity Relationshipsをもとに手法を見ていきます。これは、1位になった手法をベースに少し改良を加えたモデルのようです。

この論文のcontributeはQSAR(Quantitative Structure-Activity Relationships)と呼ばれる、化合物の構造と生物学的な活性の量的関係を分析するタスクにおいてDeep Leariningを適用し、他の手法と同等以上の性能を示すことができた点です。これまではSVMやrandom forestといった手法が用いられてきたようですが、Deep系の手法が実問題に適用できたということが注目されたようです。

ネットワークを見ると基本的には全結合層を重ねただけのシンプルなネットワークです。論文ではハイパーパラメータ(隠れ層の数やニューロン数、ドロップアウト、事前学習など)によって性能がどう変化するかを様々実験し、考察されています。

f:id:kamujun:20190423160657p:plain:w450
全結合層によるDeep Neural Network

次に論文中の2つの実験について紹介します。

Individual vs Joint

筆者達は15個のターゲットに対するデータセットについて、別々のデータセットで学習すべきか、全てのデータセットを用いて学習するべきかを実験しています。言い換えるとACT1用、ACT2用、…と一個づつモデルを用意するか、ACT1〜ACT15まで全てのターゲットに対して推定できるモデルを1つ用意するかで性能がどのように異なるかを確認したということです。

この論文においては前者はindivisual DNN、後者はjoint DNNと名付けられています。ネットワーク図のイメージとしては以下です。

f:id:kamujun:20190423173314p:plain:w450
Individual DNN と Joint DNN

この実験を行った理由は各データセットでサイズが異なっており、データセット毎にモデルを作って学習を行うindivisual DNNでは学習データが足りずに性能が向上しない可能性があると筆者達は考えたようです。

joint DNNは問題に対して、全てのデータセットを用いて1つのモデルとして学習することでデータ不足を補います。それぞれのターゲットを予測する部分はアウトプット層で分けたニューロンを分ける事で出力されています。全てのデータセットを用いることで大量のデータから獲得した分子構造の知識のようなものが隠れ層に蓄積され、性能向上に役立てることを期待しています。

これら2つのモデルの性能を比較した結果は以下の通りと報告されています。上に分布しているほどJoing DNNの性能が良いことを示しています。

f:id:kamujun:20190423161755p:plain:w600
Joint DNNs vs Individual DNNs

15個のデータセットに対する推定結果を平均で見ると(左)、Joint DNNの方が良いことを示しています。

13個のデータセットにおいて(右)、性能が良い理由としては学習に用いた分子のうち85%が単一のデータセット、97%が2つ以下のデータセットでしか出現していないため、他のデータセットの特徴をうまく活用できたからではないかと考察されています。

逆に大きいデータ量を持つ2個のデータセットおいて(中央)性能が悪い原因としては、重複する分子はこの2つのデータセット間によるものであったため悪くなったではないかと述べられています。ちょっと個々の部分の説明はあまりしっくり来ていませんが…。

joint DNNの疑問点としてデータセット間で記述子と分子が揃っておらずどのように扱っているのか、またそれによる性能への影響があります。例えばACT1にD_1はあるが、ACT2にはD_1が存在しないといった風です。想像するに記述子も活性も単純に0としていると思うのですが実装が見つからなかったので不明でした。

DNN(parameter調整済み) vs RF

この論文では最終的に以下ハイパーパラメータでモデルで性能が良かったと述べられています。このモデルはjoint DNNで学習されたものとなっています。

・前処理
    対数変換
・隠れ層
    4層で各層のニューロン数は4000, 2000, 1000, 1000
・ドロップアウト    
    (input) 0 (hidden) 25% (hidden) 25% (hidden) 25% (hidden) 10% (output)
・活性化関数
    ReLU
・事前学習
    なし。パラメータ初期値はランダム。
・エポック数
    コンピュータ資源が許す限り多く。(ドロップアウトが効いているため過学習はしないとのこと)
・最適化
    モメンタム。パラメータは学習率0.05、モメンタム0.9、重み減衰0.0001。

上記モデルとrandom forestについて、データセット毎に比較した結果が以下となります。

f:id:kamujun:20190423163014p:plain:w450
パラメータチューニングされたjoint DNNとrandom forestの性能比較

15個のデータセットのうち13個においてjoint DNN(DNN with recommended parameter values)が上回っています(太字部分)。また、ハイパーパラメータの選択が最も悪かった場合においても0.412となり、randam forestより性能が良かったと筆者らは言っています。

終わりに

創薬の特にバーチャルスクリーニングのタスクにおいてDeep Learningがどのように適用され、実用可能性があるかをKaggleのコンペを通して見てみました。

私はこのタスクに対してDeep Learningを用いる事について、筋は悪くないのではと感じました。現状のDeep Learningの課題として解釈が難しいという点があり、研究対象にもなっています。一方で、数多ある候補からリード化合物となる可能性が高いものを見つけるこのタスクにおいては、なぜそのように推定したかよりも1%でも性能が高い方が優先されるのではないでしょうか。よって、Deep Learningは選択肢の一つとしては十分にあげても良いのではないかと思います。この点については専門家の方にどこを重要視するのか聞いてみたいです。

また、データセットについても考えさせられました。コンペで用いたデータセットの記述子が実際の活性予測する上で妥当であるのか特徴量の学習は可能なのか、よく用いられるフィンガープリントではどうなるのかなど、データセットに起因する懸念点もあるようです。一方で、分子のグラフ構造を利用するGraph Convolutionなど、新たな手法によって利用できるデータセットも変わってきているとも言えると思います。

参照資料