2012-10-27 6 views
10

私は最近Courseraの教授Ng's Machine Learningコースを完了しました。コース全体を愛していましたが、ニューラルネットワークのトレーニングのバックプロパゲーションアルゴリズムを理解することはできませんでした。誰かがbackpropagationアルゴリズムを私に説明していただけますか?

私が理解している問題は、完全に接続されたフィードフォワードネットワークのためのベクター化された実装を教えていることだけです。私の線形代数は錆びているので、誰かが私に汎用アルゴリズムを教えることができたら、はるかに理解しやすくなると思います。多分、ノード指向のやり方で。

私は、これは意味がありませんので、もし、それを無視し、試してみて、フレーズの問題を単に、私はバックプロパゲーションがどのように機能するかを誤解することができるでしょう:/入力重み与え、

任意のノードNについてNの「コスト」をどのようにして計算して入力ウェイトを更新するのですか?出力ウェイト/値、およびNが出力するすべてのノードのエラー/コスト

+0

これはかなり広い質問です。あなたはhttp://dsp.stackexchange.comで運が良いかもしれません。 – mtrw

+6

非常に良い説明はhttp://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html –

+1

でご覧になれます。私は差動ビットを理解しているかどうかはわかりません。 df(e)/ deは、重み付けされた合計(e)または更新しようとしている体重の接続の入力に関する微分を意味しますか?ノードが線形活性化関数を持つとすると、df(e)/ deは常に1(f(e)= e→df(e)/ de = 1)になりますか?それとも、常に更新しているウェイトに等しいでしょうか?(f(e)= w1x1 + w2x2 - > df(e)/ dx1 = w1) –

答えて

14

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

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

活性化は、重み付け入力とバイアス値の合計です。関心のあるノードをj、先行レイヤのノードをi、後続レイヤのノードをkと呼びます。我々のノードjの活性化は、次にある:

ネット J I(O I×W IJ)+θ Jある

、 jの活性化値は、ノードiと対応するウェイトリンクノードiとjの出力とバイアス値との積の和である。

我々のノードjの出力は、活性化の伝達関数である:

O J = F(正味 J

F一般シグモイド関数です。

F(正味 J)は、1 /(1 + E -net J

シグモイド関数は、一次導関数を指定して簡単に持っています=

f '(ネットj)= f(ネットj)×(1。0 - F(ネット Jは))

我々が使用するどのような伝達関数、我々は、その一次導関数を計算する方法を知っておく必要があります。 BPは連鎖ルールを介して勾配降下を処理するため、重要です。上記の式は、異なる伝達関数によって異なる。

ここまでは、入力値を取得し、アクティブ化を計算し、出力を計算し、アクティブ化の一次導関数を計算する方法を知っています。今我々は、エラーと体重調整に対処する必要があります。

BPのノードエラー推定に使用される値はδと呼ばれます。ノードのδは、ノードの起動の1次導関数と受信する誤差項に比例します。受け取った誤差項の2つの公式があります.1つは出力ノード用、もう1つは隠れノード用です。

一般的に、

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

出力ノードに対して、

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

ここで、tはその出力ノードにおける期待値であり、oはその出力ノードの実際の出力値である。 Σ K JKワット× Kδ)×

δ J = F '(ネット J):私たちの隠されたノードjの場合

、それはこのようなものです

Jδ当社ノードjのためのδは、私たちのトランの一次導関数の積であります次のレイヤーのデルタの合計(出力に近い)に接続ウェイトの値を掛けたものです。これを使って、ノードの前の層(入力に近い)に行く重みを調整する方法を計算することができます。

DW IJ = L×O ×δ JここDW

は "重量変化" を表しは、だから何方程式の言うことになる重量変化からノードiからノードjへの伝達関数は、学習パラメータL(典型的には、ネットワーク内のすべてのノードについて同じ値)、ノードiの出力値、およびノー​​ドjに対するδ(誤差項)の積に等しい。

バイアス値を調整することは、重量を調整することと似ています。ここで

J = L F×(θ J)×δ J

Dθは "θの変化" を表します。バイアス値θ jに伝達関数を適用して、ノードからの出力のような用語を得る必要があります。それ以外の場合は、他の方程式と同じように見えます。

重量の計算はネットワーク全体で行う必要があります。すべての計算が終わったら変更を適用する必要があります。

入力重み/値、出力 重み/値、及びN個の出力のすべてのノードのエラー/コスト与えられた任意のノードNについて
+0

最後の層の目的関数の導関数が観測値と予測値の違いである理由を説明することは可能でしょうか?私たちが入力を取って非線形の値に変換するシグモイド関数を使用しているとしましょう... – user2543622

+0

私はロジスティック回帰の目的関数の微分を見て、微分が(予測との差)* x_varaiableと等しいことを理解しています。なぜニューラルネットワークの場合、x_variableを取り除き、(予測の差)部分だけを保持するのですか? – user2543622

+0

@ user2543622では、目的関数の導関数は実際にはこの目的関数の勾配であり、これはMSEの導関数のベクトル(通常使用される目的関数)です。 –

0

、 方法Iは、の「コスト」を計算しますNを入力してこれを入力して の重みを更新しますか?

実際には個々のニューロンの中間コスト関数には関心がありません。代わりに、最終出力のコストに関心があります。常に。それを使用して、バックレイヤーのニューロンが必要とする変化率を前面まで伝播させます。

関連する問題