DO DEEP GENERATIVE MODELS KNOW
WHAT THEY DON’T KNOW? (Nalisnick et.al.)を読んだので要約とメモ。
筆者の理解と疑問は青色でメモしている。
ちゃんと理解するには**Glow: Generative Flow with Invertible 1x1 Convolutions(Kingma & Dhariwal, 2018)**を読む必要がありそう。
本文
概要
デプロイ後のニューラルネットは訓練データと異なる分布の入力にさらされることがある。ニューラルネットが高い確信度で間違った回答をする入力データを簡単に生成できることは、多くの研究が示している。生成モデルは新しい、分布外の入力の検出に使える入力特徴量の密度をモデリングしているので、そんな誤った確信に強いと考えられている。"特徴量の密度をモデリング"というのがピンとこなかったが、密度=分布で、生成モデルが学習データの分布を学習していることだと思う。
本論文ではこの仮定を検証する。フローベースモデル、VAE、PixelCNNによって学習された密度は犬、トラック、馬(CIFAR-10)のような一般的な物の画像と、番地(SVHN)の画像とを識別できないことがわかった。前者で訓練したモデルが、後者に高い尤度を割り当ててしまう。フローベースはGlowのこと
さらに、よく使われるデータセットをペアにすることでこの現象の証拠を発見した(FashionMNISTとMNIST, CelebAとSVHN, ImageNetとCIFAR-10/CIFAR-100/SVHN)。周辺尤度を使って直接訓練・評価を行うので、フローベースの生成モデルに特に焦点を当てて解析した。フローベースモデルを定数体積の変形(constant-volume transformations)に制限してもこの現象は維持された。"体積一定"かとも思ったが、後で入力によらないっていう話をしているので、xの変数じゃないという意味で"定数体積"にした。
これらの変換は理論的に解析でき、データの位置と分散、およびモデルの曲率によって尤度の違いを説明できることを示す。本結果は、ディープ生成モデルからの密度推定を、訓練データの分布に類似した入力を特定するのに使用することに対して警告するものである。分布外の入力に対するモデルの振る舞いが理解されるまでは。
1.イントロ
ディープラーニングは、条件付き分布$p(y|\boldsymbol{x})$のモデリングではうまくいく。$\boldsymbol{x}$が訓練データの分布からサンプルされたときはモデル$p(y|\boldsymbol{x})$は正確だが、それ以外の分布からの場合に正しく動作する保証はない。MNISTを回転させるだけで別のクラスと識別するなど(Louizos & Welling (2017))。
表向きは、確信度の高い間違った予測を回避するには$\boldsymbol{\theta}$をパラメータとして訓練データの真の分布$p^{*}(\boldsymbol{x})$を近似するために密度モデル$p(\boldsymbol{x};\boldsymbol{\theta})$を訓練して、$p( \boldsymbol{x}; \boldsymbol{\theta} )$よりも密度が十分低い予測を捨てる方法がある。直感的に言うと、識別モデル$p(y|\boldsymbol{x})$は信頼できる判断のために十分なサンプルをその領域で見ていない。その領域=回転したMNISTのような未知の入力
このアイデアは様々な論文や**(Bishop, 1994)** 、パネルディスカッションで提案されている**(AABI) 2017 (Blei et al., 2017)**
異常検知は正確な密度が必要な良い例である。その他には情報正則化(information regularization) (Szummer & Jaakkola, 2003)、 開集合認識(open set recognition) (Herbei & Wegkamp, 2006), 不正確性推定(uncertainty estimation), 共変量シフト(covariate shift)検出, 能動学習(active learning) この資料が詳しかった。効果がありそうなデータを選別して学習させるみたいな手法, モデルベース強化学習(model-based reinforcement learning)および転移学習などがある。この辺の例はほぼ知らない。
これらの応用は多岐に渡るが、VAE (Kingma & Welling, 2014; Rezende et al., 2014), GAN (Goodfellow et al., 2014), 自己回帰モデル (van den Oord et al., 2016b;a)前の時刻の出力が現在の処理に影響するやつ, invertible latent variable model (Tabak & Turner, 2013)等の形をとる。最後の2つ(自己回帰とinvertible)は近似推定が必要なく周辺尤度を直接計算できるので特にうれしい。
本論文では、よく調整されたモデルは訓練データに対して他のデータよりも高い尤度を割り当てるだろうと予測して、ディープ生成モデルが異常検知に使えるか調査した。しかしこれは誤りであった。VAE, 自己回帰モデル, フローベース生成モデルをCIFAR-10 (Krizhevsky & Hinton, 2009),で訓練したが、いずれもSVHN (Netzer et al., 2011)に対してより高い尤度を出力した。SVHNの数字は犬や馬などCIFARとは外見が非常に異なるので、この結果は直感的ではないし、問題がある。しかし、CIFAR-10とSVHNに限らずCelebAとImageNetでも同様であった。
周辺密度を直接計算できるフローベースモデルで、この現象についてさらに調査を進めた。最初の実験ではlog-determinant-Jacobian項(ヤコビ行列の行列式のlog)が分布外の集合が高い密度を持つ原因と見られたが、この現象が定数体積フロー(constant-volume flows)でも成り立つことがわかった。問題の原因を突き止めるために、フローベースモデルの計算式を展開して、その中のlog-determinant-Jacobian項が原因だった、という話。5章参照。
本論文では次に、この振る舞いが入力分布の分散とモデルの曲率で説明できることを解析的に説明する。知りうる限り、本論文は多様な画像データセットとディープ生成モデルに関してこの直感的じゃない現象を報告した最初の論文である。さらに、フローベースモデルでの実験は、「定数体積と体積可変の変換の効果」のような重要な実験の変数を分離する。定数体積の場合と、そうじゃない場合、などで切除実験をやった。
最後に、解析により、2つのデータセットの間のモデル密度のギャップを量化するための一般的な表現を示す。この設定でのモデルの振る舞いを理解することは実世界へデプロイする際に重要なので、ディープ生成モデルの訓練分布外の性質についてのさらなる研究を促して本論文を終わる。
2. 背景
記法の導入と先行研究について記す。行列は太字の大文字($\boldsymbol{X}$), ベクトルは太字の小文字($\boldsymbol{x}$), スカラーは小文字($x$)。生成モデルに着目しているので、すべての観測を$\boldsymbol{X}= \{\boldsymbol{x}_n\ \} _{n=1}^{N}$とする。$\boldsymbol{x}$はすべての特徴と、もしあるならラベルを含んだベクトル。$N$個のサンプルはすべて独立・同一に、$X$で表記される台を持つ未知の(unknown)分布から引き出されるとする$\boldsymbol{x} \sim p^*(\boldsymbol{x})$。サンプルは同じ分布から独立にサンプルを取った=i.i.d (朱鷺の杜Wikiより)
モデルの密度関数を$p(\boldsymbol{x;\theta})$で表す。$\boldsymbol{\theta} \in \boldsymbol{\Theta}$はモデルパラメータ。モデルの尤度を
p( \boldsymbol{X ; \theta}) = \prod_{n=1}^{N}{p(\boldsymbol{x_n ; \theta})}
とかく。
2.1 ニューラル生成モデルの訓練
訓練データ$\boldsymbol{X}$とモデルクラス$\{ p(\cdot ; \boldsymbol{\theta}): \boldsymbol{\theta} \in \Theta \}$があるとする。$\theta$は決まっていて、入力は任意なモデルの表記だろう
モデルを真の未知なデータ分布$p^*(\boldsymbol{x})$に最も近づけるパラメータ$\theta$を見つけたい。生成モデルなので、$\theta$を調節することで、関係ない入力をいれてx(正解データ)のようなデータを出力するモデルを作りたい
このギャップ(真の分布と現在のモデルが出力するデータの分布のギャップ)をカルバック・ライブラーダイバージェンス(KLD)で、次のように書く。
KLD[p*(\boldsymbol{x})|| p(\boldsymbol{x;\theta})] = \int p^{*}(\boldsymbol{x}) log \frac{p^{*}(\boldsymbol{x})}{p(\boldsymbol{x; \theta})} d\boldsymbol{x} \approx - \frac{1}{N} log p(\boldsymbol{X; \theta}) - \mathbb{H}[p ^*] \tag{1}
最右辺の第1項は平均log尤度であり、第2項は真の分布のエントロピーである。後者は定数なので、KLDを最小化するとデータのlog密度を最大化するパラメータ設定を見つけることになる。log尤度とlog密度は同じものを指すのか。
つまり、
\begin{align}
\boldsymbol{\theta^{*}}& = arg max_{\theta} log p(\boldsymbol{X;\theta}) \\
&= arg max_{\theta} \sum_{n=1}^{N} logp(\boldsymbol{x_n;\theta})
\end{align}
$p(\boldsymbol{x_n;\theta})$は単独では確率としての解釈はできないことに注意。$\prod p(x_n; \theta)$が尤度、logをつけて$\sum$になったのがlog尤度。尤度は確率ではない。$\prod$全体でモデル自体のもっともらしさを表しているもの、ということか。少し怪しい
モデル密度から確率そのものを取り出すには、なんらかの領域$\boldsymbol{\Omega}$ で積分する必要がある。つまり、$P( \boldsymbol{\Omega} )= \int_{\Omega}p(\boldsymbol{x;\theta})d \boldsymbol{x}$となる。モデルの最適化中にデータにノイズを加えることでこの積分を模すことができ、密度モデルに確率により近いなにかを出力させることになる**(Theis et al., 2016)**
log \int p(\boldsymbol{x_n}+\boldsymbol{\delta};\boldsymbol{\theta})p(\boldsymbol{\delta}) d\boldsymbol{\delta} \geq \mathbb{E}_{\delta}[log p(\boldsymbol{x_n}+ \boldsymbol{\delta};\boldsymbol{\theta})] \approx log p(\boldsymbol{x_n}+\boldsymbol{\tilde{\delta}};\boldsymbol{\theta})
ここで$\boldsymbol{\tilde{\delta}}$は$p(\boldsymbol{\delta})$からのサンプルである。$\delta$はノイズ。$x_n$に加えている
得られた目的関数は下界であり、(元の目的関数を)最適化の対象に適したものにしている
実験中のすべてのモデルはノイズありで訓練している。密度と確率の間のこの曖昧さがあるので、今後はたとえ$\boldsymbol{X}$が訓練データとは別の分布から来たものでも$log p(\boldsymbol{X}+\boldsymbol{\tilde{\Delta}};\boldsymbol{\theta})$をlog尤度
と呼ぶ。
密度モデルの選択に関して、$p(\boldsymbol{x_n};\boldsymbol{\theta})$について標準の密度関数、例えばガウシアンなどを選ぶことができる。しかしこれらは実世界でよく見かける高次元の複雑なデータセットをモデリングするのに不適である。なので、モデル密度をなんらかのキャパシティの大きい関数$f$でパラメタ化したい。$f$にはよくニューラルネットが使われる。これにより、モデルはいくらかコンパクトな表現になり、勾配上昇法で最適化できる。本論文では3つの(自己回帰、潜在変数、可逆(invertible)モデル)ニューラル生成モデルの変種で実験を行った。自己回帰については、**PixelCNN(van den Oord et al., 2016b)**について実験したが、この定義については元論文を参照されたい。未読。
潜在変数モデルは、**VAE(Kingma & Welling, 2014; Rezende et al., 2014)である。使用した正確なモデルについてはRosca et al. (2018)**参照。最後に、可逆フローベース生成モデルを3つ目のクラスとして使った。これを最もよく研究したので、次に詳細を定義する。
2.2 変数変換による生成モデル (GENERATIVE MODELS VIA CHANGE OF VARIABLES)
VAEとその他の生成モデルは観測された変数潜在変数との結合分布で定義されるが、もう一つ変数変換による方法がある。このケースでは、$x$と$z$は同じものであり、積空間$X \times Z$の概念はすでにない。$f
: X \mapsto Z$をデータ空間$X$から潜在空間$Z$への微分同相写像(diffeomorphism)とする。微分同相写像は、写像$f: U \mapsto V$が、全単射であり、fもその逆の$f^{-1}: V \mapsto U$も微分可能。というのが定義。fがニューラルネットのとき、全単射が成り立つのかとおもったが、入力xをうまいこと表現したのが潜在変数zなので多分なりたつんだろう。$f$を使うことは$z$上での積分を$x$上の積分として計算可能にする。逆も成り立つ。
\begin{align}
\int_{\boldsymbol{z}} p_z(\boldsymbol{z}) d\boldsymbol{z} &=
\int_{x} p_z(f(\boldsymbol{x}))\left| \frac{\partial\boldsymbol{f}}{\partial{\boldsymbol{x}}}\right|d\boldsymbol{x} \\
&=\int_x p_x(\boldsymbol{x})d \boldsymbol{x} \\
&=\int_z p_x(f^{-1}(\boldsymbol{z})) \left| \frac{\partial \boldsymbol{f}^{-1}}{\partial \boldsymbol{z}}\right| d\boldsymbol{z} \tag{2}
\end{align}
xとzが交換できると思うと、成り立ってるような気がする
ここで$|\frac{\partial{\boldsymbol{f}}}{\partial{\boldsymbol{x}}}|$と$|\frac{\partial{\boldsymbol{f}^{-1}}}{\partial{\boldsymbol{z}}}|$は代替手段のもとで体積を調節する体積要素として既知である。よくわからない
特に、変化が座標に関するものであるとき、体積要素は微分同相写像のヤコビ行列の行列式であり、これを$|\frac{\partial{\boldsymbol{f}}}{\partial{\boldsymbol{x}}}|$と書く。
ヤコビ行列の行列式がヤコビアンらしい。(こちら参照)$\frac{\partial{\boldsymbol{f}}}{\partial{\boldsymbol{x}}}$がヤコビ行列で、絶対値記号は行列式。体積要素~に関しては行列式の計算が体積計算になっているって話かな。
変数変換の式は生成モデリングにとって強力なツールである。分布$p(\boldsymbol{x})$を完全に、自由に定義できる補助分布$p(\boldsymbol{z})$と$f$に関して定義できるから。変数変換モデルのパラメータを、$\phi$を微分同相写像のパラメータとして、$\boldsymbol{\theta}=\{ \phi, \psi \}$とする。つまり$f(\boldsymbol{x};\phi)$。また、$\psi$を補助分布のパラメータとする。つまり、$p(\boldsymbol{z};\psi)$。モデルに関して次のように最尤推定できる。
\begin{align}
\boldsymbol{\theta}^{*}&=argmax_{\theta} log p_x(\boldsymbol{X};\boldsymbol{\theta}) \\
&=arg max_{\phi, \psi} \sum_{n=1}^{N} log p_z (f(\boldsymbol{x_n};\boldsymbol{\phi});\boldsymbol{\psi}) +log \left| \frac{\partial{\boldsymbol{f_{\phi}}}}{\partial{\boldsymbol{x_{n}}}} \right| \tag{3}
\end{align}
$\psi$を最適化することは自明なモデルにならないように慎重にやる必要がある。例えば、分散に制約をかけないと、最適化は$p(z;\psi)$を一様分布に近づけてしまう。p()は(3)式の最右辺の$p_z$のこと。制約なしだと分散が広がり続けるということだと思うが、なぜそうなるんだろう?
そのため、多くの実装は$\psi$を固定する(通常は標準ガウシアン)。標準ガウシアン=正規分布から取るという意味?
これから先はそれを固定したものとして扱う。故に$\psi$は式から省略する。訓練後、サンプルはモデルから逆変換で取り出すことができる
$\boldsymbol{\tilde{x}}= f^{-1}(\boldsymbol{\tilde{z}};\boldsymbol{\phi}), \quad \boldsymbol{\tilde{z}} \sim p(\boldsymbol{z})$
潜在変数zを$f^{-1}$で逆変換してサンプルxを得る
特定の形の$f$に関して、最近の研究ではアフィンカップリングレイヤー(ACL)からの全単射を構築している**(Dinh et al., 2017)カップリングレイヤ、先のヤコビ行列の話、フローベースモデル等についてはGlow: Generative Flow with Invertible 1x1 Convolutions (Kingma et.al. , 2018)** を読んだら良いっぽい。
これは$\boldsymbol{x}$を平行移動とスケーリングの操作で変形する。特に、ACLは次の形を取る:
f_{ACL}(\boldsymbol{x};\boldsymbol{\phi})=[exp \{s(\boldsymbol{x_d};\boldsymbol{\phi_s}) \} \odot \boldsymbol{x_{:d}} + t(\boldsymbol{x_{:d}};\boldsymbol{\phi_{t}}, \boldsymbol{x_{d:}}]
ここで$\odot$は要素ごとの積。この変形は最初に入力ベクトルを半分に分割する。つまりpythonのシンタックスを使えば、
$\boldsymbol{x}=[\boldsymbol{x_{:d}},\boldsymbol{x_{d:}}]$
ベクトルの後半は2つの任意のニューラルネットに入力される(紐付いたパラメータと一緒に)が、その出力は$\phi$を重みとバイアスの集まりとして$t(\boldsymbol{x_{d:}} ; \boldsymbol{\phi_{t}})$ と$s(\boldsymbol{x_{d:}} ; \boldsymbol{\phi_{s}})$と書ける。最後に、出力は、入力の最初の半分を一つのニューラルネットの出力でスケーリングして$(1)$で形成される。つまり
exp \{ s(\boldsymbol{x_{d:}} ; \boldsymbol{\phi_{s}}) \} \odot \boldsymbol{x_{:d}}
$(2)$がニューラルネットによるスケーリング操作の結果を平行移動する。つまり
(\cdot) + t(\boldsymbol{x_{d:}};\boldsymbol{\phi_{t}})
$(3)$は$\boldsymbol{x}$の後半を前方にコピーし、$f_{ACL}(\boldsymbol{x};\boldsymbol{\phi})$の後半にする。つまり、$f_{d:}=\boldsymbol{x_{d:}}$である。ACLはリッチな階層的変形のためにスタックされ、潜在表現$z$はこのスタックの出力である。つまり、$z_n=f(\boldsymbol{x_n}; \boldsymbol{\phi})$である。コピー操作で同じ要素が繰り返し使われないように、ACL間ではパーミュテーションの操作が必要となる。$f$を完全な変形を書くために添字なしで使用し、$\phi$はすべての構成要素のレイヤを記述するためにオーバーロードした。この辺よくわからない。Glow: Generative Flow with Invertible 1x1 Convolutions (Kingma et.al. , 2018) を読んだら見直すかもしれない。
このクラスの変形は体積要素が評価して1になる必要がなく、各入力$\boldsymbol{x}$について変化しうるので、非体積保存(non-volume preserving: NVP)として知られる(Dinh et al., 2017)。非ゼロではあるが、ヤコビアンのlog行列式はtracableである:
log| \frac{\partial{\boldsymbol{f}_{\phi}}}{\partial{\boldsymbol{x}}} |= \sum_{j=d}^{D} s_j(\boldsymbol{x}_{d:};\boldsymbol{\phi}_s)
tracableわからなかった。
**(Dinh et al. (2015))の先行研究で示されているように、微分同相な変形は平行移動操作だけで定義でき、この変形は体積保存(volume preserving: VP)**である。体積の項は1であり、ゆえに尤度計算に影響がない。本論文では、定数体積(constant-volume:CV)と呼ぶフローの別のクラスを実験するが、これは体積が、保存はされないが、すべての$\boldsymbol{x}$にわたって一定である。もしconstantを”体積一定”と約すと、保存されないのに"一定"っておかしいので、”定数”のはず。
フローベース生成モデルの実装については付録A参照。
3. 動機となった観測(MOTIVATING OBSERVATIONS)
ディープな生成モデルが進化しているので、訓練データセットと別の分布から入力が来た時のモデルの量化能力をテストしようとした。この分布外のデータに対するキャリブレーションは応用上必要不可欠である(もし生成モデルを識別モデルの入力をフィルタするために使っているなら)し、能動学習でも同様である。実験のため、**(Kingma & Dhariwal (2018))**で説明されているものと同じGlowアーキテクチャをFashionMNISTとCIFAR-10で訓練した(1つのGPUに収まるくらいに小さいということ以外は)。それから次元数が等しいが、異なる2つのデータセット(MNIST(28x28)とSVHN(32x32x3))のテスト分割に対する、**log尤度(値が大きいほどよい)とbits-per-dimension(BPD, 値が低いほどよい)**を計算した。fashionMNISTとMNISTの次元数が等しく、CIFAR-10とSVHNの次元数が等しい。訓練したデータと同じ形状だけど別の分布からデータが来た時の能力をみようとしている
モデルを訓練したデータではないので、モデルがこのデータに対して低い確率を出力することを期待している。Glowが画像を生成すると思っていたのだが、尤度を出力するらしい。
図1:分布外のテスト。MNIST, FashionMNIST, SVHN, CIFAR-10で、Glowから計算されたLog尤度(bit/次元で表記)
FashionMNISTとMNISTから始める。図1の左表が訓練データ(FasionMNIST-Train), 分布内のテストデータ(FashionMNIST-Test), 分布外のデータ(MNIST-Test) それぞれの平均BPD。結果は、MNISTが最も低いBPDを示しており、FashionMNISTの訓練、テストよりも1bit以上も小さい。これが平均を歪めている外れ値によるものかを確かめるため、Log尤度の(正規化された)ヒストグラムを図2(a)に示す。MNIST(赤い棒グラフ)が明らかに、システマティックにプロットの右手側にシフトしているのがわかる(最も尤度が高い)。外れ値によるものではない。
CIFAR-10とSVHNについて、図1の右表が訓練データ(CIFAR10-Train), 分布内テストデータ(CIFAR10-Test), 分布外データ(SVHN-Test)のBPDを示す。再び、SVHNのBPDが分布内のデータセット2つよりも1bit小さいという現象が見られる。図2(b)は同様のlog尤度のヒストグラムである。明らかに、SVHNの例は(赤い棒)高い尤度を持ち、結果は外れ値によるものではない。
図2の(c),(d)はCelebAとImageNetについて示している。CelebAで訓練したGlowは、それまで見たことのないSVHN(赤い棒)により高い尤度を割り当てている。同様に、ImageNetで訓練した時、GlowはSVHNのテストセット(赤い棒), CIFAR-10(黄色), CIFAR-100(緑)に高い尤度を割り当てている。SVHNのケースでは違いが非常に大きいが、CIFARに関しては普通程度である。**この現象は対称ではない。例えば、CIFAR-10は SVHNで訓練されたGlowについて高い尤度を持つことはない(付録の図6参照)。同様の動作はDinh et al. (2017)**で定義されたRNVP変換でも見られる

次に、他の一般的なディープ生成モデル(PixelCNN, VAE)でも起こるのかテストした。log尤度の評価方法がまだopen problemなのでGANは比較に含めなかった。図3はこれらのモデルに関する、上述と同様のヒストグラムであるが、CIFAR-10の訓練(黒)とテスト(青)と、SVHNのテスト(赤)に関して、$logp(\boldsymbol{x})$ の評価値の分布を示している。
全てのプロットで、(程度の差はあるが)以前同様に赤い棒が右側にシフトしており、訓練データと似ていない入力を検出できない現象はこれらの種類の違うモデルでも起こることがわかる。SVHNの画像がCIFAR-10のものより高い尤度を出すことは一貫している。一貫して高いならそれで検出できなくもない気もする
図3: CIFAR10で訓練し、SVHNでテスト:pixelCNNとVAEで計算されたlog尤度。VAEは**Rosca et al. (2018)**で説明されているもの。
4. フローベースモデルを深掘りする
CIFAR-10とSVHNでの現象をPixelCNN, VAE, Glowで見たが、ここでは可逆生成モデル(invertible generative models)に対象を絞る。以下の理由で実験的に制御しやすいから。:
- VAEと違って周辺尤度を直接計算できるこれはよく理解していない。
- フローベースモデルで使う変換はヤコビアンの制約があって、それが解析を簡単にする
訓練サンプルではない(分布外サンプル)の尤度が高いことをさらに解析するために、変数変換式の各項の尤度への貢献具合を報告する。まず、体積要素がSVHNの高尤度の主要因とみられたが、定数体積フロー(constant-volume flows)を使ったさらなる実験でもその問題は再現した。
変数変換の目的関数を分解する
変数変換の目的関数そのものを調べる。分布外入力が来たとき2つの項の両方が高い値になるのか、片方なのか。構成要素である$logp(\boldsymbol{z})$と$log |\frac {\partial{\boldsymbol{f}_{\phi}}}{\partial{\boldsymbol{x}}} |$を図4のNVP-Glowに関して報告する。
(a)は前者の、(b)は後者のヒストグラムを示している。
$p(\boldsymbol{z})$は期待通りである。赤棒(SVHN)は明らかに左に寄っており、潜在分布の下では尤度は低いことがわかる。p(z)は問題ない
体積要素を見ると、これが問題の原因のようだ。(b)で、SVHNのlog体積(log-volume)の評価値が著しく右(高い値)に寄っている。$p(\boldsymbol{z})$のSVHNの評価値がCIFAR-10より少し小さいだけだったので、結果としてSVHNは高い尤度になる。原因は体積要素(第2項のこと)だった。
図4:
(a) NVP-Glowのlog尤度の分解($log p(z)$) データはCIFAR-10とSVHN
(b) NVP-Glowのlog尤度の分解(次式)。 CIFAR-10とSVHN
log |\frac{\partial{\boldsymbol{f}_{\phi}}}{\partial{\boldsymbol{x}}}|
(c)CV(体積一定)Glow でのlog尤度の評価値。同じくCIFAR-10とSVHN
(d)訓練中のCV-GlowのBPD。CIFAR-10で訓練、SVHNでテスト。いたるところで問題の現象が起き、早期終了させても防げないことがわかる。
体積が犯人なのか?
上記に加えて、変数変換の目的関数は(ヤコビアンの最大化を奨励するので)データ空間$X$での変動に敏感になる。この動作は微分ベースの正則化の長い歴史と全く矛盾する。入力方向への敏感さは減少させたい。 例えば**Girosi et al. (1995)とRifai et al.(2011)**はそれぞれ、分類器と、オートエンコーダについて、ネットワークのヤコビアンのフロベニウスノルムにペナルティを科すことを提案している。フロベニウスノルムについてはこちら参照。$L^2$ノルムに似ている
体積項を実験的に制御するため、Glowを定数体積変換**(constant-volume (CV) transformations)で訓練した。アフィンレイヤを平行移動だけを使うように変更したが(Dinh et al.,2015)、1x1convolutionはそのまま。logヤコビアン(log-determinant-Jacobian)は$HW \sum_{k} log |\boldsymbol{U_k}|$となる。ここで$|\boldsymbol{U_k}|$はk番目のフローに関する畳み込みの重み$\boldsymbol{U_k}$の行列式。これにより体積要素はすべての$\boldsymbol{x}$で定数になり、その効果を独立できる。体積要素がxの変数じゃないってことを言ってる
これをCV-Glow(constant-volume Glow)と呼ぶ。図4の(c), (d)が結果。(c)は$logp(\boldsymbol{x})$のヒストグラム。図2同様、SVHN(赤)が訓練データCIFAR-10より高い尤度。(d)**はCV-Glow訓練中のSVHNとCIFAR-10のBPD。曲線に交差する箇所がない。
その他の実験(ランダム、定数画像、アンサンブル)
**(Sønderby et al., 2017; van den Oord et al., 2018)**は生成モデルが定数の入力に高い尤度を割り当てると言っている。これについて実験し、付録の図8にNVP-GlowでのBPDを示した。定数は本論文のモデルでも高い尤度であることが確認できた。ランダム入力との比較も行った。
パラメータを平均すれば問題の現象は軽減できるという仮説を立てた。パラメータ空間全体で積分するのが理想的だが、Glowにとっては解析的にも、計算量的にも難しい。**Lakshminarayanan et al. (2017)**は離散のアンサンブル(複数モデルの出力の平均)が異常な入力に対する過剰な確信を防ぎ、かつ実装しやすいことを示している。これを採用して、Glowモデルを5個独立に訓練し、そのテストデータに対する尤度を平均することにした。多様性のために各モデルはパラメータの初期値が異なる。付録の図9はアンサンブルで平均した$logp(\boldsymbol{x})$のヒストグラム。結果は以前とほぼ同じ。
図9
つまり平均しても問題は解決しなかった。
5. 二次の解析
log尤度の期待値の差を線形化することで、この現象をさらに解析する。線形化:与えられた点での、対象の関数の線形近似を求めること。ここではテイラー展開のことを言っている
いずれも$X$上に台を持つ2つの分布を考える:
台:ある関数の出力が0にならないような入力の集合。ここではGlowが0じゃない尤度を割り当てることができる入力データで構成されたデータセットの分布という意味だと思う。
- 訓練分布$\boldsymbol{x} \sim p^*$
- それと似ていない分布$\boldsymbol{x} \sim q$
生成モデルを$p(\boldsymbol{x};\boldsymbol{\theta})$として、敵対する分布$q$は$\mathbb{E_{q}} [log p (\boldsymbol{x};\boldsymbol{\theta})] - \mathbb{E}_{p^*} [log p (\boldsymbol{x};\boldsymbol{\theta})] > 0$
のときに訓練データの分布よりも高い尤度を持つ。これは直接解析しづらいので、内点x0でlog尤度の二次のテイラー展開を行う。
log p(\boldsymbol{x};\boldsymbol{\theta}) \approx log p(\boldsymbol{x_0};\boldsymbol{\theta}) + \nabla_{x_0} log p(\boldsymbol{x_0};\boldsymbol{\theta})^{T} (\boldsymbol{x}-\boldsymbol{x_0}) + \frac{1}{2} Tr \{ \nabla_{x_0}^{2} log p(\boldsymbol{x_0};\boldsymbol{\theta}) (\boldsymbol{x}-\boldsymbol{x_0})^{T} \}
これを両方の尤度に適用し、期待値を取り、共通項をキャンセルしたものが次式。
\begin{align}
0 &\lt \mathbb{E_{q}} [log p (\boldsymbol{x};\boldsymbol{\theta})] - \mathbb{E}_{p^*} [log p (\boldsymbol{x};\boldsymbol{\theta})] \\
&\approx \nabla_{x_0} log p(x_0;\boldsymbol{\theta})^{T} (\mathbb{E_q}[\boldsymbol{x}]-\mathbb{E_p^{*}}\boldsymbol{x}) + \frac{1}{2} Tr \{ \nabla_{x_0}^{2} log p(\boldsymbol{x_0};\boldsymbol{\theta}) (\boldsymbol{\sum_q}-\boldsymbol{\sum_{p^*}}) \} \tag{4}
\end{align}
ここは言ってる通り変形すれば行けそう
ここで$\boldsymbol{\sum}=\mathbb{E}[(\boldsymbol{x}-\boldsymbol{x_0})(\boldsymbol{x}-\boldsymbol{x_0})^{T}]$は共分散行列であり、$Tr \{ \cdot \}$はトレース。展開が正確なのは$x_0$の周辺のみなので、次に$\mathbb{E_q}[\boldsymbol{x}]=\mathbb{E_p^{*}}[\boldsymbol{x}]=\boldsymbol{x_0}$を仮定する。これは強い仮定に見えるが、モデルに入力する前にデータは中心化されるので、それほど実際とかけ離れたものではない。特にSVHNとCIFAR-10についてはこの仮定が成立していた。**図5(a)**はCIFAR-10(緑)とSVHN(オレンジ)の各軸の経験的な平均。SVHNの平均はすべてCIFAR-10の範囲に入っており、どの軸同士で差をとっても最大38以下だった。CIFAR-10とSVHNの平均画像が似たような感じだった。
平均が等しいとして次式を得る:
\begin{align}
0 &\lt \mathbb{E_{q}} [log p (\boldsymbol{x};\boldsymbol{\theta})] - \mathbb{E}_{p^*} [log p (\boldsymbol{x};\boldsymbol{\theta})] \\
&\approx \frac{1}{2} Tr \{ \nabla_{x_0}^{2} log p(\boldsymbol{x_0};\boldsymbol{\theta}) (\boldsymbol{\sum_q}-\boldsymbol{\sum_{p^*}}) \} \\
&= \frac{1}{2} Tr \bigl\{ \bigl[ \nabla_{x_0}^{2} log p_z(f(\boldsymbol{x_0};\boldsymbol{\phi})) + \nabla_{x_0}^{2} log | \frac{ \partial{ \boldsymbol{f_{\phi}}}}{\partial{\boldsymbol{x_0}}}| \bigr](\boldsymbol{\sum_q}-\boldsymbol{\sum_{p^*}}) \bigr\} \tag{5}
\end{align}
平均が等しいので(4)式の2行目第1項が消えて、第二項のlogp()を展開した
2行目は生成モデルがフローベースであると仮定している。
CV-Glowの解析
$(5)$式をCV-Glowの解析に使い、尤度の違いがモデル曲率とデータの二次モーメント(分散)で説明できるかどうかを見る。二階微分の項は球状潜在密度(spherical latent density)でCV-Glowをすごくシンプルにする。
球状潜在密度: 潜在変数を白色化する、みたいな意味だろうか?あとモデル曲率もわからない。
入力チャネル数C, フローのインデックスkとして、C x Cのカーネル$\boldsymbol{U_k}$があり、微分は$\frac{\partial{f_{h,w,c}}}{\partial{x_{h,w,c}}}=\prod_k \sum_{j=1}^{C} u_{k,c,j}$で表す。hとwは高さと幅、jはk番目のフローの1x1convolutionカーネルのカラム。二階微分は、$\frac{\partial^2{f_{h,w,c}}}{\partial{x_{h,w,c}^2}}=0$なので、
\begin{align}
Tr &\{ \nabla_{x_0}^{2} log p(\boldsymbol{x_0};\boldsymbol{\theta}) (\boldsymbol{\sum_q}-\boldsymbol{\sum_{p^*}}) \} \\
&=\frac{\partial^2}{\partial{z^2}} log p(\boldsymbol{z};\boldsymbol{\psi}) \sum_{c=1}^{C} \bigl(\prod_{k=1}^{K} \sum_{j=1}^{C} u_{k,c,j} \bigr)^2 \sum_{h,w}(\sigma_{q,h,w,c}^{2} -\sigma_{p^*, h,w,c}^2)
\end{align}
導出は付録G。**(Dinh et al., 2015;2017; Kingma & Dhariwal, 2018)**に従い、フローモデルで一般的な潜在分布であるガウシアンのlog密度の二階微分と経験的な分散に代入して、次式を得る。
\begin{align}
\mathbb{E}_{SVHN} &[log p(\boldsymbol{x};\boldsymbol{\theta})] - \mathbb{E}_{CIFAR10}[log p(\boldsymbol{x};\boldsymbol{\theta})] \\
&\approx \frac{-1}{2 \sigma_{\psi}^{2}}[\alpha_{1}^{2} (49.6 -61.9) + \alpha_{2}^{2} (52.7-59.2) +\alpha_{3}^{2} (53.6 -68.1)] \\
&= \frac{1}{2 \sigma_{\psi}^2}[\alpha_1^2 \cdot 12.3 + \alpha_2^2
\cdot 6.5 + \alpha_3^2 \cdot 14.5 ] \geq 0 \tag{6} \\
&where \quad \alpha_c = \prod_{k=1}^K \sum_{j=1}^C u_{k,c}
\end{align}
$\sigma_{\psi}^2$は潜在分布の分散。最後の行の式が0以上なので、すべての$\alpha_c^2 \geq 0$である。等号成立は$\sigma_{\psi}^2 \rightarrow \infty$ または、起こりそうにないが、すべての畳込みカーネルのすべてのチャネルで一つ以上すべて0の行が存在する時。したがって、今導出した二次式はSVHNがCIFAR-10よりも高い尤度を出すことをすでに予測している。SVHNの尤度の期待値からCIFARのを引いて、結果が常に0以上だから。
さらに、式が非負であることを強調するためにCV-Glowのパラメータを定数にしているが、これはGlowのアンサンブルが単体とほとんど同じ尤度差になり、(図9)その差が訓練中相対的に一定だった(図4b)ことを裏付けている。さらに、$\frac{\partial^2 log p(\boldsymbol{z};\boldsymbol{\psi})}{\partial{z^2}}$ は、いかなるlog-concaveな密度関数についても負になり、潜在密度をラプラスやロジスティックに変えても結果が変わらない。concaveな関数pはlogとってもconcaveで、2回微分して負だから?潜在密度はzのことで、z=f(x)なんだと思う。このfを変えても結果が同じっていうことかな?
結論として、SVHNは単にCIFAR-10の内部に位置しており(平均がほぼ同じで分散が小さい)、ゆえに尤度が高くなる。これは**図2の(c)(d)**でも成立する。**図5(a)で、ImageNet, CIFAR, SVHNはほとんど平均が重なっており、ImageNetが最も分散が大きい。よって、SVHNとCIFARはImageNetで訓練したモデルでImageNetよりも高い尤度になると予想できるが、これは図2(d)**で見たことと一致している。さらに、尤度差の程度は分散の差と合致する。SVHNは明らかに分散が最も小さく、尤度が最も大きい。つまり、分散を小さくすることで人為的に尤度を上げることができる。RGB画像では、分散を小さくすることはグレー化(ピクセルの値を128に近づける)することと等しい。**図5(b)**は、これを行ってCIFAR-10とSVHNの両方で尤度が大きくなったことを示す。潜在変数の分散をへらすこともこれと同じ効果を持つ(付録の図12)。
**図5:**経験分布とグレー化。ピクセル値は0-255を256で除して0-1に変換している。
6.関連研究
本論文は最近の生成モデルの評価に関する研究の多くにインスパイアされている。
- Theis et al. (2016):高い尤度が、見た目的に良いサンプルを生成するのに必要でも十分でもないことを示した。分布外入力には言及なし
- Szegedy et al., 2014:敵対的入力(気づかれないほど小さい修正でモデルが正しく機能しなくなる入力)に関する研究
- Tabacof et al. (2016) , Kos et al. (2018): 生成モデルに対する Adversarial attack
- Hendrycks & Gimpel, 2017; Lakshminarayanan et al., 2017; Liang et al.,2018: 識別モデルが分布外の入力に対して高確信度で誤ることを報告している。
著者らが知る限り、生成モデルのロバスト性については研究されていない。
本研究と同時にディープ生成モデルの異常検知能力をテストした研究がある
- Shafaei et al. (2018):PixelCNN++が信頼できる検出に使えないことを示した。フローベースについては言及していない。
- Škvára et al. (2018) VAEとGANをkNN(k近傍法)と実験的に比較し、VAEとGANは、既知の外れ値をハイパラ選択に使用できるときのみ、kNNを超えることを示した。
本研究と最も類似するのは
- Choi & Jang (2018): Glowに関するCIFAR-10 vs SVHNの問題を報告(本研究と独立に、動機となった観測を確認した)。対策として、生成モデルのアンサンブルをadversarial objectiveで訓練し、アンサンブル経由で渡辺-赤池情報量基準(WAIC)を計算することでテストする方法を提案している。本研究が現象の原因理解が目的だが、彼らは検出手法の提供を目的としており、相補的な研究である。アフィンカップリングレイヤを使用しており、NVP(非体積保存)になるため、CV-Glowの解析の(6)式の結果は彼らのモデルには当てはまらない。
7. 議論
Glow **(Kingma & Dhariwal, 2018)**とその前身であるRNVP flow **(Dinh et al., 2017)**は生成物がはっきりしている、周辺尤度の直接計算、というメリットがある。しかし、本文で示したように、訓練分布外の入力で使用する場合、尤度単体では訓練集合か、それに似た入力かを特定できない。さらに、5章の解析で示したように、パラメータ設定や潜在密度の選択にかかわらず、(定数体積flowの場合は)、SVHN vs CIFAR-10の問題がついて回る。**モデルは高レベルの意味ではく、低レベルのstatisticsを見ているらしい。**これがディープ生成モデルの病とは言わないが、改善の必要がある。これは容量に関係なくどんな生成モデルにも問題になりうる。したがって、分布外の入力に対する敏感さがより理解できるまでは、生成モデルの利点を主張しすぎないことが必要である。
本記事のまとめ
- 現在のディープ生成モデルによる尤度を、入力が訓練データからか、そうでないかの判定には使えない。(間違う)
展望
- Glowを読む