質問

RBMでは、隠されたレイヤーを更新するための正常段階(これもバイナリである必要があります)、[h1∈Hのノード(隠された層ベクトル)のノードを考慮して] h1をバイナリ数にすると、非表示の確率を計算する合計入力上のアクティベーション関数を動作させることによりユニット(アクティベーション関数動作後、私が使用しているアクティブ化関数がシグモイドであるため、0〜1の範囲で値を取得します)。私の疑問は、計算された確率を活用することにより、どのようにバイナリにするかということです。 p> = 0.5であれば、それを1にするとは思わない。

文献のレビューはほとんどなく、これを見つけました 資料 (ヒントンによる)、セクション3.1:彼は、「この確率が0〜1の間に均一に分布する乱数よりも大きい場合、隠されたユニットがオンになる」と述べています。これは実際にはどういう意味ですか?また、これで リンク, 、彼らは、「jthユニットは、0から1の間に均一に分布した乱数を選択した場合、その値がsig [j]よりも少ないことがわかります。そうでなければオフです。」私は実際にこれを手に入れませんでした。生成された乱数がすべてのh∈Hで同じかどうか?別のクエリは、次のサンプリングイテレーションのランダムについてはどうですか?

これを見た ビデオ. 。リンクに従って、その時点からのビデオを見るだけです。どのようにしてそのサンプリング番号を取得しますか? MatlabでRAND()を実行して取得する必要があるかどうか?それは各H(i)(ああnoooo!マシンが適切に学習するとは思わない)ごとに異なるはずですか?すべての反復に対して乱数が異なるか、同じ乱数を使用して比較するために使用できるかどうか。

役に立ちましたか?

解決

正しく言うように、隠されたユニット$ h_j $が1つになる確率を計算してから、バイナリにします。その確率は$$ P(h_j = 1)= sigma left(b_j + sum_ {i = 1}^v w_ {ij} v_i right)$$で与えられます$ sigma $はsigmoid関数です、 $ b_j $は非表示単位のバイアス$ h_j $、$ v $は可視ユニットの数、$ v_i $は(バイナリ!)可視ユニット$ i $の状態、$ w_ {ij} $は重みです。

したがって、確率を取得するためのMATLABコード hidden_probs このようなものです(マトリックスの乗算を行うことにより、暗黙的に合計を書きます):

hidden_probs = sigmoid(hidden_bias + data * weights)

これで、[1、h] $ごとに、各非表示ユニット$ j に対して確率$ p(h_j = 1)$があります。さて、これは単なる確率です。また、バイナリ番号も必要です 0 また 1. 。だから私たちにできる唯一のことは、です ランダムサンプルを選択します $ h_j $の確率分布から、これは ベルヌーリの分布.

すべての隠されたユニットは独立しているため、1つのサンプルを取得する必要があります 独立して隠されたユニット。また、各トレーニングステップでは、新しいサンプルを描画する必要があります。

これらのサンプルをBernoulli分布から描くには、EG Matlabの組み込み関数を使用できます(binornd)またはpython(numpy.random.binomial)。これらの機能は二項分布からサンプリングすることに注意してくださいが、ベルヌーイ分布は単なる二項分布の特別なケースであることに注意してください。 N=1. 。 Matlabでは、それはそのようなものです

hidden_states = binornd(1, hidden_probs)

ベクトルが作成されます hidden_states どちらを含む 0 また 1, 、各確率でランダムに描画されます hidden_probs.

あなたがおそらく気づいたように、 誰もそれをしません! 例えば、彼の中でそれを説明しています RBMSのトレーニングの実践ガイド, 、 なので

この確率が0〜1の間に均一に分布する乱数よりも大きい場合、隠されたユニットがオンになります。

それはまさにヒントンが彼の中でしていることです RBMコード: :彼は乱数を取得します 使用した非表示ユニット rand, 、つまり、均一な分布からランダムにサンプリングされます [0,1]. 。彼はそれから比較を行います:

hidden_states = hidden_probs > rand(1, H)

これは使用と同等です binornd, 、しかし、おそらくより速いです。たとえば、乱数を生成します 1p=0.9, 、から乱数を取得します [0,1]. 。現在、症例の90%で、この乱数は0.9未満であり、症例の10%が0.9を超えています。したがって、乱数を取得するために 1p=0.9, 、電話することができます 0.9 > rand(1) - それはまさに彼らがしていることです。

tl; dr: 範囲から新しい乱数を選択します [0,1] 各反復の各隠されたユニットについて。それをあなたの確率と比較してください hidden_probs > rand(1,H) それをバイナリにするために。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top