摘要
本文给出卷积 convolution 函数的矩阵化计算方法, 并求解其在反向传播中的梯度
相关
配套代码, 请参考文章 :
Python 实现 TensorFlow 和 PyTorch 验证卷积 convolution 函数矩阵化计算及反向传播
Affine 变换的定义和梯度, 请参考文章 :
affine/linear(仿射/线性)变换函数详解及全连接层反向传播的梯度求导
系列文章索引 :
https://blog.youkuaiyun.com/oBrightLamp/article/details/85067981
正文
在本书的前文, 我们给出了卷积函数的定义及其梯度反向传播的计算方法. 为了深入理解卷积的含义, 前文使用的是原生的卷积定义, 编程实现时使用了循环算法. 为了避免过多的循环嵌套造成理解困难, 前文并没有考虑 mini-batch 批处理和多通道卷积算法.
使用卷积的矩阵化计算方法, 可以大大简化批处理和多通道卷积计算的算法实现. 这一方法也有助于理解后面将要介绍的反卷积 (又称转置卷积) 的概念.
因为本书希望以最小的代价理解深度学习的算法原理, 不打算重新造轮子, 这里默认输入的数据已通过合适的 padding 操作和维度相容检查, 不再考虑相关算法的实现. 有兴趣的读者可自行在本文的基础上添加前处理和后处理算法.
1. 主要过程
以下图为例, 输入的数据为 3 通道 RGB 彩色图片, 尺寸为 5 x 5, 一个批次共有 3 张图片.
卷积核的同样为 3 通道, 尺寸为 3 x 3, 共有两个.
每一张图片都经过两个卷积核, 卷积的步长为 2, 输出两张