jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「Pythonではじめるベイズ機械学習入門」を読む ~第5章 深層学習モデル②(変分自己符号化器)~

はじめに

Pythonによるベイズモデルの実装をきちんと学ぼうと思い,森賀新・木田悠歩・須山敦志 著 「Pythonではじめるベイズ機械学習入門」を読むことにした。

本記事は,第5章「深層学習モデル」のうち変分自己符号化器に関する読書メモである。

  • 本書の紹介ページ

www.kspub.co.jp

5.2 変分自己符号化器

本節では,ニューラルネットワークを用いた教師無し学習モデルの代表例である変分自己符号化器(Variational Auto Encoder; VAE)を紹介している。

5.2.1 モデル概要

変分自己符号化器は,線形次元削減モデルに対してニューラルネットワークによる非線形変換を導入した教師なしの学習モデルである。画像データなど,複雑な生成構造を持つデータをモデル化するために用いられる。

モデルの仮定として,潜在変数の集合 Z = \{z_1, \cdots, z_N  \}から観測データの集合 X = \{x_1, \cdots, x_N  \}が以下のような生成過程で生成されているとする。


 \begin{align}
z_n &\sim \mathcal{N}(z_n | 0, I) \\ \\
x_n | z_n, W &\sim \mathcal{N}(x_n | f(z_n; W), \lambda_x^{-1}I)  \\
\end{align}

このとき, f(z_n; W)は順伝播型のニューラルネットワークで, Wは重みパラメータである。この f(z_n; W)は,潜在変数 z_nから観測データ x_nを生成するので,デコーダ(decoder)とも呼ばれている。

この潜在変数とパラメータの事後分布を求めるときに,変分推論法を用いる。すなわち近似分布 q(Z, W)を設計し,KLダイバージェンス


 \begin{align}
D_{KL} [ q(Z, W) || p(Z, W | X)  ]   \\
\end{align}

を最小化することが学習の目標となる。
近似分布は平均場近似を用いて,以下のように独立分解する。


 \begin{align}
q(Z, W; X, \psi, \xi) = q(Z; X, \psi) q(W, \xi) \\
\end{align}

すなわち,潜在変数 Zと重みパラメータ Wは独立であると仮定している。

 q(Z; X, \psi)については,


 \begin{align}
q(Z, W; X, \psi, \xi) &= \prod_{n=1}^{N} q(z_n; x_n, \psi) \\ \\
&= \prod_{n=1}^{N} \mathcal{N} (z_n | m(x_n; \psi), \mathrm{diagm} (v(x_n; \psi))) \\
\end{align}

ここで, \mathrm{diagm}は与えられたベクトルを対角成分とする行列を出力する関数である。
すなわち,各潜在変数 z_nはそれぞれ独立である,と仮定している。

平均パラメータ関数の m(x_n; \psi)と分散パラメータ関数の v(x_n; \psi)は両方とも順伝播型ニューラルネットワークで,推論ネットワーク(Inference Network)もしくはエンコーダ(Encoder)と呼ばれる。

エンコーダでは, x_nに対する z_nnの近似分布 q(z_n)におけるパラメータを1つ1つ最適化していくのではなく,ニューラルネットワークの共通パラメータとして最適化することで計算量を削減する。このように,ニューラルネットワークのような回帰モデルによってデータ xから潜在変数 zの事後分布を予測しながら推論していく手法を償却推論(Amortized Inference)と呼ぶ。


変分自己符号化器は,エンコーダとデコーダという2つのニューラルネットワークの結合であるとの説明がなされるが,

  • エンコーダ m(x_n; \psi), v(x_n; \psi) : 変分推論で用いる近似分布のパラメータ関数
  • デコーダ f(z; W) : 生成モデルの尤度

と解釈できる。

5.2.2 実装

サンプルコードを動かしながら,挙動を確認した。
github.com

実装にはPyroを用いた。

使用するデータ

使用するデータは,MNISTデータセットである。MNISTのデータは28ピクセル×28ピクセルなので,784次元のベクトルとみなせる。
潜在変数 z_nの次元は10とする。

変分自己符号化器の実装

デコーダ f(z; W)のパラメータ Wに対しては,事前分布および近似分布 q(W, \xi)は設定せず,最尤法によって点推定する。

エンコーダ m(x_n; \psi), v(x_n; \psi) は変分推論を行なう。変分推論の最適化計算は,手元の環境では15分ほどかかった。


学習したエンコーダとデコーダを利用して,画像をエンコーダに入力して,得た潜在変数をデコーダに入力して生成される画像を可視化した。
同じ数字において,左側が入力,右側が出力である。

輪郭の形状は何となく同じように見えるが,デコーダの出力の方が全体的にぼやけた感じになって出力されていることが確認できた。

まとめと感想

深層学習モデルのうち,変分自己符号化器について学んだ。

変分自己符号化器に画像を入力すると,出力画像はぼやけた感じで出力されるが,入力にノイズが多い場合にはそのようなノイズがキャンセルされる効果があるのではと推察される。
変分自己符号化器によって,ノイズが取れたベクトルが得られるのであれば,元の入力との差を見ることで異常診断などにも使えるのではと考えている。

本記事を最後まで読んでくださり,どうもありがとうございました。

参考サイト

github.com