给定前一卷积层的增量项和权重,如何计算卷积层的增量项?


10

我正在尝试训练具有两个卷积层(c1,c2)和两个隐藏层(c1,c2)的人工神经网络。我正在使用标准的反向传播方法。在反向遍历中,我根据前一层的误差,前一层的权重以及相对于当前层的激活函数的激活梯度来计算层(δ)的误差项。更具体地说,第l层的增量看起来像这样:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

我能够计算c2的梯度,该梯度连接到常规层中。我只是将h1的权重乘以它的增量。然后,我将该矩阵重塑为c2输出的形式,将其与激活函数的梯度相乘就完成了。

现在,我有了c2的增量项-这是大小为4D的矩阵(featureMapSize,featureMapSize,filterNum,patternNum)。此外,我具有c2的权重,它们是大小为3D的矩阵(filterSize,filterSize,filterNum)。

有了这两个项以及c1激活的梯度,我想计算c1的增量。

长话短说:

给定前一个卷积层的增量项和该层的权重,我如何计算卷积层的增量项?

Answers:


6

为了简化一维数组(输入),我首先在下面导出卷积层的错误,然后可以轻松地将其转换为多维:

我们在这里的是,假定长度的Ñ是的输入- 1个CONV。在层中,m是权重w的内核大小,用w i表示每个权重,输出是x l。 因此我们可以写(注意从零开始的总和):x l i = m 1 a = 0 w a y l 1 a + i 其中y l iyl1Nl1mwwixl

xil=a=0m1waya+il1
f激活函数(例如S型)。有了这个在眼前,我们现在可以考虑一些误差函数 Ë给出,并在卷积层(你以前层的一个)的误差函数Ë /Ÿ 。现在,我们要找出错误的依赖在先前层(多个)的一个权重: êyil=f(xil)fEE/yil ,我们有在所有表达,其中所述总和瓦特一个发生时,其是ñ-。还需要注意的是,我们知道最后一项源于一个事实,即X
Ewa=a=0NmExilxilwa=a=0NmEwayi+al1

waNm而可以从所述第一方程见。 为了计算,我们需要知道的第一项,它可以计算梯度: êxilwa=yi+al1
,其中再次第一项是在前面层和误差˚F非线性激活函数。
Exil=Eyilyilxil=Eyilxilf(xil)
f

拥有所有必要的实体,我们现在能够计算误差和有效地传播回珍贵的层:

δal1=Eyil1=a=0m1Exialxialyil1=a=0m1Exialwaflipped
xilyil1flippedT

因此,您可以通过(现在使用矢量表示法)在下一层中计算误差:

δl=(wl)Tδl+1f(xl)

δ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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.