NICEの論文を読んだので要約とメモ

**[NICE: Non-linear Independent Components Estimation(Laurent Dinh, David Krueger, Yoshua Bengio. 2014)](https://arxiv.org/abs/1410.8516)**を読んだので要約とメモ。筆者の理解と疑問を<font color="LightSteelBlue">青色</font>でメモしている。

一言で言うと、VAEに似た生成モデル。ただし変分下限ではなく対数尤度を直接計算できる。エンコーダとデコーダが完全に可逆なのでエンコーダのみ訓練すれば良い。


#本文
##概要
非線形独立要素推定(Non-linear Independent Component Estimation)(**NICE**)と呼ぶ、高次元の複雑な密度関数をモデリングするディープラーニングフレームワークを提案する。NICEは良い表現とはデータがモデリングしやすい分布を持っていることであるとのアイデアに基づいている。この目的で、データの非線形で決定論的な変形を学習する。その変形とは、変形されたデータが分解された分布に準拠するように潜在空間に写像するものである。つまり、独立な潜在変数になる。本論文ではこの変形を、ヤコビアンとヤコビ行列の逆行列が自明になるように、媒介変数表示する。さらに、ディープニューラルネットに基づくビルディングブロックの合成によって、簡単になっても複雑な非線形変換を学習する能力を維持するようにする。訓練の基準はシンプルに対数尤度であり、計算可能である。**Unbiased ancestral sampling**も簡単である。<font color="LightSteelBlue">伝承サンプリング。いずれ調べる</font>
この手法が４つの画像データセットで良い生成モデルを生み出し、画像修復(**inpainting**)にも使えることを示す。

##1. イントロ
未知の構造を持つ複雑なデータ分布をどうやって捉えるかというのが教師なし学習の中心的な問題である。ディープラーニング**(Bengio, 2009)**はデータの最も重要な変動要因を捉えるであろう表現の学習に基づいている。これは次の疑問を呈する：良い表現とはなにか？ 最近の研究**(Kingma and Welling, 2014; Rezende et al., 2014; Ozair and Bengio, 2014)**で、**良い表現とはデータの分布がモデリングしやすい表現である**との見方を取った。本論文では、モデルに、結果の分布が分解されるように、つまり　要素$h_d$が独立になるように、データを新しい空間へと変形させる関数$h=f(x)$を見つけさせるケースを考える。

```math
p_H(h)=\prod_d p_{H_d}(h_d)
```
<font color="LightSteelBlue">$p_H(h)$という分布が、$h_d$の分布の同時分布になる(これは独立の定義)。
２章で明らかになるが、dはデータの各次元のこと。あるデータの潜在表現hの分布がその表現の各次元が従う分布の積であらわされる。このような表現が可能な関数fを探す。</font>

提案された訓練基準は対数尤度から直接導出できる。さらに変数変換$h=f(x)$を考えるが、これは分布$p_H$にフィットさせるために、$f$が可逆であり$h$の次元数が$x$の次元数と同じとする。変数変換のルールにより、

```math
p_X(x)=p_H (f(x)) \left| det \frac{\partial{f(x)}}{\partial{x}} \right| \tag{1}
```

<font color="LightSteelBlue">$p_X$はデータの分布で、上の式で$p_H$がデータの分布$p_X$を潜在変数経由で表せるようにしたのかな。そうだとして、(1)の変換を使えば、その$p_H$をまたxで書けるってこと？</font>

$ \frac{\partial{f(x)}}{\partial{x}}$は関数$f$の$x$におけるヤコビ行列。本論文では、$f$をヤコビ行列の行列式が簡単に得られるように選ぶ。さらに、その逆$f^{-1}$もまた簡単に得られるので、$p_X(x)$から次のように簡単にサンプルできる。

```math
\begin{align}
h &\sim p_H(h) \\
x &= f^{-1}(h) \tag{2}
\end{align}
```
<font color="LightSteelBlue">hは$p_H$からサンプルされる。そのhを$f^{-1}$で戻すとxに戻る。もともと$h_d$が独立になるように$h=f(x)$を学習させたのだった。この独立っていうのは、どういうこと？$h_d$は異なるxに対応するhなのか、１データ点内の次元のことを言っているのか
->次元のことっぽい。</font>

本論文の新しさは、これらの"ヤコビアンの計算が簡単"、"逆関数が簡単"という２つの性質をもった関数$f$を設計したことにある。<font color="LightSteelBlue">さらにこの関数は</font>複雑な変形を学習するのに必要な十分なキャパシティも持っている。この背後にあるコアアイデアは$x$を２つのブロック$(x_1, x_2)$に分解できることであり、$(x_1, x_2)$から$(y_1, y_2)$への変形を、ビルディングブロックとして次のように適用できることである。

```math
\begin{align}
y_1&=x_1 \\
y_2&=x_2 + m(x_1) \tag{3}
\end{align}
```
$m$は任意の複雑な関数(実験ではReLU MLP<font color="LightSteelBlue">(多層パーセプトロン)</font>)。このビルディングブロックはいかなる$m$に対してもヤコビアンが1で、次のように簡単に逆を求められる。

```math
\begin{align}
x_1&=y_1 \\
x_2&=y_2 - m(y_1) \tag{4}
\end{align}
```
以降に詳細と、背後にある議論、実験結果を述べる。


<img src= https://qiita-image-store.s3.amazonaws.com/0/296108/5b398212-6580-d8af-de34-cd0fe701d95c.png>
**図1**:下記の式を使った確率モデルの計算グラフ。

(a)推定: $log(p_{X}(x))=log(p_H(f(x)))+log(|det(\frac{\partial{f(x)}}{\partial{x}})|)$
(b)サンプリング: $h\sim p_H(h),x=f^{-1}(h)$
(c)画像修復: $max_{xH}log(p_X((x_O, x_H))) = max_{xH}log(p_H(f((x_O, x_H)))) + log(|det(\frac{\partial{f}((x_O,x_H))}{\partial{x}})|)$

##2. 連続確率の全単射な変形を学習する
データそれぞれが空間$X$(通常は$X=\mathbb{R}^D$)に属する$N$個からなる有限なデータセット$D$上で、密度の**parametric family**

```math
\left\{ p_{\theta}, \theta \in \Theta \right\}
```
から確率密度を学習する問題を考える。<font color="LightSteelBlue">parametric family: パラメータθに依存する関数f(x;θ)みたいなのがあったときに、{f(x;θ)| θ∈Θ}のようにθを変えた関数の集合みたいなものを表す用語。日本語約は不明。</font>
<font color="LightSteelBlue">データの確率密度を学習したい。しかしparametric familyから学習する。データから直接じゃなくて一旦潜在空間に写像することを言ってる。</font>
具体的アプローチは、データ分布をシンプルな分布に移す、連続でほとんどいたるところで微分可能な、データ分布の非線形変形$f$を学習することである。これは次の変数変換を使って、**maximum likelihood**経由で行う。<font color="LightSteelBlue">最尤推定する。</font>

```math
log(p_x(x))=log(p_H(f(x))) + log(\left| det(\frac{\partial{f(x)}}{\partial{x}}) \right|)
```
<font color="LightSteelBlue">これは(1)式の両辺の対数をとったもの。</font>

$p_H(h)$は事前分布であり、事前定義された密度関数になる(事前分布は定数である必要はないし、学習可能である)。これは例えば標準等方性ガウス分布。<font color="LightSteelBlue">よく混乱するのでメモ: normal distribution = gaussian distribution = ガウス分布 = 正規分布。標準正規分布は標準化(z変換(z=(X-μ)/σ))された正規分布。</font>
もし事前分布が**階乗**なら(つまり次元が独立)、次の非線形独立要素推定(**NICE**)を得る。これは単に**階乗分布**の決定論的変換としての、データの生成モデルのもとでの最大尤度である。<font color="LightSteelBlue">[こちら](https://www.quora.com/What-is-meant-by-factored-distribution)によると階乗分布とは、確率が個別要素の確率の積で表される分布らしい。</font>

```math
log(p_X(x)) = \sum_{d=1}^{D} 
 log(p_{H_d} (f_d(x))) + log( | 
 det(\frac{\partial{f(x)}}{\partial{x}}) |  \tag{a})
```
<font color="LightSteelBlue">一つ上の式の$p_H$が各次元の分布$p_{H_d}$の積になった。(logだから$\sum$)。1章にでてきた$h_d$も次元ごとのことを言っていたのか</font>
ここで$f(x)=(f_{d(x)}){d \leq D}$である。
<font color="LightSteelBlue">$\frac{\partial{f(x)}}{\partial{x}}$は行列だった。注意。</font>
**NICE**はデータセットの可逆な前処理をしていると見ることもできる。可逆な前処理はデータを圧縮する(**contracting**)ことで好きなだけ尤度を増やすことができる。<font color="LightSteelBlue">圧縮?</font>
この現象<font color="LightSteelBlue">(尤度を増やせる)</font>に対処するため、(1)式の変数変換を使い、データセットから意味のある構造を見つけるために、事前分布$p_H$の分解された構造を使う。この式では先述の通り、変形$f$のヤコビアンは圧縮を罰し、高密度領域での(つまりデータ点での)拡張を推奨する。**Bengio et al.(2013)**で議論されているように、表現学習は入力のより”面白い”領域に関連して表現空間の体積を拡張する傾向にある(教師なしの場合は高密度な領域)。<font color="LightSteelBlue">似たようなデータ点がたくさんあると、その差異を捉えるためにそれらは広い領域にマップされるということか</font>
オートエンコーダ、特にVAE **(Kingma
and Welling, 2014; Rezende et al., 2014; Mnih and Gregor, 2014; Gregor et al., 2014)**の先行研究に倣って、$f$をエンコーダー、その逆の$f^{-1}$をデコーダーと呼ぶ。$f^{-1}$があれば、有向グラフモデル$H \rightarrow X $ではモデルからのサンプリングは伝承サンプリングで非常に簡単に進む。(２)式参照。<font color="LightSteelBlue">(2)式は$h \sim p_H(h), x = f^{-1}(h)$で、単に潜在変数hをデコーダー通してサンプルする。</font>

##3. アーキテクチャ
###3.1. 三角構造
モデルのアーキテクチャは、前向き(エンコーダー$f$)と逆向き(デコーダー$f^{-1}$)両方ともヤコビアンが計算可能で、なおかつ計算が簡単な全単射の族を得るために重要。レイヤ型にした、あるいは合成した変形$f= f_L \circ ... \circ f_2 \circ f_1$を使用するなら、前向きと後ろ向きの計算はそのレイヤの計算の(適切な順番の)合成であり、そのヤコビアンはそのレイヤのヤコビアンの積である。したがって、最初にそれらの初頭的な要素を定義する。

最初に、アフィン変換を考える。<font color="LightSteelBlue">アフィン変換は平行移動と線形変換を組み合わせた変換のこと。y=ax+bで表現できるようなやつ。[こちら](http://zellij.hatenablog.com/entry/20120523/p1)が詳しい。</font>
**Rezende et al., 2014** および **Kingma and Welling, 2014**は変換行列として、対角行列またはランク１補正**(rank-1 correction)**した対角行列を使用した時の逆行列と行列式の式を示している。<font color="LightSteelBlue">rank-1 correction: 行列にランク1の行列を足す。準ニュートン法等で使われるらしい。[こちら](https://math.stackexchange.com/questions/894679/rank-k-correction-of-a-matrix-and-significance)によると新しいデータが来たときのモデル更新にも使える。まだ理解してない。</font>
それ以外で行列式計算可能なものは、三角行列であり、行列式は単に対角要素の積になる。テスト時の三角行列の逆行列計算は計算量が少ない。多くの正方行列$M$は上三角行列と下三角行列を用いて$M=LU$で表現できる。そのような変形は合成できるから、ヤコビ行列が対角・下三角・上三角であるような合成は便利であることがわかる。<font color="LightSteelBlue">ある行列が行列の積で書けるなら、その行列の行列式は各行列式の積と一致するから。</font>

これを利用するには、重み行列が三角行列であって全単射な活性化関数を持つニューラルネットを作る方法があるが、これは深さ方向と活性化関数の選択を制限するのでアーキテクチャへの制約が強い。代わりに、ヤコビ行列が三角行列である関数の族を考える。ヤコビ行列の対角要素が簡単に計算できることを保証できればヤコビアンも簡単に計算できる。

###3.2. カップリングレイヤ
この節ではヤコビ行列が三角行列である全単射な変形の族を説明する。それは変形$f$のビルディングブロックになる。
####一般のカップリングレイヤ
$x \in X, I_1, I_2$を$d=|I_1|$を満たす$[1,D]$の分割、$m$を$\mathbb{R}^d$で定義された関数として、次により$y=(y_{I_1},y_{I_2})$を定義できる。

```math
\begin{align}
y_{I_1} &=x_{I_1} \\
y_{I_2} &=g(x_{I_2}; m(x_{I_1}))
\end{align}
```
<font color="LightSteelBlue">Dは次元数。D次元の入力ｘのうちd次元の要素だけ取った$x_{I_1}$と、残りを取った$x_{I_2}$から$y_{I_1},y_{I_2}$を作っている。</font>
$g:\mathbb{R}^{D-d} \times m(\mathbb{R}^d) \rightarrow \mathbb{R}^{D-d}$はカップリングの法則**(coupling law)**であり、<font color="LightSteelBlue">確率論のカップリングに関係ある?</font>第二引数が与えられたときの、第一引数に関する可逆な写像である。対応する計算グラフは**図2**。
<img src=https://qiita-image-store.s3.amazonaws.com/0/296108/89b60988-792a-f20b-7602-fe24cd258b6d.png>
**図2**

$I_1=[1,d]$で$I_2=[d,D]$を考えれば、この関数のヤコビ行列は次式。

```math
\frac{\partial{y}}{\partial{x}}= 
\begin{bmatrix}
I_d & 0 \\
\frac{\partial{yI_2}}{\partial{xI_1}} & \frac{\partial{yI_2}}{\partial{xI_2}} 
\end{bmatrix}
```
ここで$I_d$はサイズdの単位行列。つまり$det \frac{\partial{y}}{\partial{x}}= det \frac{\partial{y_{I_2}}}{\partial{x_{I_2}}}$となる。<font color="LightSteelBlue">上式の右辺が、対角要素が右下の$\frac{\partial{y_{I_2}}}{\partial{x_{I_2}}}$を除いて全て１、右上三角の部分が全部０になるから。</font>
また、この写像は次を使って可逆であることがわかる。

```math
\begin{align}
x_{I_1}&=y_{I_1} \\
x_{I_2}&=g^{-1}(y_{I_2};m(y_{I_1})) \\
\end{align}
```
<font color="LightSteelBlue">この節の最初の式を逆にした</font>
このような変形をカップリング関数$m$のカップリングレイヤと呼ぶ。

####加法的カップリングレイヤ
簡単のため、**coupling law**として加法的カップリング法則(**additive coupling law**)$g(a;b)=a+b$を選ぶ。これは$a=x_{I_2}, b=m(x_{I_1})$として次を満たす。

```math
\begin{align}
y_{I_2}&=x_{I_2} + m(x_{I_1}) \\
x_{I_2}&=y_{I_2} - m(y_{I_1}) \\
\end{align}
```
<font color="LightSteelBlue">一般型が$y_{I_{2}}=g(x_{I_2};m(x_{I_1}))$だった。一行目の式はこのgを$g(a;b)=a+b$に置き換えたもの。２行目は一行目の変形。</font>
したがってこの変形の逆は変形そのものと同じ計算コストでできる。カップリング関数$m$の選択には(適切な定義域と終域を持つこと以外に)なんの制約もないことに注意。例えば$m$は入力$d$次元、出力$D-d$次元のニューラルネットでも良い。

さらに、$\frac{\partial{y_{I_2}}}{\partial{x_{I_2}}}=1$であるため、加法的カップリングレイヤによる変形は逆関数が自明である上、ヤコビ行列の行列式が１になる。<font color="LightSteelBlue">「一般のカップリングレイヤ」で言ってたことより</font>
$m:\mathbb{R}^{d} \rightarrow \mathbb{R}^{D-d} \times \mathbb{R}^{D-d}$を満たせば、別のカップリング、例えば乗法的(**multiplicative coupling law**)$g(a;b)=a\odot b, b\neq0$とか、アフィン(**affine coupling law**)$g(a;b)=a\odot b_1+b_2, b_1 \neq 0$を選んでも良い。<font color="LightSteelBlue">mはベクトルを受け取って$\mathbb{R}^{D-d} \times \mathbb{R}^{D-d}$を返す。これ行列なのかな。だとしても最終的な結果の$y_{I_2}$等はヤコビ行列内で使うので、行列式の計算はできそう</font>
本論文で加法的カップリングレイヤを選んだのは数値的安定性のため。カップリング関数$m$が**rectified**なニューラルネットの場合、変形が区分的に線形になるから。<font color="LightSteelBlue">reluで都合が良い</font>

####カップリングレイヤを組み合わせる
もっと複雑なレイヤ化された変形を得るためにカップリングレイヤを合成できる。カップリングレイヤは入力の一部を不変に保っているので、カップリングレイヤの合成がすべての次元を変更できるように、レイヤ交互に分割の２つのサブセットの役割を交換する必要がある。<font color="LightSteelBlue">あるレイヤで分割されたベクトルの一片はそのまま次のレイヤに行くので、次のレイヤでも同じ分割をすると最終的に何も操作されない部分が出てくる。</font>ヤコビ行列を検証することで、すべての次元が他へ影響するために最低3つのカップリングレイヤが必要であることがわかった。本論文では一般に４つ使用する。

###3.3 リスケーリングする
各加法的カップリングレイヤはヤコビ行列の行列式が1であり(つまり体積を保存している)、その合成のヤコビ行列の行列式も当然1である。この問題に対処するため、対角スケーリング行列$S$をレイヤのトップ<font color="LightSteelBlue">(=最後)</font>に導入する。これはi番目の出力を$S_{ii}$倍する。

```math
S_{ii}: (x_i)_{i\leq D} 
\rightarrow (S_{ii}xi)_{i\leq D}
```
これにより学習器はある次元にはより多くの重みを与え、それ以外には少なく与えることができる(バリエーションをモデリングできる)。<font color="LightSteelBlue">行列式1だと表現力が少ないんだろうか？</font>

$S_{ii}$が$+ \infty$に行く極限において、ある$i$について、データの有効次元数は1に減少する。これは$f$がデータ点周辺で可逆である限り有効である。そのような最終ステージの対角行列と、それ以外の(対角要素が1の)下三角・上三角行列を使って、**NICE**の目的関数は次のように書ける。

```math
log(p_X(x)) = \sum_{i=1}^{D} [log(p_{H_i}(f_i(x)))+ log(|S_{ii}|)]
```
<font color="LightSteelBlue">２章の(a)式に$S_{ii}$を適用した。もともとあったヤコビ行列は１なので、$S_{ii}$のみが残る。</font>

これらのスケーリング要素をPCAの**eigenspectrum**と関連付けることもでき、それは潜在空間の次元それぞれにどのくらいのバリエーションがあるかを示すものとなる($S_{ii}$が大きいほど、次元iの重要性は低い)。スペクトラムの重要な次元はアルゴリズムで学習される多様体として見ることもできる。前の式は$S_{ii}$が小さくなることを推奨し、行列式の項は$S_{ii}$が0にならないようにする。<font color="LightSteelBlue">$S_{ii}$が大きいと上式で罰せられるので、$S_{ii}$が小さい次元が学習される。$S_{ii}$は学習可能パラメータなのか</font>

###3.4. 事前分布
先述の通り、事前分布は階乗分布になるように選ぶ。

```math
p_H(h)=\prod_{d=1}^{D} p_{H_d}(h_d)
```
この分布は標準的な分布の族から選ぶ(ガウス分布など)。

```math
log(p_{H_d})=- \frac{1}{2}(h_{d}^2+log(2\pi))
```
またはロジスティック分布

```math
log(p_{H_d})=-log(1+exp(h_d)) -log(1+exp(-h_d))
```
勾配の振る舞いが良い傾向にあるので本論文では主にロジスティック分布を使う。
<font color="LightSteelBlue">1章の(1)式等にでてくる分布$p_H(h)$をここで定義している。hはエンコーダー$f$によって得られる潜在表現。
(1)ではその表現を入力して、ここで定義した分布に従う値を得るので、VAEと似たようなことをやってる?
そもそもの目的は$p_X(x)=p_H (f(x)) \left| det \frac{\partial{f(x)}}{\partial{x}} \right| \tag{1}$
を使ってデータの分布をモデリングすることだと理解している。
これの右辺で、行列式じゃない方の部分を今定義した。
</font>

##4. 関連手法
生成モデルは大きく進歩した。

* **Boltzmann machines (DBM) (Salakhutdinov and Hinton, 2009)**のような無向グラフモデルはその効率的な近似推定と学習テクニックで非常に成功し、研究も盛んである。しかし、訓練とサンプリングでマルコフ連鎖モンテカルロ法(**Markov chain Monte Carlo (MCMC))**を必要とし、これはターゲットの分布がシャープなモードを持つ<font color="LightSteelBlue">分散が小さいということ？</font>場合に**mixing**が遅い。
加えて、対数尤度は扱いづらく、最も知られた推定法である**annealed importance sampling (AIS) (Salakhutdinov and Murray, 2008)**は楽観的すぎる評価を出すことがある**(Grosse et al., 2013)**　
* 有向グラフモデルは**DBM**が効率的に推定するための条件付き独立の構造が欠けている。しかし**VAE(variational auto-encoders(Kingma and
Welling, 2014; Rezende et al., 2014; Mnih and Gregor, 2014; Gregor et al., 2014)**によって訓練中に効率良く近似推定ができるようになった。**NICE**とは対象的に、これらの手法は確率的エンコーダ$q(h|x)$と不完全なデコーダ$p(x|h)$を使用しており、コスト関数に再構成誤差項が必要となる。デコーダがエンコーダの逆であることを近似的にしか保証しない。<font color="LightSteelBlue">NICEのエンコーダ・デコーダは決定論的だった。これらは全単射なので逆も近似じゃない。</font>
$h$は真の事後分布$p(h|x)$の変分推定である$q(h|x)$からサンプルされるため、このことはオートエンコーダのループにノイズを入れることになる。結果、訓練の目的はデータの対数尤度の変分下限となる。<font color="LightSteelBlue">対数尤度そのものより弱い基準になる</font>
有向グラフモデルのもたらす一般的な高速伝承サンプリングはこれらの手法を魅力的にする。さらに、対数尤度の重点サンプリング(**importance sampling estimator**)は期待値において楽観的になりすぎないことが保証されている。<font color="LightSteelBlue">重点サンプリング</font>
しかし下界の使用は対数尤度そのものに対して最適ではない解を出す可能性がある。そのような次善の解は例えば大量の構造化されていないノイズを生成プロセスに入れることになり、自然な見た目じゃないサンプルを生成する可能性がある。実践的には、<font color="LightSteelBlue">(サンプリングのときに)</font>実際のサンプルの代わりに$p(x|h)$の期待値やメディアンといった統計量を出力することができる。決定論的デコーダはVAEやBoltzmann machineのようなモデルの生成の最後のステージで自動的に付加される低レベルノイズを取り除く目的で使用したいことがある。<font color="LightSteelBlue">原文には "VAE and Boltzmann machines (the visible are considered independent, given the hidden)"という文があるがどいういう意味かわからない。</font>

**NICE**の基準はVAEの基準とよく似ている。具体的には、変形とその逆が完全なオートエンコーダのペア**(Bengio, 2014)**とみなせるので、再構成誤差項が無視できる定数であることである。<font color="LightSteelBlue">(NICEには再構成誤差がない。)</font>これは変分基準のKLダイバージェンスを次のようにする：$log(P_H(f(x)))$を、コード化$h=f(x)$が事前分布に関してなるであろう事前項としてみなせるようにし、$log(|det \frac{\partial{f(x)}}{\partial{x}}|)$がエントロピー項としてみなせるようにする。<font color="LightSteelBlue">どれがどれに当たるかはっきりわからないけど、VAEのコスト関数と対応付できる。</font>
このエントロピー項は(エンコーダに関する)データ周辺での局所的な体積の拡張を反映しており、デコーダ$f^{-1}$における収縮に変換される。<font color="LightSteelBlue">先述の、同様なデータがたくさんあった場合、それらを分離できるように潜在空間ではそのデータたちが占める体積が大きくなる話。</font>
同様に、変分基準でのエントロピー項は近似事後分布が堆積を占めることを推奨し、デコーダから見ると減少になる。完全な再構成の結果は、ノイズをトップレベルの$h$でモデリングする必要があり、一方、これらの他のグラフィカルモデルでは一般的に条件付きモデル$p(x|h)$で対処される。

また、２つのアフィンカップリングレイヤと事前分布にガウス分布を持つ**NICE**モデルは変分基準を**reparametrization trick (Kingma and Welling, 2014)**と組み合わせることは組$(x, \epsilon)$の結合尤度を効率よく最大化できることがわかった。$\epsilon$は任意のノイズ変数。付録C参照。

確率密度関数の変数変換の式は逆変換のサンプリングで際立って使用される(都合の良いことに、本論文で使用しているサンプリングである)。

* 独立成分分析(**Independent component analysis (ICA) (Hyvarinen and Oja, 2000)**)や、より具体的にはその最大尤度の立式が、データの直行変換を学習しており、パラメータ更新間での高コストな直交化処理を要求する。
* **(Bengio, 1991)**でよりリッチな変換の族を学習することが提案されているが、提案された変換のクラスであるニューラルネットは、推定と最適化を実践的にやるための構造が不足している。
* **(Chen and Gopinath, 2000)**はガウス分布へのレイヤ化された変換を学習しているが、貪欲法であり、扱いやすいサンプリング処理は提案できていない。

* **(Rippel and Adams, 2013)**はこの変換を学習するアイデアを再導入したが、全単射の制約が満たせないため、尤度最大化の代わりとして正則化されたオートエンコーダのセッティングで強制した。
* 尤度の代わりでもっと原理的なものは、変分下限であり、これはアンサンブル学習**(Roberts and Everson, 2001; Lappalainen et al., 2000)**による非線形独立成分分析(ICA)**(Hyvarinen and Pajunen,1999)**で、また**(Kingma and Welling, 2014; Rezende et al., 2014)**では**Helmholtz machine (Dayan et al., 1995)**を使用して、成功している。
* **Generative adversarial networks (GAN)(Goodfellow et al., 2014)**もシンプルな(例えば階乗の)分布をデータ分布に変換することをモデルに学習させるが、それ以外の方向へ向かうエンコーダを必要としない。<font color="LightSteelBlue">潜在空間へ向かう、という意味だろう。GANにはエンコーダはない。</font>GANは推定の難しさをGANのサンプルとデータとを識別するネットワーク<font color="LightSteelBlue">(ディスクリミネータ)</font>を学習することで回避する。この識別ネットワークはGANの生成モデルに、どうやって訓練データと見分けられない出力を作るか伝える訓練シグナルを出す。

VAE同様、**NICE**も推定の難しさを回避するのにエンコーダを使うが、こちらは決定論的である。対数尤度は計算可能で、訓練にサンプリングが不要である(データの逆量子化は別)。<font color="LightSteelBlue">逆量子化？</font>
計算可能にするための**NICE**の三角構造は他の計算可能な密度モデルの族である**neural autoregressive networks (Bengio and Bengio, 2000)**でも使用されるが、これには近年成功した**neural autoregressive density estimator (NADE) (Larochelle and Murray, 2011)**も含まれる。実際**NADE**有向グラフモデルに含まれる隣接行列は厳密な三角行列である。しかし、要素ごとの自己回帰手法は、画像のような高次元データの生成タスクでは、伝承サンプリングの計算コストを増加させ並列化できなくする。１つのカップリングレイヤを使った**NICE**は２つブロックがあるNADEのブロック版とみなせる。

##5. 実験
###5.1. 対数尤度と生成
**NICE**を

* **MNIST (LeCun and Cortes, 1998)**
* **Toronto Face Dataset(TFD) (Susskind et al., 2010)**
* **the Street View House Numbers dataset (SVHN) (Netzer et al., 2011)**
* **CIFAR-10(Krizhevsky, 2010)**

で訓練した。**(Uria et al., 2013)**に従い、データを**逆量子化**する。$\frac{1}{256}$の一様ノイズをデータに加え、逆量子化後に$[0,1]^{D}$に収まるようにリスケールした。**CIFAR-10**については、$\frac{1}{128}$の一様ノイズを加え、$[-1,1]^{D}$に収まるようにした。<font color="LightSteelBlue">逆量子化は一様ノイズを加えたこと?</font>

使用したアーキテクチャは４つのカップリングレイヤのスタックで、最後のステージで**diagonal positive scaling** (指数関数$exp(s)$でパラメータ表示した)によるスケーリングを使用。**TFD**データセットは近似白色化、**SVHN, CIFAR-10**はZCA白色化を使用した。入力空間を奇数要素($I_1$)と, 偶数要素($I_2$)で分割したので、式は、

```math
\begin{align}
h_{I_1}^{(1)}&=x_{I_1} \\
h_{I_2}^{(1)}&=x_{I_2} + m^{(1)}(x_{I_1}) \\
\\
h_{I_2}^{(2)}&=h_{I_2}^{(1)} \\
h_{I_1}^{(2)}&=h_{I_1}^{(1)} + m^{(2)}(x_{I_2}) \\
\\
h_{I_1}^{(3)}&=h_{I_1}^{(2)} \\
h_{I_2}^{(3)}&=x_{I_2}^{(2)} + m^{(3)}(x_{I_1}) \\
\\
h_{I_2}^{(4)}&=h_{I_2}^{(3)} \\
h_{I_1}^{(4)}&=x_{I_1}^{(3)} + m^{(4)}(x_{I_2}) \\
\\
h&=exp(s)\odot h^{(4)}
\end{align}
```
カップリング関数$m^{(1)},m^{(2)},m^{(3)},m^{(4)}$はすべて出力がreluユニットのディープニューラルネットである。各カップリング関数について同じネットワークアーキテクチャを用いた。MNISTは１０００ユニットの隠れ層が5層、TFDは5000ユニットが4層、SVHNとCIFAR-10は2000ユニットが4層である。

**MNIST, SVHN, CIFAR-10**の事前分布には標準ロジスティック分布、**TFD**には標準ガウス分布を使用した。

モデルは対数尤度$log(p_H(h)) + \sum_{i=1}^{D}s_i$を最大化して、学習率$10^{-3}$, モメンタム0.9, $\beta_2=0.01, \lambda=1, \epsilon=10^{-4}$のAdaM(**Kingma and Ba, 2014**)で訓練された。1500エポック後のバリデーションでの対数尤度で最も良いモデルを選択した。

テスト時の対数尤度は、**MNIST**で1980.50, **TFD**で5514.71, **SVHN**で11496.55, **CIFAR-10**で5371.78。これを対数尤度に関して既知の最高結果(下限ではあるが)である**deep mixtures of factor analysers (Tang et al.,2012)**と比較した。後者は**TFD**で5250,**CIFAR-10**で3622である。**表4参**照。連続値MNISTでの生成モデルについては一般的に**Parzen window estimation**で評価されるので、正当な比較はできない。訓練したモデルで生成されたサンプルは**図5**参照。<font color="LightSteelBlue">このタイプのモデル動かしたことないので推測だが、訓練後にパラメータ固定した上でテスト画像入力すれば、(1)式の尤度が出力されるので、それでこの評価ができるんだろう。
あとこれのすごいところはエンコーダとデコーダが可逆なので、別途デコーダを訓練する必要がない。(デコーダがエンコーダの関数になってる。3.2の加法的カップリングレイヤの説明を見る限りそう読める)</font>

**表3**:アーキテクチャと結果。"# hidden units"は隠れレイヤごとのユニット数。
<img src=https://qiita-image-store.s3.amazonaws.com/0/296108/091899d7-6483-4bfa-5d5c-1870a1fdcf6d.png>


**表4**:TFDとCIFAR-10での対数尤度。Deep MFAの数値は**(Tang et al., 2012)**のものだが、変分下限であることに注意。

<img src=https://qiita-image-store.s3.amazonaws.com/0/296108/469f2945-d620-e7e2-097b-dbf8e265124a.png>


<img src=https://qiita-image-store.s3.amazonaws.com/0/296108/5a8b101a-67e7-50d3-4394-705176754a23.png>
**図5**:NICEモデルから（偏りなく）得たサンプル。$h\sim p_{H}(h)$からサンプルし、$x=f^{-1}(h)$を出力した。<font color="LightSteelBlue">それぞれのデータセットで決めておいた事前分布からサンプルした値をデコーダに通して画像を得る。一瞬「事前分布からのサンプル」という操作が入ると決定論的にならない気もしたが、エンコーダ部分(x->h)は確かに決定論的。</font>

###5.2. 画像修復(INPAINTING)
訓練済み生成モデルでinpaintingを実装するナイーブな方法を考える。inpaintingのために観測された次元($x_O$)をその値へとクランプし、対数尤度を(入力をその元々の値の区間にとどめるために)ガウシアンノイズを付加し、ステップサイズ$\alpha_i=\frac{10}{100+i}$で**projected gradient ascent**を使って隠れ次元($X_H$)に関して最大化する。<font color="LightSteelBlue">projected gradient ascent</font>
$i$はイテレーションであり、確率的勾配更新に従って

```math
\begin{align}
x_{H,i+1}&=x_{H,i} + \alpha_i(\frac{\partial{log(p_X((x_O, x_{H,i})))}}{\partial{x_{H,i}}}+ \epsilon)\\
\epsilon &\sim \mathcal{N}(0, I)
\end{align}
```
$x_{H,i}$はイテレーションiにおける隠れ次元の値。結果はMNISTのテストサンプルで図6に示した。このタスク用に訓練されたモデルではないが、inpainting処理は質的に十分な性能を示している。ただし時折不審なモードが存在する。
<img src=https://qiita-image-store.s3.amazonaws.com/0/296108/34e9bee2-911a-c963-4ad2-10fe72617345.png>
**図６**:MNISTのinpainting。真ん中の画像では、行ごとにマスクの種類が異なる。上から下に、

* 行の上
* 行の下
* 奇数ピクセル
* 偶数ピクセル
* 左側
* 右側
* 真ん中(垂直方向)
* 真ん中(水平方向)
* 75%ランダム
* 90%ランダム

マスクされていないピクセルは真の値に固定し、尤度での**projected gradient ascent**によりマスクされたピクセルの状態を推定した。真ん中をマスクしたものは真の数字に関する情報がほとんど利用できない。

##6. 結論
本論文では、訓練データを分布が分解された空間に写像する、非常に非線形の全単射な変形を学習する新しいフレキシブルなアーキテクチャを提案し、対数尤度を直接最大化することでこれを実現するフレームワークを導入した。**NICE**モデルは効率的な**unbiasedな伝承サンプリング**を特徴とし、対数尤度で優れた結果を示している。

このアーキテクチャは**toroidal subspace analysis (TSA) (Cohen and Welling, 2014)**のような、本アーキテクチャの利点を利用できる他の手法でも訓練できる。

また、VAEとの関連についても言及した。**NICE**がそれらのモデルがもっと複雑な近似事後・事前分布の族も利用できるようにする、強力な近似推定ができることにも注目している。


#この記事のまとめ
尤度ベースの生成モデル。

* 対数尤度を直接計算できる
* 可逆なエンコーダ・デコーダ
* 上記を実現するための加法的カップリングレイヤ

理論的にきれいだと思った。

##展望

* 後継である**RealNVP (Dinh et al., 2016)**を読む
* VAEをちゃんと理解する