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

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

NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATIONを読んだのでメモ

はじめに

NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATIONを読んだのでメモ.

基本アイディア

Normalizing flowにおいて,変数変換における関数fニューラルネットを使って定義したという話(厳密には,議論の展開的にnormalizing flowは関係なく単純な変数変換の話のみ.ただ,最終的には変数変換を複数回行うため意味合いとしては変わらない).前に読んだVariational Inference with Normalizing Flowの先駆け的なもの.

まずデータxを二つのブロック(x_1,x_2)に分け,以下のような変換を定義する.

\displaystyle
y_1=x_1,\:y_2=x_2+m(x_1)

mが変換の中心で,ReLUとMLPによる非線型変換を表し,データの一方を使ってもう一方を変換することを表現している.変換をこのように定義してあげると各mにおいてunit jacobian deteminantを持ち,逆変換も以下のように定義できるためNormalizing Flowとして良く機能するでしょうという話.

\displaystyle
x_1=y_1,\:x_2=y_2-m(y_1)

以下,この式が導かれるまでの話.

non-linear independent components estimation

ここでの問題設定は最尤推定によりデータ分布を単純な分布へ移す連続かつ微分可能な変換を学習すること. 基本的にはnormalizing flowをベースとしているので以下の変数変換の関係性を用いる.

\displaystyle
\log p_X(x)=\log p_H(f(x))+\log\left|\mathrm{det}\left(\frac{\partial f(x)}{\partial x}\right)\right|

p_H(h)は事前分布で,扱いやすい等方性のガウス分布などを考えている(ただし,固定でなく学習してもよいとのこと).もしそのような分布で事前分布が定義されていたとしたら,以下のnon-linear independent components estimation (NICE) criterionが得られる.

\displaystyle
\log p_X(x)=\sum_{d=1}^D\log p_{H_d}(f_d(x))+\log\left|\mathrm{det}\left(\frac{\partial f(x)}{\partial x}\right)\right|

単純に第1項目のf(x)f_d(x)に変わっただけでf_d(x)f(x)=(f_d(x))_{d\leq D}を満たす関数.

今までの議論からNICEは対数尤度を増加させる逆変換可能なデータセットの前処理を学習していることがわかる.さらに変数変換の関係性が正則化として働いており任意に尤度が増加することを防いでいる.

モデルの構成

モデルはforward(encoder f)とbackward(decoder f^{-1})どちらにおいてもヤコビアンが扱いやすくstraightforwardに計算ができなければならない.仮にニューラルネットのように多層構造(f=f_L\circ\dots\circ f_1)として構成した場合,ヤコビアン行列式は各レイヤーのヤコビアン行列式の積になり嬉しい.そこでまずはfを初歩的な構成で定義することから考える.

まず一つの手段としてアフィン変換(ニューラルネット)を考える.ここで満たさなければいけないことは,ヤコビアンや逆変換が容易に計算可能なことである.そのような行列として三角行列があげられる.特に正則な行列はLU分解によって上三角行列と下三角行列の積に分解できる.この恩恵を受ける一つの構成方法はニューラルネットの重みを三角行列にし,活性化関数が全単射であるものを選ぶことであるが,これは制約が強すぎてモデルのデザインが限られるのであまり良くない.

そこで別な手としてヤコビアンが三角行列になる全単射の変換を考える.これならヤコビアン行列式が容易に計算できるため問題がない.そこで次のような変換を考える.

\displaystyle
y_{I_1}=x_{I_1},\:y_{I_2}=g(x_{I_2};m(x_{I_i}))

基本アイディアのところで出てきた式と同じで,D個のデータxI_1,I_2(d=|I_1|)に分けており,g:\mathbb{R}^{D-d}\times m(\mathbb{R}^d)\rightarrow\mathbb{R}^{D-d}は逆変換可能かつ,x_{I_2}x_{I_1}を使って変換するような関数を表しており,ここではカップリング則(coupling law)と呼ぶ.このように二つのデータに分けることでy_{I_1}x_{I_1}微分すれば単位行列になり,x_{I_2}微分すれば0行列になる.そのためヤコビアン

\displaystyle
\frac{\partial y}{\partial x}=
\begin{bmatrix}
I_d\:\:\:\:\:0 \\
\frac{\partial y_{I_2}}{\partial x_{I_1}}\:\:\:\frac{\partial y_{I_2}}{\partial x_{I_2}}
\end{bmatrix}

とうまいことブロック三角行列になる.よってヤコビアン行列式\mathrm{det}\frac{\partial y}{\partial x}=\mathrm{det}\frac{\partial y_{I_2}}{\partial x_{I_2}}と簡単になる.さらに逆変換も

\displaystyle
x_{I_1}=y_{I_1},\:x_{I_2}=g^{-1}(y_{I_2};m(y_{I_i}))

とかける.mをカップリング関数(coupling function),変換をカップリング層(coupling layer)と呼ぶ.

カップリング則として加法カップリング則(additive coupling law)を選べば,g(a;b)=a+bとなり,

\displaystyle
y_{I_2}=x_{I_2}+m(x_{I_i}) \\ \displaystyle
x_{I_2}=y_{I_2}-m(y_{I_i})

となる.すると逆変換を陽に計算する必要はなく,カップリング関数にどのようなものを使用しても問題がなくなる.例えば,|I_1|=d,\:|I_2|=D-dであることに注意をすれば,md次元入力,D-d次元出力のニューラルネットとして構成することができる.さらに嬉しいことに,y_{I_2}x_{I_2}による微分単位行列になることからヤコビアン行列式は常に1となる.

そのほかのカップリング則として乗法カップリング則(multiplicative coupling law)g(a;b)=a\odot b,\: b\neq 0やアフィンカップリング則(affine coupling law)g(a;b)=a\odot b_1+b_2,\: b_1\neq 0を選ぶことができる.ただしこの論文では計算の安定性等から加法カップリング則を使っている.

加法カップリング則を使えばヤコビアン行列式が常に1で計算が楽になって嬉しいということだったが,変数変換の関係からカップリング層を導入しても分布自体は変化がない.そこでスケーリング行列と呼ばれる対角行列を導入する.これを使うことでヤコビアンの対角成分が1ではなくスケーリング行列Sの対角成分に等しくなり,ヤコビアン行列式\prod_i S_{ii}となる.結果としての加法カップリング則にスケーリング行列を導入した際の目的関数は

\displaystyle
\log p_X(x)=\sum_i[\log p_{H_i}(f_i(x))+\log |S_{ii}|]

となる.

最後に実験的なところとして,この論文では事前分布として以下のような因子分解可能な分布を使った.

\displaystyle
p_H(h)=\prod_{d=1}^Dp_{H_d}(h_d)

基本的には問題に合わせてガウス分布かロジスティック分布を使えばいいとのこと.

\displaystyle
\log p_{H_d}=-\frac{1}{2}(h_d^2+\log 2\pi) \\ \displaystyle
\log p_{H_d}=-\log(1+\exp(h_d))-\log(1+\exp(-h_d))

以上から,NICEの良いところは変数変換に用いることのできる関数の自由度,つまり,活性化関数にReLUのような全単射でないものを使えるし,batch normやresnetのような構造を入れることも可能.しかもコスト関数にL2のような再構成誤差に依存しない良さがある.ただし,スケーリング行列の点は個人的には少し違和感。。。

まとめ

Variational inference with normalizing flowを読んだ後なのでスケーリング行列あたりでこれでいいのか感がでたけど面白かった.Variational inference with normalizing flowで急に出てきた変換の関数の形の意味がよくわかった点は勉強になった.