【論文読み】機械学習はデバイス開発を救うか？

# 読んだきっかけ
機械学習を使ってデバイス開発のプロセスを効率化するアプローチに興味を持った

# 読んだ論文
Embedding physics domain knowledge into a Bayesian network enables layer-by-layer process innovation for photovoltaics
https://www.nature.com/articles/s41524-020-0277-x

### 論文を選んだポイント
- タイトルの"Embedding physics domain knowledge"なところ（この手の類はドメイン知識が極めて重要で、機械学習だけではうまくいかないと思っている）
- データ（一部）やコードが公開されている
- 比較的新しい（2021年）

# 要旨

- 試行錯誤的にやられていた太陽電池のプロセス最適化にベイジアンネットワークを適用し、効率化
- 太陽電池の材料であるガリウムヒ素（GaAs）の成長温度と、得られた材料特性（e.g. バルク寿命 etc.）およびデバイス特性（e.g セル特性）とを関係づけたい
- これを実現するために、ベイズ推定とサロゲートニューラルネットワークモデル[^1]とを階層的に組み合わせた
- 訓練済のモデルと数回の実験サンプルがあれば、手間のかかる実験を大幅に削減できる
- デモとして、5回の実験のみで、GaAs太陽電池の優れた成長温度プロファイルを特定した
- 従来のグリッドサーチ法に比べて、効率を6.5%向上した

# 各論
## Introduction
- 従来、プロセス最適化は、ブラックボックスな手法[^2]がよく使われる
    - 実験計画法、グリッドサーチ、ベイズ最適化、Particle Swarm Optimization[^3] [^4]
- しかし、以下のような問題点も
    - 選択する変数や実験範囲に、結果が大きく依存する
    - 特性が得られない場合、原因究明のため、追加の実験が必要となる
- これらを解決する方法として、ベイズ推定を Physics-based forward model および高速な評価手法とを組み合わせる方法が近年、太陽電池デバイスにおいて報告されている


- 本論文では、ガリウムヒ素（GaAs）太陽電池セルの成膜時の温度プロファイル最適化を試みる
- 成膜温度は、表面状態、不純物濃度、欠陥密度などの材料特性に影響するため、適切に設計する必要がある
- 太陽電池は複数の層で構成されており、セル性能を向上すべく、研究者は層ごとに実験を繰り返し、知見を得ている
- しかしながら、実験で行われる物理解析（SIMSやTR-PL）は、金と時間がかかる
- また、これは、半導体や電池など、ほかの積層デバイスにも共通の問題である

- これらの問題を解決し、適切なプロセス条件を効率的に推定するために、本稿では以下のアプローチをとる
    - 独自の Physics-based surrogate model を使う
        - 温度プロファイルから、キーとなる材料特性（キャリアライフタイム、再結合速度、ドーピング濃度）を推定する        
        - 次に材料特性から、最終のセル特性を推定する
        - セル特性の推定は、通常のCAEではなくサロゲートモデルを使う
    - 電特評価結果のみをデータとして扱う
        - 時間とお金のかかる物理解析は使わない、実験サイクルを高速化

    - 材料特性を間にかますことで、ブラックボックスではなく、ある程度解釈が可能になる
    - サロゲートモデルを使うことで、約100倍高速化できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/1a662523-a678-4241-d5ba-049d052cd2b3.png)

## Results
- ベイジアンネットワークは４つの部分からなる

### ドメイン知識を元にしたプロセス変数のパラメータ化
- プロセス変数と材料特性の関係を、物理の知識を元に定義する
- デバイス特性に影響すると思われる材料特性を挙げる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/3efb5293-0be5-e6eb-9ee8-0a113eb69085.png)


- アレニウス則なども考慮に入れ、材料特性の変数とプロセス変数との関係式を確率モデルで定義する
- 下図は、アクセプタのドーピング濃度$N_A の例にした階層ベイズモデル、図中の a, b, c はデータから推定される潜在変数を、T は成膜温度を示す
- 変数の分布に強い制約を持たせ、ドメイン知識を加える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/c8056307-b8be-2607-8712-6d569b09d877.png)

### 実測からのデバイスパラメータの推定
- 材料物性 $P(N_A|T)$ から、デバイス特性 $P(J|N_A,T)$ を推定する
- 数値解析で求めることができる
- が、時間がかかるので、ベイズ推定との相性が悪い→次セクションに続く

### 数値解析ソルバをニューラルネットワークサロゲートモデルに置き換え
- サロゲートモデルは以下の２つからなる
- (1) J-V カーブからノイズを除去する denoizing Autoencoder
    - 教師データには、デバイスシミュレーションで生成した 20,000 本分の J-V カーブにガウシアンノイズを重畳したものを使用
    - ガウシアンノイズの平均と分散は、実際に繰り返し計測して取得した J-V カーブを元に設定
    - エンコーダは畳み込み３層と全結合２層で構成、デコーダはその逆
- (2) 材料特性からJ-V カーブを推定する回帰モデル
    - denoizing AE のデコーダと同じ構造を持つ
    - 教師データには、一様分布を元に生成した 20,000 セットの材料物性データと、対応するJ-Vカーブ
    - J-V カーブは、数値解析シミュレーションで生成し、ガウシアンノイズを重畳（(1)と同じ）
    - 学習時のバッチサイズは128、Learning rate は0.0001、勾配法はADAM

### ベイジアンネットワークを用いたセル特性の最適化
- 数学的に最適化のプロセスを数式化すると式(3) のように書ける
- x はプロセス変数（成膜温度）、g(x)は材料特性を推定する関数、h(y)はセル特性を推定する関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/7beb8d09-b436-ce79-4118-076b9a5c80f1.png)

- 成膜温度を変えてデバイスを試作、530-680℃の間で５条件、JV評価
- 得られたデータを元に、g(x)を得る（Fig.4）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/ee079193-b9b9-ab40-7d93-845efcefe687.png)
- 検証のために物理解析を実施、g(x)は物理解析から得られたデータと比較的よく一致している
- この方式の有効性を示すために、各層の再結合速度を最小化するようにプロセス条件（成長温度）を設定したところ、Grid Search と比較してよいセル特性が得られた（Fig.5）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119826/21fc36b0-db8c-09a9-a914-2615fbf3bc19.png)


# 所感
- 物理解析を使わないように評価方法そのものまでも根本から見直すという発想がおもしろい
- 材料物性を間にかまして階層にする、というアイディアは一般的な気がする
- サロゲートモデルではなく、ベイズ推定でできないのだろうか
- ５つのサンプリング条件をどう決めるか、という問題は残っている
- ~~材料特性を推定するモデルをどうやって訓練するのかがよくわからなかった~~材料特性からJ-V カーブを推定する回帰モデルを尤度関数として用いて、パラメータ推定している模様
- 前提として、デバイス特性を予測するシミュレーションが実用に耐えうる精度を持っている必要があるが、現実の開発ではここが結構本質的な問題だと思う

[^1]: 数値解析シミュレーションの代替として、ニューラルネットワークモデルを使って解を得る。所与の境界条件や初期条件の下で得られた数値解析の結果を教師データとして学習したニューラルネットワークモデルを使う。
[^2]: 最適化においてドメイン知識をあまり使わないって意味でブラックボックスと言われているのだと推測するが、実際の開発現場ではそんなことはないと思う。
[^3]: Particle Swarm Optimizationってなに？後で調べよう
[^4]: 遺伝アルゴリズムとかも使われたりする気がする