PGGAN「優しさあふれるカリキュラム学習」


![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/dcbbb1d2-28c0-9f1a-368b-bb4d9635ee76.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/fb7321d7-4791-978a-9b7c-08df60528188.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/994345ea-075f-d37f-3652-a741b218bced.png)

#論文紹介・画像引用
https://arxiv.org/pdf/1710.10196v3.pdf

# Progressive Growing of GANs 
<b>低解像度の画像から始めてネットワークにレイヤーを追加して徐々に解像度を上げていくGAN</b>

従来のGANのように、すべてのスケールについて同時に学習するのではなく
まず初めに大まかな画像構造を捉えてから段階的に細かいところに注意を向けていく
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/06a20336-9299-a50d-3163-9c9c8b247bdb.png)

上図のN×Nは解像度がN×Nでのconvolution層を意味する

すべての層は常に訓練可能な状態である

本研究の学習ではGeneratorとDiscriminatorそれぞれが低解像度（4×4）の層だけを組み入れて始める
学習が進むにつれて徐々にGeneratorとDiscriminatorに層を追加していくことで生成画像の解像度を上げる

こうすることで<b>高解像度での画像の生成が安定化し、学習時間の短縮</b>ができる

上図右の画像6枚は上述の段階的な学習法（解像度：1024×1024)によって生成された画像である



![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/d5622c37-38b1-18bc-90c0-bac26f1f2b40.png)
GeneratorとDiscriminatorの解像度を2倍にするとき新しい層を入れる

16×16の解像度から32×32の解像度への移り変わりを表している（上図（a）から上図（c））
その移り変わりの間を表したのが上図（b）

高解像度の層では残差ブロックのようにしている
$α$は$0$~$1$

$2×$と$0.5×$はそれぞれ解像度を2倍、0.5倍にすることを意味する

$to RGB$は特徴ベクトルをRGBに変換する層、$from RGB$はその逆
どちらも$1×1$のconvolution層を使う

discriminatorを訓練するときは、現在のネットワークの解像度に合わせて縮小された本物の画像を入れる

残差ブロックを使用しているため、Generatorの出力は2つの画像（to RGBされたもの）を足し合わせる
同じようにDiscriminatorでは2つのベクトル（from RGBされたもの）を足し合わせる

#ネットワーク構成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/20675b13-ce93-70ea-e95b-e357e2395dc9.png)

上図左がGeneratorのアーキテクチャ、上図右がDiscriminatorのアーキテクチャ
どちらも3層を1ブロックにしたものを学習の途中で1つずつ追加して積み重ねている

Generatorの最後の1×1のconvolution層は$to RGB$を意味する
DIscriminatorの最初の1×1のconvolution層は$from RGB$を意味する

アップサンプリングは2×2で複製、ダウンサンプリングはアベレージプーリング

潜在ベクトルは512次元で本物画像と生成画像は[-1,1]の範囲で表す

leaky ReLU（$α=0.2$）を線形変換する最終層を除いて、両ネットワークのすべての層に使う

###学習の流れ
4×4の解像度から始めて、Discriminatorに合計800枚の本物画像を見せるまでネットワークの学習をする

その後は次の2つの処理を交互に実行する
新しい3層ブロックを入れる（解像度を上げる）→800枚の本物画像でネットワークを安定化させる→新しい3層ブロックを入れる（解像度を上げる）→・・・



###工夫点（後述）
batch normalization・layer normalization・weight normalizationはどちらのネットワークにも使わないが
Generatorの3×3のconvolution層の後にpixelwise normalization（後述：Generatorにおけるピクセル特徴ベクトルの正規化）を使う

バイアスは0で初期化し、重みは分散1の正規分布に従う
しかし、学習時に各層固有の定数で重みをスケーリングする（後述：学習率の均質化）

Descriminatorの最終層には4×4の解像度でミニバッチ全体の標準偏差の特徴マップを追加する（後述：ミニバッチ標準偏差を使った画像多様性の向上）




###最適化関数
Adam($α = 0.001, 　β1 = 0, 　β2 = 0.99, 　ε = 10^{−8}$)

###ミニバッチサイズ
解像度（$4×4～128×128$）　：ミニバッチサイズ=$16$
解像度（$256×256$）　　　：　ミニバッチサイズ=$14$
解像度（$512×512$）　　　：　ミニバッチサイズ=$6$
解像度（$1024×1024$）　　　：　ミニバッチサイズ=$3$
ミニバッチサイズを徐々に小さくするのは、メモリに乗るようにするため
#PGGANの良いところ
###学習の安定化
最初は小さい画像のため大幅に安定して生成できる
理由：クラス情報・モード情報が少ない

<b>解像度を少しずつ上げていくことによって単純な質問に答えていくだけのような状況で学習できる</b>
従来であれば、潜在表現から1024×1024の画像へのマッピングという難しい最終目標を達成できるように試行錯誤しなくてはならない
<b>複雑である潜在表現から高解像度の画像へのマッピングは段階的に学んだほうが簡単</b>

（PGGANの場合）
一層入れて十分に学習する→新しい層（解像度が前回よりも高い層）を入れる→十分に学習する→・・・
一層をちゃんと学習して安定化してから次の層を入れる丁寧なやり方
（従来のGAN）
最初からすべての層を入れて一気にすべての層を学習する 
PGGANと比べれば雑なやり方

例）数学
（PGGANの場合）
足し算を学習する→引き算を学習する→掛け算を学習する→・・・→・・・・・・・・→センター試験の数学
（従来のGAN）
センター試験の数学（初日）


実際には、WGAN-GP損失やLSGAN損失を使用して
メガピクセルスケールの画像を確実に生成するための学習を十分に安定化させる

###学習時間の短縮
<b>PGGANでは大半のイテレーションが低解像度で行われるため</b>
もちろん最終的な出力解像度にもよるが<b>従来のGANよりも2〜6倍速く学習できる</b>


#ミニバッチ標準偏差を使った画像多様性の向上
GANは訓練データにある一部の画像の特徴やパターンだけを捉える傾向がある
解決策として「ミニバッチ識別」を提案する

これは個々の画像のみならず<b>ミニバッチ全体からも特徴統計量を計算すること</b>である
最終的には生成画像のミニバッチと訓練画像のミニバッチが同じ統計量を示すことが理想

ミニバッチ層はDiscriminatorの最後に追加することで実装できる

ミニバッチ層では入力アクティベーションを統計量に変換するテンソルを学習する
ミニバッチの各サンプルから生成された様々な統計量が層の出力と足し合わせるためDiscriminatorは統計量を使うことができる

本研究ではこの処理を大幅に単純化し、画像の多様性も向上させた

##シンプルバージョン

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/4b1ca7e0-66b4-cc18-78fd-708c6a48041f.png)

本研究で単純化された方法は学習可能なパラメータや新しいハイパーパラメータを使うわけではない

①ミニバッチ上の各空間位置にある各特徴の標準偏差を計算する
②すべての特徴、すべての空間で平均を計算して単一の値を出す
③その値を複製して1枚の特徴マップをつくる

この層はどこにでも入れることはできるが最終層に入れるのが一番良いことがわかった

#GeneratorとDiscriminatorの正規化
GANではGeneratorとDiscriminatorの学習によって値の発散が起きやすい
この問題への対策として2つの方法を提案する

##学習率の均質化
初期値は$N(0,1)$にし、学習時に重みを動的にスケーリングする

重みを動的にスケーリングするとは$\hat{w_i } = w_i / c$をすることである
$w_i$は重み、$c$は各層の正規化定数(Heの初期化を使う）
→<b>スケール不変性</b>が得られる

最適化するときにスケールの影響を受けずに
パラメーターの更新ができるようになるため学習速度が上がる

スケールを整えているためすべての重みに対して均質の学習速度にすることができる


##Generatorにおけるピクセル特徴ベクトルの正規化
Generatorの各convolution層での計算後に<b>各ピクセルの特徴ベクトルを正規化する</b>

正規化は以下のようにする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/59460e88-7b71-96e9-f3c6-a001549e3a25.png)
$ε=10^{-8}$　　$N$：特徴マップの数　　$a_{x,y}$：ピクセル$(x,y)$の正規化前の特徴ベクトル
$b_{x,y}$：ピクセル$(x,y)$の正規化したの特徴ベクトル

#GAN評価のためのマルチスケールにおける統計的類似性


上手く学習ができたGeneratorは
<b>局所的な画像構造</b>がすべてのスケールにわたって本物画像と似ている画像を生成する

16×16ピクセルのローパス解像度から始めて、
生成画像のラプラシアンピラミッド表現による局所画像の分布と
本物画像のラプラシアンピラミッド表現による局所画像の分布のマルチスケール統計的類似性について考える
<b>短くいうと、マルチスケールで生成画像と本物画像の分布を比較して、分布の距離が近ければ良いGANと考える</b>

※ラプラシアンピラミッドについては"laplacian pyramid"で画像検索するとイメージがしやすくなるかもしれない

###局所特徴量を得る
これまでの慣例に従って、ピラミッドはフル解像度に達するまで段階的に2倍にする
各レベルは前回のレベルをアップサンプリングしたものとの差をエンコードする

ラプラシアンピラミッドの各レベルは特定の空間周波数帯に対応する
ランダムに16384枚の画像を選び、各画像のラプラシアンピラミッドの各レベルから128個局所特徴量を抽出する
そうすると各レベルから$2^{21}(2.1M)$個の局所特徴量が得られる（$16384×128=2^{21}$）

それぞれの局所特徴量は$7×7$のピクセルで$3$チャンネル
$x∈R^{7×7×3}=R^{147}$と表せる

訓練データのレベル$l$からの局所特徴量は![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/53089087-92af-1c30-15e4-c18491fb1873.png)と表し、
生成データのレベル$l$からの局所特徴量は![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/0b6571bc-b741-2060-0d4f-ce066c655aaf.png)と表す

###分布距離を測る
①各チャンネルの平均と標準偏差を求めて
訓練データの局所特徴量![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/eed1b204-123c-d6f0-d729-04885bdaa039.png)と生成データの局所特徴量![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/764eb29c-a63b-a26f-4670-ac8f1f5d0aa5.png)の正規化を行う
②xとyの統計的な類似度をsliced Wasserstein distance(SWD)![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/d9446538-186a-2dab-3886-91445372d15e.png)で計算する
ワッサースタイン距離は輸送問題に基づいて考えられた分布の距離を測る指標

ワッサースタイン距離が小さいということは分布が類似していること、すなわち
この解像度での訓練画像と生成画像は見た目も多様性も同じように見えるということを意味する

<b>最低解像度の16×16での分布距離は大まかな画像構造の類似性を表し、
高解像度での分布距離はエッジやノイズの鮮明さといったピクセルレベルでの情報の類似性を表す</b>


#検証
##学習構成を変えたら結果はどう変わるのか？
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/72968345-2031-4ffb-3040-aeef7a3fbc6d.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/ea068fcd-6fc0-b269-f087-ec883a2a684d.png)

上表は様々な学習構成でのSWD（Sliced Wasserstein distance）とMS-SSIM（multi-scale structural similarity）の数値評価を示している

###上表を見る上での注意点
一般的には評価指標の数値が良いことは、色・テクスチャなどの多様性があることを意味するが、
MS-SSIMを見るときは注意が必要だ
上図を見れば（a）よりも（h）の方が明らかにきれいな画像ができているがMS-SSIMの数値はほとんど同じである

これは<b>MS-SSIMという指標は生成画像の多様性のみを評価するものであり、本物画像との類似性を評価するものではない</b>からである
一方、SVDの数値は大きく改善している

###結果
最初の学習構成$（a）$はGulrajani et al.(2017)である
これはGeneratorにbatch normalizationを、Discriminatorにlayer normalizationを入れて
ミニバッチサイズを64にしたものである

$（b）$は段階的な学習（層を徐々に追加していく学習）のネットワーク
鮮明な画像が生成されている
生成画像の分布と本物画像の分布がより似ていることをSWDの数値が示している

高解像度の画像を生成することが目的であるが、そのためにはミニバッチを小さいサイズ（メモリに乗るサイズ）にすることが必要である
このことをしたのが$（c）$である
ミニバッチサイズを64から16に変更している
両指標からもわかるが、生成画像は不鮮明である

batch normalizationとlayer normalizationを取り除き、ハイパーパラメーターの調整をして学習課程を安定化させたのが$（d）$である

$（e*）$はミニバッチ識別を可能にしたもの(Salimans et al., 2016)だが、生成画像の多様性を評価するMS-SSIMの指標すらも向上しないという結果に終わってしまった

対照的に、本研究でのミニバッチ識別$（e）$ではSWDの平均スコアを改善し鮮明な画像の生成にも成功している

更に本研究で提案した$（f）$と$（g）$を加えるとSWDのスコアと生成画像の質はより良くなっている

最後に$（h）$ではベストネットワークを用いて十分な学習をした結果である
これまでのGANモデルよりも鮮明な画像を生成できている


##収束と学習時間

![image.png](https://qiita-image-store.s3.amazonaws.com/0/315063/3064cf94-3da0-cff2-edfd-ee70ff134874.png)

上図$（a）$と$（b）$は訓練時間（横軸）とSWDの数値（縦軸）
上図$（c）$は訓練時間（横軸）とDiscriminatorに見せた本物画像の枚数（縦軸）

$（a）$と$（b）$はGulrajani et al. (2017)の学習構成での結果である

ただし$（a）$は段階的な学習（層を徐々に追加していく学習）のネットワークではない（最初からすべての層をネットワークに入れておく）
$（b）$は段階的な学習（層を徐々に追加していく学習）のネットワーク

段階的な学習は2つのメリットがあることがわかる
・かなり優れた最適値に収束する
・学習時間を半分にすることができる

###収束
収束性の向上は徐々にネットワークを大きくしていくという「カリキュラム学習」によるものである

段階的な学習をしない場合はGeneratorとDiscriminatorのすべての層は
大まかな画像構成の多様性と画像の詳細、両方の中間表現を同時に見つけなくてはならない

しかし段階的な学習をする場合は、
<b>最初の頃からあった低解像度の層はすでに早い時期に収束しているため
新しい層が加わってきたらネットワークは詳細な表現を学習することのみに専念することができる</b>

上図$（b）$の低解像度である$16×16$（赤線）が非常に早く最適値に達し、残りの学習では横ばいになっていることを見るとPGGANの学習法のメリットを実感できる

低解像度の層から順番$（16,32,64,128）$に収束していくこともわかる

###学習時間の短縮
縦軸はDiscriminatorに見せた本物画像の枚数である
たくさんDiscriminatorに本物画像を見せたということは、それだけ学習が進んでいることを意味する

段階的学習では初期の学習が非常に速いことがわかる
これは<b>初期段階のネットワークは層が少ないため評価が素早くできるからである</b>

フル解像度に達すると、Discriminatorに見せる本物画像の枚数（学習速度）はどちらの方法でも同じになる

上図はPGGANでは96時間で約640万枚の本物画像を見たことを示している
PGGANでなければ同じ枚数を見るためには520時間必要になると推定できる

この場合PGGANは約5.4倍、従来よりも速いことになる