ラビットチャレンジレポート 深層学習 その5
DCGAN
GAN(Generative Adversarial Network)とは
生成器と識別機を競わせて学習する生成&識別モデル。
Generator(生成器):乱数からデータを生成
Discriminator(識別器):入力データが真値(学習データ)であるかを識別する。
2プレイヤーのミニマックスゲームとは
- 1人が自分の勝利する確率を最大化する作戦をとる。
- もう一人は相手が勝利する確率を最小化する作戦をとる。
- GANでは、価値関数Vに対し、D(識別器)が最大化、G(生成器)が最小化を行う。
ここを少し解説する。
GANの単一データの損失関数は、バイナリークロスエントロピーで表せる。
・・・・(1)
- 真データを扱うときは、,となるので、(1)にそれぞれ代入すると、
・・・(2)
- 生成データを扱うときは、,となるので、これを(1)に代入する。
・・・(3)
(1)、(2)の2つを足し合わせると、
複数データをとるために期待値をとち、符号を逆にすると、価値関数は下記のようになる。
・・・(4)
判別器を評価する時
D(x)は0~1の範囲を出力するが、真データが来た時、1を出力してほしい。
(4)の右辺第一項は、D(x)=1が来た時、最大化できる。
また、D(G(z))は、生成器が出力したデータの判定なので、偽データとして判定してほしい。
よって、D(G(z))=0が理想である。よって、右辺第二項もこのとき最大化できる。
結果的に、判別器を理想通りに動作させるには、価値関数V(D,G)を最大化するようパラメータを調整することになる。
生成器を評価する時
生成器の理想は、判別器が間違って判定すること(生成器の出力に1を出力すること)である。
(4)の右辺第一項は、生成器には関係ないので無視する。
右辺第二項は、D(G(z))=1を生成するのが望ましい。すなわち、右辺第二項が最小化されることが望ましい。
結果的に、生成器を理想通り動作させるには、評価関数V(D,G)を最小化するようパラメータを調整することになる。
最適化方法
具体的な最適化方法は下記のとおりである。
1. 判別器の性能を更新するよう、価値関数を最大化
- 生成器のパラメータθgを固定
- 真データと生成データをm個ずつサンプルする
- を勾配上昇法(Gradient Ascent)で更新
2.生成器の性能を更新するよう、価値関数を最小化
- 判別器のパラメータθdを固定
- 生成データをm個ずつサンプル
- θgを勾配降下法(Gradient Descent)で更新
なぜ生成器は本物のようなデータを生成するのか
- 生成データが本物とそっくりな状況とは、であるはず。
- 価値関数がの時に最適化されていることを示せばよい。
- 二つのステップで確認する。
- Gを固定し、価値関数が最大値をとる時のD(x)を算出
- 上記のD(x)を価値関数に代入し、Gが価値関数を最小化する条件を算出
ステップ1:価値関数を最大化するD(x)の値は?
- Generatorを固定する。
y=D(x)、a=P_{data}(x)、b=P_g(x)とおけば、
y=D(x), a=pdata(x), b=pg(x)なので、
これが、価値関数が最大値をとる時のD(x)の値である。
DCGAN(Deep Convolutional GAN)
- GANを利用した画像生成モデル
- 生成器
- Pooling層の代わりに転置畳み込み層を利用
- 最終層はtanh、その他はReLU関数で活性化
- 判別器
- Pooling層の代わりに畳み込み層を使用
- Leaky ReLU関数で活性化
- 共通事項
- 中間層に全結合層を使わない
- バッチノーマライゼーションを適用