バックプロパゲーションがニューラルネットワークでどのように機能するかを学ぼうとしていますが、技術的でない側面からの適切な説明をまだ見つけていません.
逆伝播はどのように機能しますか? 提供されたトレーニング データセットからどのように学習しますか? これをコーディングする必要がありますが、それまでは、より深く理解する必要があります。
バックプロパゲーションがニューラルネットワークでどのように機能するかを学ぼうとしていますが、技術的でない側面からの適切な説明をまだ見つけていません.
逆伝播はどのように機能しますか? 提供されたトレーニング データセットからどのように学習しますか? これをコーディングする必要がありますが、それまでは、より深く理解する必要があります。
バックプロパゲーションは、フィードフォワードのロジックと非常によく似たロジックで機能します。違いは、データフローの方向です。フィードフォワードステップでは、入力と出力がそこから観察されます。値を前方に伝播して、ニューロンを前方にトレーニングできます。
バックプロパゲーションステップでは、出力層のニューロン以外のすべてのニューロンで発生したエラーを知ることはできません。出力ノードのエラーの計算は簡単です。ニューロンからの出力と、トレーニングセット内のそのインスタンスの実際の出力との差をとることができます。隠れ層のニューロンは、これからエラーを修正する必要があります。したがって、エラー値をそれらに戻す必要があります。これらの値から、隠れたニューロンは、前方の層からの誤差の加重和を使用して、重みやその他のパラメーターを更新できます。
フィードフォワードおよびバックプロパゲーションステップのステップバイステップのデモは、ここにあります。
ニューラルネットワークの初心者の場合は、パーセプトロンから学習を開始してから、実際には多層パーセプトロンであるNNに進むことができます。
バックプロパゲーションは、ニューラル ネットワークのエラー サーフェスで勾配降下を試み、動的プログラミング手法を使用して重みを調整して、計算を扱いやすくします。
今述べたすべての概念を高レベルの用語で説明しようとします。
たとえば、出力層に N 個のニューロンを持つニューラル ネットワークがある場合、出力は実際には N 次元のベクトルであり、そのベクトルは N 次元の空間 (または N 次元の表面) に存在することを意味します。トレーニング対象の「正しい」出力を行います。あなたの「正しい」答えと実際の出力の違いもそうです。
その違いは、適切な条件付け (特に絶対値の考慮) を使用すると、エラー サーフェス上に存在するエラー ベクトルになります。
この概念では、ニューラル ネットワークのトレーニングは、エラー関数が小さくなり、理想的にはゼロになるようにニューロンの重みを調整するプロセスと考えることができます。概念的には、これを微積分で行います。1 つの出力と 1 つの重みしかない場合、これは簡単です。移動する「方向」を示す導関数をいくつか取得し、その方向に調整します。
しかし、ニューロンは 1 つではありません。N 個のニューロンがあり、さらに多くの入力重みがあります。
原理は同じですが、線に微積分を使用して頭の中でイメージできる勾配を探すのではなく、式が簡単にイメージできないベクトル代数式になることを除きます。勾配という用語は、線の傾きに相当する多次元の類似物であり、下降とは、誤差が小さくなるまでその誤差面を下に移動することを意味します。
ただし、別の問題があります。複数のレイヤーがある場合、非出力レイヤーと実際の出力の重みの変化を簡単に確認できません。
動的計画法は、何が起こっているかを追跡するのに役立つ簿記方法です。最も高いレベルでは、単純にこのベクトル計算をすべて実行しようとすると、いくつかの導関数を何度も計算することになります。最新のバックプロパゲーション アルゴリズムはその一部を回避するため、最初に出力レイヤーを更新し、次に最後から 2 番目のレイヤーを更新するといったことが起こります。更新は出力から逆方向に伝播するため、この名前が付けられています。
したがって、勾配降下法やベクトル計算を以前に経験したことがある幸運な人は、うまくいけばそれでうまくいきます。
バックプロパゲーションの完全な導出は、約 1 ページの厳密なシンボリック数学に要約できますが、高度な説明なしにアルゴリズムの意味を理解するのは困難です。(私の意見では、それはまったく恐ろしいことです。)ベクトル計算をよく理解していない場合は、申し訳ありませんが、上記はおそらく役に立たなかったでしょう。しかし、バックプロパゲーションを実際に機能させるために、導出を完全に理解する必要はありません。
次の論文 (Rojas 著) は、彼の本の 1 つの章の大きな PDF であっても、この資料を理解しようとしていたときに非常に役立ちました。
コードや数学を深く掘り下げずに説明しようと思います。
基本的に、ニューラル ネットワークから分類を計算し、既知の値と比較します。これにより、出力ノードでエラーが発生します。
ここで、出力ノードから、他のノードからの N 個の着信リンクがあります。出力ノードの前の最後のレイヤーにエラーを伝播します。次に、それを次のレイヤーに伝搬します (複数のアップリンクがある場合は、エラーを合計します)。そして、再帰的に最初に伝播します
トレーニングの重みを調整するには、ノードごとに基本的に次のことを行います。
for each link in node.uplinks
error = link.destination.error
main = learningRate * error * node.output // The amount of change is based on error, output, and the learning rate
link.weight += main * alpha * momentum // adjust the weight based on the current desired change, alpha, and the "momentum" of the change.
link.momentum = main // Momentum is based on the last change.
learningRate と alpha は、ソリューションにどれだけ迅速に到達するかを調整するために設定できるパラメーターであり、最終的にどのように (できれば) 正確に解決するかを調整します。