ざっくり解説、マテリアルズ・インフォマティクスの研究過程

本記事の概要

 本記事では、マテリアルズ・インフォマティクスによる材料開発の大まかな流れを文章と図を使用して説明する。この記事を読むことで、なんとなくマテインフォの研究の全体像を把握できるようになっている。Pythonなどを用いたコードの紹介はないのでご注意いただきたい。コードの具体的例は、後日に記事にする予定である。

マテリアルズ・インフォマティクス とは

 おそらくこの記事を読んでいる人は、マテリアルズ・インフォマティクス とは何なのか理解している人が多いだろう。でも、一応紹介しておく。
 マテリアルズ・インフォマティクス とは、インフォマティクス (情報学)を用いて、大量のデータから新材料を探索する取り組みのことである。省略してMIと呼ばれることが多い。

f:id:ataruto:20210308000157p:plain

マテリアルズ・インフォマティクスのイメージ


 要するに、今までのように人間が考えて新材料などを検討するのではなく、今までの研究で蓄積されたデータと人工知能を活用して、楽して新材料を発見していこうという取り組みである。この辺の解説記事は山ほどあるので本記事では、これ以上は割愛する。

研究の大まかな進め方

 研究の進め方は、王道のマテリアルズ・インフォマティクスの研究(教師あり学習を用いた物性予測など)では、大雑把にすると以下のようになる。

 

  1. 予測の問題設定を考える

  2. データセットを作成する

  3. 記述子(特徴量・説明変数)を作成する

  4. 予測モデルを作成・評価を行う

 

 この4つの中で時間がかかり、大変な工程は「2. データセットの作成」と「3. 記述子の作成」だろう。予測モデルの作成は、非常に発展的なものを採用したりしない限りそれほど大変な工程にならない場合が多い。
 ここから、これらの全体像をより細かくみていくことにする。

 

  1. 予測の問題設定を考える
    1.1  回帰問題か分類問題か検討する
    1.2 必要であれば、予測したい物性値の対数などを目的変数として採用する
  2. データセットを作成する
    2.1 データテーブルの作成
    2.2 データの選定(外れ値・異常値などを除外)
  3. 記述子を作成する
    3.1 記述子を作成するためのプログラムを作成する
  4. 予測モデルの作成・評価
    4.1 複数個の予測モデルを適応(通常3~5個程度)
    4.2 ハイパーパラメータをチューニングする
    4.3 最適なモデルを選択する
    (4.4 より実問題に即した評価を行う)
    (4.5 予測式中の変数の係数や重要度を確認する)

 

 機械学習教師あり学習)を用いた開発では、このような流れになることが多い。では、これらを一つずつ説明していく。

1. 予測の問題設定を考える

1.1 回帰問題か、分類問題か

 機械学習には大きく分けて3つの種類ものがある。”教師あり学習”、”教師なし学習”、”強化学習”である。しかし、マテリアルズ・インフォマティクスでは、教師あり学習を使用する場合が多いため、本記事では主に教師あり学習に関して説明していく。

f:id:ataruto:20210308220448p:plain

機械学習の種類


教師あり学習による予測では、以下の2つ種類のアウトプットが可能である。回帰予測または、事前に定義されたラベルに分類する分類予測である。

 

  • 回帰予測:数値を予測する
    例)バンドギャップの値を予測、生成エネルギーの予測、硬度の予測など
  • 分類予測:事前に定義されたラベルに分類予測する
    例)絶縁体 or 導体の分類予測、硬度が高い or 低いの分類予測など

 

 物性が数値で出てくる特性は、何も考えずに回帰予測すれば良いのではないかと思われるかもしれないが、回帰予測でうまくいかない場合がある。その良い例がバンドギャップである。バンドギャップは非常に多くに化合物で0.0 eV であるため、数値予測してもうまくいかないことが多い。このような場合は、例えば、バンドギャップが0.0 eVの化合物に導体。0.0 eVよりも大きい化合物は、絶縁体などとラベル付けて分類予測を行うとある程度うまく予測できる可能性がある。

1.2 必要であれば、予測したい物性値の対数などを目的変数として採用する

 これは、必要であればの話であるので飛ばして読んでもらっても構わない。
物性値をそのまま機械学習に学習させるのではなく、対数・逆数など物理的意味を考えた処理を行った方がうまく予測できる場合がある。この辺の処理は材料化学屋さんの腕の見せどころである。

2. データセットを作成する

2.1 データテーブルの作成

データテーブルを作成するにあたっては、2種類の方法があると考えられる。

  • 材料データベースから取得する場合
  • 実験データから取得する場合

よって、これら二つに分けて紹介する。

2.1.1 材料データベースから取得する

 現在、多くの材料データベースが存在しており、数万件以上の化合物が登録されている。このデータベースをうまく使用することができれば、より精度の高い予測モデル作成が目指せる。
 しかし、これらのデータベースから取得する際には、APIApplication Programming Interface) を利用する必要があったり、Webスクレイピングが必要だったりする可能性が高い。この際にプログラミングスキルがある程度必要になる。今後時間があれば、Materials Projectに関するAPI(Pymatgen)の簡単な使い方を紹介する予定である。

2.1.2 実験データから取得する

 自分たちの研究グループなどが有する実験データを使用して予測モデルを作成する場合もある。この際には、散らばっている実験データを(おそらく手作業で)Excel形式のようなテーブルデータにまとめる必要がある。
 これに関してはスキルなどはいらないが、泥臭い作業が必要となる。またこの時、1つのデータテーブル中で実験条件が異なり比較ができないなどの問題が発生してしまっていると良い精度が出ない場合が考えられるので注意。(この実験条件の相違をうまく記述子にいれることができれば問題ない。)

3. 記述子を作成する

 記述子の種類は、ざっくり分けると3種類くらいである。

  1. 組成記述子:組成情報に関する記述子
  2. 構造記述子:結晶構造に関する記述子
  3. 実験・計算により取得された特性値や測定条件に関する記述子

 3. 実験・計算により取得された特性値や測定条件に関する記述子はイメージがつきやすいだろう。そして、この記述子は泥臭い作業ではあるが、Excelのようなデータテーブルに書き込むだけで完成する場合が多く、作成は簡単である。

 1,2の記述子は、現在非常に多くのものが存在している。これらの記述子を紹介すると非常に長くなってしまうので、今回は割愛する(いつか紹介記事を書くかもしれない)この2つの記述子は、API などで取得できるものがあるが、やはりAPIの使い方を覚える必要がある。また、プログラミングが得意な方は自分で記述子を作成することももちろん可能である。ここもまた、材料屋さんの腕の見せ所である。

4. 予測モデルの作成・評価

4.1 複数個の予測モデルを適応

 ここに来て、機械学習がようやく出てくる。通常、機械学習による開発では実際に複数個(3〜5個程度)の機械学習モデルを予測問題に適応し、精度が最も良かった予測モデルを採用するという方法を取る。それはMIでも同じである。

「最強の機械学習モデルを適応すれば終わるじゃん」と思うかもしれないが、最強のモデルというのは予測問題・データ規模・記述子などによって変わってくるため、何個かモデルを検証する必要がある。

 また、解釈性(なぜそのような結果になったのか)と予測精度どちらを優先するかによって選択する機械学習モデルも決まってくる。例えば、近年話題になっている深層学習は、予測精度が非常に優れる場合はあるが、一般的にこれを使用すると解釈性がほとんどない予測モデル(ブラックボックス)になってしまう。高い解釈性を求めている場合には深層学習は使用せず、線形モデルや決定木モデルなどを使用する必要がある。

以下にマテリアルズ・インフォマティクスでよく使用される機械学習アルゴリズムを載せておく。

  • 線形回帰 (e.g. Lasso, Ridge)
  • ロジスティック回帰
  • サポートベクトルマシン  (LinearSVM, KernelSVM)
  • 決定木
  • ランダムフォレスト
  • 勾配ブースティングフォレスト (XGBoost, LightGBM, Catboost)
  • ニューラルネットワーク (MLP, CNN, RNN, GAN)

また、機械学習アルゴリズムチートシート機械学習オープンソースライブラリ"scikit-learn"が用意しているので、これを参考にして機械学習アルゴリズムを実際に試すのも良い。

 

f:id:ataruto:20210308221237p:plain

scikit-learn アルゴリズムチートシート

4.2 ハイパーパラメータをチューニングする

 ハイパーパラメータとは、機械学習の学習挙動などを制御するためのパラメータであり、基本的に機械学習自身が決定することができないため、人間が評価を行うことで決定しなければならない。

 基本的に、全ての機械学習アルゴリズムに関してハイパーパラメータは存在しているため、何かしらの最適化手法を用いてハイパーパラメータをチューニングする必要がある。最も簡単な最適化手法はグリッドサーチ である。

グリッドサーチは、ある特定の範囲のハイパーパラメータをしらみつぶしに、網羅的に探索する方法である。例えば、ハイパーパラメータが3種類存在するとし、それぞれのハイパーパラメータが以下の範囲で調節することを考える

  • パラメータA : 32, 64, 128, 256 (4通り)
  • パラメータB : 1, 10, 100 (3通り)
  • パラメータC : 1, 0.1, 0.01 (3通り)

このパラメータA,B,Cに関してグリッドサーチを行う場合、全ての組み合わせ(4✖️3✖️3=36通り)に関して調査を行い、最も予測精度が高かったパラメータの組み合わせを採用するようになっている。

このようにしてハイパーパラメータをチューニングする必要がある。

4.3 最適な予測モデルを選択する

 各予測モデルに関してハイパーパラメータがチューニングできたら、次は最も良い予測モデルを選択するだけだ。しかし、予測精度を調査するには、学習に用いたデータに対する精度を使用してはならない。学習に用いていないデータに対する精度を使用する必要がある。

この予測精度を確かめるために学習せず残しておくデータをテストデータという。一方、機械学習の学習に使用するデータは、訓練データと呼ばれる。また、さらに4.2でハイパーパラメータをチューニングする際にも予測精度を検証しなければならない。このチューニングの時に精度を確かめるデータを検証データと呼ぶ。

つまり、機械学習では手元にあるデータセットは以下の三つのデータに分割する必要があると言える。

f:id:ataruto:20210308223331p:plain

訓練データ・検証データ・テストデータ
  • 訓練データ:機械学習の学習に使用する。
  • 検証データ:機械学習モデルのハイパーパラメータチューニングの精度検証のために使用する。
  • テストデータ:最終評価に使用するデータ。このデータは、未知のデータとして扱われるため、最後の予測まで一切触れてはいけないデータセットである。テストデータを予測する際には、訓練データと検証データをまとめて一緒に学習したモデルを用いて予測する。

「なぜ、検証データとテストデータを分けて用意する必要があるのか?」と思ったかもしれない。これらを分ける理由は、ハイパーパラメータチューニングの際に検証データを見ながらチューニングしてしまっているからである。つまり、「検証データに対する予測精度が上がるようにモデルを設計しているためである。」だから、「検証データで精度が良いのは当たり前でしょ、全く未知なデータに対する精度を評価しないといけない」というようなことになる。したがって、このようにデータを分割して学習と評価を行う必要がある。(実際は、うまく検証データ・テストデータを組むことができていれば、検証精度とテスト精度はおおよそ同じくらいになるが、それでもこのように分割してきちんと評価する必要がある。)

またデータの数が十分でない場合や検証の妥当性を強化したい場合などは、交差検証(クロスバリデーション)法という方法で訓練データと検証データを入れ替えながら行うことも多々ある。

4.4 実際問題に即した評価を行う

 これはやる場合とやらない場合があるので、詳細の説明は省く。例えば、マテリアルズ・インフォマティクスでは外挿空間に対する予測精度がしばしば議論されるが、あえて外挿空間的データを残しておき、そこに対して精度を評価することで外挿空間に対して精度を見積もるなどの場合がある。

4.5 予測式中の変数の係数や重要度を確認する

 予測モデルの解釈性が高い場合、どの記述子がどうやって効いているのか、どれくらい重要なのかということを分析することができる。線形モデルであれば単純に、回帰係数を分析すれば良い。決定木系のモデルであれば、変数の重要度やshap値などを用いることで記述子がどのように効いているのかある程度分析できる。ニューラルネットワーク系はこの分析はかなり厳しいので、このような分析を必ず行いたい場合は適応しないほうが良い。

まとめ

 結構壮大な記事になった気がしますが、大まかなマテリアルズ・インフォマティクスの流れはこんな感じです(濃く書きすぎた部分と薄すぎる部分があるかもしれませんがご了承ください)。機械学習で予測するだけなら結構簡単ですが、その評価をきちんと行うのが大変。また、データセットを準備する、記述子を準備するのも意外と泥臭くて大変です。これからマテリアルズ・インフォマティクスを始める方の参考人あれば良いなと思っています。質問や書いて欲しい記事や訂正点など気づいた方がいましたら、コメントしていただけると嬉しいです。

次は、実際に予測モデルをどうやって作るのか、解説記事を簡単に書きたいと思います。