受け入れられた回答を変更できるかどうかはわかりませんが、バックプロパゲーションに関する質問に対する唯一の回答はフォワードプロパゲーションに関する回答であるため、試してみることにしました。
基本的に、重みデルタ()は線形ニューロンの重みデルタと同じように扱いますが、フィルター(カーネル)をオーバーレイするたびに1回トレーニングします入力では、すべて単一のbackpropパスで。結果は、フィルターのすべてのオーバーレイのデルタの合計です。あなたの表記では、これはここで、は、順方向伝搬中にオーバーレイの1つに対してが乗算された入力であり、はそのオーバーレイから得られた出力です。δRδhljδRδhlj=∑ni=1xl−1iδRδxl+1jxl−1hljxl+1
畳み込み層(パラメーターデルタと入力デルタ)を介したbackpropの2つの結果の間では、パラメーターデルタ、またはより具体的には、重み行列デルタ()。完全を期すために、次の例のレイヤーとして、両方について説明します。δRδhlj
入力の1Dセットと、ストライド1、パディングなし、バイアスなし、アクティブ化関数なしで適用されるフィルターがある場合、フィルターのアクティブ化はように見えました。backpropパスでこのレイヤーに戻ったとき、計算に使用するアクティベーションデルタがとしましょう。[1,2,3][0.3,0.5][1∗0.3+2∗0.5,2∗0.3+3∗0.5]=[1.3,2.1][−0.1,0.2]
ウェイトデルタ:
フォワードパスを通過したとき、入力をキャッシュしました。これをA_prevと呼びます。これは、前のレイヤーのアクティブ化である可能性が高いためです。フィルターの潜在的なオーバーレイごとに(この場合、2つの場所[ 1,2、3 ]と[ 1、2,3 ]でのみ入力にオーバーレイできます)、入力A_sliceのそのスライスを取り、それぞれを乗算します関連する出力デルタdZによって要素を抽出し、それをこのパスの重みデルタdWに追加します。この例では、最初のオーバーレイのをdWに追加し、次に2番目のオーバーレイのを追加します。つまり、このバックプロップパスでのこの畳み込み層のdWは 0.3、0.4です。[1,2,3][1∗−0.1,2∗−0.1][2∗0.2,3∗0.2][0.3,0.4]
バイアスデルタ:
重みデルタの場合と同じですが、入力行列を掛けずに出力デルタを追加するだけです。
入力デルタ:
この層の入力の形状を再構築し、それをdA_prevと呼び、それをゼロに初期化し、入力にフィルターを重ねた構成をウォークスルーします。各オーバーレイについて、ウェイトマトリックスにこのオーバーレイに関連付けられた出力デルタを掛け、それをこのオーバーレイに関連付けられたdA_prevのスライスに追加します。つまり、オーバーレイ1は -0.1、0.5をdA_prevに追加し、結果として -0.05、0となり、オーバーレイ2は 0.2、0.5 0.06、0.1、つまりdA_prev は -0.03、0.01、0.1になります。[0.3∗−0.1,0.5∗−0.1]=[−0.03,−0.05][−0.03,−0.05,0][0.3∗0.2,0.5∗0.2]=[0.06,0.1][−0.03,0.01,0.1]
同じ答えを別の用語で読みたい場合、これはかなり良い情報源です:リンク