Deep Learning Systems Lecture 10 Convolutional operators in deep networks
这里回顾dlsys第十讲,本讲内容是卷积网络。
课程主页:
大纲
- 深度网络中的卷积运算符;
- 实用卷积的要素;
- 微分卷积;
深度网络中的卷积运算符
全连接神经网络的问题
- 到目前为止,我们已经考虑了将输入图像视为向量。
- 当我们尝试处理更大的图像时,这会产生一个实际问题:256x256 RGB 图像⟹~200K维输入⟹映射到1000维隐藏向量需要200M参数(对于每一层)。
- 没有捕捉到我们期望在图像中具有的任何“直观”不变性(例如,将图像移动一个像素会导致非常不同的下一层)。
卷积如何“简化”深度网络
- 卷积结合了两种非常适合处理图像的想法;
- 要求层与层之间的激活仅以“局部”方式发生,并将隐藏层本身视为空间图像;
- 在所有空间位置共享权重;
卷积的优势
- 大幅减少参数数量;
- 256x256 灰度图像 ⟹ 256x256 单通道隐藏层:从全连接网络中的40亿个参数到3x3卷积中的9个参数;
- 捕获(一些)“自然”不变性;
- 将输入图像向右移动一个像素会使得隐藏单元“图像”向右移动一个像素;
卷积的细节
卷积是许多计算机视觉和图像处理算法中的基本操作。想法是在图像上“滑动”$k\times k$的权重$w$(称为内核大小为$k$的滤波器)以产生新图像,写作$y=z * w$。
图像处理中的卷积
卷积(通常带有预先指定的滤波器)是许多计算机视觉应用程序中的常见操作,卷积网络只是学习滤波器:
深度网络中的卷积
深度网络中的卷积实际上总是多通道卷积,将多通道(例如 RGB)输入映射到多通道隐藏单元:
- $x \in \mathbb{R}^{h \times w \times c_{i n}}$表示$c_{in}$通道,尺寸$h\times w$的图像输入;
- $z \in \mathbb{R}^{h \times w \times c_{\text {out }}}$表示$c_{out}$通道,尺寸$h\times w$的图像输出;
- $W \in \mathbb{R}^{c_{i n} \times c_{\text {out }} \times k \times k}$(4阶张量)表示卷积滤波器;
多通道卷积包含每个输入输出通道对的卷积滤波器,单个输出通道是所有输入通道的卷积之和:
矩阵向量形式的多通道卷积
有一种更直观的方式来思考多通道卷积:它们是传统卷积的推广,其中标量乘法被矩阵向量乘积所取代:
卷积的要素
Padding
- 挑战:“朴素”卷积产生比输入图像更小的输出。
- 解决方案:对于(奇数)内核大小$k$,在所有边上用$(k-1)/2$个零填充输入,导致输出与输入大小相同。
- 有循环填充、平均值填充等变体;
Strided Convolutions / Pooling
- 挑战:卷积在每一层保持相同的输入分辨率,不允许以不同的“分辨率”表示。
- 解决方案#1:使用最大或平均池化层来聚合信息;
- 解决方案#2:以 >1的步长在图像上滑动卷积滤波器;
Grouped Convolution
- 挑战:对于大量的输入/输出通道,滤波器仍然可以有大量的权重,可能导致过度拟合+计算缓慢;
- 解决方案:将通道组合在一起,以便输出中的通道组仅依赖于输入中的相应通道组(等价地,强制滤波器权重矩阵为分块对角);
Dilation
- 挑战:每个卷积都具有相对较小的感受野大小;
- 解决方案:扩张(展开)卷积滤波器,使其覆盖更多图像(另请参阅:我们将讨论的后续架构,如自注意力层); 请注意,再次获取相同大小的图像需要添加更多填充;
对卷积求微分
微分卷积需要什么?
回想一下,为了将任何操作集成到深度网络中,我们需要能够乘以它的偏导数(伴随操作)。
如果我们定义操作:
那么如下伴随如何计算:
复习微分矩阵乘法
让我们考虑矩阵向量乘积运算的更简单情况:
那么$\frac{\partial z}{\partial x}=W$,所以我们需要计算伴随积:
换句话说,对于矩阵向量乘法运算$Wx$,计算向后传递需要乘以转置$W^T$。
那么什么是卷积的“转置”?
将卷积视为矩阵乘法:版本1
要回答这个问题,先考虑使用一维卷积:
我们可以将一维卷积$x* w$(例如,使用零填充)写为矩阵乘法$\widehat W x$:
卷积的伴随
那么我们如何乘以转置$\widehat{W}^T$呢?
如上一张幻灯片所示,非常简单:
但是请注意,操作$\widehat{W}^Tv$表示和翻转的滤波器$[w_3, w_2, w_1]$做卷积。⟹ 伴随运算符$\bar{v} \frac{\partial \operatorname{conv}(x, W)}{\partial x}$只需要将$\bar{v}$与翻转的$W$进行卷积即可!
将卷积视为矩阵乘法:版本2
那么另一个伴随$\bar{v} \frac{\partial \operatorname{conv}(x, W)}{\partial W}$如何计算呢?
对于这一项,观察到我们也可以将卷积写成矩阵向量乘积,将滤波器视为向量:
所以伴随需要乘以这个基于$x$的矩阵的转置(实际上是一个比较实用的方法,见未来关于“im2col”操作的讲座)。