深層学習(Deep Learning)がバズワードになって何年目だ。
画像認識コンテストでDeepなヤツが優勝したのが2012年で4年前だ。
Deepの先駆者DBN[Hinton 2009]からだと7年か。
2014-2015の間だけでも1500もの関連論文が発表されているらしい。鬼のようだ。
軽く歴史を振り返ると、制限付きボルツマンマシンを「多段に積み上げた」(深層と呼ばれる所以)
Deep Belief Network[Hinton 2009]が新時代の幕上げだった。
Deepという名前もここから実用的に使われだしたっぽい、多分。
そして今、非常に気になってるのがVAEとGAN、そしてEBMにGANのテクを使ったヤーツ[Kim+ 2016]。
こいつらは生成モデルの最新技術なヤーツ達だ。
こいつらについてちょっと紹介したいので、その前に統計的機械学習とボルツマンマシンについてまとめたあと
この人類の希望達を語っていこうと思う。
別に論文じゃないし精査せずに抽象的に書いてく。厳密性や信憑性は求めないでください
ボルツマンマシン
制限付きボルツマンマシンとはなにか。
ボルツマンマシンというのは80年代から考えられていた。
全結合した無向なグラフネットワークを想像してほしい。
それにノードとノード間の結合についてエネルギーという概念を持ち出し、
確率的にグラフィカルモデルを定義しているのがマルコフ確率場というやつだ。
いいぞ、なんか脳の神経回路っぽい。
それの単純なモデルとして、ボルツマンマシンがある。
ちなみにこのエネルギーやらの概念だったりはボルツマン分布と呼ばれるもので、量子統計力学の分野から借りてきた概念だ。
気体分子の分布関数とかその辺の話であり、こいつで統計的機械学習の働きを試みたからボルツマンマシンという。
ボルツマンマシンは多層パーセプトロンとは違う道のりだということが伺える。
統計的機械学習の枠組みから生まれたものだ。
ボルツマンマシンも最尤推定を行う。
最尤推定というのは、(対数)尤度関数を最大にするもの。
ボルツマンマシンの対数尤度関数は別の解釈からこう考えることができる。
「経験分布(データ達の頻度をもとに分布にしたもの。データ分布)とボルツマンマシンの分布がどれくらい似てるか」
KL距離という「ふたつの確率分布がどれくらい似てるか(厳密には似てないか)」調べる方法で
対数尤度関数とKL距離の結果が一緒だから、この解釈ができる。
だから最尤推定は経験分布とボルツマンマシンを最も近づける方法と考えることができる。
対数尤度関数を最大にするには、微分して0。
微分して0にしたところで、解析的には一般的に解けないので、
数値計算の世界では御用達の勾配降下法を用いる。
地道にゴールを目指すやり方。
でもボルツマンマシンやばい。計算量がやばい。
勾配には、ノード全部の期待値を計算する必要がある。これが指数的に計算量爆発。
それを勾配更新の際に何回もすることになるから実用的じゃない。神に見捨てられた。
制限付きボルツマンマシン
Restricted Boltzmann Machine(RBM)。
ボルツマンマシンでは全結合だったけど、ここで二つの層に分けることにする。
可視層と隠れ層にわける。
そして、以下の制約をつける。
- 同層間は結合を持たない
- 異なる層で結合
これで、条件付き独立性が成り立つ。
たとえば可視層を固定したら、隠れ層の各変数は統計的に独立となる。
その逆もしかり。
可視層はそのままデータに対応させる。隠れ層とはなんのためにあるのか?
可視層には結合がない。でも、隠れ層を通して結合している。
隠れ層は「可視層のつながりを柔軟に表現」している層だと考えられる。
こんなにギリギリの制約付きのRBMも、多段に積めば表現力も増大する。
隠れ層を切り離して、次はそいつを入力層にしたRBMをつくれば、どんどん柔軟に表現してくれる。
これが多段、深層であり、ちょっと説明省くけどHintonはDeep Belief Networkをこのやり方で作った。
RBMの計算量問題とその対策
RBMは、条件付き独立性のおかげで、あの地獄の期待値計算についてカバーできる。
期待値計算をサンプル平均で近似するやり方である。
条件付き分布(独立性の恩恵)に従って交互にサンプルしていく。
理論上、無限回このギブスサンプリングを繰り返すとOK。
なぜなら、マルコフ性という性質である。
だから、この手法はMCMC(マルコフ連鎖モンテカルロ法)と一般的に呼ばれる機械学習の手法の一種である。
しかし、ぶっちゃけいつ収束したと判断すればいいかわからないし、遅い。
そこで、HintonがContrastive Divergence法というさらなる近似テクで、
数回のサンプリングで(経験上1回でいい)収束する早技を編み出した。
こんなに計算が速いのにも関わらず、性能もあまり低下しない。
なぜうまくいくのか?というのは、
条件付き分布を級数展開したときに、「無視してヨクネ?」という剰余項を打ち切ったからである。
まさに近似といった感じ。
確定的?確率的?深層学習は2タイプ
ボルツマンマシン系による深層学習モデルを、確率的深層学習という。
それに比べ、2014-15年にクソ流行ってた、みんなが仕切りに実装してた、
多層パーセプトロン系による深層学習モデルを、確定的深層学習という。
ボルツマンマシン系は、2014-15でバリバリ流行ったCNNやLSTMとは明らかに雰囲気が違う。
さきに言ったように、統計的機械学習の枠組みからうまれたボルツマンマシンは、
多層パーセプトロンとは違う生まれだ。
多層パーセプトロンにみられる確定的に、つまりは識別関数を多層に重ねたのが、
確定的深層学習といえる。その拡張が、画像に強いCNN、時系列を扱えるRNNやLSTM。
ボルツマンマシンにもCD法が生まれるまで限界があったし、
多層パーセプトロンにも限界があった。
誤差逆伝播法があれば、どんな深層でもいけるかと思ったけど、
ボルツマンマシンが誕生した80年代にはもう限界がみつかっていた。
勾配が消失する問題があった。深層すぎると失敗するのだった。
でも、活性化関数ReLUやユニークな正則化方法のDropOutなどのおかげで、
勾配消失問題や過学習をうまく防ぎつつ、深層にしまくって精度をあげていった。
これがビッグデータ、高速GPU処理の時代とのマッチもあり、バズるきっかけになった。
そんな確定的深層学習はつまり、確定的にデータを扱っている。
これが結構実装しやすくて、こぞってフレームワークが開発されたおかげで、
バズってる理由はその実装しやすさもある。
今でも、最強の識別器を作ろうと、どんな実装にするか、我こそが先にと皆モデル構築してる。
さて、
ボルツマンマシンたちは統計的機械学習出身で、つまりベイズの定理が絡んでくる。
ベイズの定理は条件付き確率をひっくり返すときに使うもので、それが生成と推論をひっくり返したりできる。
P(x|z)をデータがとある確率分布に生成されたと考えれば、
ベイズの定理でひっくり返して
P(z|x)をデータからその確率分布を推論する、と考えられる。
条件によって確率的にあーなったりこーなったりする、それが確率的深層学習という位置づけになる。
確率的のほうは確定的に知名度が負けてしまった。
CD法で最初はリードしたと思ったら、いつの間にかあっちのほうが知られてる。
最近DeepLearningに食いついて、とりあえず実装したエンジニアとかは、ボルツマンマシン全然知らないと思う。
しかし、ベイズの力は侮れないものがある。
さきに言ったように、「データがどのように生成されたか、その確率分布(メカニズム)をガチで推論」(生成モデル)できたら、
新たなそっくりのデータが生成できるし、(まったくその人と同じ筆跡の文字とか)
データに隠れた「本質」というものを知ることができる。
そんな夢のある生成モデルについて、最近かなりヤベー激アツなもの達が提案されてきている。
それがVariational Auto Encodersだったり、Generative Adversarial Networksだったりする。
長くなってきたので、ここでもったいぶって次の記事に書くことにする。