Variational Autoencoderのグレイ画像への適用

はじめに

 先の解説でConditional Variational Autoencoder(CVAE)を取り上げ、画像を生成するモデルを例として考えた。そのとき扱った画像はMNISTデータセットである。このデータセットの画像を2値画像であるとみなし、0と1を生成するベルヌーイ分布を導入した。実は、MNISTの画像は2値画像ではなく、グレイ画像である。今回の記事では、連続値を生成する確率分布(ガウス分布)を用いてグレイ画像をまじめに扱う。本記事では簡単のため、Conditionalではない普通のVariational Autoencoder(VAE)を用いて画像生成モデルを学習する。

ベイズの変分推論

 最初にVAEを定式化する。観測値をX=\{x_1,\cdots,x_N\}とし、潜在変数zを考え、これら2つの同時確率分布p(X,z)にベイズの定理を適用する。

(1)    \begin{equation*} p(z|X)=\frac{p(X|z)p(z)}{p(X)} \end{equation*}

事後確率p(z|X)をベイズの変分推論により求める。p(z|X)を近似する関数としてパラメータ\phiを持つ関数q_{\phi}(z|X)を導入し、次のKullback-Leibler Divergenceを最小にする。

(2)    \begin{equation*} D_{KL}\left[q_{\phi}(z|X)||p(z|X)\right] \equiv \int dz\; q_{\phi}(z|X)\ln{\frac{q_{\phi}(z|X)}{p(z|X)}} \end{equation*}

右辺を変形すると

(3)    \begin{equation*} D_{KL}\left[q_{\phi}(z|X)||p(z|X)\right]= D_{KL}\left[q_{\phi}(z|X)||p(z)\right]-E_{q_{\phi}(z|X)}\left[\ln{p(X|z)}\right]+\ln{p(X)} \end{equation*}

となる。ここで、E_{q_{\phi}(z|X)}\left[\cdot\right]q_{\phi}(z|X)についての期待値を表す。右辺の第3項は\phiに依存しないので、右辺を\phiについて最小にするには次式を最小にすれば良い。

(4)    \begin{equation*} L\left[\phi\right]\equiv D_{KL}\bigl[q_{\phi}(z|X)||p(z)\rbig]-\matchbb{E}_{q_{\phi}(z|X)}\left[\ln{p(X|z)}\right] \end{equation*}

ところで、L\left[\phi\right]を用いて式(3)を変形すると

(5)    \begin{equation*} \ln{p(X)}=D_{KL}\left[q_{\phi}(z|X)||p(z|X)\right]-L\left[\phi\right] \end{equation*}

を得る。Kullback-Leibler Divergenceは常に0以上であるから

(6)    \begin{equation*} \ln{p(X)}\geq -L\left[\phi\right] \end{equation*}

となる。左辺の量p(X)はEvidenceと呼ばれる量であり、この対数の下限が-L\left[\phi\right]であることを上式は示している。この下限をEvidence Lower Bound(ELBO)と呼ぶ。すなわち、ELBOを最大することと、D_{KL}\left[q_{\phi}(z|X)||p(z|X)\right]を最小にすることとは等価である。いずれにせよ、式(4)を最小するような\phiを見つけることが目標になる。

深層生成モデル

 確率分布q_{\phi}(z|X)を正規分布で表し、そのパラメータである平均\mu_{\phi}と分散\sigma_{\phi}^2をネットワークを用いて計算する。

(7)    \begin{equation*} q_{\phi}(z|X)=\mathcal{N}(z|\mu_{\phi},\sigma_{\phi}^2) \end{equation*}

ここで、\mu_{\phi},\sigma_{\phi}Xの関数であり、パラメータ\phiはネットワークの各種重みに相当する。ネットワークを用いて表現された生成モデルを深層生成モデルと呼ぶ。本記事ではXがグレイ画像の場合を考える。グレイ画像の画素は、0から255までのいずれかの整数値を持つ。従って、p(X|z)として仮定できる確率分布は、255種類の離散値を生成できるものでなければならない。真っ先に思いつくのがカテゴリカル分布である。しかし、実際にこれを用いて計算を行ったところ訓練に大変時間がかかることが分かった。そこで、画素値を255で割り0から1までの実数値に変換した。このようにすれば、任意の実数値を生成できるガウス分布を用いることができる。

(8)    \begin{equation*} p_{\theta}(X|z)=\prod_{n=1}^{N}\mathcal{N}(x_n|\mu_{\theta}(z),\sigma_0^2) \end{equation*}

パラメータ\mu_{\theta}は、入力をzとするネットワークで計算される。\thetaはネットワークの重みを表す。今回の計算では分散\sigma_0^2は定数(ハイパーパラメータ)とした。これもネットワークで決める計算を行ってみたが、損失関数の減衰が不安定であった。最後に、p(z)として次の標準正規分布を仮定した。

(9)    \begin{equation*} p(z)=\mathcal{N}(z|0,1) \end{equation*}

 ここまでの様子を図にすると以下のようになる。

hoge

図1. VAEの処理の流れ

結果

 今回もPixyzを用いて実装し、データセットとしてModelNet40を用いた。このデータセットが持つ3Dモデルをさまざまな角度から見た距離画像(グレイ画像)を作成し、これを訓練画像とした。画像枚数はおおよそ9万8千枚である。最初に、訓練時の損失関数の減衰の様子を示す。ハイパーパラメータ\sigma_0^2を0.01とした。

次に、再構成画像を示す。再構成画像とは上の図1で、Xを入力したときのp_{\theta}(X|z)が生成する画像のことである。この画像がXと似てるほどVAEの精度は良い。

物体の形状と濃淡を完全ではないが再現できていることが分かる。最後に、標準正規分布から発生させた乱数から生成した画像を示す。これは図1の右段だけの処理である。

生成画像については残念な結果になった。何が描画されているのか分からない。もう少し、損失値を減らす工夫が必要そうである。

まとめ

 今回は、グレイ画像を生成するVAEを考察した。VAEのサンプルコードをGoogleで検索してもベルヌーイ分布を用いたものしか見つからない。グレイ画像は2値画像ではないからベルヌーイ分布は不適切である。今回の記事では、ガウス分布を導入することでグレイ画像を扱えることを示した。ただし、乱数からの画像生成についてはもう少し丁寧な議論が必要である。

Kumada Seiya

Kumada Seiya

仕事であろうとなかろうと勉強し続ける、その結果”中身”を知ったエンジニアになれる

最近の記事

  • 関連記事
  • おすすめ記事
  • 特集記事

アーカイブ

カテゴリー

PAGE TOP