史上最もわかりやすい手書き人工ニューラルネットワーク(2)バックプロパゲーションアルゴリズム

最初の記事では、ニューロンとニューラル ネットワークを含むニューラル ネットワークの基本概念を紹介し、多層ニューラル ネットワークの本質が行列乗算であることを深く理解しました。この記事では、有名なバックプロパゲーション アルゴリズムに焦点を当てます

前アドレス:史上最もわかりやすい手書き人工ニューラルネットワーク - (1)_畳み込みニューラルネットワークブログ-CSDNブログ_手書きニューラルネットワーク

1. 誤差 - 理想と現実のギャップ

エラーを理解する方法として、簡単な例を挙げてみましょう。下の図に示すように、A は B へのナビゲーションを伴うサッカーを開始しました。理論的な計算によれば、このサッカーの目標位置は倉庫であり、座標は次のようにマークされます。 A(X1,Y1 )ですが、最終的にサッカーボールは倉庫近くの民家B(X2,Y2)に当たりました。つまり、サッカーボールは外れました。Δδ = B - Aと呼びます。つまり、実際の座標と計算された座標を誤差と呼び、誤差値 = 実際の値 - 理論値 となります。

画像はインターネットから来ました

次にサッカーボールを打ち上げるときは、このように打ち上げることはできません。そうしないとお金の無駄になります。それでは何をすべきでしょうか?

答えは、高度なナビゲーション方法を採用し、サッカー理論の計算式を修正して誤差を小さくし、次のショットがより正確になるようにすることです。

ニューラル ネットワークについても、同様の考察を行うことができます。

たとえば、直方体の鉄の塊の重さ G が鉄の塊の体積 V と密度 C に依存するという単純な場合を考えます。

次に、次のような単純な関係があります。

                                G = CXV

体積 V が 1cm3 の鉄ブロックがあると仮定すると、理論上の G 値は 7.860 g/cm3 * 1cm3 = 7.860g となるはずです。

しかし、正確な電子天秤で測った重量は 7.870g でした。これは、鉄ブロックの密度が 7.860 g/cm3 に等しくないことを示しています。

このときの重量誤差は以下の通りです。

                Δ = 7.870 - 7.860 = 0.010

計算された値をより正確にするにはどうすればよいですか? 濃度調整C

C を 0.005 ずつ増やします。今回は重み誤差です。

                Δ = 7.870 - 7.865 = 0.005

誤差が減少していることがわかります。

ここでの核心は次のとおりです。

順計算により誤差を計算し、誤差を小さくすることを目標にパラメータを調整します


2. バックプロパゲーション - どこを行き来するか

上の鉄ブロックの例から、誤差が伝播する、つまり密度の誤差が重さの誤差ΔGを引き起こすことがわかります。

下の図に示すように、車のネジの誤差は 5 cm です。この誤差は、車の部品など、それに依存する下流のものに確実に伝達され、最終的には車に伝達されます。送信方法や送信量は条件によって異なります。

しかし、設計では通常このようなことはせず、まず全体を設計し、その後に部品を設計するという、製造・組立の逆の設計プロセスとなります。

自動車の部品を入力、自動車全体を出力と考えると製造・組立の観点から誤差が部品から自動車全体に伝わります。しかし、設計の観点から見ると、車の全体的な誤差は自動車部品の誤差によっても引き起こされるはずなので、全体の誤差から部品の誤差を逆算することができます。これは逆のプロセスです。

したがって、ここでの逆伝播は、誤差の逆伝播を指します。つまり、出力誤差から逆方向に入力誤差を計算するため、誤差の逆伝播と呼ばれます。

バックプロパゲーションの核心は次のとおりです。

入力エラーは出力エラーから推定され、このプロセスは上流で継続されます。

        画像はインターネットから来ました 

画像はインターネットから来ました 


3. ニューロンの逆伝播

理解を容易にするために、まずニューロンのバックプロパゲーションを見てみましょう。下の図に示すように、これはニューロンです。その出力誤差は Δo であることがわかっています。では、ニューロンのバックプロパゲーションをどのように理解すればよいでしょうか?

非常に簡単ですが、出力のエラーは入力のエラーから生じるということを覚えておいてください。

前回の記事から次のことが分かりました。

 ニューロンの基本的な考え方は、ニューロンに入力されるすべての信号が特定の重みに従って同時に重畳され、重畳された合計信号が特定のしきい値を超えると、ニューロンの出力がトリガーされるというものです。

人工ニューロンを次の式で説明します。

出力 = f(x1*w1+x2*w2+x3*w3+....+xn*wn+b)

1.output はニューロンの出力です。

2.x1——xn はニューロンの n 入力です。

3.w1——wn は、n 個の入力に対応するニューロンの重みです。

4.b は外界の影響を受けるオフセットです。

5.f は活性化関数であり、出力を制御できる関数です。

したがって、x1-xnの式から出力誤差Δoがわかりますが、出力誤差はn個の入力誤差から生じるので、それぞれの入力誤差はいくらになるでしょうか。それらは出力誤差に等しく寄与しますか?

答えは明らかに平均的ではありません。

この式から、各入力に係数 w1-wn があることがわかります。同じ入力 x1 の場合、係数 w1 が大きいほど、誤差への寄与が大きくなります。係数が大きいため、誤差は次のようになります。さらに増幅されました。

したがって、入力誤差は係数に応じて分配されます。係数が大きいほど、入力の誤差への寄与が大きくなるため、この係数 w1-wn を誤差の重みと呼ぶことができ、誤差の式は次のようになります。

                Δ出力 = f(Δ* w1 + Δ * w2 + Δ * wn + Δb)

したがって、バックプロパゲーションの場合、ニューロンへの各入力の誤差寄与は次のようになります。

                Δxi = F((wi / (w1 + w2 + wn)) * (Δ出力 - Δb))

画像はインターネットから来ました


4. ニューラルネットワークの逆伝播

最初に単純なニューラル ネットワークを見てから、複雑なニューラル ネットワークに一般化してみましょう。

以下の図に示すように、2 つの入力と 2 つの出力を持つ 2 層 (レイヤー 1 とレイヤー 2) のニューラル ネットワークです。

以前の分析によると、出力ノードの誤差は入力誤差に由来し、誤差は重みに従って分散されます。

2 つのノードの期待される出力が t1 と t2 であり、o1 と o2 が実際の出力値であると仮定します。

レイヤ 2 の出力ノードの誤差は次のように取得できます。

                                                e1 = t1 - o1

                                                e2 = t2 - o2

この図から、e1 と e2 の両方に 2 つの部分ソースがあることがわかります。e1 はレイヤー 1 の最初のノードによって提供される W11 からのものであり、2 番目のノードによって提供される W21 からのものです。e2 はレイヤー 1 の最初のノードからのものです。ノードの W22 部分と 2 番目のノードの W22 部分。

前の分析によると、e1 は次のように逆アセンブルできます。

e1 = W11 / (W11 + W21) * e1 + W21 / (W11 + W21) * e1

同じやり方で

e2 = W12 / (W12 + W22) * e2 + W22 / (W12 + W22) * e2

赤い部分がキーポイントで、レイヤー 1 の 2 つのノードのレイヤー 2 エラーへの寄与を反映しています。このように、出力エラー値と、出力ノードに対する前のノードの重み値がわかっていれば、前のノードを計算できます。ノードの入力誤差はもちろん、前の層の各ノードの出力誤差も計算できます。

レイヤ 1 のノード 1 の出力エラーは E1 として記録されます。これは次と等しくなります。

                         E1 =  W11 / (W11 + W21) * e1 +  W12 / (W12 + W22) * e2

レイヤ 1 ノード 2 の出力エラーは E2 として記録されます。これは次と等しくなります。

                        E2 =  W21 / (W11 + W21) * e1 +  W22 / (W12 + W22) * e2

レイヤ 1 のすべての出力誤差が計算された場合、レイヤ 1 の前にレイヤ 0 がある場合は、同じ方法でレイヤ 0 の出力誤差を計算し続けることができます

それで:

最終層の出力誤差から前方誤差を計算します。すべての層間の接続重みがわかっている場合、前のすべての層の誤差を計算できます。これは単純に誤差の逆伝播として理解でき、誤差は次のようになります。後ろから前に向かって計算されます

上記の 2 つの式 E1 と E2 を注意深く観察すると、次のように書けることがわかります。

 つまり、誤差逆伝播は行列の乗算で表現できることが重要なポイントとなります。

つまり、前の層の出力誤差は、次の層の出力誤差を乗算した重みの行列に等しくなります。

もちろん、誤差に応じて重みを更新することもできます。

画像はインターネットから来ました 


3層ニューラルネットワーク、多層ニューラルネットワークも同様に計算できますが、計算量が若干多くなります。ただし、そのバックプロパゲーションの計算は行列で実現でき、行列をもう一度乗算するだけで十分です。

画像はインターネットから来ました

 要約すると、前の記事で学んだことに関連して、行列の乗算はニューラル ネットワークと誤差の逆伝播の両方を表すことができ、両方の行列が重みに関連していることがわかりますが、スペースが限られているため、この関係は異なります。、この 2 つの関係、およびエラーを通じて重みを更新する方法については、次の記事で詳しく説明します。

 逆伝播アルゴリズムのソース コードのダウンロード アドレス:  Python 手書きニューラル ネットワーク データとソース コード.rar_手書き人工ニューラル ネットワーク-Python ドキュメント リソース-CSDN ダウンロード

おすすめ

転載: blog.csdn.net/xipengbozai/article/details/124197499