Deep Learningの分野で最も有名な手法の一つであるDeep Belief Nets(DBN) [Hinton06]は,研究者がアルゴリズムを作るのではなく,それ自体も機械学習にやらせましょうという動機で生まれたアルゴリズムです.DBNではまるで一昔前にやたら流行ったニューラルネットワークのように各ノードを層状に配置し,それらのパラメータをRestricted Boltzmann Machine(RBM)と呼ばれるモデルを用いて学習することによって自動的に特徴ベクトルを生成します.これが既存手法を大きく超える精度を出してしまったためにDeep Learningは一躍有名となり,ニューラルネットの再来か,機械学習は人工知能の夢を見るか,みたいに言われているような状況です.最近ではGoogleがネコのニューロンを自動的に学習したとかでニュースになっていました.
さて,そのような状況にもかかわらず,そのDeep Belief Netsやその改良版であるDeep Boltzmann Machineを学習するためには,まずその基礎となっているRBMについて学ぶ必要があります.しかしそのRBMですらお世辞にもわかり易いものとは言えず,しかもその最終的な更新式やその導出過程についてきちんと書いている文献は今まで確認したところ存在していません(*1).「チュートリアルや論文だけでは良く分からないので,実際に手を動かして確認したい.だがその計算過程は公開されていないため,結局良く分からないままで終わる」ことが多いように思われました.
ということで,RBMの計算過程について書いた個人用のpdfファイルを公開してみることにします.外部に見せるということで多少文章を詳しくしましたが,これ単体で学ぶのではなく他の資料と比較しながら見るとベターかと思います.多分数式は間違ってないと思いますが,何かありましたらご一報頂けると幸いです.
http://dl.dropbox.com/u/2048288/RestrictedBoltzmannMachine.pdf
*1 Deeplearning.netの式は比較的詳しいですが,実際に計算したところ微妙に間違えている箇所を数ヶ所発見しています
6 件のコメント:
REZOOさんはじめまして。
Deep Leaningについて非常に基本的なことがわかってないので、質問させて頂きます。
私の認識ではRestricted Boltzmann Machine(RBM)は入力パラメタを変換して
各ベクトルの共起関係が独立になるようなベクトルを返す、ベクトル=>ベクトルの変換器だとおもっているのですが。
① 2値分類、多クラス問題、回帰問題にせよ、最後の出力はノルムでないとまずいと思うのですが、
ノルムにする部分はRBMから出されたベクトルを利用して独自に学習するのでしょうか?
② ①が正しい場合、RBMは入力パラメタを独立性が高いパラメタに変換しただけなのですが、
この操作でどうして分解能が高まるのでしょうか?
もしお手隙でしたら、よろしくお願いします。
> 私の認識ではRestricted Boltzmann Machine(RBM)は入力パラメタを変換して
> 各ベクトルの共起関係が独立になるようなベクトルを返す、ベクトル=>ベクトルの変換器だとおもっているのですが。
ええと、確かにベクトル=>ベクトルの変換器とは言えるとは思うのですが、
各ベクトルの共起関係に関しては、簡単に独立であるとは申し上げにくいです。
まず、P(h)は独立ではありません。つまりP(h)=P(h_1)...P(h_M)ではありません。
ただ、P(h|v)に関しては独立となります。つまりP(h|v)=P(h_1|v)...P(h_M|v)です。
RBMやDBN, DBMが行っている学習はすべて以下の考え方が元になっています。
隠れ変数hと可視変数vから成るグラフィカルモデルP(v,h;Θ)をまず仮定します。
これは観測する度にすべての変数の値((v,h)のペア)が返されるような分布です。
ここで、我々は今可視変数だけが見えているものとすると、この周辺分布P(v;θ)は与えられた結合分布を
hに関して周辺化を行い、hを消去することによって達成できます。
この分布P(v;θ)を、どうにかして現在与えられている観測分布Q(v)に近づけるよう、θを変化させていきます。
これはKL距離の最小化、言い換えると対数尤度を最大化させることで行えます。RBMが行っている事はそれだけです。
ただし、なるべくPをQに近づけようとした場合、なるべく情報が重複しないようにパラメータを選んだ方がよりQに近づきますので、
その過程で自然とその関係がSparseになるようパラメータが決定されていくのだと理解しています。
① 出力がノルムである必要はありません。返される値は、あくまで『可視変数vが与えられたときの、隠れ変数h_jの確率p(h_j|v)』というだけです。
実際の分類問題ではこのベクトルを用いることで、SVM等を用いて判別していくのが一般的だと思います。
② RBMが行っているのは、少数の変数によって多次元のベクトルを説明することを試みる無教師学習です。
そういった意味では主成分分析と似ているのですがRBMは非線形であり、
より多次元ベクトルの本質を掴みやすい構造であるため、
分解能(精度向上という意味で捉えたのですが、合っているでしょうか?)は高まっているとは思います。
わざわざはてなブログにコメントありがとうございます。
>ただ、P(h|v)に関しては独立となります。つまりP(h|v)=P(h_1|v)...P(h_M|v)です。
そうでした。解説の式にもそう書いてありました。すいませんでした。
>実際の分類問題ではこのベクトルを用いることで、SVM等を用いて判別していくのが一般的だと思います。
そうなのですね。了解しました。
>なるべくPをQに近づけようとした場合、
>なるべく情報が重複しないようにパラメータを選んだ方がよりQに近づきますので、
>その過程で自然とその関係がSparseになるようパラメータが決定されていくのだと理解しています。
>そういった意味では主成分分析と似ているのですがRBMは非線形であり、
>より多次元ベクトルの本質を掴みやすい構造であるため、
>分解能(精度向上という意味で捉えたのですが、合っているでしょうか?)は高まっているとは思います。
分解能=精度向上という意味で言いました。
実際の運用をどうすればいいのか、チンプンカンプンだったので非常にためになります。
いまでもチンプンカンプンですが(笑)
本当にありがとうございます。
REZOOさんはじめまして。
PDF拝見させていただきました。非常に為になるドキュメントをありがとうございます。
一点気になったのですが、(32)の式はガウス関数ではなくシグモイドのままなのでしょうか?
エネルギー関数から導出したできるほど詳しくないのですが、(31)式との対称性(?)からこちらだけシグモイドなのが不思議に思いました。
はじめまして.
Gaussian RBMでも隠れ素子hの値は二値であるため,こちらはシグモイド関数で問題ないですね.
別にhをvと同様連続値と定義することもできるのですが,あまりおすすめはなされていないのが現状です[1].
[1] http://www.cs.toronto.edu/~hinton/absps/guideTR.pdf
Saitoさん
お教えいただきありがとうございます。
また、教えて頂いたPDFも読んでいくことで、もやもやしていた部分をだいぶスッキリさせることができました。
重ね重ね感謝いたします
コメントを投稿