【LTネタ】PyMCを使えばちょっと複雑な確率モデルも怖くない
【概要】
- 勉強会で話したLT資料を整理して置いておきます
- 線形回帰の混合モデルをPyMC3を使って推論するという話です(この記事がほぼ全て)
- 勉強会:確率的プログラミング言語を理解する会(8/8)
【目次】
はじめに
2020/08/08(土曜日)に開催の以下の勉強会でLTをしてきました。
本会の趣旨は、
確率的プログラミング言語とは何かを理解する
ということで、私はPyMC3を利用して混合モデルのパラメータ推論をしてみたという話をしました。
私のLTは「PPLとは?」については全然触れずで、PPLを使った推論の実装例の紹介です。
混合モデル
混合モデルについては、当ブログでも度々取り上げています。応用先が豊富で面白いので、個人的に好きなんです。混合モデル。
なので、混合モデルについての詳細は、当ブログの以下の記事などを参考にしてもらえたらと思います(正確に学びたいなら参考資料にある文献を当たるのが安心ですけどね)。 ざっくり説明すると、複数の確率モデルを組み合わせたモデルで、潜在変数(クラスタを決めるIDみたいなもの)によって確率モデルをスイッチする構造をしたモデルです。 組み合わせる確率モデルは種類が異なってもよく、非常に汎用性が高いと思っています。
ベイズ推論により混合分布のパラメータ推論をやってみる 〜ガウス混合分布のパラメータ推論とクラスタリング〜 - 機械と学習する
これは基本的なガウス混合分布のパラメータ推論をして、応用例としてクラスタリングをしてみるという話です。
ベイズ推論により混合分布のパラメータ推論をやってみる 〜線形回帰モデルの混合〜 - 機械と学習する
この記事が今回のLTの元ネタです。線形回帰モデルを組み合わせたモデル(混合線形回帰モデルと呼んでます)のパラメータ推論をしています。
自動微分変分推論でガウス混合モデルのパラメータ推論 〜PyMC3を使った実装〜 - 機械と学習する
上記の二つの記事ではMCMCを使ってサンプリングでパラメータの推論をしていますが、こちらではADVI(自動微分変分推論)を使ってパラメータの推論をしています。
混合モデルのパラメータ推論
(添付の資料のp.11~13あたりの内容の解説です)
混合モデルのパラメータ推論を行うために、グラフィカルモデルと同時確率を考えます。
同時確率は以下の通りです。
の生成分布に適切な確率モデルを設定していきます。例えば正規分布を利用すれば、混合正規分布です。線形回帰モデルを生成分布に利用することもでき、今回はその例を示します。
確率モデルでは、共役関係にある確率分布を設定することで解析的に事後分布が計算できるケースがありますが、混合モデルの場合は周辺尤度の計算が困難なので、通常は何らかの近似計算を行います。今回はMCMCアルゴリズムを利用しています。
計算の効率化を進めるために、二つの工夫を導入しています。工夫といっても私が考案したわけではなく、モダンな手法では常識になっているらしいです(PyMC3のドキュメントより)。
- 正規分布の共分散行列をそのまま推論するのではなく、コレスキー分解して推論対象のパラメータを減らす
- クラスタIDを示す潜在変数を周辺化除去する
- 計算の安定性と高速化のため
- 推論対象のパラメータを減らせば計算効率が上がります。また、潜在変数は離散変数であり、離散変数のサンプリングが推論の不安定性を招くらしいです(実際は詳しくは理解できてないです。実験的には、高速化の効果はだいぶ大きかったです)
PyMC3での実装
(添付の資料のp.14以降の内容です。)
PyMCでは、上記のようにデータの生成過程の確率モデルを構築できれば、あとはそのモデルを素直に書いていくだけでモデルの定義ができ、MCMCサンプルを取得することができます。どんなモデルなのかを考えることに集中でき、事後分布の解析的な計算などが不要なわけです(これがPPLだ!)。
実際の実装については、以下の記事で全コードを掲載しているので興味がある方はそちらを参考にしてください。
learning-with-machine.hatenablog.com
実験結果は以下のようになります。
このようなトレンドが異なる2種類のデータに対して、2つの線形回帰モデルを仮定して推論してみます。
その結果はこのようになりました。
二つの線形回帰モデルで、今回のデータをうまく表現できるモデルを推論できたことがわかります。
LT資料
おわりに
ということで、実際は以前書いた記事の内容をほぼそのまま話しただけなのですが、LTしてきました。
混合モデルについては過去の記事を参照いただくとして、今回のLTで言いたかったのは、
「PyMC3など確率プログラミング言語(PPL)を利用すると確率モデルの設計に時間的なリソースを集中できるので楽しいよ」
ということです。
参考文献
確率モデルとは?とか、推論計算については以下の書籍を参照いただくと良いと思います。わかりやすさから、須山さんの「ベイズ推論による機械学習 入門」をまず読まれるのをお勧めします。
機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)
- 作者:須山 敦志
- 発売日: 2017/10/21
- メディア: 単行本(ソフトカバー)
- 作者:須山 敦志
- 発売日: 2019/08/08
- メディア: 単行本(ソフトカバー)
- 作者:C.M. ビショップ
- 発売日: 2012/04/05
- メディア: 単行本(ソフトカバー)
- 作者:C.M. ビショップ
- 発売日: 2012/02/29
- メディア: 単行本
PyMC3を使って実際に推論をやるためには下記の文献を参照いただくと良いと思います。特に公式ドキュメントはExampleが豊富なので、まず公式ドキュメントを参照しましょう。日本語でまとまった書籍としては「Pythonによるベイズ統計モデリング」がPyMC3を利用した書籍でわかりやすいと思います。
Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド
- 作者:マーティン,オズワルド
- 発売日: 2018/06/22
- メディア: 単行本