0

私は RBM を 2 か月間研究し、途中で Python を使用し、あなたの論文をすべて読みました。私は問題を抱えています。ソースに行ってみませんか?せめて、あなたが返事をする時間があるかもしれないというチャンスをつかもうと思いました。

私の質問は、制限付きボルツマン マシンの対数尤度に関するものです。非常に小さいモデルを除くすべてのモデルで正確な対数尤度を見つけることは難しいため、対照的な発散、PCD、疑似対数尤度などを導入することを読んだことがあります。小型モデル?

この式の定義をいくつか見つけましたが、すべてが異なっているようです。Tielemen の 2008 年の論文「尤度勾配への近似を使用した制限付きボルツマン マシンのトレーニング」で、彼は対数尤度バージョンのテストを実行して、他のタイプの近似と比較しますが、彼が使用した公式については述べていません。私が見つけることができる最も近いものは、エネルギー関数をパーティション関数で使用する確率ですが、構文を完全に理解していないため、これをコーディングできませんでした。

Bengio らの「Representation Learning: A Review and New Perspectives」では、対数尤度の方程式は、sum_t=1 から T (log P(X^T, theta)) に等しく、sum_t=1 から T( log * sum_h in {0,1}^d_h(P(x^(t), h; theta)) ここで、T はトレーニング例です。これは 11 ページの (14) です。

唯一の問題は、他の変数が定義されていないことです。x はトレーニング データのインスタンスだと思いますが、上付き文字 (t) は何ですか? また、theta は潜在変数 h、W、v であると仮定します…しかし、これをどのようにコードに変換しますか?

私が求めているのは、変数が何を表しているかを理解できるように、特定のモデルの対数尤度を見つけるためのコード (Python、疑似コード、または任意の言語) アルゴリズムを教えてもらえますか? そうすれば、単純なケースでは、正確な対数尤度を見つけて近似値と比較し、近似値が実際にどれだけ優れているかを確認できます。

4

2 に答える 2

2

以下のように、RBM の下でデータセットの対数尤度を計算できXます (私は W、b、および d で Bengio の表記法を使用しています)。これは、RBM 尤度を計算するための実用的なアルゴリズムではありません。x と h の長さは指数関数的であり、どちらもバイナリ ベクトルと見なされます。

また、最初に h の限界を計算することで、より効率的な合計を計算できます ( http://www.deeplearning.net/tutorial/rbm.html#rbm - 「自由エネルギー式」を参照)。ただし、これは以下には含まれません。

import numpy as np

# get the next binary vector
def inc(x):
 for i in xrange(len(x)):
  x[i]+=1
  if x[i]<=1: return True
  x[i]=0

 return False

#compute the energy for a single x,h pair
def lh_one(x,h):
 return -np.dot(np.dot(x,W),h)-np.dot(b,x)-np.dot(d,h)

#input is a list of 1d arrays, X
def lh(X):
 K=len(X[0])
 x=np.zeros(K)
 h=np.zeros(K)

 logZ=-np.inf

 #compute the normalizing constant
 while True:
  while True:
   logZ=np.logaddexp(logZ,lh_one(x,h))
   if not inc(h): break
  if not inc(x): break   

 #compute the log-likelihood
 lh=0
 for x in X: # iterate over elements in the dataset
  lhp=-np.inf
  while True: #sum over all possible values of h
   lhp=np.logaddexp(lhp,lh_one(x,h))
   if not inc(h): break
  lh+=lhp-logZ

 return lh
于 2013-06-14T21:08:31.227 に答える
0

v 個の可視ユニットと h 個の非表示ユニットがあり、v < h であるとします。重要な考え方は、表示されている各ユニットのすべての値を固定すると、非表示のユニットは独立しているということです。

したがって、可視ユニット アクティベーションのすべての 2^v サブセットをループします。次に、隠れユニットが独立しているため、この特定のアクティブ化された可視サブセットを使用して RBM の可能性を計算することは扱いやすい[1]。次に、各非表示ユニットをループし、可視ユニットのサブセットでオンとオフの条件が設定されている確率を合計します。次に、合計されたオン/オフの隠れ確率をすべて乗算して、可視ユニットの特定のサブセットの確率を取得します。すべてのサブセットを追加すると、完了です。

問題は、これが v で指数関数的であることです。v > h の場合、RBM を単に "転置" して、非表示が表示されているふりをし、その逆も同様です。

[1] 非表示のユニットは互いに影響を与えることはできません。これは、影響が表示されているユニットを通過する必要があるためです (h から h への接続はありません)。ただし、表示されているユニットは固定されています。

于 2013-06-14T21:18:01.727 に答える