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

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

Implicit Generation and Generalization in Energy-Based Modelsを読んだのでメモ

はじめに

Implicit Generation and Generalization in Energy-Based Modelsを読んだのでメモ.Glowに引き続きopenAIから生成モデルの論文.

Energy-Based Models and Sampling

今回はVAEやGANと違い,ボルツマンマシンに代表されるenergy-based modelで高次元のシャープな画像を生成できたというもの.ボルツマンマシンは以前勉強したメモがあるので参照.大まかな枠組みはボルツマンマシンと同じなので所々説明は割愛.

データ点を\mathbf{x}とし,エネルギー関数をE_\theta(\mathbf{x})\in\mathbb{R}とする.ここではエネルギー関数をパラメータ\thetaを持つニューラルネットとして扱う.この時,モデルの分布p_\theta(\mathbf{x})は次のように表現される.

\displaystyle
p_\theta(\mathbf{x})=\frac{\exp(-E_\theta(\mathbf{x}))}{Z(\theta)}\\
Z(\theta)=\int\exp(-E_\theta(\mathbf{x}))d\mathbf{x}

通常,モデル分布からサンプルを生成するのは難しく,一般的にはMCMC等により行うが画像のような高次元データをサンプリングする際には計算時間的にあまり嬉しくない.ここではLangevin dynamicsに従ったサンプリング方法を提案.

\displaystyle
\tilde{\mathbf{x}}^k=\tilde{\mathbf{x}}^{k-1}-\frac{\lambda}{2}\nabla_\mathbf{x}E_\theta(\tilde{\mathbf{x}}^{k-1})+\omega^k,\ \omega^k\sim\mathcal{N}(0,\lambda)\\
\tilde{\mathbf{x}}^K\sim q_\theta

このLangevin dynamicsに従ったサンプリング方法で得られるデータ\tilde{\mathbf{x}}はある適当な分布q_\thetaに従うが,2011年の論文でwellingとTehがK\rightarrow\infty,\ \lambda\rightarrow 0においてq_\theta\rightarrow pとなることを示したらしい.また,実際K\rightarrow\infty,\ \lambda\rightarrow 0にはできないが,実験的(Figure 2)には大体似たような分布になるらしい.なのでエネルギー関数Eから生成されたサンプルとして扱って大丈夫らしい.

この生成モデルで画像を扱う場合にはエネルギー関数はCNNで構成されることが想定されるが,その場合には\nabla_\mathbf{x}Eはいわゆるdeconvolutionとして計算されるため,陽にデザインされたわけではないが典型的な画像生成ネットワークと同じような構成となる.

Maximum Likelihood Training

ここでは最尤推定によってEによって作られるデータ分布p_Dをモデル化する.コスト関数としては以下の負の対数尤度の最小化を考える.

\displaystyle
\mathcal{L}_{ML}(\theta)=\mathbb{E}_{\mathbf{x}\sim p_D}[-\log p_\theta(\mathbf{x})],\\
-\log p_\theta(\mathbf{x})=E_\theta(\mathbf{x})-\log Z(\theta)

この目的関数の微分は次のようになることが知られている.

\displaystyle
\nabla_\theta\mathcal{L}_{ML}=\mathbb{E}_{\mathbf{x}^+\sim p_D}[\nabla_\theta E_\theta(\mathbf{x}^+)]-\mathbb{E}_{\mathbf{x}^-\sim p_\theta}[\nabla_\theta E_\theta(\mathbf{x}^-)]

この勾配は直感的には正例データ\mathbf{x}^+のエネルギーを減らして負例データ\mathbb{x}^-のエネルギーを増やす.第2項目の期待値はp_\thetaからサンプリングするがやはりここでもlangevin dynamics processにより計算する.なので,実際扱う勾配は次のように計算する.

\displaystyle
\nabla_\theta\mathcal{L}_{ML}\approx\mathbb{E}_{\mathbf{x}^+\sim p_D}[\nabla_\theta E_\theta(\mathbf{x}^+)]-\mathbb{E}_{\mathbf{x}^-\sim q_\theta}[\nabla_\theta E_\theta(\mathbf{x}^-)]

この目的関数はWasserstein GANと非常に似通っているが,今回のモデルはgeneratorのモデルを陽に定義していないため勾配はq_\thetaを経由しない.このgeneratorを定義しなくていいと言うのはこの論文の推しどころの一つで,GANと違いgeneratorに関する目的関数が不要になる.

Sample Replay Buffer

ここからは実装する上でのtips的なものが続く.今回はlangevin dynamicsを通したサンプリングをする上で,生成された\tilde{\mathbf{x}}をとっておいて,過去に生成されたデータもしくはuniform noiseをlangevin dynamics procedureの初期状態としたとのこと.このおかげで擬似的にサンプリングのステップ数Kを増加させることが可能とのこと.実験的には95%の確率で蓄えられたサンプルを初期状態として利用したとのこと.

Regularization and Algorithm

サンプリングの過程で,エネルギー関数の微分が登場するが,単純に計算するとこの微分値がばたついて安定しないとのこと.なのでエネルギー関数がLipschitz constantになるよう調整したとのこと.具体的にはエネルギー関数を構成する各層にspectral normalizationを導入.さらにエネルギー関数の値自体に弱いL2正則化をかけたらしい.

Out-of-Distribution Generalization

実験で面白かった項を一つだけ.Do Deep Generative Models Know What They Don't Know?の実験によればVAEやGlowなど既存の尤度モデルは学習したデータの分布から外れた分布から得られたデータ(out-of-distribution)に関しても高い尤度を割り当ててしまう.それに対して今回提案したモデルではout-of-distributionのデータには他のモデルと比較して低い尤度を割り当てることができたらしい.実験としてはout-of-distributionのデータを識別するタスクを考え,唯一チャンスレートより高い識別能力を持っていたとのこと.

まとめ

Glowといい今回といいVAE,GAN以外の生成モデルの可能性を模索している雰囲気が感じ取れる.generative flowも今回のenergy-based modelもデータのサンプリング(generator)を定義せず一つのモデルでやれると言うのはシンプルで良い.