摘要
本文给出 convolution 函数的定义, 并求解其在反向传播中的梯度
相关
配套代码, 请参考文章 :
Python和PyTorch对比实现卷积convolution函数及反向传播
系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981
正文
1. 概念
灰度图片单通道卷积 :
图片来源 : https://github.com/vdumoulin/conv_arithmetic
RGB图片三通道分别卷积, 将三个实数值结果相加 :
图片来源 : http://cs231n.github.io/convolutional-networks/
关于卷积的概念, 网络上已经有大量的详细资料, 都讲的很好, 这里就不再赘述了.
2. 卷积的定义
本文约定矩阵元素的脚标从 0 开始.
当 X 为 m x n 矩阵, W 为 2 x 2 矩阵, 步长为 1 时 :
y i j = ∑ i = 0 m − 2 ∑ j = 0 n − 2 ( x i , j w 00 + x i , j + 1 w 01 + x i + 1 , j w 10 + x i + 1 , j + 1 w 11 ) + b    i ⩽ m − 2    j ⩽ n − 2 y_{ij} = \sum_{i=0}^{m-2}\sum_{j=0}^{n-2}(x_{i,j}w_{00} + x_{i,j+1}w_{01}+x_{i+1,j}w_{10} + x_{i+1,j+1}w_{11}) + b\\ \;\\ i\leqslant m-2 \\ \;\\ j\leqslant n-2 \\ yij=i=0∑m−2j=0∑n−2(xi,jw00+xi,j+1w01+xi+1,jw10+xi+1,j+1w11)+bi⩽m−2j⩽n−2
当 X 为 m x n 矩阵, W 为 p x q 矩阵, 步长为 1 时 :
y i j = ∑ r = 0 p − 1 ∑ s = 0 q − 1 x i + r , j + s w r s + b    i ⩽ m − p    j ⩽ n − q y_{ij} =\sum_{r=0}^{p-1}\sum_{s=0}^{q-1}x_{i+r,j+s}w_{rs}+ b\\ \;\\ i\leqslant m-p\\ \;\\ j\leqslant n-q\\ yij=r=0∑p−1s=0∑q−1xi+r,j+swrs+bi⩽m−pj⩽n−q
当 W 为 p x q 矩阵, 步长为 t, 为保证整除, 填充后的 X 是 m x n 矩阵时 :
y i j = ∑ r = 0 p − 1 ∑ s = 0 q − 1 x i ⋅ t + r , j ⋅ t + s w r s + b    i ⩽ ( m − p ) / t    j ⩽ ( n − q ) / t y_{ij} = \sum_{r=0}^{p-1}\sum_{s=0}^{q-1}x_{i\cdot t+r,j\cdot t+s}w_{rs}+b\\ \;\\ i\leqslant (m-p)/t\\ \;\\ j\leqslant (n-q)/t\\ yij=r=0∑p−1s=0∑q−1xi⋅t+r,j⋅t+swrs+bi⩽(m−p)/tj⩽(n−q)/t
偏置 b 为标量.
3. 反向传播
3.1 误差值对 X 的梯度的理论推导
当 W 为 p x q 矩阵, 步长为 t, 为保证整除, 填充后的 X 是 m x n 矩阵, 经 conv 卷积得到矩阵 g x h 矩阵 Y, 往前 forward 传播得到误差值 error (标量 e ). 上游的误差梯度向量 ∇ e ( Y ) \nabla e_{(Y)} ∇e(Y) 已在反向传播时得到, 求 e 对 X 的梯度.
已知 :
y i j = ∑ r = 0 p − 1 ∑ s = 0 q − 1 x i ⋅ t + r ,    j ⋅ t + s w r s + b    i ⩽ ( m − p ) / t    j ⩽ ( n − q ) / t y_{ij} = \sum_{r=0}^{p-1}\sum_{s=0}^{q-1}x_{i\cdot t+r,\;j\cdot t+s}w_{rs}+b\\ \;\\ i\leqslant (m-p)/t\\ \;\\ j\leqslant (n-q)/t\\ yij=r=0∑p−1s=0∑q−1xi⋅t+r,j⋅t+swrs