Goodfellow,Bengio,CourvilleさんのDeep Learning本の18章まとめ

# Goodfellow,Bengio,CourvilleさんのDeep Learning本の18章まとめ

* 重要と思った部分だけ独断で抽出しています.
* 本当にメモ書き程度です. すみません.
* 間違っている記述があるかもしれません.
* 心眼で書いている部分があるかもです.
* Score matchingのくだりは正直よくわかっていないです.

## 18.Confronting the Partition Function
* 16章でやったように(無向グラフィカルモデルとかでは)規格化されていない確率分布がよく現れる. このとき規格化するためには積分をする必要があるが一筋縄ではいかない.

### 18.1 The Log-Likelihood Gradient of Undirected Models

* 規格化されていない無向モデルの確率分布の勾配を求める難しさはParial function,$\int \bar{p}(x) dx$に起因する. ($\bar {p}$は規格化されていないという意味)

* 規格化された対数尤度の勾配は以下のようになり第１項をpositive phase, 第2項をnegative phaseと呼ぶ.
$\nabla_{\theta} \log p(x,\theta)=\nabla_{\theta}\log \bar{p}(x;\theta)-\nabla_{\theta}\log Z(\theta) $
* この章ではもっぱらnegative phaseの取り扱いについて学ぶ. negative phaseはそのままだと難しい. positive phaseはモデルが簡単だったらまあできる.
* $E_{x\sim p(x)}\nabla \log(\bar{p}(x))$と$\nabla _{\theta}\log Z$が等しいことが分かる.
* positive phaseを経験分布からの対数尤度$\log \bar{p}(x)$を増加させること, negative phaseをmodelの分布からの対数尤度$\log \bar{p}(x)$を減少させることと考えられる.

### 18.2 Stochastic Maximum Likelihood and Contrastive Divergence

* まず18.1を踏まえた上で一番,　規格化されていない確率密度関数における愚直なMLEのアルゴリズムは以下を繰り返すこと
   * 収束するまで1から4を繰り返す.
   * 1: バッチsample${x^{(1)},...,x^{(m)}}$をtraining setから取ってくる.
   * 2: positive phase:上のバッチに基づく$\log(\bar{p}(x))$の平均をgとする.(positive phase) 
   * 3: negative phase:モデルからの$\log(\bar{p}(x))$を求めたい.そこで適当に${x^{(1)},...,x^{(m)}}$を初期化してGibbs samplingでサンプリングして$\log(\bar{p}(x))$を求める.(具体的にはk回後のサンプルを使用し,その平均ととる)その数字をgから引く.
   * 4: $\theta \leftarrow \theta + \epsilon g$とパラメータをupdate
* 上のアルゴリズムは計算論的な観点から実用性にかけているに注意. パラメータの更新のたびにGibbs samplingしていたら大変すぎる.
* 先ほども書いたよう二つの力がせめぎあっている.　つまり観測されたデータ点のモデルを引き上げようという力とモデルからサンプルされた点のモデルを引き下げようという力.
* 上の問題点を改善したものが以下のContrastive divergenceとなる.
   * 収束するまで1から4を繰り返す.
   * 1:　バッチsample${x^{(1)},...,x^{(m)}}$をtraining setから取ってくる.
   * 2:　positive phase:上のバッチに基づく$\log(\bar{p}(x))$の平均をgとする.(positive phase)
   * 3:　negative phase:モデルからの$\log(\bar{p}(x))$を求めたい.そこで上のバッチを初期値としてGibbs samplingでサンプリングして$\log(\bar{p}(x))$を求める.　(具体的にはk回後のサンプルを使用し,その平均ととる,今回はkは少なくて良い)それをgから引く.
   * 4: $\theta \leftarrow \theta + \epsilon g$とパラメータをupdate
* データを初期値に利用することでサンプリングの回数を減らしている.(kが少なくてもよい)
* 最初はまだモデルが正確でないのでnegative phaseは正確ではないが, やがてモデルが正確になってくるとnegative phaseも正確になってくる.
* CDは近似的なアルゴリズムである.　モデル分布においては確率が高いところがあっても経験分布ではそうでないようなところはサンプリングすることが難しい. (spurior nodesという)
* RBMだと使えるがもっとdeepなモデルでは実用的でない.なぜならhidden unitのサンプリングをすることが難しいから.
* CDはAutoencoderに似ているところがある.
* Pretrainingに使える. つまり浅い層をstackさせていくやり方.
* CDの欠点を補うものとしてSMI(stochastic maximum likelihood)が考えられた.
   * 適当にまず$\{\bar{x}^{(1)},...,\bar{x}^{(m)}}$を初期化
   * 収束するまで1から4を繰り返す
   * 1:　バッチsample${x^{(1)},...,x^{(m)}}$をtraining setから取ってくる.
   * 2:　positive phase:上のバッチに基づく$\log(\bar{p}(x))$の平均をgとする. (positive phase)
   * 3:　negative phase:モデルからの$\log(\bar{p}(x))$を求めたい. そこで${x^{(1)},...,x^{(m)}}$を初期値としてGibbs samplingでサンプリングして$\log(\bar{p}(x))$を求める.(具体的にはk回後のサンプルを使用し, その平均ととる)その数字をgから引く.そして$\{\bar{x}^{(1)},...,\bar{x}^{(m)}}$を更新.
   * 4:　$\theta \leftarrow \theta + \epsilon g$とパラメータをupdate
* CDよりspurious nodeへと行きやすいという利点がある. (データ点から毎回初期化するわけではないから )
* SGDが早すぎるとあまりサンプリングしないで終わることになるので注意

### 18.3 Pesudolikelihood

* partition functionを計算せずに規格化されていない確率分布から最尤推定を行いたい
* 比になっていればpartion functionは打ち消すことができる
* Pesudolikelihoodとは比の形をした条件付き分布のことである. Partition functionを知らなくても計算することができる. 
* 具体的にn個変数があった場合,　n-1個の変数をmarginalizeしたいとする.　厳密にやると

$\log p(x) = \log p(x_1) + \log p(x_2|x_1) + log p(x_3|x_2,x_1)+・・・+ $

を$x_1$から$x_{n-1}$にかけて周辺化する. すると指数orderの計算量となる.
そこで

$ \sum_{i} \log p(x_i|x_{-i})$

を考える. もちろん$\log p(x)$とは違うが計算量は減る.これをpseudolikelihoodという. 

* Pesudolikelihood最大化することで得られる推定量は漸近的に一致性がある.(つまり真の値に確率収束する)
* Generalized pseudolikelihood は上の一般化.
* Pseudolikelihood estimatorは密度比推定やsamplingなど良いモデルを必要とするタスクには向いていない. むしろimputationぐらいのタスクに向いている.
* 変分推論の文脈では使えない. しかしDeep learningでも有用なこともある.
* SMLより計算コストが高い. いろいろ足し合わせる必要あるから.

### 18.4 Score matching and Ratio Matching
* モデルとデータ(経験分布に基づく)スコアを近づけるようにパラメータを求めようというのがScore matching. 推定量は漸近的一致性を持つ.
* partition functionを計算する必要はない.
* 結果的にある式の最小化をすればいいことになる.
* その式に２階微分があることが欠点. 複雑なモデルにおいてモデルの微分を計算することは困難. また離散データは扱えないことも欠点.
* それらを発展させたratio matchingはbinary dataにも適用可能である.

### 18.5 Denoising Score Matching
* 正則化項を付け加える.
* つまり経験分布をsmoothingしたものを利用してscore matchingを行う.

### 18.6 Noise-Contrastive Estimation

* SML, CDはpartition functionの勾配を計算した. Pesudolikelihood, Score matchingはpartition functionの計算を避けた. Noise-Contrastive Estimationはどちらの手法とも異なる手法.
* $\log p_{model}(x) = \log \bar{p}_{model}(x;\theta)+c$ として$\theta$と$c$を同時に学習する.

* 普通に最尤法を使ってしまうと$c$をただ高くすればよいことになるので違った方法を考える.
* $p_{noise}(x)$と$y$という補助変数を導入してGAN的な枠組みで最適化を行う.
* 変数が少ないときにしか使えないことが欠点.

### 18.7 Estimating the Partition Function

* モデルを比較したいときモデルエビデンスの比較をする必要がある.このときpartion functionの計算がやはり必要. つまり規格化されていない$\bar {p_{A}}(x;\theta_{A})$と$\bar {p}\_{B}(x;\theta _{B})$があるときにモデルエビデンスの比の対数にはpartion fucntionの比が式としてでてくる.
* 例として$\tilde {p}\_{0}$があってこの正規化定数が定まっているとする.
すると規格化されていない$\tilde {p}_{1}$ の正規化定数はimportance samlingにより

$\frac{Z_{0}}{K}\sum \frac{\tilde p_{1}(x^{k})}{\tilde p_{0}(x^{k})} s.t. x^{k} \sim p_{0}$

* 同様にしてpartion functionの比は以下のように求められる.

$\frac{1}{K}\sum \frac{\tilde p_{1}(x^{k})}{\tilde p_{0}(x^{k})} s.t. x^{k} \sim p_{0}$

* 残念ながら$p_{1}$に十分近くて正規化定数を計算できるような$\tilde p_{0}$はそうそう存在しない.
* 実際に$\tilde p_{0}$と$\tilde p_{1}$の比の分散が大きいと近似も不正確になる.
* そこでannealed importance samplingとbridge samplingで出てきた.

#### 18.7.1 Annealed Importance Sampling

*  基本的にはimportance samplingと同じ. $\frac{Z_{1}}{Z_{0}}= \prod \frac{{Z_{\eta_{j}+1}}}{{Z_{\eta_{j}}}}$ を利用する.
*  だんだん$p_{0}$から$p_{1}$へと移る中間的な分布を複数個用意する. 具体的には$p^{\eta_{j}}_{1}p^{1-\eta\_{j}}\_{0}$とするとよい.
*  上の分布からsamplingしてそれとtargetの分布との比を重みとする.

#### 18.7.2 Bridge Sampling

* 　AISと違って一つの中間となる分布を利用する. $p_{0}$と$p_{1}$となるべく重なりが大きいような分布を選ぶ. 
* 　最適解にpartion functionの比が出てくるので一見使えないように見えるが繰り返しのアルゴリズムを使えばどうにかなる.
* 　$p_{0}$と$p_{1}$がそんなに離れていなかったらbridge samplingのほうがよい.

## 参考文献

http://www.deeplearningbook.org/