※本記事は、Stanford University提供のコース「AA228V: Validation of Safety Critical Systems」の講義動画を基に作成されています。講座の詳細情報は公式サイト https://aa228v.stanford.edu/ でご覧いただけます。また、教科書「Algorithms for Decision Making」は https://algorithmsbook.com/validation/ で入手可能です。本記事では講義内容を要約しております。
本講義は、Sydney Katz博士(スタンフォード大学ポスドク研究員)によって行われました。Katz博士の詳細なプロフィールは https://sydneymkatz.com/ でご覧いただけます。この講座はMykel Kochenderfer教授(スタンフォード大学航空宇宙工学准教授、兼コンピュータサイエンス准教授)との共同開発によるものです。Kochenderfer教授のプロフィールは https://mykel.kochenderfer.com/ でご確認いただけます。
本講座への登録・詳細については https://online.stanford.edu/courses/ をご参照ください。なお、本記事の内容は講義の正確な反映に努めていますが、要約や解釈による誤りがある可能性もあります。正確な情報については、オリジナルの講義動画やコース資料をご確認いただくことをお勧めいたします。
1. システムモデリングの導入
1.1 検証のためのシミュレーションの文脈と重要性
Sydney Katz:前回の講義で説明したように、この講座では安全性クリティカルシステムの検証について学びます。システムの問題点を発見するときに、実際の環境に展開した後で見つけるのでは遅すぎます。私たちが目指すのは、実世界に展開する前に、制御された安全な環境で問題を見つけることです。
実世界でシステムの欠陥を発見すると、大きなトラブルに巻き込まれる可能性があります。そのため、今日の講義では、オフライン検証のためにシステムをシミュレーションするためのモデリング方法について議論します。オフラインの検証とは、システムを展開する予定の環境ではなく、そのシミュレーションバージョンで行うことを意味します。
今日の講義では、モデルに関する一般的な考え方から始め、モデル構築に必要なステップを順番に説明します。最初のステップはモデルクラスの選択、次にそのモデルクラスのパラメータを決定し、最後にモデルを検証します。モデルの検証については、今日時間が足りなければ、火曜日の講義で取り上げます。
この講義と次の火曜日の講義は、残りの講義とは少し異なります。検証問題の入力コンポーネントについて話し、今日の講義ではシステムの設定方法、次回の講義ではそのシステムが満たすべきプロパティの設定方法について説明します。その後の講義では、検証アルゴリズムに焦点を当てていきます。
1.2 モデルとシミュレータの種類(計算的 vs 物理的)
Sydney Katz:モデルとシミュレータには多くの種類があります。興味深いことに、これらは必ずしもコンピュータ上にある必要はありません。本質的には、実環境に展開することなく安全に問題を発見できる環境であれば、それはモデルやシミュレータと考えることができます。
コンピュータ上にないモデルの例としては、ジョンソン宇宙センターのニュートラル・ボイアンシー・ラボがあります。おそらく以前に見たことがある方もいるでしょう。これは宇宙飛行士が訓練を行うための巨大なプールであり、宇宙ステーションで宇宙遊泳をする場合の状況をシミュレートします。これは計算モデルではありませんが、宇宙の真ん中ではなく、地球上のプールという安全な環境で何が問題になるかを発見する方法です。
巨大なプールは非常に素晴らしいですが、この講座では計算モデル、つまりコンピュータ上でシミュレーションできる数学モデルに焦点を当てます。
1.3 モデルの複雑さの様々なレベル
Sydney Katz:モデルは複雑さのレベルが様々です。例えば、航空機の動力学、つまり航空機の状態が時間とともにどのように変化するかをモデル化するとしましょう。
一つの選択肢は、航空機の状態をモデル化するいくつかの方程式を持つことです。例えば、次のタイムステップでの高度は、現在の高度に垂直上昇率と時間の増分Δtを掛けたものを加えたものとしてモデル化できます。垂直上昇率についても同様です。これはただの2つの単純な線形方程式です。
もう一つの選択肢は、XPlaneのような非常に高精度のフライトシミュレータを使用することです。私たちの研究室でよく使うこのシミュレータは、航空機の制御面の角度、機体の重量、航空機の種類、風の状態など、非常に複雑な動力学を考慮しています。
これは2つの極端な例です。非常に単純な方程式を使用するか、あるいは非常に高精度なフライトシミュレータまで複雑なものを使用するかのスペクトルがあります。目標は、重要なことを捉えるのに十分な複雑さを持つモデルを選ぶことです。必要ないなら、XPlaneのような高精度のフライトシミュレータを避けて、単純な方程式で済ますこともあるでしょう。
どのようなときに複雑なモデルが必要で、いつより単純なもので十分かを知ることは、通常、問題に依存します。しかし、どのモデルを使用するかを考える際には、あなたが取り組んでいる問題領域を理解し、ちょうど十分な複雑さを持つものを選ぶことが重要です。
1.4 アインシュタインの原則:「すべてはできるだけシンプルに、しかしシンプルすぎないように」
Sydney Katz:これをうまく要約する言葉として、アルバート・アインシュタインの「すべてはできるだけシンプルに、しかしシンプルすぎないように」という言葉があります。実はアインシュタインが本当にこれを言ったかどうかは定かではありません。
私たちが教科書にこの言葉を載せようとしたとき、マイケル(共著者)の要件では、教科書に引用を入れる場合は出典が必要でした。そこで私はあちこち探し回りましたが、オンラインの情報源はどれも「おそらく彼が言ったことだが確かではない」というものでした。彼は似たようなことを言っていて、それが「おそらく彼が意味したこと」と皆が考えているようです。
いずれにせよ、モデルを選ぶ際には良いモットーとなります。結局、この引用は出典が確認できなかったため教科書には掲載しませんでした。
2. モデリングの一般概念
2.1 ホワイトボックス vs ブラックボックスモデル
Sydney Katz:モデルで異なる点としては、ホワイトボックスかブラックボックスかという違いもあります。ホワイトボックスモデルとは、入力を与えると、出力を決定するのに関わる方程式を見ることができるものです。
例えば、航空機の現在の高度と現在の垂直上昇率という入力を与えると、次の高度と次の垂直上昇率という出力を決定する方程式を見ることができます。
一方、ブラックボックスモデルでは、入力を与えて、何かが起こり、出力が得られますが、その入力に何が起こっているのかを実際に見ることはできません。ただ出力を見ることができるだけです。
もちろん、その中間のようなものもあります。例えば、入力の一部に何が起こっているかは分かるけれども、正確に何が起こっているかは完全には分からないという場合です。XPlaneの例では、使用されている動力学方程式の一部は知っていますが、内部で正確に何が起こっているかは完全には分からないかもしれません。
2.2 モデル作成の主要な課題
Sydney Katz:モデルを作成する際にはいくつかの重要な課題があります。第一に、先ほど言ったように、モデルはシステムが遭遇する可能性のあるすべてのシナリオを捉えるのに十分な表現力を持つ必要があります。
しかし、あまりに表現力が高すぎることも避けたいです。この点について少し詳しく説明したいと思います。なぜなら、「すべての可能なシナリオを捉える」というのは非常に難しい課題だからです。
例えば、システムが自動運転車だとします。「すべての可能なシナリオ」とは、見かける可能性のあるすべての歩行者、道路上のすべての他の車、それらがとる可能性のある行動、自転車、工事現場など、非常に多くのことを含みます。これは間違いなく簡単な課題ではありません。
検証についていくつかの講演を行ってきましたが、ほぼ毎回同じ質問を受けます。「どうすれば私の(ここに複雑なシステムを挿入)が遭遇するであろうすべての可能なシナリオを捉えることができるでしょうか?私はそれらが何なのかさえ知りません」というものです。自動運転車の例のように、この車が遭遇するであろうすべての可能なシナリオをどうやって把握すればいいのでしょうか?
私の答えはいつも「はい、これは問題です。非常に難しいことです」というものです。しかし、ここには希望の光があると思います。それが実行時モニタリングの章で説明することになります。私たちができることは、モデルにおいて発生する可能性のあるすべてのシナリオを捉えるために最善を尽くすことですが、特に非常に複雑なシステムや非常に複雑な環境で動作するシステムの場合、おそらく見逃すことがあることも認識すべきです。
次にできることは、実行時モニタリングを備えたこれらのシステムを展開することです。それにより、実行時にモデル化しなかったシナリオ、つまり私たちが不慣れなシナリオにいるかどうかを理解しようとすることができます。これが私の答えですが、確かに大きな課題です。
2.3 過度な複雑さを避けながら表現力を確保する必要性
Sydney Katz:モデルを作成する際の二つ目の課題は、今日少し話す予定ですが、モデルは何かに基づいている必要があります。現実世界について何かを知る必要があり、それはデータか専門知識から得られます。
しかし、どちらも取得するのは難しい場合があります。データの場合、実世界に出てデータを収集する必要があるかもしれません。あるいは、専門家を見つけるか、自分自身が専門家である必要があります。
そして、データや知識を手に入れた後、実際にモデルを作成する必要があります。これを行う一般的な方法の一つは、今日説明する予定の何らかの目的関数を最適化することです。
2.4 データや専門家の知識に基づく基礎
Sydney Katz:モデルを作成する際には、それを何かに基づかせる必要があります。現実世界について何らかの知識が必要であり、それはデータから得るか、専門家の知識から得ることができます。
しかし、これらのどちらも入手するのは難しい場合があります。データの場合、実世界に出て行ってこのデータを収集する必要があるかもしれません。専門知識の場合は、専門家を見つけるか、自分自身が専門家である必要があります。
そして、このデータや知識を手に入れた後、実際にモデルを作成する必要があります。これを行う一つの方法として、今日説明する何らかの目的関数を最適化することがよくあります。
2.5 ジョージ・ボックスの引用:「すべてのモデルは間違っているが、いくつかは有用である」
Sydney Katz:もう一つの引用をご紹介します。「すべてのモデルは間違っているが、いくつかは有用である」。これは聞いたことがあるかもしれません。この考え方は、私たちが作るすべてのモデルは決して現実世界を完璧にモデル化することはできませんが、十分に現実を反映していれば、私たちにとって有用なものになるということです。そして、モデルを使用して得た検証結果は、意思決定をする上で役立つものになります。
これはイギリスの統計学者ジョージ・ボックスが実際に言った言葉です。この引用については、教科書用の出典を実際に見つけることができたので、掲載することにしました。
3. モデルクラスとしての確率分布
3.1 確率の定義と目的
Sydney Katz:それでは、いくつか数学的な内容に入っていきましょう。まず最初に説明するのは、モデルクラスを選択するという最初のステップです。この講座では、確率的モデルに焦点を当てます。
確率的モデルとしてのモデルクラスが正確に何を意味するのかを少し説明しますが、まず確率とは何かについて考えてみましょう。確率を説明するための様々な考え方があります。最近見つけた興味深いものの一つが「なぜ確率はおそらく存在しないが、存在するかのように行動するのが有用なのか」というものです。
下の小さなテキストを読むのが難しいかもしれませんが、非常に興味深いことが書かれています。「統計学のすべてと科学の多くが確率に依存している。それが何なのか誰も本当に確信していないことを考えると、これは驚くべき成果である」。これは興味深いと思いました。興味がある方は、この記事をチェックしてみてください。
この講座では哲学的な話はせず、実際の定義を提供します。特定の結果の確率は、他のすべての可能な結果と比較して、その結果が発生する可能性を定量化する0から1の間の数値です。
3.2 離散 vs 連続分布
Sydney Katz:確率を記述する方法として、確率分布を用いることが多いです。これが通常、モデルクラスとして意味することであり、さまざまな種類の確率分布は本質的に異なるモデルクラスとなります。確率分布とは、異なる結果に確率を割り当てる関数です。
この講座では、2種類の確率分布について説明します。まず、離散分布があります。これは離散的な数の結果を持つ変数やイベントを対象とします。例えば、こちらは6つの可能な結果を持つ離散分布の例です。これはサイコロを振るような状況と考えることができます。
次に、連続分布があります。これは連続的な可能な結果のセットを持つ変数に対して定義されます。例えば、このクラスからランダムに選ばれた学生の身長を表す変数と考えることができます。
これらの分布を定義するために、通常、離散分布の場合は確率質量関数、連続分布の場合は確率密度関数を使用します。この講座では、確率質量関数を大文字のP、確率密度関数を小文字のpで表します。
これらは少し異なる性質を持っています。確率質量関数の値は0から1の間でなければなりません。確率密度関数の値は、ただ0以上、つまり正の値であればいいです。
確率質量関数の場合、すべての可能なイベントの確率の合計は1にならなければなりません。連続分布の場合の同等のものは、変数のすべての可能な値(マイナス無限大からプラス無限大まで)の積分が1になる必要があることです。
ここでの考え方は、確率質量関数は実際の確率を出力するということです。値(例えばx=4)を入力として、「x=4である確率は何か?」と尋ねると、この関数Pの出力がその確率になります。このプロットはそれを示しています。約0.25程度であることがわかります。
一方、確率密度関数の場合、得られる値は実際の確率ではありません。値aをpに入力しても、aが発生する確率は得られません。実際、単一の値の確率はゼロになります(これは考えるとちょっと奇妙です)。通常、このタイプの分布では、変数がある連続範囲内にある確率を考えます。つまり、XがA値とB値の間にある確率を考えます。それを見つけるには、その領域で確率密度関数を積分するだけです。これは曲線の下の面積に相当します。
3.3 確率質量関数と確率密度関数
Sydney Katz:離散分布の場合、確率質量関数の値は0から1の間でなければなりません。確率密度関数の場合、値は単に0以上、つまり正でなければなりません。確率質量関数では、すべての可能なイベントの確率の合計が1にならなければなりません。連続分布の同等の条件は、変数のすべての可能な値の積分(マイナス無限大からプラス無限大まで)が1になる必要があることです。
確率質量関数の考え方は、実際の確率を出力するということです。値x=4を入力として、「x=4である確率は何か?」と尋ねると、この関数P(x)の出力がその確率になります。このプロットはそれを示しています。約0.25程度であることがわかります。
こちらの確率密度関数では、得られる値は実際の確率ではありません。値aをp(x)に入力しても、aが発生する確率は得られません。実際、単一の値の確率はゼロです(これは考えるとちょっと奇妙です)。通常、これらのタイプの分布では、変数がある連続範囲内にある確率を考えます。例えば、Xが値AとBの間にある確率を考えます。それを見つけるには、その領域で確率密度関数を積分するだけです。これは曲線の下の面積に相当します。
3.4 確率分布におけるパラメータ
Sydney Katz:これらの確率分布を表現するために、しばしばパラメータのセットを使用します。これをθ(シータ)と呼びます。離散分布の場合、パラメータはこのような形です。ここでは、本質的にパラメータを表現する一つの方法として、例えばx=1の場合、x=1である確率はθ1であり、x=2である確率はθ2、x=3の確率はθ3というようになります。つまり、それぞれの可能な結果に対して一つのパラメータがあり、それぞれの結果の確率を示しています。
連続分布の例として、正規分布またはガウス分布と呼ばれる連続分布があります。これらもしばしばパラメータを持っています。ガウス分布の場合、一般的に使用するパラメータは平均(μで表される)と標準偏差(σで表される)です。したがって、ガウス分布のパラメータセットθは、その平均と標準偏差です。
3.5 モデル選択における表現力
Sydney Katz:ここで、私たちが解決しようとしている問題や、モデル化しようとしているシステムのために、どのようにモデルクラスを決定するかを考える必要があります。ここでの重要な考慮点は、モデルクラスが十分な表現力を持っていることです。
「表現力が十分」とは何を意味するのでしょうか?それは、モデルがデータにうまく適合するようなモデルパラメータの設定が存在することを意味します。この考え方を説明するために、Plutoノートブックを見ていきましょう。
ここでは、ガウス分布から始めます。青い点、つまりこの青いヒストグラムがプロットしているのは、私たちが持っているサンプルです。これはシステムから得た一連のセンサー測定値かもしれません。本質的に、これは私たちが適合させようとしているデータです。
そして、マゼンタ色またはピンク色の線は、現在持っている分布を示しています。基本的に、このピンク色の線をデータに合わせたいのです。そうすれば、モデル化がうまくいったと言えます。この分布では、いじることができるパラメータがあります。ガウス分布の場合、いじれるパラメータは平均と標準偏差です。
ここで平均をいじってみて、この分布をできるだけうまく合わせてみましょう。そして、標準偏差を使って幅を調整することができます。私の微細な指の動きでは、これが最善のところです。見てわかる通り、これはかなりうまく合っています。青いデータとよく合う分布を得ることができました。
この場合、ガウス分布はシステムに適合し、正確にモデル化するのに十分な表現力を持っていると言えるでしょう。
しかし今度は、別のシステムからサンプルを取り、このようなデータセットを取得したとします。この場合、平均をいじってみることはできますが、何をしても、この分布によくフィットするものは得られないでしょう。
その理由は、このデータの分布がマルチモーダル(多峰性)だからです。右側と左側にそれぞれピークがあることがわかります。しかし、ガウス分布はユニモーダル(単峰性)です。μとσをどのように変えても、そのような形状の分布は得られません。本質的に、これはガウス分布がこのデータセットを記述するのに十分な表現力を持っていないことを意味します。
4. 複雑な分布の作成
4.1 ガウス分布とその制限
Sydney Katz:単純な分布ではうまくモデル化できないデータセットがある場合、モデルクラスの複雑さを増す方法がいくつかあります。
先ほど説明したように、ガウス分布(正規分布)は単峰性であり、一つのピークしか持てません。そのため、複数のピークを持つデータセットや複雑な形状をした分布をモデル化する際には制限があります。例えば、左右に異なるピークを持つ双峰性のデータなどは、単一のガウス分布ではうまく表現できません。
ガウス分布は平均(μ)と標準偏差(σ)というパラメータで特徴づけられますが、これらのパラメータをどのように調整しても、分布の基本的な単峰性の性質は変わりません。データが複雑な構造や複数のモードを持っている場合、ガウス分布の表現力では不十分となります。
このような単純な分布の制限を克服するためには、より複雑なモデルクラスに移行する必要があります。そのためのアプローチの一つが、次に説明する混合モデルです。
4.2 多峰性分布を作成するための混合モデル
Sydney Katz:モデルクラスの複雑さを増す一つの選択肢は、より単純な分布の混合を作成することです。
ここで示しているのは、「ガウス混合」と呼ばれるものです。二つの単純な分布を取り、この例ではそれぞれ異なるガウス分布を使用しています。二つ以上使うこともできますが、この例では二つだけ示しています。それから、それぞれの分布の相対的な重みのバランスを取るために、重みのセットを適用します。
これで、調整しようとする5つの異なるパラメータができました。このデータセットにうまく適合するパラメータの設定を見つけられるかどうか試してみましょう。
実は答えを知っているので、さっそく答えに進みます。しかし、これらのパラメータを選ぶのは少し難しいかもしれません。
本質的に、それぞれの分布の平均と標準偏差をいじっています。そして、それぞれの相対的な重みもいじることができます。これによって、分布の形状がどのように変化するかがわかります。相対的な重みを調整して、データにうまく適合するものを得るまで続けます。
これについて質問はありますか?
(質問:そこにある式は何ですか?) これは単に二つのガウス分布のバランスを取るためのものです。
(質問:だから、二つのガウスの間のバランスを取るためのものなんですね?) その通りです。
(質問:別の種類の分布を混合することはできますか?) 良い質問です。混合モデルで同じ種類の分布だけを使う必要はありますか?違うタイプの分布を混合することもできますか?できると思います。確かに積分が1になるように確認する限り、できるはずです。
他に質問はありますか?
4.3 関数を使用した単純分布の変換
Sydney Katz:複雑な分布を作成するもう一つの方法は、単純な分布を変換することです。例えば、平均0、分散1のガウス分布のような単純な分布があるとします。そして、この分布から10,000個のサンプルを抽出します。
下部のコードラインがしていることは、この正規分布から10,000個のサンプルを取り、それをZと呼び、ベクトルZ'sに格納するということです。これが正規分布からのサンプルがどのように見えるかです。正規分布はそのピンク色の線で、サンプルは正規分布から直接抽出したので、サンプルがその正規分布に適合していることがわかります。
次に、これらのサンプルすべてを取って、それに何らかの関数を適用して、Xと呼ぶ新しい変数を取得するとします。この場合、立方根関数を適用します。この関数をf(z)として定義し、それは単にzの立方根に等しいとします。
そして、先ほど取得したすべてのサンプルにこの関数を適用します。つまり、正規分布からのすべてのサンプルを取り、その立方根を計算し、それをx's というベクトルに保存します。結果のヒストグラムをプロットしてみましょう。
これは興味深いかもしれません。起こったことは、青いヒストグラムからのすべてのサンプルを取り、関数を適用したら、右側に表示されているこの紫色のヒストグラムを得ました。これは今や双峰性です。つまり、より複雑な確率分布を作成するという目標を達成しました。
しかし、この新しい分布の確率密度は何なのかを知る必要があります。つまり、他の分布のためにあったピンクの線のようなものを得るにはどうすればいいでしょうか?
ここでいくつかの表記を確認しましょう。シンプルな分布から取得した変数をZと呼び、それは分布P_Zから来ています。そして、それを変数Xに変換し、P_Xがどうなるのかを知りたいです。XはF(Z)に等しいです。
実はfが可逆かつ微分可能であれば、結果の確率変数の密度を計算でき、それはそこに示されている公式に従います。この公式には基本的にfの逆関数が含まれています。そこにあるgはfの逆関数です。
繰り返しますが、この公式を使用するには、その関数が微分可能で可逆である必要があります。幸いなことに、立方根は微分可能かつ可逆です。これをテストしてみましょう。
g(x)はx³に等しいと言えます。立方根の逆は立方です。逆関数gの導関数g'(x)は3x²です。これらを実装して、式に示されているものを実装することができます。
新しい密度P_Xは、P_Z(G(X))です。Zは正規分布に従っていたことを思い出してください。ここにG(X)を入力し、逆関数の絶対値の導関数を掛けます。この式を使用すると、変換された分布の密度が得られ、それはサンプルのヒストグラムとよく一致しています。
これについて質問はありますか?
(質問:元の分布からサンプルを取る理由は何ですか?データはすでにあると思いますが。)
良い質問です。実世界でのモデルの作成と、ここで行っていることとの関連性を説明しようとします。実世界では、何かをサンプリングしてこの紫色のデータを得たとして、これに分布を適合させる必要があるとしましょう。モデルクラスを選ぶ必要があります。多峰性のものが必要です。どうすればいいでしょうか?
一つの方法はガウス混合を試すことです。もう一つの方法は、これを定義する方法を説明しています。知り方を知っている分布(正規分布)から始めて、それを何らかの方法で変形してこのデータに適合させるというアプローチです。これがあなたの質問に答えていますか?
(質問:そうですね。つまり、ガウシアンのような既存の分布を、多峰性にできることを知っているある変換に基づいて操作しようとしているのですね。)
その通りです。これがまさに私たちがしようとしていることです。
(質問:さらに質問ですが、この変換はどのように見つけるのですか?)
良い質問です。私はただクールに見えるのでこれを選びました。選ぶFによっては、常にこのようにクールに見えるとは限りません。また、可逆で微分可能である必要があることを思い出してください。
4.4 正規化フローと生成モデル
Sydney Katz:実は、これは次のポイントにうまく繋がります。質問は「どうやってFを選ぶのか」でした。私はこの素敵なFを選びました。これによって単峰性の分布を多峰性の分布に変換することができました。
このような変換は非常に強力です。「正規化フロー」という用語を聞いたことがあるかもしれませんが、これが正規化フローの背後にある重要な考え方です。正規化フローは、パラメータ化された、微分可能かつ可逆な一連の関数を使用します。
正規化フローで行われていることは、本質的にその変換を学習することです。立方根がうまく機能するから選びましたが、非常に複雑な分布に変換しようとする場合、何がうまく機能するのかを常に知っているわけではありません。
正規化フローが行うことは、これらの可逆な変換のためのパラメータのセットを提供し、単純な分布から複雑な分布に変換できるようにそれらを学習させることです。
このノートブックにリンクした素晴らしいチュートリアルがあります。Edにもリンクを貼ることができます。もし興味があれば詳しく学ぶことができます。ただし、正規化フローはこの講座の範囲外です。
私が本当に皆さんに知ってほしいのは、この単純な変数変換の公式です。変換を与えられたと仮定した場合のものです。しかし、それらについて興味を持ってもらうために、これは正規化フローを使って非常にシンプルな分布をより複雑なものに変換する素晴らしいアニメーションです。
他に質問はありますか?
(質問:最適化プロセスが行われていて、どの関数を使用するかを見つけているからですか?あるいは...それは何ですか?)
質問は「なぜそれがフローと呼ばれるのか」ですね?正直なところ、確かではありませんが、一連の変換があるからだと思います。それはある意味、そこを「流れている」からです。他に誰か知っている人はいますか?
4.5 可逆かつ微分可能な変換
Sydney Katz:先ほど言ったように、適用する変換が微分可能で可逆である必要がありました。しかし、微分可能でも可逆でもない変換を使っても、先ほど行ったことはまだできます。ただし、確率密度関数を計算することはできません。
それでもサンプルを抽出することはできます。例えば、左側の青で示されている一様分布からサンプルを多数取り、それらを何か複雑な関数(この場合はx・sin(8z))に通すと、右側に示されているサンプルが得られます。これは非常に興味深い形をした分布になります。
残念ながら、この分布の密度は計算できませんが、時にはそれでも問題ありません。時には分布からのサンプルだけが必要な場合もあります。その場合はサンプルを取るだけで大丈夫です。
では、今話したことを復習しましょう。単純な分布がデータにうまく適合しない場合、より複雑なモデルが必要です。より複雑なモデルを作成する一つの方法は、単純な分布の重み付けされた混合を作成することです。
より複雑なモデルを作るもう一つの方法は、単純な分布に関数変換を適用することです。この場合、ガウス分布であるP(Z)を取り、立方根関数を適用して双峰性分布を得ました。これが使用した公式です。
繰り返しになりますが、この公式を使うにはfが微分可能で可逆である必要があります。そうでなくても、何らかの関数変換を適用することはできますが、確率密度関数を計算することはできません。それでもサンプルを抽出することはできます。例えば、これらのサンプルは疑似乱数生成器からのもので、Juliaなどのプログラミング言語で「rand」を呼び出すだけで得られます。そして、それらをより複雑な関数で変換することができます。
さらに専門用語を使うリスクを冒すと、このような方法で表現されるモデルを一般的に「生成モデル」と呼びます。GAN(敵対的生成ネットワーク)、VAE(変分オートエンコーダー)、あるいは拡散モデルなどを聞いたことがあるかもしれません。これらのモデルはすべてこのような方法で動作します。
つまり、サンプル抽出方法がわかっている分布からサンプルを取り、それらを何らかの方法で変換して、私たちが関心を持つより複雑な分布にします。例えば、多変量正規分布からサンプルを多数取り、それらを何らかの方法で変換します。通常、その変換にはニューラルネットワークが含まれ、その結果、猫の顔の画像など、興味深いサンプルのセットが得られます。
5. 多変量分布
5.1 結合確率分布
Sydney Katz:今まで話したことはすべて、一つの変数、つまり結果を気にする一つのイベントがある場合についてでした。例えば、航空機の高度を観測するセンサーがあり、その航空機の予測高度という一つの観測値があり、そのセンサーをモデル化しようとしているケースです。
また、複数の変数が関係している場合もあります。例えば、高度と対気速度の両方を予測するセンサーを持っているかもしれません。このような場合、通常、結合分布または条件付き分布に興味があります。
結合分布は、複数の変数または複数の結果に対する確率分布です。これは多変量分布とも呼ばれます。これは複数の異なる結果が同時に発生する可能性を表します。
離散的な場合、依然として確率質量関数を使用しますが、今度は二つ以上の入力があります。例えば、XとYの両方が発生する確率です。それらを表として表現することができます。これは講座でよく使用する非常に一般的な表現です。
この表の読み方は基本的に、XとYが共にバイナリであると仮定します。つまり、それぞれ二つの可能な結果があります。Xはゼロまたは1、Yもゼロまたは1になる可能性があります。この表が示しているのは、Xがゼロでありかつ(AND)Yがゼロである確率が0.1であるということです。Xがゼロでありかつ(AND)Yが1である確率は0.2、という具合です。
これは有効な確率分布であり、それはこの表のエントリの合計が1になる必要があることを意味します。
また、連続的な結合分布もあります。この場合、これらの変数に対する確率密度関数があります。複数の変数に対する非常に一般的な連続確率分布は、多変量ガウス分布です。
つまり、ガウス分布を多次元に拡張しています。これは分布の中心を指定する平均ベクトルと共分散行列によって定義されます。私だけかもしれませんが、共分散行列は長い間私を怖がらせていたので、各エントリが正確に何を意味するのかをすぐに説明したいと思います。それほど大したことではないんです。
5.2 共分散行列とその解釈
Sydney Katz:ここに多変量ガウス分布があります。平均は円の中心あたりにあります。これは確率密度の等高線のプロットです。明るい青色は高い密度を示します。現在の共分散行列はこのようになっています。
各エントリを説明していきましょう。左上のエントリは、X軸上の変数がどれだけ自分自身と変動するかを示しています。つまり、X軸上の変数がどれだけ自分自身と変動するかということです。この値を増やすと、X方向に広がりが大きくなることがわかります。この値を減らすと、広がりが小さくなります。Yには何も起こっていません。
同様に、共分散行列の右下の値は、Yが自分自身とどれだけ変動するかを示しています。非常に似たような話です。この値を増やすとYの広がりが大きくなり、減らすと広がりが小さくなります。元に戻しましょう。
そして、対角線外の要素は、人々を混乱させることがあるものですが、これは単に変数同士がどれだけ変動するかを示しています。現在、それはゼロに設定されています。これにより、変数間に相関関係がないことがわかります。ここでは円が見えます。
しかし、これを増やすとどうなるか見てみましょう。これはXとYが互いに正の相関を持つことを意味します。Xの値が正の場合、Yの値も正である可能性が高いことがわかります。同様に、Xの値が負の場合、Yの値も負である可能性が高いです。つまり、これらの変数間には相関関係があります。
この値が高いほど、相関関係は強くなります。同様に、反対方向に進むと、逆の相関関係があることを意味します。Xの値が正の場合、Yの値は負である可能性が高くなります。
5.3 独立変数と結合分布
Sydney Katz:ここでもう一つ注意しておきたいことがあります。二つの変数が「独立」であると考える場合、それらの結合分布は単にそれぞれの個別の確率の積になります。そうでない場合、これは必ずしも真ではありません。
ここで少し楽しい余談をしたいと思います。私たちは親知らずについて話していました。実は、私たち4人の教科書著者の間では、親知らずの非常に奇妙な組み合わせがあるのです。
私が言ったように、私はまったく親知らずがありませんでした。私たちのもう一人の著者であるアンソニーも、親知らずがありませんでした。ロバートは4本すべて持っていて、マイケルは5本持っていました。
そこで、この事象が起こる確率を計算するのも面白いと思いました。これをやってみましょう。
本質的に計算したいのは、私が0本の親知らずを持つ確率(S₀はシドニーがゼロの意)、アンソニーも0本の親知らずを持つ確率、ロバートが4本の親知らずを持つ確率、そしてマイケルが5本の親知らずを持つ確率です。これらはすべて独立した事象であると仮定します。つまり、私が持っていた親知らずの数は、アンソニーが持っていた親知らずの数に本当に影響を与えなかったと思います。
したがって、これは私が0本の親知らずを持つ確率に、アンソニーが0本の親知らずを持つ確率を掛け、ロバートが4本持つ確率を掛け、マイケルが5本持つ確率を掛けたものになります。
これらの確率にすべて数値を割り当てると、約0.00007という値になります。ただし、これらはGoogleや ChatGPTからの怪しい数字なので、参考程度に考えてください。
でも、これが結果です。教科書著者にとっては非常にありそうにない親知らずの組み合わせです。
もしさらにこのトピックを探求したい場合は、今はクラスでは詳しく説明しませんが、実際に4人の教科書著者の親知らずの合計数が9本である確率を計算してみました。なぜなら、それはとても奇妙な数字だと感じたからです。
知りたい方のために、その確率は約3%と計算しました。実際に、GoogleやChatGPTからの怪しい仮定に基づいて、4人の著者の親知らずの合計数の完全な分布をプロットしました。
参考程度に考えてください。興味深いことに、16本と12本にピークがあることがわかります。つまり、最も可能性が高いのは、3人が4本ずつ持ち、1人が0本持つか、あるいは全員が4本ずつ持つ場合です。これは興味深いですね。
5.4 条件付き分布とその応用
Sydney Katz:次に条件付き分布に移りましょう。これは、一つ以上の他の変数の値が与えられた場合の、単一の変数または変数セットの分布です。この場合、Xの値を知っていて、それが結果Yの確率についてどのように教えてくれるかを言っています。
これは、結合確率と単変量確率の観点から定義できます。つまり、これはYとXが同時に発生する確率を、Xが発生する確率で割ったものに等しいです。
離散的な場合、再び確率質量を持ちます。それを表で表現できます。これが基本的に示しているのは、Xがゼロに等しい場合、Yがゼロに等しい確率です。この行では、Xが1に等しい場合、Yがゼロに等しい確率を示しています。
この表には二つのエントリが欠けています。最初のエントリは何であるべきか誰か教えてくれますか?
(質問者:0.9)
はい、正解です。Xがゼロで、Yがゼロである確率が0.1であれば、YがゼロであるXもゼロである確率はどうなるでしょうか。これがバイナリ変数であることを言っておくべきでした。質問をトリックにしようとしたわけではありません。
Xがゼロで、Yがゼロである確率が0.1であれば、他のオプションはYが1であることです。そうすると、その確率は0.9でなければなりません。確率は1に合計する必要があるからです。
同様に、Xが1に等しい場合、Yが0である確率は0.5です。他のオプションはYが1に等しいことで、その確率はここで欠けているのは0.5です。
連続分布についても条件付き確率を持つことができます。ここに使用する非常に一般的な条件付きガウス分布があります。ここで起こっていることは、正規分布があり、Yはその正規分布に従っていますが、その分布のパラメータはXに依存しています。つまり、Xの値に条件付けられています。
この場合、Xに依存しているのは平均だけだと言っています。平均はXに等しいです。このようなものが得られます。X軸上のここで、平均はXに等しいと言いました。つまり、この値に対して、このような分布になります。この値に対しては、ここに平均があるため、このような分布になります。
Xを変更すると、それらがスムーズに変化することがわかります。最も明るい色が最も確率が高いことを示しています。
一つ注意しておきたいのは、条件付き分布についてはかなり詳しく話すことになるでしょう。前回の講義で覚えているかもしれませんが、システムのためにモデル化したい分布はすべて条件付き分布だからです。
例えば、エージェントに対しては、観測値が与えられた場合のアクションの確率が知りたいです。遷移に対しては、現在の状態とアクションが与えられた場合の次の状態の確率が知りたいです。そしてセンサーに対しては、現在の状態が与えられた場合の観測値の確率が知りたいです。
5.5 教科書著者間の親知らずの分布に関する余談
Sydney Katz:先ほど少し触れましたが、ここでは親知らずについて話していました。私たち4人の教科書著者の間では、親知らずの非常に奇妙な組み合わせがあるのです。私が言ったように、私はまったく親知らずがありませんでした。私たちのもう一人の著者であるアンソニーも、親知らずがありませんでした。ロバートは4本すべて持っていて、マイケルは5本持っていました。
そこで、この事象が起こる確率を計算するのも面白いと思いました。本質的に計算したいのは、私が0本の親知らずを持つ確率(S₀はシドニーがゼロの意)、アンソニーも0本の親知らずを持つ確率、ロバートが4本の親知らずを持つ確率、そしてマイケルが5本の親知らずを持つ確率です。
これらはすべて独立した事象であると仮定します。つまり、私が持っていた親知らずの数は、アンソニーが持っていた親知らずの数に本当に影響を与えなかったと思います。したがって、これは私が0本の親知らずを持つ確率に、アンソニーが0本の親知らずを持つ確率を掛け、ロバートが4本持つ確率を掛け、マイケルが5本持つ確率を掛けたものになります。
これらの確率にすべて数値を割り当てると、約0.00007という値になります。ただし、これらはGoogleや ChatGPTからの怪しい数字なので、参考程度に考えてください。でも、これが結果です。教科書著者にとっては非常にありそうにない親知らずの組み合わせです。
もしさらにこのトピックを探求したい場合は、今はクラスでは詳しく説明しませんが、実際に4人の教科書著者の親知らずの合計数が9本である確率を計算してみました。なぜなら、それはとても奇妙な数字だと感じたからです。知りたい方のために、その確率は約3%と計算しました。
実際に、GoogleやChatGPTからの怪しい仮定に基づいて、4人の著者の親知らずの合計数の完全な分布をプロットしました。参考程度に考えてください。興味深いことに、16本と12本にピークがあることがわかります。つまり、最も可能性が高いのは、3人が4本ずつ持ち、1人が0本持つか、あるいは全員が4本ずつ持つ場合です。これは興味深いですね。
6. パラメータ推定
6.1 モデルクラスの最適パラメータの発見
Sydney Katz:それでは、パラメータ推定に移りましょう。モデルクラスを選択し、このノートブックでいろいろとパラメータをいじり回しましたが、モデルクラスのパラメータをどのように決定すればよいのでしょうか?
基本的に、ノートブックで行っていたことを自動的に行いたいと考えています。スライダーをドラッグするのはそれほど簡単ではありませんでした。また、例えばニューラルネットワークのように何百万ものパラメータがある場合、スライダーをドラッグして回っていられないことは想像できます。
ここで行われていることをより形式化するために、パラメータθのセットがあり、モデル化したい実世界から観測したデータセットがあります。データセットに最もよくフィットするパラメータθを見つけたいのです。
どのパラメータが最適かをどのように判断すればよいのでしょうか?一つの選択肢は、データを最も可能性が高くするパラメータを探すことです。パラメータのセットが与えられた場合、観測したデータセットの確率を計算することができます。つまり、「パラメータがこれであると仮定すると、そのデータセットを得た確率は何か?」と考えます。その確率が高いほど、それは良いことです。
基本的に、データが最も発生しやすく見えるパラメータを見つけたいのです。これを記述する方法は、θ̂(シータハット、パラメータの推定値)は、この確率を最大化するθに等しいというものです。これは、パラメータθが与えられた場合のデータDの確率です。Dはデータセット、つまり観測したすべてのデータポイント(先ほど示した青いデータポイントすべて)です。
もう一つの表記法を使用することもあります。これは教科書でも使用しています。コロン表記です。この「1:m」が見えるときはいつでも、それは単に観測1から観測mまでを意味します。
6.2 最尤パラメータ推定
Sydney Katz:ここで一つの仮定をします。それは、収集したすべてのデータポイントが独立かつ同一の分布に従っているということです。これにより、以前説明したように、独立した事象の確率を掛け合わせることができます。
したがって、パラメータθが与えられた場合にこのデータセット全体を得る確率は、パラメータθが与えられた場合に最初の観測値を得る確率に、パラメータθが与えられた場合に2番目の観測値を得る確率を掛け、以降、パラメータθが与えられた場合にm番目の観測値を得る確率まで続けます。
これを簡潔に、i=1からmまでのすべての観測の確率の積として表すことができます。これはパラメータに対するある選択に対するものです。
ここで少し変わったことをしますが、これの対数を取ります。これは最初奇妙に思えるかもしれませんが、その目的は数値的な安定性を向上させることです。特別なことは何もありません。対数を取ると、この積が和に変わり、物事が少し良くなります。そして、対数を最大化することは、対数なしで最大化することと全く同じ解を持つことがわかります。
したがって、解決しようとしている最大化問題を次のように書き直すことができます。選択するθは、θが与えられた場合のすべての観測の対数確率の和を最大化するθです。
今行ったことをまとめると、これは最尤パラメータ推定と呼ばれるものです。観測したデータを最も可能性が高くするパラメータを取りたいと言うことから始めました。独立した観測を仮定し、それを積に変え、最適化を容易にするために対数を取って、対数確率の和を得ました。
6.3 独立同一分布の観測
Sydney Katz:この最尤推定法のアプローチでは、収集した全てのデータポイントが独立かつ同一の分布(independent and identically distributed、略してi.i.d.)から生成されているという重要な仮定をしています。
この仮定により、各観測値の確率を個別に計算して、それらを単純に掛け合わせることができます。つまり、パラメータθが与えられた場合にデータセット全体を得る確率は、パラメータθが与えられた場合に各観測値を個別に得る確率の積になります。
P(D|θ) = P(観測1|θ) × P(観測2|θ) × ... × P(観測m|θ)
これを簡潔に表現すると、i=1からmまでのすべての観測の確率の積となります。
この仮定は、各データポイントが他のデータポイントに影響を与えることなく独立に生成され、全て同じ確率分布からサンプリングされていることを意味します。例えば、航空機の高度を測定する場合、一回目の測定結果が二回目の測定に影響を与えないと仮定しています。
この独立同一分布の仮定は、統計学や機械学習の多くの手法の基盤となっていますが、現実世界のデータではこの仮定が完全に満たされないケースもよくあります。例えば、時系列データでは、観測値が時間的に依存していることがあります。そのような場合は、この仮定を緩和した別のモデリングアプローチが必要になることがあります。
6.4 最適化アルゴリズム vs 手動調整
Sydney Katz:この最適化問題を解決するための非常にシンプルな方法をお見せします。例えば、xとyの値のこのようなデータセットがあるとします。
軸にはラベルを付けていませんが、x軸は何らかの入力xを示し、たとえばこれが航空機が実際に存在していた状態で、y値は何らかの観測値だとします。このデータに条件付き確率モデルを適合させたいと考えています。
モデルはこのような形だと言います(何であるかを書くべきでしたが)、これらのパラメータがあり、入力xの何らかの線形関数を平均とし、ある標準偏差を持つ正規分布だと言います。これをθ1と呼びましょう。すでに入力されていますが、これをθ1と呼び、これは私たちが見つけようとしているものです。これはθ2で、加算するものです。そしてこれは標準偏差です。
この最適化を行う一つの非常にシンプルな方法は、可能な限り低い尤度(訳注:実際には「可能な限り高い尤度」の間違いと思われる)が得られるまでこれらのパラメータをいじることです。例えば、θ1をいじることができます。これは平均を決定する線形関数の傾きであり、この確率密度の傾きが変わっている理由です。
しばらくこれをいじり回し、出てくる対数尤度を見て、最良の対数尤度を与えるこれらのパラメータの設定を見つけることができます。例えば、この分散を減らすと対数尤度が高くなることに気付きます。
それで、対数尤度がもう増加しなくなるまで減らし続けるかもしれません。減少しました。では戻りましょう。このようなことをしばらく続けることができます。
目的関数を最適化するためのオブジェクティブを持っていましたが、まだスライダーを使用しています。そのため、これは最適化を行う非常にシンプルな方法です。
実は、この最適化を行うためのよりよい方法があります。それは、これを最適化アルゴリズムに与えて、それが代わりに行うようにすることです。これらの最適化アルゴリズムがどのように機能するかについては本当に説明しません。それについては後の学期でもう少し説明します。
しかし、今のところ、これらを何らかの目的と変更を許可されたパラメータを受け取り、最適なパラメータを返すブラックボックスと考えてください。もっと多くの専門用語があります。勾配降下法、Adam、遺伝的アルゴリズム、モメンタムなど、さまざまな種類の最適化アルゴリズムがあります。これらについては第4章でもう少し説明します。
しかし、これらについて本当に詳しく知りたい場合は、すでに受講していなければ、次の学期にAA22を受講すべきです。これについて質問はありますか?
6.5 最尤法からの最小二乗法の導出
Sydney Katz:これから私のお気に入りの導出をお見せしますので、しっかりと見ていてください。
条件付きガウスモデルのパラメータθを見つけたいとしましょう。一定の分散を持ち、平均は入力xiの何らかの関数f_θ(xi)です。データセットとして多数のxyペアがあるとします。x1とy1、x2とy2、そして以降、xmとymまでです。
このタイプのモデルクラスの最尤推定値を見つけたいと思います。つまり、θ̂はθの引数の最大値であり、すべての異なるデータポイントの対数確率の合計です。これは先ほどの方程式から来ています。
この確率は条件付きガウス分布、つまり平均が入力xの関数で分散がσ²である正規分布として定義しました。ここで、正規分布の方程式を代入します。これは正規分布の方程式です:1/√(2πσ²)に、(yi-f_θ(xi))²/(2σ²)の指数関数を掛けたものです。
次に、この式の対数を取って簡略化します。これによって、log(1/√(2πσ²))と、指数関数の対数を取ると、その指数が出てくるので、-(yi-f_θ(xi))²/(2σ²)となります。
ここで考えていることは、θに関するこの最大化問題を解いているということです。θを含まないものは実際には気にしません。なぜなら、それはこの目的関数の値に影響しないからです。この項全体は実質的に無視できます。θは含まれていません。また、この分母も気にしません。これもθを含んでいないからです。
これらを省略すると、i=1からmまでの(yi-fθ(xi))²の合計になります。そして、この関数のマイナスの引数の最大値は、その逆数の引数の最小値と同じになります。つまり、これはθの引数の最小値であり、i=1からmまでの(yi-fθ(xi))²の合計となります。
これは皆さんにはおなじみかもしれません。もしそうでなければ、これが何であるかを今お伝えします。これは最小二乗法の目的関数です。
これはかなり面白いです。私は、これを見るまで、人生でずっと単に最小二乗法を適用していただけでした。最小二乗法を適用するとき、実際には条件付きガウスモデルを仮定しています。つまり、入力(x)が関数を通じて出力(y)を決定し、そこに一定分散のガウスノイズを加えると考えています。これを初めて見たときは、頭が吹き飛びました。
7. ベイズパラメータ学習
7.1 点推定ではなくパラメータの分布
Sydney Katz:これで最尤パラメータ学習についての説明が終わりました。もう一つのオプションとしてベイズパラメータ学習があります。私はベイズパラメータ学習が大好きで、その理由を説明させてください。
私を知っている人は、私が信じられないほど優柔不断な人間だということを知っています。私は意思決定と不確実性に焦点を当てる研究室で働いていますが、自分自身のために決断をしなければならない場合、それはうまくいきません。
ベイズパラメータ学習は、私のような優柔不断な人にとって完璧です。なぜなら、パラメータの1つのセットだけを選ぶ代わりに、可能なすべてのパラメータに対する分布を維持できるからです。それがベイズパラメータ学習で行うことです。
つまり、パラメータθがあり、データセットDが与えられた場合にパラメータθの可能な値がどれくらい可能性があるかについての分布を維持したいのです。
7.2 ベイズの定理とその導出
Sydney Katz:私たちが計算したいのはP(θ|D)、つまりデータDが与えられた場合のパラメータθの確率です。これを直接計算する方法はわかりません。単にそれを見て方程式を導くことはできません。しかし、P(D|θ)を計算する方法は知っています。これは先ほど最尤パラメータ学習で行ったことです。
思い出してみると、さまざまな観測値からなるデータセットがあると仮定し、それらがすべて独立していると仮定すれば、P(D|θ)をすべての観測値の確率の積として計算できます。これは、パラメータのある特定の実現値θが与えられた場合です。
ベイズの定理を使えば、P(θ|D)の式をP(D|θ)を使って導くことができます。まず、ベイズの定理を簡単に導出しましょう。皆さんの多くは見たことがあるでしょう。
本質的に、P(Y|X)を計算しようとしています。条件付き確率の定義はすでに前に説明しました。これは一つの定義です。そして、XとYを入れ替えてこれを書き直してみます。これもまだ真です。P(X|Y) = P(X∩Y)/P(Y)。
次に、これらを少し並べ替えます。P(X)をこちらに、P(Y)をこちらに掛けます。すると、これらの方程式の右側が同じになることがわかります。つまり、左側も等しくなければなりません。そうしてみましょう。そして、両辺をP(X)で割ります。これでベイズの定理が得られます。
多くの場合、この単純なP(X)を計算するのが難しいため、さらに一歩進んで、全確率の法則を適用してP(X)をP(X|Y)とP(Y)の観点から書き直します。
これがベイズの定理です。そして、これが私たちのシナリオでどのように役立つかというと、P(θ|D)を計算しようとしていることを思い出してください。これをP(D|θ)(計算方法がわかっていると言った)を使って書き直すことができます。
P(θ|D) = P(D|θ)・P(θ)/P(D) = P(D|θ)・P(θ)/∑_θ [P(D|θ)・P(θ)]
これをベイズパラメータ推定と呼びます。この式をもう少し詳しく見てみましょう。P(D|θ)の部分は、尤度モデルと呼ばれるもので、最尤パラメータ学習で最適化していたものです。
7.3 事前分布と事後分布
Sydney Katz:これまで話していなかったものの一つがP(θ)です。これは最尤パラメータ学習で使用したものに加えて、ベイズパラメータ学習ではθに関する事前分布が必要になります。これは、データを観測する前のθに関する事前の信念を与えるものです。
例えば、コインを投げる場合で、誰かがコインを渡してくれた場合、そのコインが表が出る確率に関する事前の信念があります。おそらく50%だと思うでしょう。そのため、50%に高い可能性を割り当てる事前分布を持つことになります。
その後、そのコインを何回か投げて、表が出る頻度を観察します。これによって得られるのが、θに関する事後分布と呼ばれるものです。データを観測した後、異なるθの値の可能性に対する分布はどうなるかというものです。
これが離散的な場合です。連続的な場合は、基本的に下部の和が積分に置き換わります。しかし、まだ一つ問題があります。P(D|θ)とP(θ)を使って計算する方法がわかるようになりましたが、実際に計算するのはまだかなり難しい場合があります。
それは、パラメータの数が増えると、この和が指数関数的に増加するためです。また、この積分は解析的に計算するのが難しい場合が多いです。時には解析的に計算することが不可能な場合もあります。そのため、多くの場合、この計算を実際に行うことはできません。
しかし、素晴らしいことに、この分子は計算できます。分子だけを計算できれば、確率的プログラミングと呼ばれるものを使用して、結果として得られる事後分布からサンプルを得ることができます。
7.4 事後分布計算の課題
Sydney Katz:先ほど述べたように、ベイズパラメータ学習での課題の一つは、実際に事後分布P(θ|D)を計算することの難しさです。すでにP(D|θ)(尤度)とP(θ)(事前分布)を計算する方法はわかっていますが、ベイズの定理の分母にある正規化定数が問題になります。
離散的なパラメータ空間の場合、この分母はすべての可能なθ値に対する和になります:
P(D) = ∑_θ [P(D|θ)・P(θ)]
このパラメータの数が増えると、可能な組み合わせの数は指数関数的に増加します。例えば、10個のパラメータがあり、各パラメータが10個の異なる値を取りうる場合、計算しなければならない組み合わせは10^10(100億)になります。
連続的なパラメータ空間の場合はさらに難しくなります。この場合、分母は積分になります:
P(D) = ∫ P(D|θ)・P(θ) dθ
この積分は解析的に計算することが難しく、多くの場合は不可能です。特に、複雑なモデルや高次元のパラメータ空間では困難です。
このような計算上の課題があるため、マルコフ連鎖モンテカルロ法(MCMC)やバリエーショナルベイズなどの近似手法が開発されています。これらの手法は完全な事後分布を計算する代わりに、その分布からサンプルを抽出したり、近似分布を見つけたりすることに焦点を当てています。
7.5 確率的プログラミングの紹介
Sydney Katz:実は、分子だけを計算できれば、結果として得られる事後分布からサンプルを得ることができます。それは「確率的プログラミング」と呼ばれるものを使用することで可能になります。確率的プログラミングは、複雑なベイズモデルを構築し、その事後分布からサンプルを効率的に抽出するためのツールとフレームワークを提供するアプローチです。
確率的プログラミング言語(PPL)には、Stan、PyMC、TensorFlow Probability、Pyroなどがあります。これらのツールを使うと、モデルを定義し、観測データを提供すれば、内部的にMCMCなどのアルゴリズムを使用して事後分布からサンプルを生成してくれます。
確率的プログラミングの美しさは、ベイズ推論の数学的な複雑さを抽象化し、研究者やデータサイエンティストがモデルの構造に集中できるようにすることです。