CNNの逆伝播


14

次のCNNがあります。

ネットワークレイアー

  1. サイズ5x5の入力画像から始めます
  2. 次に、2x2カーネルとストライド= 1を使用して畳み込みを適用し、サイズ4x4の機能マップを作成します。
  3. 次に、ストライド= 2の2x2最大プーリングを適用します。これにより、機能マップがサイズ2x2に縮小されます。
  4. 次に、ロジスティックシグモイドを適用します。
  5. 次に、2つのニューロンを持つ1つの完全に接続されたレイヤー。
  6. そして出力層。

簡単にするために、フォワードパスを既に完了し、δH1= 0.25とδH2= -0.15を計算したと 仮定します。

したがって、完全なフォワードパスと部分的に完了したバックワードパスの後、ネットワークは次のようになります。

フォワードパス後のネットワーク

次に、非線形層(ロジスティックシグモイド)のデルタを計算します。

δ11=(0.25∗0.61+−0.15∗0.02)∗0.58∗(1−0.58)=0.0364182δ12=(0.25∗0.82+−0.15∗−0.50)∗0.57∗(1−0.57)=0.068628δ21=(0.25∗0.96+−0.15∗0.23)∗0.65∗(1−0.65)=0.04675125δ22=(0.25∗−1.00+−0.15∗0.17)∗0.55∗(1−0.55)=−0.06818625

次に、デルタを4x4レイヤーに伝播し、max-poolingによってフィルター処理されたすべての値を0に設定します。勾配マップは次のようになります。

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

そこからカーネルの重みを更新するにはどうすればよいですか?また、ネットワークに5x5より前の別の畳み込み層がある場合、カーネルの重みを更新するためにどの値を使用する必要がありますか?そして全体的に、私の計算は正しいですか?


混乱の原因を明確にしてください。最大値の微分を行う方法は既に知っています(値が最大値の場合を除き、すべてゼロです)。したがって、最大プーリングを忘れましょう。畳み込みに問題がありますか?各コンボリューションパッチには独自の導関数があり、計算プロセスが遅くなります。
— リカルドクルーズ

最良の情報源は深層学習の本です -確かに読みやすいものではありません:)。最初の畳み込みは、画像をパッチに分割し、通常のニューラルネットワークを適用するのと同じです。各ピクセルは、重みを使用して「フィルター」の数に接続されます。
— リカルドクルス

1
本質的には、バックプロパゲーションを使用してカーネルの重みをどのように調整するのですか?
— -JahKnows

@JahKnows ..および問題の例を考えて、畳み込み層の勾配の計算方法。
— コリアキンプ

畳み込み層に関連付けられたアクティベーション関数はありますか?
— -JahKnows

回答:


8

畳み込みは、数学を大幅に複雑にする重み共有の原則を採用していますが、雑草を乗り越えようとします。私はこのソースから私の説明のほとんどを引き出しています。


フォワードパス

ご覧のように、畳み込み層のフォワードパスは次のように表現できます。

バツ私、jl=∑m∑nwm、nlo私+m、j+nl−1+b私、jl

ここで、k1とk2はカーネルのサイズであり、k1=k2=2です。これは、出力のために言うように、バツ0、0=0.25あなたが見つけました。mおよびnは、カーネルの次元全体で繰り返されます。

誤差逆伝播法

次のように定義された平均二乗誤差(MSE)を使用していると仮定します。

E=12∑p(tp−yp)2、

私たちは決定したい

∂E∂wm′、n′lm′n′w0、01=−0.13HK

(H−k1+1)(W−k2+1)

44w0、01=−0.13バツ0、01=0.25

∂E∂wm′、n′l=∑私=0H−k1∑j=0W−k2∂E∂バツ私、jl∂バツ私、jl∂wm′、n′l

これは、出力スペース全体にわたって繰り返され、出力が寄与しているエラーを決定し、次にその出力に関するカーネルの重みの寄与因子を決定します。

簡単にするため、および逆伝播されたエラーを追跡するために、出力スペースのデルタからエラーへの寄与を呼び出しましょう。

∂E∂バツ私、jl=δ私、jl

重みからの寄与

畳み込みは次のように定義されます

バツ私、jl=∑m∑nwm、nlo私+m、j+nl−1+b私、jl

したがって、

∂バツ私、jl∂wm′、n′l=∂∂wm′、n′l(∑m∑nwm、nlo私+m、j+nl−1+b私、jl)

m=m′n=n′

∂バツ私、jl∂wm′、n′l=o私+m′、j+n′l−1

その後、エラー用語に戻ります

∂E∂wm′、n′l=∑私=0H−k1∑j=0W−k2δ私、jlo私+m′、j+n′l−1

確率的勾配降下

w(t+1)=w(t)−η∂E∂wm′、n′l

それらのいくつかを計算しましょう

import numpy as np
from scipy import signal
o = np.array([(0.51, 0.9, 0.88, 0.84, 0.05), 
              (0.4, 0.62, 0.22, 0.59, 0.1), 
              (0.11, 0.2, 0.74, 0.33, 0.14), 
              (0.47, 0.01, 0.85, 0.7, 0.09),
              (0.76, 0.19, 0.72, 0.17, 0.57)])
d = np.array([(0, 0, 0.0686, 0), 
              (0, 0.0364, 0, 0), 
              (0, 0.0467, 0, 0), 
              (0, 0, 0, -0.0681)])

gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')

配列([[0.044606、0.094061]、[0.011262、0.068288]])

∂E∂w


派生にエラーがあるかどうかを教えてください。


更新:修正されたコード


∂E∂wm′、n′l

1
gradient = signal.convolve2d(np.rot90(np.rot90(d)), o, 'valid')
— 日ビー

この回答を確認することをお勧めします。具体的には、Pythonで提供されるコードは、チェックされてもよい
— Duloren
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.