LoginSignup
1
3

More than 5 years have passed since last update.

ニューラルネットを使って任意の分布からサンプリングする

Posted at

はじめに

前回の記事で紹介した密度推定の手法を応用して、データのサンプリングを行ってみます。
$F(x)=P(X\leq x)$を学習させたモデルをもとに、この逆関数$G(y)$を同様のニューラルネットで学習させます。
$[0, 1]$の一様分布から得られた$y$に対して、$F(G(y))$がyに近づくようにオートエンコーダ的な学習を行えばいいわけです。損失関数にはベルヌーイ分布を仮定した負の対数尤度(chainer.functions.bernoulli_nll())を使います。
学習後、サンプリングを行うには$[0, 1]$の一様分布から得られた$y$で$G(y)$を計算させれば良いです。

一次元混合ガウス分布

オレンジ色の実線が学習済みの$P(X)$で、青の棒グラフが今回のサンプリング結果です。
$P(x)=0$ 付近と、$P(x)=1$ 付近ではうまくサンプルが得られていないようです。
mixed_gaussian_1d_sampled.png

二次元混合ガウス分布

左から順に、元データ、$P(X)$の学習結果、今回の手法によるサンプリング結果です。
$P(X)$の学習結果に影があらわれていますが、Min-Max Poolingが悪さをしているようです。このプーリングは不要なのかもしれません(要調査)。
mixed_gaussian_2d_sampled.png

二次元切断(?)ガウス分布

half_gaussian_2d_sampled.png
$P(X)$のヒートマップ上ではうまく行っていないように見えましたが、今回の結果を見ると意外と形は取れているようです。

1
3
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
1
3