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で高次元のシャープな画像を生成できたというもの.ボルツマンマシンは以前勉強したメモがあるので参照.大まかな枠組みはボルツマンマシンと同じなので所々説明は割愛.
データ点をとし,エネルギー関数をとする.ここではエネルギー関数をパラメータを持つニューラルネットとして扱う.この時,モデルの分布は次のように表現される.
通常,モデル分布からサンプルを生成するのは難しく,一般的にはMCMC等により行うが画像のような高次元データをサンプリングする際には計算時間的にあまり嬉しくない.ここではLangevin dynamicsに従ったサンプリング方法を提案.
このLangevin dynamicsに従ったサンプリング方法で得られるデータはある適当な分布に従うが,2011年の論文でwellingとTehがにおいてとなることを示したらしい.また,実際にはできないが,実験的(Figure 2)には大体似たような分布になるらしい.なのでエネルギー関数から生成されたサンプルとして扱って大丈夫らしい.
この生成モデルで画像を扱う場合にはエネルギー関数はCNNで構成されることが想定されるが,その場合にははいわゆるdeconvolutionとして計算されるため,陽にデザインされたわけではないが典型的な画像生成ネットワークと同じような構成となる.
Maximum Likelihood Training
ここでは最尤推定によってによって作られるデータ分布をモデル化する.コスト関数としては以下の負の対数尤度の最小化を考える.
この目的関数の微分は次のようになることが知られている.
この勾配は直感的には正例データのエネルギーを減らして負例データのエネルギーを増やす.第2項目の期待値はからサンプリングするがやはりここでもlangevin dynamics processにより計算する.なので,実際扱う勾配は次のように計算する.
この目的関数はWasserstein GANと非常に似通っているが,今回のモデルはgeneratorのモデルを陽に定義していないため勾配はを経由しない.このgeneratorを定義しなくていいと言うのはこの論文の推しどころの一つで,GANと違いgeneratorに関する目的関数が不要になる.
Sample Replay Buffer
ここからは実装する上でのtips的なものが続く.今回はlangevin dynamicsを通したサンプリングをする上で,生成されたをとっておいて,過去に生成されたデータもしくはuniform noiseをlangevin dynamics procedureの初期状態としたとのこと.このおかげで擬似的にサンプリングのステップ数を増加させることが可能とのこと.実験的には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)を定義せず一つのモデルでやれると言うのはシンプルで良い.