逆伝播アルゴリズム
バックプロパゲーション アルゴリズムは、大規模なニューラル ネットワークを迅速にトレーニングするために不可欠です。この記事では、アルゴリズムの仕組みについて説明します。
下にスクロールしてください...
シンプルなニューラル ネットワーク
右側には、入力が 1 つ、出力ノードが 1 つ、2 つのノードの非表示レイヤ 2 つを備えたニューラル ネットワークが表示されています。
隣接するレイヤのノードは、ネットワーク パラメータであるウェイト wijで接続されます。
活性化関数
各ノードには、合計入力 x、アクティベーション関数 f(x)、出力 y=f(x)があります。 f(x) は非線形関数でなければなりません。そうでなければ、ニューラル ネットワークは線形モデルのみを学習できます。
よく使用されるアクティベーション関数は Sigmoid 関数です。
f(x)=11+e−x
誤差関数
目標は、 youtput
すべての入力 xinputで予測出力が目標に近づくように、データからネットワークの重みを自動的に学習することです。 youtput
目標からどのくらい離れているかを測定するには、エラー関数を使用します E。よく使用されるエラー関数は E(youtput,ytarget)=12(youtput−ytarget)2です。
転送の伝播
まず、入力例を受け取り、 (xinput,ytarget) ネットワークの入力レイヤを更新します。
一貫性を保つため、入力は他のノードと同様のものですが、活性化関数がないものと仮定して、出力が入力と等しくなるようにします(例: y1=xinput)。
転送の伝播
ここでは、最初の隠しレイヤを更新します。前のレイヤのノードの出力を取得し、 y 重みを使用して次のレイヤのノードの入力を計算します。 x
転送の伝播
次に、最初の隠れ層のノードの出力を更新します。これには、アクティベーション関数 f(x)を使用します。
転送の伝播
この 2 つの数式を使用して、ネットワークの残りの部分に伝播し、ネットワークの最終出力を取得します。
エラーのデリバティブ
逆伝播アルゴリズムは、予測出力を特定の例の目的の出力と比較した後、ネットワークの各重みを更新する量を決定します。このために、各重みに関してエラーがどのように変化するかを計算する必要があります dEdwij。
エラーの導関数を取得したら、シンプルな更新ルールを使用して重みを更新できます。
ここで、 α は正の定数です。これは学習率と呼ばれ、経験的に微調整する必要があります。
[注] 更新ルールはきわめてシンプルです。重みが増すとエラーが発生する(dEdwij<0)場合は重みを上げ、重みを上げるとエラーが発生する(dEdwij>0)場合は重みを減らします。
その他のデリバティブ
dEdwijを計算しやすくするため、ノードごとにさらに 2 つのデリバティブ、つまりエラーによる変化を次のように保存します。
- ノードの合計入力 dEdx
- ノードの出力 dEdy。
逆伝播
エラーのデリバティブの逆伝播を開始します。この特定の入力例の予測出力があるため、その出力によってエラーがどのように変化するかを計算できます。エラー関数から、 E=12(youtput−ytarget)2 次のようになります。
逆伝播
これで、チェーンルールを dEdy 使用して dEdx 取得できます。
ddxf(x)=f(x)(1−f(x)) の場合、 f(x) が Sigmoid アクティベーション関数です。
逆伝播
ノードの合計入力に関する誤差導関数を取得したらすぐに、そのノードに入る重みに関するエラー導関数を取得できます。
逆伝播
チェーンルールを使うと、前のレイヤからも dEdy 取得できます。丸で囲むように作成しました。
逆伝播
あとは、すべてのエラーの導関数を計算するまで、前の 3 つの数式を繰り返すだけです。