誰かがバックプロパゲーション全体でバイアスを更新する方法を説明してもらえますか?
私はかなりの数の本を読みましたが、バイアスの更新を見つけることができません!
バイアスは、重みが付加された(各ニューロンの)1の追加入力であることを理解しています。数式が必要です。
ありがとうございました、
@msw
最も興味深いです。ありがとう、私は2つの良い点があると思う:1.バイアス項を省略した場合、最も一般的に使用される隠れ層活性化関数を持つ多層パーセプトロンの「普遍近似」特性は成り立たない。しかし、Hornik(1993)バイアスのない普遍近似特性の十分条件は、原点で活性化関数の微分が消失しないことです。これは、通常のシグモイド活性化関数では、トレーニング可能なバイアスの代わりに固定非ゼロバイアス項を使用できることを意味します。 2.バイアス項は他の重みと同じように学習できます。」「一定の重み」を追加するか、勾配降下を使用して他のすべての重みと同様にこの重みを訓練します。
私は正しく理解していますか?
Rojas 1996、chapter 7 の表記に従って、バックプロパゲーションはエラー関数E
(別名コスト、別名損失)の偏導関数を計算します
∂E/∂w[i,j] = delta[j] * o[i]
ここで、w[i,j]
は、ニューロンi
とj
間の接続の重みです。j
は、ネットワーク内でi
より1層高く、o[i]
はi
の出力(アクティブ化)です(「入力レイヤー」の場合、これは検討中のトレーニングサンプルの機能i
の値です)。 delta
を決定する方法は、教科書に記載されており、アクティベーション関数に依存するため、ここでは繰り返しません。
これらの値は、重みの更新に使用できます。
// update rule for Vanilla online gradient descent
w[i,j] -= gamma * o[i] * delta[j]
ここで、gamma
は学習率です。
バイアスの重みのルールは非常に似ていますが、前のレイヤーからの入力がない点が異なります。代わりに、バイアスは(概念的に)1の固定アクティベーションを持つニューロンからの入力によって引き起こされます。したがって、バイアスウェイトの更新ルールは
bias[j] -= gamma_bias * 1 * delta[j]
ここで、bias[j]
はニューロンj
のバイアスの重みであり、1との乗算は明らかに省略でき、gamma_bias
は、gamma
または別の値に設定できます。正しく思い出せば、より低い値が推奨されますが、その理論的な正当性についてはわかりません。
個々の重みとバイアスを変更する量は、個々の重みと個々のバイアスに対するコスト関数の偏導関数になります。
∂C/∂(index of bias in network)
コスト関数はおそらく個々の重みと値に明示的に依存しないため(たとえば、コストは(ネットワーク出力-期待される出力)^ 2に等しい可能性があります)、各重みとバイアスの偏導関数を何かに関連付ける必要がありますすなわち、ニューロンの活性化値(出力)。これを行うための優れたガイドを次に示します。
https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d
このガイドでは、これらのことを明確に行う方法を説明していますが、説明が不足している場合があります。上記リンクのガイドを読んで、この本の第1章と第2章を読むことは非常に役に立ちました。
http://neuralnetworksanddeeplearning.com/chap1.html (質問への回答に不可欠な背景を提供します)
http://neuralnetworksanddeeplearning.com/chap2.html (質問に答えます)
基本的に、バイアスは重みが更新されるのと同じ方法で更新されます。変更は、多次元ポイントでのコスト関数の勾配に基づいて決定されます。
ネットワークが解決しようとしている問題は、多次元の丘と谷(勾配)の景観であると考えてください。このランドスケープは、重みとバイアスの変化に伴うコストの変化をグラフィカルに表現したものです。ニューラルネットワークの目標は、このランドスケープの最も低いポイントに到達し、それによって最小のコストを見つけてエラーを最小限に抑えることです。ネットワークをこれらのグラジエントの底に到達しようとするトラベラー(グラジエントディセント)を想像すると、各重み(およびバイアス)を変更する量は、傾斜の勾配(関数の勾配)に関連します。旅行者が現在降りていること。旅行者の正確な位置は、多次元座標点(weight1、weight2、weight3、... weight_n)によって与えられます。ここで、バイアスは別の種類の重量と考えることができます。ネットワークの重み/バイアスをネットワークのコスト関数の変数として考えると、∂C/∂(ネットワークのバイアスのインデックス)を使用する必要があることが明確になります。