機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

Flow-GAN: Combining Maximum Likelihood and Adversarial Learning in Generative Modelsを読んだのでメモ

はじめに

Flow-GAN: Combining Maximum Likelihood and Adversarial Learning in Generative Modelsを読んだのでメモ.簡単に言えばGANのgeneratorをflow-basedなモデルに置き換えて密度推定もできるようにしたというもの.

notation

データX=\{\mathbf{x}_i\in\mathbb{R}^d\}_{i=1}^mの分布をp_{data}とし,パラメータ\thetaを持つモデルによって表現される分布をp_\thetaとする.p_{data}p_\thetaダイバージェンスを最小化することで最適な\thetaを見つけることが目標.

以下,この論文の基礎となる最尤推定とadversarial trainingについて.一般的な内容なのでさっくりと

Maximum likelihood estimation

データ分布とモデル分布のKLダイバージェンスを最小化することを考える.この場合の目的関数は以下のようになる.

\displaystyle
\min_{\theta\in\mathcal{M}}KL(P_{data},P_\theta)=\mathbb{E}_{\mathbf{x}\sim P_{data}}\left[\log\frac{p_{data}(\mathbf{x})}{p_\theta(\mathbf{x})}\right]

p_{data}がパラメータ\thetaと独立しているため,上記の最適化問題は次のように書き換えられる.

\displaystyle
\max_{\theta\in\mathcal{M}}\mathbb{E}_{\mathbf{x}\sim P_{data}}[\log p_\theta(\mathbf{x})]

この目的関数を使って学習することは,モデルの密度関数p_\theta(\mathbf{x})を陽に計算できるということを要求する.

Adversarial learning

KLダイバージェンスを含むダイバージェンスの一般化は次のように表現される.

displaystyle
\max_{\phi\in\mathcal{F}}\mathbb{E}_{\mathbf{x}\sim P_\theta}[h_\phi(\mathbf{x})]-\mathbb{E}_{\mathbf{x}\sim P_{data}}[h'_\phi(\mathbf{x})]

\mathcal{F}はモデルh_\phi,h'_\phiのパラメータの集合.この\mathcal{F},h_\phi,h'_\phiの選び方でJensen-ShannonダイバージェンスのようなfダイバージェンスやWasserstein距離のような指標が導かれる.

GANでは次のような目的関数が提案されている.

\displaystyle
\max_{\phi\in\mathcal{F}}\mathbb{E}_{\mathbf{x}\sim P_\theta}[\log(1-D_\phi(\mathbf{x}))]+\mathbb{E}_{\mathbf{x}\sim P_{data}}[D_\phi(\mathbf{x})]

この目的関数ではモデル分布からのサンプリングが要求される.そのため,サンプリングしやすいモデルを使って以下のminmax問題を解くことで最適なモデルのパラメータ\thetaを見つける.

\displaystyle
\min_{\theta\in\mathcal{M}}\max_{\phi\in\mathcal{F}}\mathbb{E}_{\mathbf{x}\sim P_\theta}[h_\phi(\mathbf{x})]-\mathbb{E}_{\mathbf{x}\sim P_{data}}[h'_\phi(\mathbf{x})]

結果として得られるモデルは容易にサンプリングを行えるがモデルの密度を陽に計算することはできない.

Flow Generative Adversarial Networks

ここからが本題.結局adversarial learningは綺麗なサンプルを生み出せるけど尤度の推定ができないところが問題で,最尤推定を基礎とする手法はサンプリングがしにくかったり表現力が乏しかったりする.そこでadversarial learningの恩恵を受けつつ尤度推定可能なFlow-GANを提案する.

Flow-GANは言ってしまえばGANのgeneratorをnormalizing flow modelにしたもの.Normalizing flowに関しての詳細は別のメモを参照.Normalizing flowのモデル分布は次のように計算できる.

\displaystyle
p_\theta(\mathbf{x})=p(\mathbf{z})\left|\mathrm{det}\frac{\partial f_\theta(\mathbf{x})}{\partial\mathbf{x}}\right|

f_\thetaはパラメータ\thetaを持つ逆変換可能な関数で,事前分布に関数のヤコビアン行列式をかけることで分布を陽に計算することができる.これは確率分布の変数変換の公式から導かれる関係.f_\thetaヤコビアンの計算が用意で事前分布が扱いやすいものだったらデータ点の尤度を評価することができる.またf_\thetaは逆変換が可能なためサンプリングも可能.

目的関数

重要なのはFlow-GANをどのような目的関数で学習させるか.この論文では単純に最尤推定とadversarial trainingを組み合わせた関数を考えたそう.つまり次の目的関数を最適化する.

\displaystyle
\min_\theta\max_\phi V(G_\theta,D_\phi)-\lambda\mathbb{E}_{\mathbf{x}\sim P_{data}}[\log p_\theta(\mathbf{x})]\\ \displaystyle
\log p_\theta(\mathbf{x})=\log p(\mathbf{z})+\log\left|\mathrm{det}\frac{\partial f_\theta(\mathbf{x})}{\partial\mathbf{x}}\right|\\ \displaystyle
V(G_\theta,D_\phi)=\mathbb{E}_{\mathbf{x}\sim P_{data}}[D_\phi(\mathbf{x})]-\mathbb{E}_{\mathbf{x}\sim P_\mathbf{z}}[D_\phi(G_\theta(\mathbf{z}))]

ここではadversarial lossはWGANで提案されていた式を使ったとのこと.すなわちdiscriminatorは1-Lipschitzを満たす.

まとめ

実験ではNICEとRealNVPをgeneratorとしていたためいまいちパッとする結果にはなってないが今だったらglowがあるのでどんなもんかなあというところ.