【論文読解】PriorGAN: Real Data Prior for Generative Adversarial Nets

# 概要

GANの訓練において障害となる、低品質サンプルができてしまう問題やModeCollapseという生成結果が偏ってしまう問題を回避するための手法を提案している論文です。実データ（の特徴量）の分布をGMM（混合ガウスモデル）によって近似し、生成されるデータがその分布に近づけるために、損失関数とDiscriminatorの訓練の枠組みを提案しています。

FFHQを256x256にリサイズしたバージョンでの実験では、FIDがStyleGANでは11.69だったところが大幅に下がって7.12までになっていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/58614bdc-1eb4-cc8c-fc6e-52c1f0d2b587.png)


# 書誌情報
- Gu, Shuyang, et al. "PriorGAN: Real Data Prior for Generative Adversarial Nets." arXiv preprint arXiv:2006.16990 (2020).
- https://arxiv.org/abs/2006.16990

# 問題設定
トイデータを通して、本手法が対処しようとしている問題を明確にします。図中の緑の点は実データ、青い点は生成されたデータ、赤い矢印はDiscriminatorによって与えられる勾配を表します。

## 低品質問題
まず、低品質問題から見ていきます。下図の(a)と(b)は、通常のGANによる訓練と、PriorGANによる訓練の過程を表しています。ここでは、生成データが実データから少し外れた位置に分布しているという状況を示しています。少し外れているだけなので、できるだけ近い実データのほうへと勾配がかかってほしいという設定です。しかし、(a)では一部のデータが近くにある実データとは異なる方向へと勾配がかかってしまっています。一方、(b)では、近い位置の実データに近づくように勾配かかっています。生成結果があらぬ方向へと進んでしまうのは、生成結果が低品質になるということを意味しますので、(b)のほうが好ましい結果といえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/32b65daf-a4de-398b-2032-6375c485fcf2.png)

## ModeCollapse
ModeCollapseについても確認しましょう。下図は、2つのモードの実データが存在しているもとで、生成されたデータが全体的に片方の分布に偏っているという状況になっています。(c)が通常のGAN、(d)がPrioirGANに対応しています。(c)では片方のモードに集まるように勾配がかかっており、ModeCollapseを助長することになっています。一方、(d)では生成データの一部を無理やり引きはがしてもう片方のモードへと向かうように勾配がかかっています。これによって、本手法がModeCollappseを回避できるということを示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/b937b78b-6bc2-561b-99f9-2c0dff43fe3a.png)

# 手法
では、PriorGANがどのような手法なのかを見ていきます。

本手法では、まずGMMによって実データの分布を近似します。この際、画像データに関しては、ImageNetなどで事前学習済みのモデルを使用してえられる特徴量をもとにGMMを構築します。

このGMMを用いることで、先ほどの2つの問題に対する以下の2つの工夫を行います。

- 低品質問題に対処するために、生成されたデータ分布ががGMMに近づくようにするQualityLossを導入する。
- ModeCollapseに対処するために、Discriminatorの訓練に用いる実データサンプルのサンプリング重みを制御する

以下、それぞれ見ていきます。

## 低品質問題：QualityLoss

まず、QualityLossについて確認していきます。低品質問題は、生成データが実データの分布から離れてしまうことに原因がありました。QualityLossは、生成されたデータがGMMによって表現される実データ分布内に十分収まることを促進する損失です。

QualityLossは下式のように定義されます。ここで、Generatorは$G$、事前学習済みの画像特徴量の抽出は$F$、GMMのパラメータは$\lambda=\{w\_{i}, \mu\_{i}, \Sigma\_{i}\}$としています。$\theta$は閾値で、この値よりも大きな確率密度であれば問題ないので損失は0になりますが、この値よりも小さければ実データの分布から離れているということで損失がかかります。

```math
\mathcal{L}_{Q}=\left\{\begin{array}{ll}
-\log p(F(G(z)) \mid \lambda) & \text { if } p(F(G(z)) \mid \lambda)<\theta \\
0 & \text { otherwise }
\end{array}\right.
```

なお、$p(x \mid \lambda)$はGMMによって表現される確率密度を表します。

```math
p(x \mid \lambda)=\sum_{i=1}^{M} w_{i} \mathcal{N}\left(F(x) \mid \mu_{i}, \Sigma_{i}\right), x \in P_{r}
```

## ModeCollapse：リサンプリング
続いて、ModeCollapseに対する対処を見ていきます。ModeCollapseに対しては、Discriminatorに与えるサンプルをコントロールするためにリサンプリングの調整を行う、ということを行うことで対処します。

下図にそのパイプラインを示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4010/de4157e9-4b4d-e185-dc84-531c3fd77b6f.png)

実データをもとに構築されたGMMをもとに、各実データがどのコンポーネントに属しているのかを求めることができます。これによって、実データの中にGMMの各コンポーネントがどのくらいの割合で含まれているのかがわかります（Real statistic）。一方で、構築済みのGMMを生成されたデータに対して用いると、生成データの中にGMMの各コンポーネントがどのくらいの割合で含まれているのかがわかります（Generated statistic）。このようにして得られた2つの統計量を見比べてみると、明らかに灰色のコンポーネントに対応するデータが生成できていない、ということがわかります。これがModeCollapseに対応します。

これらの統計量は微分不可能ですので、直接モデルのパラメータの更新に使用することはできません。そこで、Discriminatorの決定境界をコントロールすることを考えます。具体的には、Discriminatorの訓練に使用する実データのサンプリングの重みを、先ほどの統計量をもとに変化させることで実現します。灰色のコンポーネントに対応するデータが生成できていないのならば、他のコンポーネントに対応する実データのリサンプリングの確率を減らし、灰色に対応する実データを多めにサンプリングしてDiscriminatorを訓練すればよい、というわけです。

生成データにおけるコンポーネント$i$の割合を$f_i^g$、コンポーネント$i$のデータのリサンプリング確率を$f_i$とおくと、この確率は以下のように更新されます。

```math
f_{i}^{r^{\prime}}=\max \left(f_{i}^{r}+\alpha (f_i^r - f_i^g), 0\right)
```

全コンポーネントでの合計が1になるように、リサンプリング確率は以下のように正規化されます。

```math
f_{i}^{r^{\prime}} = \frac{f_{i}^{r^{\prime}}}{\sum_j^M{f_{j}^{r^{\prime}}}}
```

# まとめ

簡単にですが、PriorGANについてまとめました。

まだsupplementary materialも出そろっていないみたいなので細かい実装方法はわかりませんが、GMMを用いて実データ（の特徴量）の分布を近似して、それを2通りのやりかたで活用するという無駄のないシンプルな手法だと思いました。