TLDR
以下のために -工程対照ダイバージェンス、可視バイアス更新データベクトルに基づいて、使用:nbjd
b(t)j←b(t−1)j+η(dj−v^(n)j)
隠しバイアスを更新する:hi
c(t)i←c(t−1)i+η(h^(0)i−h^(n)i)
ここで、およびは更新番号t後のバイアス、は学習率、はデータベクトルの番目の成分、およびとは、RBMがデータに公開されてステップ実行されると、非表示ユニットと表示ユニットがアクティブになる確率です。これは、ミニバッチサイズを1と想定しています。実用的なミニバッチサイズ場合、データベクトルで取得された更新を平均化します。b(t)jc(t)iηdjjh^(n)jv^(n)jijnkk
完全な説明
私も同じ問題を抱えていました。それを考える良い方法は、バイアス自体が単なる重みであるということです。多くの場合、ニューラルネットワークモデルでは、ユニットのバイアスは、問題のユニットを「常時オン」のユニット、つまりアクティブ化が常に1である想像上のユニットに接続するリンクの重みとしてモデル化されます。
RBMの場合、それは、出力が常に1である1つの追加の可視ユニットがあると考えることを意味します。この可視ユニットは、(他の可視ユニットと同様に)非表示ユニットのそれぞれに接続され、これらの接続の重みそれぞれの隠れたユニットのバイアスです。同様に、可視単位のバイアスは、値が常に1であり、各可視単位に接続する追加の非表示単位を想像することによってモデル化できます。これらの接続の重みは可視バイアスです。
この方法でRBMを実装することもできますが、通常はそうすることはないと思います。重要なのは、バイアスをこのように考えると、バイアスは「常にオン」のユニットに接続するウェイトに過ぎないため、ウェイトに対して行うのと同じように、バイアスに対して同じ(本質的に)更新ルールを使用できるということです。
具体的にしましょう。単純化のために正則化を無視して、通常の Contrastive Divergence更新ルールを書き留めます。また、簡単にするために、この更新ルールは1つのデータベクトルの「ミニバッチ」用です。ベクトルのミニバッチの更新は、すべてのベクトルの平均更新です。更新ルールは次のとおりです。nkk
W(t)i,j←W(t−1)i,j+η(h^(0)i⋅dj−h^(n)i⋅v(n)j)
ここで:
- W(t)i,j、可視部の連結重みである隠されたユニットに更新回数後にvjhit
- ηは学習率です
- h^(n)iは、マシンがデータベクトル公開され、ステップに進化したときに、非表示のユニットがアクティブになる確率です。
idn
- つまり、は、データベクトルに即時に応答する非表示のユニットアクティブ化にすぎません。h^(0)ii
- djは、データベクトルの番目のコンポーネントですjd
- v(n)jは、マシンがデータベクトルに公開され、ステップ進化した後の可視ユニット状態です。jn
(一部の人々は、を使用して表示単位をインデックス付けし、を使用して非表示単位をインデックス付けしますが、記述します---正しい値を掛け合わせる限り、問題ではありません。)ijWi,j
またはで示されるユニットの「状態」とで示されるユニットの「アクティブ化」を区別するように注意してくださいまたは。ユニットの状態は0または1ですが、アクティベーションは0〜1の任意の実数です。アクティベーションが0.8の場合、状態は1である可能性が高くなりますが、20%の時間で0になります。h(n)iv(n)jh^(n)iv^(n)i
バイアスを「常にオン」の単位の重みとして扱うことにより、上記の方程式が「TLDR」でのバイアスの更新に与えられたものに簡略化されることがわかります。ただし、表示バイアスの更新にはわずかに1つの違いがあります。ここでは、状態の代わりに表示アクティベーションが使用されます。アクティベーションの期待値は同じですが、状態よりも分散が小さいため、学習信号のノイズが減少します。状態の代わりにアクティベーションを使用することが望ましい場合の簡単な説明については、このガイドを参照してください。 §3