LoginSignup
6
2

More than 5 years have passed since last update.

確率分布をニューラルネットで学習する

Last updated at Posted at 2018-03-15

はじめに

ニューラルネットを使ったセミパラメトリックな密度推定の手法を考案しました。
Chainerによる実装(github)

確率密度関数 $f(x)=P(X=x)$ を直接ニューラルネットで学習しようとしても、
$$ \int_{-\infty}^{\infty}f(x)dx=1 $$
を満たすような制約を与えることは困難です。

しかし、累積分布関数 $F(x) = P(X \leq x)$ について考えると満たすべき制約は、

\frac{\partial}{\partial x}F(x) \geq 0 \\
F(-\infty)=0 \\
F(\infty)=1

であり、このうち単調増加性についてはその制約を満たすニューラルネットモデルが存在します。

Monotonic Networks, J.Sill (NIPS 1997)

今回はこのモデルをベースに、$F(x)$ を直接ニューラルネットに学習させてみました。

一次元の確率変数の場合

確率変数$ X $の観測データ$ \lbrace x_1, ...,x_N \rbrace $に対して、

$$ \underset{\theta}{\arg \min} \lbrace -\frac{1}{N}\sum_{i=1}^{N} \log f_\theta(x_i) \rbrace $$

を得たいので
$$-\frac{1}{N}\sum_{i=1}^{N}\log f_{\theta}(x_i)$$
を損失関数として$\theta$の学習を行います。
ここで、
$$f_{\theta}(x) = \frac{\partial}{\partial x}F_{\theta}(x)$$
ですが、これはChainerのDouble backpropagation機能で求めることができます(chainer.grad())。

学習結果

オレンジ色の実線がモデルの出力した$P$です。

ガウス分布

gaussian_1d.png

切断ガウス分布

half_gaussian_1d.png

二次元の確率変数の場合

$$P(X, Y) = P(X) P(Y|X)$$
を計算すればよいです。
つまり$P(X)$と$P(Y|X)$をそれぞれ別のニューラルネットに学習させます。

右側がモデルの出力した確率密度です。

混合ガウス分布

mixed_gaussian_2d.png

切断(?)ガウス分布

half_gaussian_2d.png

最後の例はあまりうまく行っていないようです。

さらに次元が増えた場合も同様となるはずですが、まだ実験できていません。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2