バックプロパゲーションアルゴリズムを使用してニューラルネットワークのエラーを導出する方法


10

Andrew Ngによるこのビデオから5:00頃

ここに画像の説明を入力してください

とはどのように導出されますか?実際、はどういう意味ですか? はyと比較して取得されますが、非表示レイヤーの出力ではそのような比較はできませんよね?δ3δ2δ3δ4


ビデオリンクが機能していません。更新するか、コースへのリンクを提供してください。ありがとう。
— MadHatter 2017年

回答:


15

に関するあなたの質問に答えますが、あなたの質問がより大きな質問のサブ質問であることを思い出してください。δ私(l)

∇ij(l)=∑kθki(l+1)δk(l+1)∗(ai(l)(1−ai(l)))∗aj(l−1)

ニューラルネットワークのステップに関する注意:

  • ステップ1:順方向伝搬(計算)ai(l)

  • ステップ2a:逆伝播:エラーδ (l )iの計算δi(l)

  • ステップ2b:後方伝播:勾配の計算、Jの(Θ)エラー使用δ (L + 1 )IとA (L )I、∇ij(l)Θδi(l+1)ai(l)

  • ステップ3:勾配降下:勾配∇ (l )i jを使用して新しいを計算するθij(l)∇ij(l)

まず、理解するためにどのようなあるδi(l)、彼らは何を表しているかと、なぜアンドリューNGそれが彼らの話を、私たちは、これらすべての計算を行う理由アンドリューが実際にそのpointandでやっているかを理解する必要があります。彼は、勾配を計算していますのθ (L )I jの∇ij(l)θij(l)勾配降下アルゴリズムで使用されます。

勾配は次のように定義されます。

∇ij(l)=∂C∂θij(l)

この式を直接解決することはできないため、2つのマジックトリックを使用して変更し、実際に計算できる式に到達します。この最終的に使用可能な式は次のとおりです。

∇ij(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))∗aj(l−1)

この結果に到達するための最初のマジックトリックは、δ (l ) iを使用してθ (l )i jの勾配を書き込めることです。∇ij(l)θij(l)δi(l)

付 δ (L ) iは(Lのみインデックスに)定義された方法:

∇ij(l)=δi(l)∗aj(l−1)
δi(L)

δ私(L)=∂C∂z私(l)

次に、他のインデックスを定義するために、δ (l ) iとδ (l + 1 ) iの間の関係を使用して、SECOND MAGIC TRICK、δ私(l)δ私(l+1)

δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

そして、私が言ったように、すべての用語を知っている式をようやく書くことができます:

∇ij(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))∗aj(l−1)

最初のマジックトリックのデモンストレーション: ∇私j(l)=δ私(l)∗aj(l−1)

以下を定義しました:

∇私j(l)=∂C∂θ私j(l)

より高い次元のチェーンルール(チェーンルールのこのプロパティを実際に読み取る必要があります)を使用すると、次のように記述できます。

∇私j(l)=Σk∂C∂zk(l)∗∂zk(l)∂θ私j(l)

ただし、次のように:

zk(l)=∑mθkm(l)∗am(l−1)

次に、次のように書きます。

∂zk(l)∂θij(l)=∂∂θij(l)∑mθkm(l)∗am(l−1)

微分の線形性 [(u + v) '= u' + v ']のため、次のように書くことができます。

∂zk(l)∂θij(l)=∑m∂θkm(l)∂θij(l)∗am(l−1)

有する:

ifk,m≠i,j,  ∂θkm(l)∂θij(l)∗am(l−1)=0

ifk,m=i,j,  ∂θkm(l)∂θij(l)∗am(l−1)=∂θij(l)∂θij(l)∗aj(l−1)=aj(l−1)

次に、k = iの場合(そうでない場合、明らかにゼロに等しくなります):

∂zi(l)∂θij(l)=∂θij(l)∂θij(l)∗aj(l−1)+∑m≠j∂θim(l)∂θij(l)∗aj(l−1)=aj(l−1)+0

∂zi(l)∂θij(l)=aj(l−1)

∇ij(l)

∇ij(l)=∂C∂zi(l)∗∂zi(l)∂θij(l)

これは次と同等です:

∇ij(l)=∂C∂zi(l)∗aj(l−1)

または:

∇ij(l)=δi(l)∗aj(l−1)

δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

δ(l)=θ(l+1)Tδ(l+1).∗(a(l)(1−a(l)))

私たちが提起したことを覚えておいてください:

δ(l)=∂C∂z(l)   and   δi(l)=∂C∂zi(l)

繰り返しますが、より高い次元のチェーンルールにより、次のように記述できます。

δi(l)=∑k∂C∂zk(l+1)∂zk(l+1)∂zi(l)

∂C∂zk(l+1)δk(l+1)

δi(l)=∑kδk(l+1)∂zk(l+1)∂zi(l)

∂zk(l+1)∂zi(l)

zk(l+1)=∑jθkj(l+1)∗aj(l)=∑jθkj(l+1)∗g(zj(l))

zk(i)

∂zk(l+1)∂zi(l)=∂∑jθkj(l)∗g(zj(l))∂zi(l)

導出の線形性のため、次のように書くことができます。

∂zk(l+1)∂zi(l)=∑jθkj(l)∗∂g(zj(l))∂zi(l)

≠∂θkj(l)∗g(zj(l))∂zi(l)=0

結果として:

∂zk(l+1)∂zi(l)=θki(l)∗∂g(zi(l))∂zi(l)

その後:

δi(l)=∑kδk(l+1)θki(l)∗∂g(zi(l))∂zi(l)

g '(z)= g(z)(1-g(z))なので、次のようになります。

δi(l)=∑kδk(l+1)θki(l)∗g(zi(l))(1−g(zi(l))

g(zi(l)=ai(l)

δi(l)=∑kδk(l+1)θki(l+1)∗ai(l)(1−ai(l))

そして最後に、ベクトル化された表記を使用します。

∇ij(l)=[θ(l+1)Tδ(l+1)∗(ai(l)(1−ai(l)))]∗[aj(l−1)]

1
お返事ありがとうございます。私はあなたに賛成票を投じました!回答にたどり着くために参照したソースを引用して
— いただけませ

δj(i)δj(i)=∂C∂Zj(l)

δi(L)
δi(L)=∂C∂zi(l)
δi(l)=θ(l+1)Tδ(l+1).∗(ai(l)(1−ai(l)))

3
勾配を計算するbackpropベクトル表記を読むことを強くお勧めします。
— CKM 2017年

あなたの最終的な使用可能な式は、Andrew Ngが持っていたものではありません。そのため、証明に従うのは本当にイライラします。彼は∇(l)ij =θ(l)Tδ(l + 1)。 1)Tδ(l + 1)
— Aziz Javed 2017

0

この計算は役立ちます。この結果とAndrewの結果との唯一の違いは、シータの定義によるものです。アンドリューの定義では、z(l + 1)= theta(l)* a(l)です。この計算では、z(l + 1)= theta(l + 1)* a(l)です。したがって、実際には違いはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.