見出し画像

信頼できるAIの構築につながる「確率的プログラミング (Probabilistic Programming)」への招待

本記事は、確率的プログラミング (Probabilistic Programming:PP)確率的モデリング(Prorabilistic Modeling)を数式を使わずに概観する記事です。確率的プログラミングは確率的モデリングを実装する手段であり、統計、機械学習、ディープラーニング、そしてプログラミング言語という分野が重なり合うところに存在し、XAI(説明可能なAI)Human Centered AI(人間中心のAI)、すなわち信頼できるAIの実現にも資する技術です。今後、生成モデルも含め、様々な応用が期待されています。


確率的プログラミング(Probabilistic Programing)について

確率的プログラミングは、一言でいうと、確率的モデリング(Probabilistic Modeling)によるモデルの推論を自動的に実行するプログラミングパラダイムです。これは、確率的モデリングと従来のプログラミングを統合しようとする試みであり、確率的モデリングをより容易かつ広く適用可能にすることを目指しています。確率的プログラミングは、不確実性の中で意思決定を支援するシステムを作成するために使用できます。

確率的モデル(Probabilstic Model)について

確率的プログラミングは、確率的モデリングを自動で実行するプログラミングと書きました。確率的モデリングは、将来の結果の発生を予測する際に、ランダムなイベントや行動の影響を考慮するために使用される統計手法です。過去のデータからのみ法則性を発見するモデリング手法とは異なり、現実世界には不確実性が多く存在することを踏まえてモデリングします。別の言い方をすると、事前のルールに従う決定論的モデルとは異なり、確率的モデルは確率と可能性に基づいて決定を下します。つまり、ランダム性と不確実性を予測や分類に組み込みむことができる手法になります。そのため、天気予報や株価の予測など、不確実性の影響を多く受ける現象を対象とした領域や学問で使用されています。
まず、確率的モデルは、すべての潜在的な結果に異なる確率または重みを割り当てます。例えば、来週の火曜日の天気を予測するモデルは、現在の条件と過去データに基づいて、晴れの確率が70%、雨の確率が20%、曇りの確率が10%であると判断するとします。
そして、これらのモデルは統計的推論を通じて確率を計算していきます。日々追加された新しいデータを処理する中で、モデルはベイズ推論のような技術を使用して内部の確率推定を更新します。これにより、ある結果についてより確信度を高め、他の結果については確信度が低くなり、予測を動的に修正し、不確実性の幅を収束させていくこと等ができます。

確率的モデルの利点

このような確率的モデルは、現実世界の様々なタスクを扱う際に利点があります。

不確実性を考慮した柔軟なモデリング

現実世界における事象は、過去に起きた出来事の繰り返しや単純な原因と結果のルールの組み合わせでその全てが表現できるわけではありません。どうしても除外することのできない不確実性や、そもそも予測が不可能である事柄も存在します。確率的モデルはそれらを考慮に入れます。確率的モデリングでは、不確実性やリスクを取り扱える事前知識やドメイン知識(場合によっては人の直観)を持ってモデリングを行うことができ、柔軟にモデルを設計できます。

データに依存しすぎないホワイトボックスな手法

通常の機械学習のモデリングでは、(特徴量エンジニアリング等も駆使しつつ、)データに一番フィットするようなモデルを選択する形をとります。それゆえ、モデルがブラックボックスになることも多いです。ですが、確率的モデリングは、前述したように柔軟にモデリングできるため、ホワイトボックス度合いが高まります。
またデータの数に関わらず、同じ枠組みで分析します。これはサンプルデータが少ない、小標本であっても合理的な予測結果を得ることにつながり、パラメーターの数がデータに比べて多い場合にも適用できるというメリットがあります。また因果推論と相性がよく、過学習しにくい手法になります。予測根拠を示すことができるため、ミッションクリティカルな領域の適用も検討可能です。

逐次データによる学習

また、確率的モデルは、オンライン学習(逐次データによる学習)を想定します。新たに予期せぬデータが現れても内部の確率推定を継続的に更新するため、環境の突然の変化に適応でき、最初の学習に用いた過去データやその際の想定に制約されることがありません。新しいデータが出現するたびにシステムをどんどん賢くなるようにすることも可能でしょう。

点推定でなく、分布推定(不確実性のハンドリング)

加えて、アウトプットに関しては、例えば株価予測においては、単なる株価という点の予測にとどまらず、不確実性を踏まえた株価の可能性のある広がり・分布を予測します。つまりは、株価の変化に関するいくつかのシナリオに関連した確実性の度合いとリスクを定量的に表現することが可能になります。それにより、より繊細で人間らしい意思決定につなげることができるのです。

確率的モデルの応用ポテンシャル

金融、医療、保険などの分野では、確率的モデルはリスク評価、価格戦略の決定、リソース配分の最適化に不可欠です。これらのモデルは、複雑で不確実な環境をより自信を持って対峙していくための助けとなり、最終的には今日の変動の激しいビジネス環境において競争力とレジリエンスを向上させるのに寄与します。
確率的モデルの適用領域としては、天気予報や株価予測の他にも、不正検知、医療診断、予知保全、サプライチェーンのロジスティックス最適化、顧客行動の予測等、広範囲におよびます。
更には、生成モデルやロボッティクス、自動運転車のナビゲーションの領域における適用もポテンシャルがあります。確率的モデリングが組み合わさった自動運転車は何百も何千もの教師データを必要とせずに新しい障害物や状況への対処を実施することができるかもしれません。これは、近年注目が高まっている世界モデルの研究にもつながるポイントです。

確率的モデルの応用範囲を広げる確率的プログラミング

このようなポテンシャルのある確率的モデルですが、その実装において登場してくるのが確率的プログラミングです。
確率的モデリングによるモデル構築の中で、数式では表現しにくいものが含まれることもあります。例えば、条件によって分岐するような個所です。確率的プログラミングではこれも if分岐によって表現することができます。複雑なモデルをプログラムの形で表せれるというのが確率的プログラミングのメリットの一つです。
それでも以前は、確率的モデルを用いて推論を行っていくシステムはその実現範囲が限定されており、多くの現実の状況に適用することが困難でした。ですが、確率的プログラミングによって、2015年に国際学会のCVPRにて、人の顔の2D画像から顔の3Dモデルを生成するプログラムが効率的に実装できるという研究成果が発表され、確率的モデルも、天気予報や株価の予測のような時系列の分野だけではない、目を向けていなかった領域の適用にも注目されるようになります。


確率的プログラミング(Stochastic Programming)と確率的プログラミング(Probalistic Programming)を区別する

さて、ここでやや脱線しますが、日本語にすると同じ「確率的プログラミング」になってしまう、Stochastic Programming と、Probalistic Programming の区別をします。
Stochastic Programmingは、モンテカルロ法のように、シミュレーションにランダム性を取り入れる手法です。ここでは、問題のパラメータの一部または全部が不確定ですが、既知の確率分布に従います。
一方で、Probabilistic Programming は、確率分布を直接扱い、不確実性を扱うためのより繊細で詳細なアプローチを可能にします。Probabilistic Programming では、確率モデリング手法における専門知識の程度が異なるユーザーのために確率的推論を自動化し、容易にすることを目指します。


確率的プログラミング言語(Probabilistic Programming Language:PPL)

確率的プログラミングを行うためのプログラミング言語は、確率的プログラミング言語(PPL)と呼ばれます。プログラミング言語と書きましたが、PPLの多くは元となるプログラミング言語からの拡張のため、ライブラリ群やフレームワークとして見た方がわかりやすいかもしれません。
PPLの例として、例えば、C++ベースの Stan があります。Stanは、マルコフ連鎖モンテカルロ法 (MCMC法)アルゴリズム、確率論的勾配ベース変分ベイズ法等を実装しており、統計手法が適用される領域で使用されています。


機械学習の分野では、Python がよく使われますが、Python を使ったPPLとして、PyMC や PyStan、Lea、pomegranate、TensorFlow Probability 等があります。PyMC や PyStan も人気ですが、中でもよく使われるのは、Uber AI labが開発した Pyro です。Pyro は、Python で書かれたオープンソースのPPLで、バックエンドにディープラーニングフレームワークの Pytorchを利用しており、Pytorchのもつ自動微分 (autograd) 機能やGPU計算機能を用いることで高速な学習を行うことができます。ゆえにディープラーニングとベイズモデリングの長所を統合した、柔軟で表現力豊かな確率論的モデリングを実装することが出来ます。


他の代表的なPPLとしては、Juliaをベースとした Picture、Gen、Turing.jl があります。Gen は、MIT、UCLAバークレー校、エール大学等での確率的プログラミングや確率的コンピューティング (Probabilistic Computing)の研究で用いられ、注目されているPPLの一つです。


また、Wikipediaの Probabilistic Programming の項目には、PPLのリストがあるので参考にするとよいでしょう。


関連動画(より深く確率的プログラミングの世界を知るために)

確率的プログラミングは奥深く可能性のある分野です。様々な文献やコンテンツに触れてその広がりを知る価値があります。以下のACMの動画は30分という時間の中で、適用領域、基本的な特徴と利点、実践について、とてもわかりやすく解説しています。


以下は、MIT の ProbComp グループ(確率的コンピューティンググループ)の研究リーダーである、Vikash Mansinghka 氏によるTEDでのプレゼンテーションです。Vikash 氏は、前述した顔の2D画像から3Dモデルを生成した確率的プログラミング研究のメンバーの一人でもありますが、このプレゼンテーションでは、人間が持つ認知の仕組みとの類似性に触れながら、確率的プログラミングが持つポテンシャルについて熱く述べています。


終わりに

確率的プログラミングは、AIの進化において重要な役割を果たし、不確実性のモデリングと確率的推論を活用した意思決定のための多用途なアプローチを提供します。ますます複雑化するVUCAな時代において、過去データに基づく予測や最適化、あるいは事前に定めたルールのような決定論的アプローチのみというシンプルなソリューションで、荒波を乗りこなしていくことは困難です。生成モデルに関してもデータのみに基づく方法だけでは、創造的かつ合理的なアウトプットを出力していくことは容易ではないでしょう。確率的プログラミングを通し、人の持つ幅広い知恵も含めて、不確実性とそのリスクを様々なシステムに継続的に織り込んでいくことは、実世界の複雑さ・多様さに対処する力を高め、イノベーションを促進する助けとなることでしょう。

参考文献

Probabilistic Programming
https://www.cs.cornell.edu/courses/cs4110/2016fa/lectures/lecture33.html

Probabilistic programming does in 50 lines of code what used to take thousands
https://phys.org/news/2015-04-probabilistic-lines-code-thousands.html

“An Introduction to Probabilistic Programming” Jan-Willem van de Meent, Brooks Paige, Hongseok Yang, Frank Wood
https://arxiv.org/abs/1809.10756

Practical Probabilistic Programming
https://livebook.manning.com/book/practical-probabilistic-programming/


関連記事


この記事が気に入ったらサポートをしてみませんか?