卷积采用权重分配原则,这将使数学显着复杂化,但让我们尝试克服杂草。我从这个消息来源汲取了大部分的解释。
前传
如您所见,卷积层的前向通过可以表示为
X升我,Ĵ= ∑米∑ñw升米,ÑØl − 1i + m ,j + n+ b升我,Ĵ
ķ1个ķ2ķ1个= k2= 2X0 ,0= 0.25米ñ
反向传播
假设您使用的均方误差(MSE)定义为
Ë= 12∑p(吨p- ÿp)2
我们要确定
∂Ë∂w升米′,n′米′ñ′w1个0 ,0= - 0.13Hķ
(高− k1个+ 1 )(W− k2+ 1 )
44w1个0 ,0= - 0.13X1个0 ,0= 0.25
∂Ë∂w升米′,n′= ∑H− k1个我= 0∑w ^− k2j = 0∂Ë∂X升我,Ĵ∂X升我,Ĵ∂w升米′,n′
这会遍历整个输出空间,确定输出正在产生的误差,然后确定相对于该输出的内核权重的贡献因子。
为了简单起见并跟踪向后传播的误差,让我们从输出空间增量中得出误差的贡献,
∂Ë∂X升我,Ĵ= δ升我,Ĵ
权重的贡献
卷积定义为
X升我,Ĵ= ∑米∑ñw升米,ÑØl − 1i + m ,j + n+ b升我,Ĵ
从而,
∂X升我,Ĵ∂w升米′,n′= ∂∂w升米′,n′(∑米∑ñw升米,ÑØl − 1i + m ,j + n+ b升我,Ĵ)
m = 米′n = n′
∂X升我,Ĵ∂w升米′,n′= ol − 1我+ 米′,j + n′
然后回到我们的错误术语
∂Ë∂w升米′,n′= ∑H− k1个我= 0∑w ^− k2j = 0δ升我,ĴØl − 1我+ 米′,j + n′
随机梯度下降
w(t + 1 )= w(吨)- η∂Ë∂w升米′,n′
让我们计算一些
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]])
∂Ë∂w
如果推导中有错误,请告诉我。
更新:更正的代码