多次元に簡単に転送できる1次元配列(入力)の単純化のために、最初に以下の畳み込み層のエラーを導出しています。
ここでは、長さのが番目の入力であると仮定します。層、は、各重みを表す重みカーネルサイズで、出力はです。
したがって、次のように書くことができます(ゼロからの合計に注意):
ここでおよび活性化関数(例:シグモイド)。これで、与えられる畳み込み層(前の層の1つ)でのエラー関数とエラー関数を検討できます。yl − 1Nl − 1メートルww私バツl
バツl私= ∑a = 0m − 1wayl − 1a + i
yl私= f(xl私)fE∂E/∂yli。ここで、前のレイヤーの重みでエラーの依存性を見つけたいと思います:
ここで、が発生するすべての式(があります。また、最後の項は、最初の方程式からわかるあることがわかっていることにも注意してください。
勾配を計算するには、次の式で計算できる最初の項を知る必要があります。
∂E∂wa=∑a=0N−m∂E∂xli∂xli∂wa=∑a=0N−m∂E∂wayl−1i+a
waN−m∂xli∂wa=yl−1i+a∂E∂xli=∂E∂yli∂yli∂xli=∂E∂yli∂∂xlif(xli)
ここでも、最初の項は前の層のエラーで、は非線形活性化関数です。
f
必要なエンティティがすべて揃ったため、エラーを計算し、それを効率的に貴重なレイヤーにせることができます。
最後のステップでは、 -sを -sと書き留めると簡単に理解できます。転置重量maxtrix(を指す)。
δl−1a=∂E∂yl−1i=∑a=0m−1∂E∂xli−a∂xli−a∂yl−1i=∑a=0m−1∂E∂xli−awflippeda
xliyl−1iflippedT
したがって、次のレイヤーでエラーを計算できます(現在はベクトル表記)。
δl=(wl)Tδl+1f′(xl)
その畳み込みおよびサブサンプリング層になる:
ここで操作は、最大プーリング層を介してエラーを伝播します。U P S A M P LのE
δl=upsample((wl)Tδl+1)f′(xl)
upsample
私を追加または修正してください!
参照については、以下を参照してください。
http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/
http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/
C ++実装の場合(インストールの必要なし):https :
//github.com/nyanp/tiny-cnn#supported-networks