3.1 GAN の仕組み

VAE の制約と GAN の新しいアプローチ

2章の変分オートエンコーダ (VAE) は、データ分布をパラメータ $\theta$ を持つモデル分布 $p_{\theta} (x)$ で表現した。 また、モデル分布 $p_{\theta} (x)$ を潜在変数 $z$ の確率分布 $p_{\theta} (z)$ と 条件付き確率分布 $p_{\theta} (x|z)$ の2つに分解し、 尤度が最大となるパラメータ $\thata$ を計算した。

$\displaystyle p_{\theta}(x) = \int p_{\theta}(x|z) p_{\theta}(z) dz$

$p_{\theta}(z)$ を標準正規分布、$p_{\theta}(x|z)$ を損失関数で明示的にモデル化し、 各ピクセル毎に尤度を最大化した。

ただし、この計算アプローチだと、確率分布に仮定を設定し、尤度をピクセル単位で最適化するため、 生成画像がぼやける問題が発生する。

GAN では、確率分布を明示的にモデル化するのではなく、 ニューラルネットワークを用いて、確率分布を最適化する。 この計算アプローチでは、確率分布の明示的な仮定がなくなり、 より複雑な形状の確率分布を扱えるようになる。 結果として、VAEよりも鮮明な画像を生成できる。 ただし、確率分布の明示的な仮定を無くしたことで、損失関数も明示的なモデル化ができなくなり、 学習が収束しないという問題が発生する。

GAN の生成器と識別器

GAN (Generative Adversarial Network) では、生成器 G と識別器 D の2つのネットワークを 敵対的に競わせて交互に学習する。 生成器 G は、ランダムなノイズ $z$ (一般的には標準正規分布) の確率変数から画像 $x'$ を出力する 生成モデルである。 識別器 D は、生成器 G の学習に利用し、画像の真贋(本物である確率 0.0~1.0)を判定する識別信号を出力する。

プロセスNo識別器D
判定画像
生成器G
パラメータ
識別器D
パラメータ
正解ラベル
識別器の学習 1本物固定可変1 (本物)
2生成固定可変0 (偽物)
生成器の学習3生成可変固定1 (本物)

GAN 学習の2ステップ

GAN の学習では、識別器と生成器のパラメータを最適化する。 学習の繰り返しの各回で、次のステップ1とステップ2を実行する。

GAN の損失関数

$\displaystyle \min{G} \max{D} L(D, G) = \mathbb{E}{x \thicksim p{data}(x)} [\log D(x)]

損失関数は生成器 G に対して $L(D, G)$ を最小化、 識別器 D に対して $L(D,G)$ を最大化する。 画像 $x$ はデータ分布 $p_{data}(x)$ にしたがい、 ノイズ $z$ はノイズの確率分布 $p_{z}(z)$ にしたがう。 識別信号 $D(x)$ は入力画像がデータ分布 $p_{data}(x)$ の画像である確率を示す。

損失関数はデータ分布 $p_{data}(x)$ とノイズ分布 $p_z(z)$ の期待値であるため、 積分に書き換える。

$\begin{eqnarray} \displaystyle \min{G} \max{D} L(D, G) &=& \mathbb{E}{x \thicksim p{data}(x)} [\log D(x)]

ステップ1の識別器の学習では、生成器のパラメータを固定し、 生成器 G は画像 $x$ を出力するので $x = G(z)$ である。 加えて、 $p_{z}(z) dz = p_{g}(x) dx $ を仮定すると、 損失関数は識別信号 $D(x)$ の関数として扱うことができる。 確率分布 $p_{g}(x)$ はノイズ $z$ が与えられたときパラメータ $\theta$ の生成器が 画像 $x$ を生成する確率分布で、 $p_{g}(x) = p(x | z; \theta )$ となる。 分布 $p_{g}(x)$ は生成器が出力する確率分布であるため、生成分布と呼ぶ。

$\displaystyle L(D,G) = \int p_{data}(x) \log D(x) dx + \int p_{g}(x) \log (1 - D(x)) dx$

生成分布 $p_{g}(x)$ は確率分布の形状がわからないため、生成器の損失関数を用いた パラメータの計算はできない。 そこで、識別器経由で誤差を生成器に逆伝播して、生成器のパラメータを最適化する。

識別器 D の尤度を最大化したとき、$L(D,G)$ のD に対する勾配が0になる。 最適化された識別器 $D^*(x)$ は次の条件を満たす。

$\displaystyle \frac{\partial L(D,G)}{\partial D} = 0$

$\displaystyle D^{*}(x) = \frac{p_{data}(x)}{p_{data}(x) + p_{g}(x)}$

以上が、ステップ1の、生成器のパラメータを固定して識別器のパラメータを最適化する過程である。 もしも $P_{data}(x) = p_{g}(x)$ つまりデータ分布と生成分布が一致する完璧な生成器が得られたとき、 完璧な識別器 $D^{*}(x)$ が本物画像と完璧な生成画像を見分ける確率は 0.5 となる。

ステップ2では、識別器のパラメータを固定し、生成器のパラメータを最適化する。 最適化された識別器 $D^{*}(x)$ を $L(D,G)$ に代入して式を変形すると次の式となる。

$\displaystyle L(D^{*}, G) = - \log 4 + 2 D_{KS} (p_{data} (x) || p_{g} (x))$

$D_{JS}$ はJSダイバージェンス (Jensen-Shannon divergence) で、2つの確率分布 つまりデータ分布 $p_{data}(x)$ と生成分布 $p_g(x)$ の近さを表し、 KLダイバージェンス $D_{KL}$ を用いて次のように記述できる。

$\displaystyle D_{JS} ( p_{data} (x) || p_{g} (x)) = \frac{1}{2} D_{KL} (p_{data} (x) || \frac{p_{data}(x) + p_{g} (x)}{2}) + \frac{1}{2} D_{KL} (p_{g} (x) || \frac{p_{data}(x) + p_{g} (x)}{2})$

$D_{JS}$ は、データ分布と生成分布が一致するとき 0 となる。 このとき、損失関数 $L(D^{*}, G)$ は最小化でき、識別器と生成器を共に最適化できたときの 損失は次の値になる。この状態が GAN の損失関数における最適解である。

$\displaystyle L(D^{*}, G^{*}) = - \log 4$

生成分布の尤度を損失関数で直接最大化できないため、学習が収束しないという問題がある。 加えて、識別器と生成器の学習パランスを取ることも難しく、生成器の学習が識別器に比べて 進みすぎると、生成器は識別器をだましやすい特定の画像だけを生成するようになり、 多様な画像の生成法を忘れてしまう。(モード崩壊)