“Large Scale GAN Training for High Fidelity Natural Image Synthesis” -About BigGAN

Introduction

今回はいつものように論文で提案された手法を実装して結果を見る記事ではなく、論文紹介です。まだレビュー中のものを紹介するのは気が引けるのですがTwitterやSlackで述べるには情報過多なので、記事に一旦まとめてみたいと思います。論文名は記事タイトルにあるもので、URLはこちらです。ここで提案されているBigGANは、512×512の高解像度条件付き画像生成(例えばImageNetを学習してImageNetのラベルを入力ノイズに付随して与え、そのラベルに相当する画像を生成するタスク)を行いますが、そのスコアが驚くものでした。GANの評価指標として用いられているInception Score(IS)とFIDの値がそれぞれ166.3と9.6と、従来のSoTAである52.52と18.65を大きく更新するものになったのです。

3. Scaling Up GANs

いきなり3とタイトルに付いてるのは、論文中の章と対応させるためです。さて、この章では高いスコアを得るためにどのような工夫を行ったかについて述べられています。
まず、ベースライン構造について述べます。ベースラインはSelf-Attention GAN(SA-GAN)です。この構造は従来のSoTAです。論文中には、この構造のハイパーパラメータ等の設定が詳しく述べられています。後でも述べますが、この論文はこの辺りの設定が本当に詳しいです。くどいようにも見えますが、再現実装する際にはこの辺りがクリティカルに効いてくるので非常に有難いです。
では、まずこのベースラインに対して何をしたかというと、単にバッチサイズとネットワークの層のチャンネル数を増やしました。以下にその結果を示します。青い枠は、ベースラインからバッチサイズを8倍(256→2048)、緑枠はそこから更にチャンネル数を全層に対して1.5倍にしたものです。最終的にこれだけの変更で、大幅にスコアを更新していることが分かります。やはり計算資源が全て、ということでしょうか….

しかし、これで終わりではありません。論文中では更に3つの手法を加えることで更にスコアを更新します。それが、Shared Embedding、Hierarchical latent spaces、Orthogonal Regularization(上表のShared、Hier.、Ortho.にそれぞれ対応)です。特にHierarchical Latent Spacesは見かけたことが無かったので解説しておきます。下図はGeneratorを表しています。一般的なcGANでは入力ノイズを最初の層にのみ与えますが、この図ではまずその入力ノイズをsplitして各ResBlockに与えています。これをHierarchical Latent Spacesと論文中では呼んでいます。

3.1 Trading Off Variety and Fidelity With the Truncation Trick

次に行ったことは、Truncated Trickです。cGANに限らずGANでは入力ノイズはN(0,I)からサンプリングしますが、このサンプリングした値のうちThresholdを超えるものは再サンプリングしてThresholdの中に収めるというものです。これをTruncated Trickと論文中では読んでいます。従って、Thresholdが小さくなればなるほどノイズの分布としては狭いものになっていきます。では、このThresholdの値を変えながらFIDやISを求めるとどうなるか?それを表したのが下図です。これはThresholdの値を変えながらGeneratorの出力を見たものです。Thresholdの値を2.0から0.04と変え、右にいくにつれThresholdの値が小さくなっていきます。Thresholdの値が最も小さい時は多様性(Variety)が失われ、最も大きい時は質(Fidelity)が失われています。

また、様々なThresholdで学習し、FIDとISを求めたものが下図になります。赤い曲線がBigGANなのですが、本文中から察するにThresholdを小さくするとISとFIDは大きくなります。FIDは小さい方がスコア的には良いのでここでトレードオフが生じます。つまり、適切なThresholdを見つける必要があります。(実はこのTruncated TrickからOrthogonal Regularizationを行う必要があるという文脈なのですが、私の勉強不足できちんと理解出来ていません。分かる方はお教えいただけると助かります)

以上、BigGANが従来のGANにどのような工夫を加えたかについて述べてきました。まとめると、下記3点になります。

  • バッチサイズ、チャンネル数増加でスコア上昇
  • Shared Embedding、Hierarchical Latent Spaces、Orthogonal Regularizationでスコア上昇
  • Truncated Trickでは適切なThresholdを選択する必要がある

4. Analysis

3章ではBigGANの工夫について述べましたが、学習の安定性については述べていませんでした。実は、3章の終わりで「512×512の高解像度生成では、学習を進めると学習がcollapseしてしまうためealry stoppingを行う必要がある」と述べています(下図参照)。

この章では、GeneratorとDiscriminatorについて高解像度では何故学習が安定しないのか(従来の学習の安定性を与える手法が何故効かないのか)について述べています。色々と述べていますが、ここでは詳細は割愛します。ただ一点面白いなと思った点があるので述べます。
GANにおける学習の安定性はこれまでに様々議論されています。その中で安定性を与えるものの一つに、Zero-Centered Gradient Penaltyがあります。比較的最近出てきたもので、ICLR2019にもこれについて議論した論文があります。Discriminatorの損失関数にこの項を加えると安定するというものですが、勿論この論文でも試されています。しかし、学習は安定するようになったもののISは45%落ちたようです(項の係数を小さくしても20%低下)。十分な制約は学習の安定性を与えるかもしれませんが、パフォーマンスのレベルを下げると論文中でも述べられています。

5. Experiments

実験はImageNetを用いて行われました。様々な解像度(128×128,256×256,512×512)で生成を行なっています。これまでのGANの論文なら評価指標は大抵ISかFIDを載せるのですが、今回はTruncated Trickを行なっている以上、以下の三つの指標を加えています。

  • FIDが最も低い時のFID/IS(下表におけるmin FID / IS)
  • ISが最も大きい時のFID/IS(下表におけるFID / max IS)
  • FIDが低く、ISも高い時のFID/IS(下表におけるFID / valid IS)

三つ目の指標はどう選定しているのかよく分かっていないですが、三つ目の指標が重要になります。では、結果を以下に示します。左から三列目はTruncated Trickを行なっていない時の指標です。ただこの段階で相当更新していますね。因みにModel:BigGAN、Resolution:128のFID / valid ISがIntroductionで述べたFIDとISの値になります。

このようにある程度低いFIDを保ちつつISもかなり高い学習が可能になった訳ですが、ラベルによってはまだ綺麗に生成出来ているとは言えません。下図にあるように、(b)のような人物ラベルではまだ綺麗に出来ているとは言い難い状態です。

最後にAppendixを見ます。というのも著者の試したことがここには全て現れているからです。

Appendix E Choosing Latent Spaces

ここでは、入力ノイズをどの分布からサンプリングしてくるのが良いかについて分布一つずつについて丁寧に述べられています。本文中では結局Truncated Trickを使うのでここでどういう分布を選ぼうが大差はないと結論付けられていますが、潜在空間についてここまで詳しく述べている論文は見かけたことがないので述べておきました。

Appendix F Monitored Training Statistics

ここでは様々な損失関数でのGeneratorとDiscriminatorの学習の様子が述べられています。本文中でもあったように、Gradient penaltyを含むと学習は安定するようになるもののISは落ちる、ことについて述べています。

Appendix G Negative Results

個人的にはここが面白いですね。所謂試したけどダメだったものを箇条書きで述べているのですが、こういうのがあると再現実装する際には非常に有難いです。例えばNormalizationの際にBatch NormalizationかSpectral NormalizationかInstance Normalizationか別のか….と再現実装してみてうまくいかなかった場合に試すのですが、ここでは「BatchNorm以外にWeightNormやSpectralNormを試したが学習をcrippleさせた」とあるのでじゃあNormalizationはBatchNormalizationが良いのか….と余計な試行をしなくて済みます。他にも様々なTipsがあるので読んでみることをオススメします。

Appendix H Hyperparameters

最後のAppendixはHyperparametersについて述べています。learning rateやgradient penaltyの係数について、この値の範囲から試して一番良かったものを選んだ、というようなことが述べてあります。これも再現実装する際には有難いです。

Summary

今回はBigGANについて論文紹介を行いました。所々理解不足で割愛していますが、分かる方は教えていただけると非常に有難いです。勿論間違いがある部分についても指摘していただければ助かります。

スコアだけを見ると驚きしかありませんが、実際はTruncated Trickで適切なThresholdを選ぶ必要があったり、学習が不安定だったりまだまだ改善の余地はあるかと思われます。ただ、計算資源によってスコア上昇可能というのは紛れもない事実なので細々とGPUを回している者にとってはどうしようもないですね….上で再現実装する際に有難いとか書いてますが、再現できないですからね….