近頃「気になる」機械学習 ~物理シミュレーション技術者に捧げる機械学習入門~

  • HOME
  • 近頃「気になる」機械学習 ~物理シミュレーション技術者に捧げる機械学習入門~

はじめに

本メディア MSIISM を編集しているNTTデータ数理システムは、1982 年の創業当初から製造業分野のお客様と一緒に仕事をさせて頂いており、 数値計算による物理シミュレーションは深く我々の手に馴染んだ手法のひとつです。 一方でデータ分析の文脈で台頭が著しい機械学習も、今や弊社の技術の主軸の一つとなりました (データ分析関連の分野については、MSIISM 内の他の記事もぜひご覧くださいね)。

特定の手法にこだわらずに「現実世界の問題解決」を軸に広く「数理」を仕事とする我々の立場から見ると、 機械学習の目覚しい成果が物理シミュレーションの有効性を減じてしまうわけではありません。 単に現実をモデル化する手法の違いであり、 どちらが本質的に優れているのか、という論争はりんごとみかんを比べるようなものです。

...と理屈ではわかっていても、日々報道されるように これまで計算機が苦手とされていたことを次々と実現してゆく機械学習はじつに「気になる」存在です。 我々にとってなじみ深い数値計算が解いてきた課題「物理現象の再現」に 機械学習を使って取り組んでみたらどうなるのでしょう。

機械学習のタスクの枠組みとして下記の3つがよく挙げられます。

  • 教師あり(学習データが「入力」と「正解の出力」の形式で与えられる)
  • 教師なし(学習データが「入力」のみの形式で与えられる)
  • 強化学習

物理モデルのパラメータを入力して、物理量を「予測」するシミュレーションは、 上記の枠組みで言うと物理量の観測データを「正解の出力」として与えられた 「教師あり」機械学習のタスクとして考えることができます。 機械学習の枠組みで同じことができてしまうのであれば、数値計算ベースの物理シミュレーションは、 結局機械学習が現れるまでの「つなぎ」に過ぎなかったのでしょうか。

筆者の経歴と記事の立ち位置について

いきなり、煽り記事のような出だしになってしまいました。 正直、すこし前の筆者は上のようなことをちょっと深刻に考えていたのです。

自己紹介しましょう。 筆者は大学で素粒子のシミュレーションを研究し、 入社後も10年以上にわたって数値計算による物理シミュレーションに携わってきており、 物理シミュレーションが技術的なバックボーンとなっています。 その一方でデータ分析、機械学習、数理計画、物理以外のシミュレーション(交通、疾病等)といった技術についても 多数のプロジェクトを通して触れてきました。 現在はこれらの技術を実用に応じて使い分け、組み合わせて仕事をしていますが、 当初は物理シミュレーションと他の技術の考え方の違いに強い違和感を覚え、 自分の親しんだ方法が役に立たなくなってしまうのでは、と時には不安になったりもしてきました。

近年の機械学習ブームによって、物理シミュレーション技術者の方も機械学習に取り組む機運が高まっています。 一方で機械学習の理解や扱いに苦労されている方を多く見かけます。 特に物理シミュレーション一筋のベテランの方ほどその傾向があるように思います (長年物理シミュレーションのモノリンガルの方が突然機械学習という他言語を覚える苦労は、 若くからマルチリンガルで育っている方には伝わりにくいと思います)。

この記事の主な目標は、筆者の個人的経験をもとに、 物理シミュレーションをバックボーンとされる方が機械学習に対して漠然と感じる違和感の元を明らかにして、 機械学習との付き合い方と勘どころをお伝えすることです。 また機械学習の技術者の方にとっては、物理系技術者とコミュニケーションを取り、 相互理解を図るための一助となれば、などとも考えております。

おおもとの違いを理解する

物理シミュレーションの枠組み

多くの物理シミュレーションは「基本方程式を与えられたものとして、数値演算で近似解を求める」という手法的な枠組みにおいて共通しています。

物理シミュレーションが拠って立つところの、例えばナヴィエストークス方程式などの、基礎方程式は、 近代科学数百年の歴史の中で人間が見出だしたもので、幾多の観測データによる検証をパスしてきた堅牢な土台の上にあります。 残念ながらそれらの方程式は、複雑で現実的な設定では解析的に解けません。 すなわち、結果を「式」の形で書き下すことはできないのです。 しかしそういった場合にも、 計算機を使って数値的に解を求めるための方法(数値演算スキームと言います)が開発されたことにより、 自然現象を計算機上でモデル化し、「可視化」するといったことができるようになりました。

これが、弊社創立の頃から遥か遡って、コンピュータの発明当初から用いられている、数値計算による物理シミュレーションです。 「車両のボディーの空力特性を調べる」といった製造業向けの応用では、 支配する方程式が明らかになっていて、数値演算スキームも知られています。 複雑さの度合いが人工的に制御でき、実験環境が用意できる場合は特に、 物理シミュレーションは高い予測精度が期待できる手法であり、実績も十分です。 製造のみならず台風の進路予測や天気予報の精度向上にも、 実は数値計算による物理シミュレーションの貢献が大きいそうです。

物理シミュレーションと機械学習の違い

一方の機械学習でも物理現象の再現をさせることは原理的に可能です。 数値計算による物理シミュレーションと機械学習は、 「入力⇒モデル⇒出力(予測値)」という大枠の構成自体に違いはありません。

両者が大きく異なるのは モデルの汎用性と自由度(パラメータの数) です。 物理シミュレーションのモデルは、 人間が見出した現象のメカニズムを記述する基礎方程式のベースライン上にあります。 それら方程式は質点系、力学的構造計算、流体、半導体などそれぞれの分野に特化したもので、 不定のパラメータは比較的少数、すなわちモデルの取りうる自由度は強く制限されています。 一方で機械学習モデルは特にモダンなものだと表現の自由度が非常に高くなるように設計されています。 例えば画像の深層学習で使われる多層ニューラルネットワークは理論的にあらゆる関数を表現できる数千万という内部パラメータを持っていて、 「人間が与えたベースライン」といった「縛り」は少なく、入力として与えられる学習データに応じて柔軟に学習が行われます。 パラメータが多く、制限が少ないのでフィッティングに必要なデータが沢山必要なのも自然なことです。 つまり、物理シミュレーションでは人が与えた物理方程式という「ルール」がモデルを強く規定 している(演繹的)のに対して、 機械学習では学習データが主にモデルを規定 しているとも言えるでしょう(帰納的)。

「見えないはずの星が観測されたことで一般相対性理論の正しさが証明された」、 「理論によって存在を予言された素粒子が加速器の進展によって発見された」、 というエピソードは物理学を学んだ者には馴染み深いものです。 そして、現象を説明する法則が、コンピュータすら存在しない時代の人間が直感を頼りに紙と鉛筆を使って見出してきた、 単純なものであることにロマンを感じる方も多いかと思います。 物理学には「 単純で少数の法則 が(未知の現象を含めて)多くの現象を説明する」ことを 是としている部分があることに頷かれる方も多いことでしょう。 数値計算による物理シミュレーションは歴史的にこの価値感を共有していると言えます。

一方の機械学習はちょっと違って、現象を広く説明すること(汎化性能と言います)はもちろん目指しながらも、 あくまで与えられたタスクを精度良く果たす、という部分を志向していて 「モデルの単純さ」はどちらかというと優先度合いが低くなります (もちろん、昨今は「説明性」の観点から、機械学習の分野でもシンプルで挙動が分かりやすいモデルが選好される状況はあります)。 「単純で原理的な理解」を最上とする、という立場からはちょっと実用本位に傾いていると言えるでしょうか。

物理現象の再現は機械学習向きのタスクか

数値計算によるシミュレーションで精度を追求していると、独特のいろいろな困難に当たります。 メッシュの構造が崩れて行列のコンディションが悪くなって反復法が収束しなくなったとか、 三次元解析でメッシュを増やしたら計算機に乗らないとか、 非線形性から来る数値的不安定性が生じないようにタイムステップを刻まねばならないとか、 沢山のことを同時に気にして、あれこれと計算機に教え込んでやる必要があります。

その一方で、機械が「ゼロベース」で勝手に適切な打ち手を学習してくれるアルファ碁ゼロが、 ゲームのルールだけ教えたらあとは自分で学習して人間のプロフェッショナル以上に強くなったぞ、 といったニュースは実に魅力的でそれこそ「気になる」のは人情でしょう。

ただ、我々のようにビジネスとしてお客様に与えられたタスクに取り組んで、 有限のリソースの中で所望の成果を出すことが要求されている立場としては、 タスクの性質をよく分析せずに「やってみた」ということはできません。 物理現象の再現、というタスクについては我々は「メカニズムを記述する基礎方程式」という 圧倒的な知識を持っていることを思い出すと、それをすべて捨てて、 「ゼロベース」に戻してしまうのは技術的に妥当な選択ではないと考えています。

囲碁で相手に勝つ、というタスクは複雑で盤面の変化の「メカニズム」が発見されていない、 いわば「未開の地」ですから、 「こうするとうまくいった」という現象論的なエピソードから知識を得ることが得意な機械学習向けと言えます。 例えばあるソフトウエアを使ってたらバグがあって、うまく仕事が進まなくて困っているとします。 幸いこのソフトウエアにはユーザーが沢山居るので、みんなが設定や入力をあれこれ工夫していて、 「自分はこうやったらうまくいった」という投稿がネット上のあちこちに見つかったとします。 こういう「定石」をいろいろとくまなく駆使して、とりあえず当面の仕事をクリアしたとしましょう。 これが機械学習が得意とする、現象論的なエピソードから知識を集約することによる問題解決です。 でもこの方法だけだとソフトウエアの開発元がバグの原因の大本を突き止めて更新してくれないと、 今回適用した「定石」が別の仕事で通用するか、本当に安心はできないですね。

方程式の形で記述されている人間の自然法則に関する理解は、 この話で言うと、ソフトウエアの開発元が持つ知識、すなわち「ソースコード」に近いものがあります。 だから方程式に基いて自然法則を数値的に解く技法は強力で、 乏しい計算機パワーしかない時代に軌道計算して人工衛星を飛ばすこともできました。 少量のデータで(不定の)物理パラメータをフィッティングしても 基礎方程式が適用可能な範囲であれば、 未知データに対しても上手く予測できるのは、現象論的な知識ではなく、 「メカニズムの理解」に基いているからなのです。

仮に機械学習を使って、ゼロベースで物理現象の再現を行うこととしましょう。 前提知識なし(ゼロベース)に現象に基いて「法則を発見する」ところから自前ですから、 アルファ碁ゼロが費したような膨大な計算機パワーを使って、 「車輪の再発明」ならぬ「法則の再発見」に陥るだけに終わる可能性は大きいでしょう。 さらに、その法則の汎用性は保証の限りではありません。良くも悪くも観測データがすべてですから、 学習データから離れたデータに対しては予測精度を全く期待できないのです。

機械学習の使い処

そらみたことか物理現象の再現に機械学習は出る幕はない……、と極端に走るのもまた非科学的な考え方ではないでしょうか。 要は使い処を選ばねばならない、ということです。

物理シミュレーションの難点

現象の「メカニズム」に対する理解に基いているので強みがある物理シミュレーションですが、 じつは大きな難点があり、そこが機械学習によるブレークスルーが待望される部分でもあります。 それは次のように「時間がかかる」という言葉に集約されます。

<結果を得るのに計算時間がかかる>
物理シミュレーションはメッシュを区切るにしろ、粒子法を用いるにしろ、精度を求めるほど微細化する必要があり、計算時間がかかります。 古くはコンパイラの最適化、ベクトル演算の利用、キャッシュメモリを活かした高性能行列演算ライブラリ、コプロセッサやGPU などのハードウエアなど、 「HPC」の名の下に集結したハード、ソフト技術の進展が、計算時間の短縮に寄与していますが、 計算量オーダー(計算の大きさに対する計算時間の増え方)の抜本的な改善は難しい状況です。

<基礎方程式の物理パラメータの探索(フィッティング)に時間がかかる>
物理の基礎方程式にも誘電率やモビリティーなどの不定な物理パラメータが現れ、 観測データをうまく説明(予測)できる値を探す必要がありますが、 前述したようにシミュレーションには計算時間がかかることもあって、適切なパラメータ探索には一般に時間がかかります。

<結果を改善するのに時間がかかる >
物理シミュレーションのモデル改善の営みはほぼ「人力」です。 前節で述べたように、人が原因を調査し、メカニズムに対する仮説を立て、 シミュレーションが依拠している方程式に補正項を入れたりして、必要な補正を行います。 流体解析における乱流のように、メカニズムが不透明で再現が難しい現象に対しては、これは大きな困難となります。

物理シミュレーションに機械学習を活かす事例

機械学習が物理シミュレーションに寄与している事例を見てみましょう。 先に述べたように、いずれも物理シミュレーションの根本を取り壊して「更地」から考えるのではなく、 既存の物理シミュレーションの難点を補う「ハイブリッド」な手法と言えます。

<シミュレーションの中身に機械学習を使う>
Sanchez-Gonzalez et al.(2020)[1]では、 粒子法を行ったシミュレーションを実施していますが、 1タイムステップ進む間の粒子間の相互作用を機械学習させることで、 時間発展の計算を高速に実現しています。 各粒子の5タイムステップ前の運動量から次のタイムステップの加速度を予測させる、 という特徴量の設定が力学系の法則(メカニズムの理解)から導かれたものであることが印象的です。

<シミュレーションの応答を学習させて結果を高速に得る>
Kasim et al.(2020)[2]では、 様々なパラメータ設定でのマクロな物理シミュレーションの結果を機械学習モデルに学習させています。 学習済の機械学習モデルは物理シミュレーションと比べて圧倒的に高速な応答が可能なので、 パラメータフィッティングや逆問題解析を高速化できます。

<微分方程式の結果を機械学習で模倣する>
機械学習で物理的な「場」そのものを学習させるアプローチです。 「座標」から「関数値」を取得する関数をデータから学習させます。 微分可能な活性化関数を層にした関数を使って偏微分方程式やその逆問題を解くことができたという Sitzmann et al.(2020)[3]は、かなり注目すべきものと言えるでしょう。 そもそも微分方程式を解く、というのは、関数の微係数が既知の状態で関数の値を見つけることですから、 結果として表される関数の微係数を教師値としてフィットさせれば、 その結果として関数値が解として得られることが期待できる、というのは微分可能な活性化関数を使う大きなメリットと言えるでしょう。

機械学習の予測精度を上げるコツ

数値計算を使った物理シミュレーションも機械学習もどうやって精度改善を実現するかが ツールの使い手としての我々の仕事です。 数値計算を使った物理シミュレーションなら、 人間(物理シミュレーションに慣れた技術者)の「物理的直観」を生かして原因を特定し、 モデルを直接改変するのが王道と言えますが、 機械学習を使っている場合はちょっと努力の方向性が違います。

受験業界で良く言われることとして、 「子供がある程度の年齢になったら、親は勉強の中身を教えずに勉強の仕方を教えるか環境を整えるだけにしなさい」 というのがありますが、機械学習もそれに似ていて、 機械学習では精度を上げるために「モデル」そのものを人手で変更することは現実的ではありません(パラメータが多すぎる)。 十分な情報量があるデータを追加する、モデルの構造を変更する、など、 「学習のさせかた」を変更して試行錯誤し、良いモデルが表れるのを待つのです。

具体的な工夫を列挙してみます。 いずれも物理現象の再現に限らずデータ解析のアプリケーションに通じる一般的なものです。

<学習データの特徴量を吟味する>
機械学習は入力データが頼りです。 予測のために特徴量が十分かどうかを物理的な「ドメイン知識」を活用して十分に考えましょう。 例えば物理場A(x,t)の予測が求められているとき、 物理的に関係がありそうな量をもれなく測定して入力できているでしょうか。 物理現象は時刻と座標の(偏)微分方程式で表されることが多いので、 現時刻tや当該座標xのみでなく、 過去の時刻や周辺の座標の物理量を入力することも検討しましょう (入力が増えると計算が重くなる点には注意ですが)。 もちろんノイズ等の少ない質のよいデータであることも重要です。

<学習データの網羅性を確保する>
機械学習には学習データの「間を取る」といった結果を期待するべきですので、学習データの網羅性が重要です。 予測するにも「元になる手掛り」が学習データに含まれてないのでは「無理筋」のタスクになってしまいます。 例えば物性の予測をするのに室温くらいでの学習データしか入力していないのに、 氷点下ではどうなるか、と問うて、仮に当たったとしても「まぐれ当たり」の可能性は大ありです。 学習データからかけ離れた入力に対する結果を求めないよう配慮しましょう。 網羅性が不十分な場合は、学習データを増やす他にも、物理量に周期性があるなら 1周期にまとめる等で予測範囲を減らしつつ学習データを増やすことも考えられます。

<タスクの分割を検討する>
当初の業務上の問題設定をそのままモデル化しても予測精度が上がらない場合があります。 この場合はモデル構成から見直すことも考えられます。 例えば、予測モデルを複数ステップに明示的に分けて、各ステップの予測対象のメカニズムをシンプルにすることで、 最終的な予測精度を上げやすくなる場合があります。 剛体の運動は、重心の並進運動と重心のまわりの回転運動という2つの働きに分割することで ぐっとシンプルに記述することができ、理解もしやすくなりますね。 機械学習モデルに解かせる場合でも、タスクを分割したほうが性質が良くなりそうに見えるなら、 元々のタスクを分割して個別に予測モデルを作る方が、挙動が予測しやすくなることがあります。 また予測モデルを分離すると異なるアルゴリズムを使うことも可能で(一方は機械学習、一方はシミュレーション等)、 どちらの精度が問題になっているかを明確にしてその改良に注力できる等のメリットがあります。 一方でタスクを分割するには、各タスクに対応する学習データ、もしくはシミュレータが必要になる点がネックです。

<予測対象を吟味する>
機械学習に何を予測させるかの問題設定が、結果に影響することも多々あります。 物理的な変換公式など駆使して、より基本的な量や物理法則に直に現れるはずの量を予測対象としましょう。 また予測対象が複合的な現象から成る場合がありますが、 <タスクの分割を検討する>のように現象別のモデルに分割して予測し、後から欲しい予測値に合成することも考えられます。

<類似の問題設定での応用例全体を調査・検討する>
機械学習アルゴリズムそのものを調べて試行錯誤するより、 事例をベースに類例の調査を参考にして検討しましょう。 機械学習の事例においてアルゴリズムの貢献は重要ですが、すべてではありません。 特徴量の設定や学習データの与え方などの「学習環境」に依存する部分も大きいので、 まずはできる限りご自身の問題設定に近い、完結した応用例を探されることをおすすめします。

上の<学習データの特徴量を吟味する>は一般に「特徴量エンジニアリング」と呼ばれますが、 メカニズムの詳細が明らかでなくても、 着目している現象に予めどのような特徴量が関連するかだけでもわかっているならば、 機械学習においてもそれを活用しない手はありません。 こういったところが物理シミュレーションの技術者の強みを活かすポイントになるでしょう。

「気になる」機械学習とのうまい付き合い方

ここまで読んでいただいた皆様、ありがとうございます。 最後に、物理シミュレーションを技術的なバックボーンとする筆者の、 機械学習に対する「肌感覚」を述べてこの記事を終わりにしたいと思います。

まずはあまり期待しすぎないことです。

基礎方程式から導かれたスキームに過去の研究者の多くの知見が取り入れられたシミュレーションモデルに比べれば、 機械学習モデルはあまりに「自由」ですから、現象のメカニズムに関するヒントをある程度与えてあげないと、 賢い振舞いをするまでかなり手間がかかってしまいます。 「無理筋」にならない程度にうまくタスクを調整して、正解が読み取れるだけの情報量のある学習データを十分に与えることです。 そして「もし間違えた場合は根気よく補習してあげる」くらいの意識が付き合う上で妥当な心構えかと思います (なお類似の課題に対する学習済みモデルがあれば転移学習といった手法を使って上記の学習の手間を削減できる可能性がありますが、 現在のところ学習済みモデルの汎用性はそれほど高くありません)。

そうすれば、人間が気づかないちょっとした「気配」から自分なりの法則を発見して、 良い精度で回答してくれる可能性はあります。 「計算ができる犬」は飼主の表情を読んでいるだけで実際に計算ができるわけじゃない、という話があります。 でも飼主の表情を見ていればわかるのだ、という洞察はある意味「賢い」と言えなくもない。そういう別次元の「賢さ」をうまく活かすのです (本当は材料にしてほしくない説明変数を使って「ずるした」結果を出してしまうことは機械学習ではままあって、特徴量エンジニアリングの際の注意ポイントではあります)。

物理シミュレーションでは演繹(ルールから予測)だったのが 機械学習では帰納(データから予測)であるところ、 モデルそのものではなく「モデルの学習のさせかた」しか手を入れられないところ、 さらには、「シンプルなのが美しい」という価値感がそれほど重視されないところに 「付き合いにくさ」を感じてしまうのは自然なことかもしれません。

しかし、シミュレーションに限らず業務や研究全体を見渡すと メカニズムの理解に基く演繹的な手法のみで解決できることはあまり多くはありません。 かな漢字変換も誤変換の収集から学んで今のように賢くなりました。 圧倒的な精度で天体の運行を予測できる天文計算は、単純な物理法則に基く「第一原理計算」ではなく、 観測に基いた帰納的なモデルの産物です。

コンピュータの進歩のおかげで、我々はどうやら 「法則を発見する」という帰納的な仕事を機械にさせることができるようになった時代のとば口に居ます。 メカニズムが分かっているところはこれまでのように人間の知見を使うけれど、 どうなっているのか得体が知れない部分、勝手のわからない部分 (どこがわからないか、ということがわかるのは人間の大きなアドバンテージと言えるでしょう)は うまく問題を切り分けてやって機械学習にやらせてみてもよいでしょう。 数値計算はいずれ機械学習に取って代わられてしまうかも、などと身構えるのではなく、 目の前の課題に対する取り組み方の選択肢が広がった、というシンプルなとらえ方をしてもよいのでは、 と個人的には思っています。

この記事が少しでもお役に立てば幸いです。 また弊社ではこのような分析についてのコンサルティングも行っていますので、お気軽にご相談ください。

  • Alvaro Sanchez-Gonzalez, Jonathan Godwin, Tobias Pfaff, Rex Ying, Jure Leskovec and Peter W. Battaglia. Learning to Simulate Complex Physics with Graph Networks. arXiv:2002.09405 [cs.LG]. 2020.
  • M. F. Kasim, D. Watson-Parris, L. Deaconu, S. Oliver, P. Hatfield, D. H. Froula, G. Gregori, M. Jarvis, S. Khatiwala, J. Korenaga, J. Topp-Mugglestone, E. Viezzer and S. M. Vinko. Up to two billion times acceleration of scientific simulations with deep neural architecture search. arXiv:2001.08055 [stat.ML]. 2020.
  • Vincent Sitzmann, Julien N. P. Martel, Alexander W. Bergman, David B. Lindell and Gordon Wetzstein. Implicit Neural Representations with Periodic Activation Functions. arXiv:2006.09661 [cs.CV]. 2020.