컨볼 루션은 가중치 공유 원리를 사용하여 수학을 크게 복잡하게 만들지 만 잡초를 통과하려고합시다. 나는 이 소스 에서 대부분의 설명을 그리고 있다 .
포워드 패스
컨볼 루션 레이어의 순방향 패스는 다음과 같이 표현할 수 있습니다.
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
k1k2k1=k2=2x0,0=0.25mn
역 전파
다음과 같이 정의 된 평균 제곱 오차 (MSE)를 사용한다고 가정합니다.
E=12∑p(tp−yp)2
우리는 결정하고 싶다
∂E∂wlm′,n′m′n′w10,0=−0.13HK
(H−k1+1)(W−k2+1)
44w10,0=−0.13x10,0=0.25
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0∂E∂xli,j∂xli,j∂wlm′,n′
이는 전체 출력 공간에서 반복되고 출력이 기여하는 오류를 결정한 다음 해당 출력에 대한 커널 가중치의 기여 요인을 결정합니다.
단순성을 위해 출력 공간 델타의 오류에 대한 기여를 호출하고 역 전파 된 오류를 추적하도록하겠습니다.
∂E∂xli,j=δli,j
가중치의 기여
컨볼 루션은
xli,j=∑m∑nwlm,nol−1i+m,j+n+bli,j
그러므로,
∂xli,j∂wlm′,n′=∂∂wlm′,n′(∑m∑nwlm,nol−1i+m,j+n+bli,j).
By expanding the summation we end up observing that the derivative will only be non-zero when m=m′ and n=n′. We then get
∂xli,j∂wlm′,n′=ol−1i+m′,j+n′.
Then back in our error term
∂E∂wlm′,n′=∑H−k1i=0∑W−k2j=0δli,jol−1i+m′,j+n′.
Stochastic gradient descent
w(t+1)=w(t)−η∂E∂wlm′,n′
Let's calculate some of them
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')
array([[ 0.044606, 0.094061], [ 0.011262, 0.068288]])
Now you can put that into the SGD equation in place of ∂E∂w.
Please let me know if theres errors in the derivation.
Update: Corrected code