Probabilistic Numericsという考え方

A8バナー広告

Probabilistic Numericsは確率モデル的な考え方の一種です。

Probabilistic Numericsの研究者 Philipp HennigのWebセミナーを聴いたので、メモしておく。

1分で言う

“Probabilistic numerics"とは「決定的なアルゴリズム」に、確率的な可能性を与える考え方

確率的な可能性は観測データを元にする。

誰がうれしいの?

例えばCovid19の例を考える。Covid19の感染拡大予測モデル式はすでに存在している。ただし予測モデル式が本当に正しいかどうか、誰も知らない

一方で、Covid19の感染数データは存在している。

予測モデルと感染数データを組み合わせると「確率的な予測モデル」ができあがる。

つまり、ある程度は正しいであろう理論的な予測モデルが予測値と予測値の確率を計算できる。

言い換えると「来月の感染者数はx人、この予測の正しい確率はp%」と言った具合だ。

“Probabilistic numerics"はこういう操作を可能にする。

注意点がある。予測モデルは微分可能でなければいけない。全微分問題(ODE), 偏微分問題(PDE)のどちらもOK。

実装あるの?

エンジニアリング的な観点からまず書く。パッケージがある。よくメンテナンスされている。

数式で表現する

パッケージのチュートリアルから抜粋して、Probabilistic Numericsの考え方を紹介する。

まず予測式があるとする。

f(x) = \frac{1}{2} ax^2 + bx + c, where\ a > 0

この予測式を微分可能。

    \[ f'(x) = 0 \rightarrow x^* = - \frac{b}{a} \]

a, bさえ定めてしまえば、常に同じ値になる。つまり「決定的」である。

さて、いま観測データD, Yがあるとする。 Dが予測モデルの入力値で、Yが出力値に相当する。 予測モデルが「なんらかのノイズ」と共に実社会で動作していると考える。すると、予測モデル式はこうなる。

    \[ \hat{f(x)} = \frac{1}{2}(a + \epsilon_a)x^2 + (b + \epsilon_b)x + (c + \epsilon_c) \]

\epsilon = \{\epsilon_a, \epsilon_b, \epsilon_c\}はノイズ項を意味する。\epsilonはガウス分布に従うとする。つまり

    \[ \epsilon \sim N(0, \Lambda) \]

観測データを持ってるので、\epsilonを観測データに当てはまるようにすれば良い。

ちな、\epsilonだけではなく、a, b, cのパラメタも推定しなければいけない。なので、定式化する。 まず、予測式の項を係数ベクタとパラメタベクタに分ける。 係数ベクタは\Phi = (\frac{1}{2}x^2, x, 1)。 パラメタベクタは(a, b, c)。 なので、予測式は\hat{f(x)} = \Phi^T(a, b, c)

ぼくたちは(a, b, c)の値に検討がつかない。なので、事前確率に基づくと仮定する。事前確率はガウス分布にするが、ガウス分布のパラメタも不明なので、こいつもパラメタで仮置きする。

    \[ (a, b, c) \sim N(\mu, \Sigma) \]

とまあ、一通り定式化した。

この次は予測モデルを確率モデル式に変形して、事後確率を定式化すれば良い。

この作業はめんどうので、チュートリアルを見て欲しい。

ともかく、大事なことは推定するべきパラメタが \mu, \Sigma, \Lambdaと決定できたこと。 事後確率式を設定する時に、\mu, \Sigma, \Lambdaも事後確率式に含まれる。なので、後は事後確率を最大化するようにパラメタ探索すれば良い。つまり、SGDやらADAMやらの探索アルゴリズムで最適な\mu, \Sigma, \Lambdaを探せば良い。

この一連の作業は、まさに「ガウス過程」である。[1] 知ってる人には言うまでもないけど

なので、"Probabilistic Numerics"とは、「決定的な予測式をガウス過程で確率化する考え方」と表現できる。

Footnotes

Footnotes
1 知ってる人には言うまでもないけど