各ノードには一連の重みがあります。実装と式では通常、行列の乗算が使用されるため、概念的には各ノードに独自の重みのセットがあるという事実を忘れてしまう可能性がありますが、実際にはそうです。
各ノードは、次の層のすべてのノードに送信される単一の値を返します。したがって、層上のノードは入力h
を受け取ります。ここで、層内のノードの数です。これらの入力を とします。その後、ニューロンは次のように戻ります。num(h - 1)
num(h - 1)
h - 1
x1, x2, ..., xk
x1*w1 + x2*w2 + ... + xk*wk
またはこれの機能。したがって、各ニューロンは独自の重みのセットを維持します。
イメージ内のネットワークを考えてみましょう。1
最上位のニューロンとその他のニューロンが出力するトレーニング インスタンスがあるとします0
。
したがって、私たちの目標は次のとおりです。
y = [1 0 0 0]
そして、実際の出力は次のとおりです (簡単にするためにソフトマックスを無視しています)。
y^ = [0.88 0.12 0.04 0.5]
つまり、すでにかなりうまくいっていますが、さらに良くするために逆伝播を行う必要があります。
ここで、出力デルタは次のようになります。
y^ - y = [-0.12 0.12 0.04 0.5]
delta を使用して最上位のニューロンの重みを更新し-0.12
、2 番目のニューロンの重みを更新し0.12
ます。
0
各出力ニューロンの重みがこれらの値を使用して更新されることに注意してください。これらの重みはすべて、正しい値 (または)に近づくために増減します1
。
ここで、各出力ニューロンの出力が隠れニューロンの出力に依存していることに注意してください。したがって、それらも更新する必要があります。これらは、各出力ニューロンのデルタを使用して更新されます (更新式については、こちらの 7 ページを参照してください)。これは、導関数を取るときに連鎖律を適用するようなものです。
おっしゃる通り、特定の隠れニューロンに対して、「綱引き」が行われ、各出力ニューロンのエラーが独自の方法で引っ張られます。しかし、隠れ層はすべての出力ニューロンを満たすように学習する必要があるため、これは正常です。これが、重みをランダムに初期化し、複数の隠れニューロンを使用する理由です。
出力ノードの重みが互いに独立しているため、最終的な答えを与えるために適応するのは出力層です。隠れ層はすべての出力ノードの影響を受ける必要があり、それらすべてに対応できるように学習する必要があります。