10

私は最近、Coursera で Ng 教授の機械学習コースを修了しました。コース全体は気に入りましたが、ニューラル ネットワークをトレーニングするためのバックプロパゲーション アルゴリズムを本当に理解することはできませんでした。

それを理解する上での私の問題は、完全に接続されたフィードフォワードネットワークのベクトル化された実装のみを教えていることです。私の線形代数はさび付いているので、誰かが汎用アルゴリズムを教えてくれたらもっと理解しやすいと思います。おそらくノード指向の方法で。

問題を簡単に表現してみますが、backprop がどのように機能するかを誤解している可能性があるため、これが意味をなさない場合は無視してください。

任意のノード N について、入力の重み/値、出力の重み/値、および N が出力するすべてのノードのエラー/コストが与えられた場合、N の「コスト」を計算し、これを使用して入力を更新するにはどうすればよいですか?重み?

4

2 に答える 2

14

バックプロパゲーション (BP) ネットワークのノードを考えてみましょう。複数の入力があり、出力値を生成します。トレーニングにエラー修正を使用したいので、ノードのエラー推定に基づいて重みも更新します。

各ノードにはバイアス値 θ があります。これは、内部の定数 1.0 値の入力に対する重みと考えることができます。

活性化は、重み付けされた入力とバイアス値の合計です。対象のノードを j、前のレイヤーのノードの値を i、次のレイヤーのノードの値を k と呼びましょう。ノード j のアクティベーションは次のようになります。

net j = ∑<sub>i (o i × w ij ) + θ j

つまり、j のアクティブ化値は、ノード i からの出力と、ノード i と j をリンクする対応する重みの積の合計に、バイアス値を加えたものです。

ノード j の出力は、アクティベーションの伝達関数です。

o j = f(ネットj )

f は一般にシグモイド関数です。

f(ネットj ) = 1 / (1 + e -ネットj )

シグモイド関数には、簡単に指定できる一次導関数があります。

f'(ネットj ) = f(ネットj ) × (1.0 - f(ネットj ))

使用する伝達関数が何であれ、その一次導関数を計算する方法を知る必要があります。BP はチェーン ルールを介した勾配降下によって機能するため、これは重要です。上記の式は、伝達関数が異なると異なります。

ここまでで、入力値を取得し、活性化を計算し、出力を計算し、活性化の一次導関数を計算する方法を理解しました。次に、エラーと重みの調整に対処する必要があります。

BP でノード エラー推定に使用される値は δ と呼ばれます。ノードの δ は、ノードのアクティベーションの 1 次導関数とノードが受け取る誤差項に比例します。受信した誤差項には 2 つの定式化があり、1 つは出力ノード用、もう 1 つは隠れノード用です。

一般的に、

δ = f'(ネット) × (受信エラー)

出力ノードの場合、

δ出力= f'(正味) × (t - o)

ここで、t はその出力ノードでの期待値、o はその出力ノードの実際の出力値です。

隠しノード j の場合、次のようになります。

δ j = f'(net j ) × ∑<sub>k (δ k × w jk )

ノード j の δ δ jは、与えられた伝達関数の 1 次導関数に、次の層 (出力に近い) のデルタの合計をそれぞれ結合重みの値で乗算した値をアクティブ化した積です。それを手にして、ノードの前の層 (入力に近い) に行く重みを調整する方法を計算できます。

dw ij = L × o i × δ j

ここで dw は「重みの変化」を表しているため、ノード i からノード j への重みの変化は、学習パラメータ L の積に等しいということです (通常、ネットワーク内のすべてのノードで同じ値)。 、ノード i の出力値、およびノー​​ド j の δ (誤差項)。

バイアス値の調整は、ウェイトの調整に似ています。

j = L × f(θ j ) × δ j

ここでのdθは「θの変化」を表しています。ノードからの出力のような項を取得するには、伝達関数をバイアス値 θ jに適用する必要があります。それ以外の場合は、他の方程式のように見えます。

重みの変更の計算はネットワーク全体で行う必要があり、すべての計算が完了したら変更を適用する必要があることに注意してください。

于 2012-12-04T17:28:57.857 に答える
0

任意のノード N について、入力の重み/値、出力の重み/値、および N が出力するすべてのノードのエラー/コストが与えられた場合、N の「コスト」を計算し、これを使用して入力を更新するにはどうすればよいですか重み?

個々のニューロンの中間コスト関数には実際には関心がありません。代わりに、最終出力のコストに関心があります。いつも。次に、それを使用して、後層のニューロンが必要とする変化率を前に伝播します。

于 2015-10-03T02:06:38.403 に答える