神経ネットワークBackpropagation?
-
20-09-2019 - |
質問
誰でもできるのでお勧めをインターネットホームページやく簡単な方backpropagationの実施にNN?私の基本コンセプトにしていると思うのかわからない手書きのコードです。
多くの源泉がその場で発音を確認することがで示方程式を与えることなく説明がなぜ彼らはこの変数名です。
例:
void bpnn_output_error(delta, target, output, nj, err)
double *delta, *target, *output, *err;
int nj;
{
int j;
double o, t, errsum;
errsum = 0.0;
for (j = 1; j <= nj; j++) {
o = output[j];
t = target[j];
delta[j] = o * (1.0 - o) * (t - o);
errsum += ABS(delta[j]);
}
*err = errsum;
}
この例では、人の目的を説明する
delta[j] = o * (1.0 - o) * (t - o);
感謝。
解決
の目的
デルタ[J] = O *(1.0 - O)*(T - O)。
バックプロパゲーションネットワーク内の出力ノードのエラーを見つけることである。
O tはノードの出力の期待値であり、ノードの出力を表す。
という用語は、(O×(1.0 - O)は、使用される一般的な伝達関数の導関数、シグモイド関数である(他の伝達関数は珍しくなく、最初シグモイドを有するコードの書き換えを必要とするであろう。誘導体の代わりに。機能と誘導体との間のミスマッチは、おそらく、そのトレーニングが収束しない意味する。)のノードが
のように、出力Oを得るために、伝達関数を介して供給される「活性化」の値を有します0 = F(活性化)
主なものは、バックプロパゲーションは、勾配降下を使用し、エラーが連鎖法則を適用することにより、下位伝播してしまうことです。問題は、信用割り当ての1、またはあなたがする場合は、その出力期待値と直接比較することはできません隠されたノードに対して、非難です。私たちは、知られており、匹敵するものを、出力ノードで始まります。エラーが予想される出力と実際の出力との出力時間生誤差値の一次導関数に比例するように解釈される。
だから、もっと象徴、我々は
のようにその行を記述します。デルタ[J] = F '(activation_j)*(T_J - o_j)
ここで、fは、あなたの伝達関数であり、f」は最初の誘導体である。
またバック隠れ層において、ノードにおけるエラーは、次の層で検出されたエラーへの寄与の推定です。そう後続層からのデルタは、連結重みが乗算され、それらの製品が加算されます。その和は隠れノードのデルタを取得するために、隠れたノードの活性化の一次導関数が乗算され、または
デルタ[J] = F '(activation_j)*合計(デルタ[K] * w_jk)
jは今隠れノードを参照し、後続層内のノードをk個の場合
他のヒント
(t-o)
のエラーは出力のネットワークから t
目標出力 o
では実際の出力に出力します。で格納されるようになっている正規化された形式の delta
配列に格納します。使用する方法を正常化により、施 o * ( 1.0 - o )
そうすることをとることができると思いますか間違いのことを想定).
この正規化エラーが蓄積される全ての研修を設定し判断する教育訓練が完了通常時 errsum
以下のきっかけとなり、最終的には標的zemax®ファイルをご参照ください。
実際、がわかっている場合は、それを理論、プログラムは容易に理解することができる。では本を読み、いくつかの簡単なサンプルを使用 鉛筆 の 正確な手順 の伝搬を実現します。これは一般的な原則の実施のための数値プログラムを常に把握しておく必要があるものの詳細に小さい。
まっている場合Matlabることをお勧めしたい読み取れず、Matlabソースコード(例: こちらのは、より分かりやすいよC.
のためのコードの質問に対し、名前は非常に自己説明出力する配列の予測、ターゲットとするトレーニンラベル、デルタの誤差予測との真の価値観としても活動している値を更新するの重量ベクトルとなっています。
基本的に、どのようなバックプロパゲーションは繰り返しノード、入力に戻って出力ノードから行く、ノードの値を調整し、出力を観察し、トレーニングデータのネットワークを実行しているんます。