はじめに
BEGAN: Boundary Equilibrium Generative Adversarial Networks を読んだときのメモです。
正確なところは原文をお願いします。<(_ _)>
https://arxiv.org/abs/1703.10717
論文の概要
- Discriminatorとしてオートエンコーダを使用するGANの提案
- 下記の特徴を持つ
- GeneratorとDiscriminatorの学習のバランスを取ることが可能
- 収束判定が可能
- シンプルだが堅牢なアーキテクチャにより、素早く安定的に収束させることが可能
- 生成される画像の多様性と精度の両立が可能
背景
- GANの課題
- 適切なハイパーパラメータ設定が重要
- 画像の多様性の制御が難しい
- GeneratorとDiscriminatorの収束のバランスを取るのが難しい
- 学習の初期に、Discriminatorが簡単に勝ってしまいがち
- model collapse:Generatorが単一の画像しか生成できなくなる
提案手法
概要
- Discriminatorに分類機ではなくCAE(Convolutional AutoEncoder)を使っている
- Generator: Discriminatorの再構成誤差が小さくなるように学習
- Discriminator: CAE(Encoder + Decoder) 実際の画像については再構成誤差が小さくなるように学習。Generatorによって生成された画像については、逆に再構成誤差が大きくなるように学習。
損失関数❶
- Ld: Discriminatorに対する損失関数
- DiscriminatorはLdが小さくなるように学習する。
- ktが小さい場合、L(x)を重視。->BEGANはこのktを数式に従って自動的に調整する。
- 式補足
- x: 実際の画像
- L(x): 実際の画像の再構成誤差
- z: ランダムなベクトル
- G(z): Generatorの出力
- L(G(z)): Generatorによって生成された画像の再構成誤差
- kt: L(x)とL(G(z))のどちらを重視するか
損失関数❷
- Lg: Generatorに対する損失関数
- Generatorにより生成された画像をDiscriminatorに入れた際の再構成誤差
- GeneratorはLgが小さくなるように学習する
- 式補足
- L(G(z)): Generatorによって生成された画像の再構成誤差
損失関数❸
- kt: L(x)とL(G(z))のどちらを重視するか->GとDのバランスを取る
- λが小さい場合->λL(x)-L(G(z))が負になる(なりやすくなる)->ktは小さくなる->実際の画像を重視。精度は上がるが多様性はなくなりがち。
収束判定
モデル定義
おわりに
ソースはネット上に色々落ちているので動かしましたが、だいたい論文と同じくらいのGlobal Stepで(10万くらいで)いい感じになりました。