why conv痛点在处理高分辨率图像时传统的多层感知机MLP由于缺乏对空间结构的先验假设全连接层会导致参数量呈爆炸式增长例如百万像素图像经过千维隐藏层会产生10910^9109级别的参数量。这使得模型极难训练且容易过拟合。解法卷积神经网络CNN利用自然图像中普遍存在的结构特征平移不变性和局部性通过设定特定的归纳偏置Inductive Bias在保持特征提取能力的同时将网络参数量降低数个数量级。平移不变性Translation Invariance不管检测对象出现在图像中的哪个位置神经网络的前面几层应该对相同的图像区域具有相似的反应即为“平移不变性”。在数学物理层面上这意味着特征提取器的权重在整个空间维度上是共享的不再随绝对坐标的变化而改变。局部性Locality神经网络的前面几层应该只探索输入图像中的局部区域而不过度在意图像中相隔较远区域的关系这就是“局部性”原则。最终可以聚合这些局部特征以在整个图像级别进行预测。这意味着每次特征提取仅在有限大小的感受野Receptive Field内进行计算。从多层感知机MLP到CNN将 MLP 演化为 CNN本质上是依次应用上述两大原则对权重张量进行约束的过程。1. 基础全连接层表示假设输入图像X\mathbf{X}X和隐藏层特征H\mathbf{H}H均为二维张量。对于隐藏层位置(i,j)(i, j)(i,j)的输出其全连接形式的加权和可以表示为其中W\mathsf{W}W为四阶权重张量U\mathbf{U}U为偏置[H]i,j[U]i,j∑k∑l[W]i,j,k,l[X]k,l [\mathbf{H}]_{i, j} [\mathbf{U}]_{i, j} \sum_k \sum_l[\mathsf{W}]_{i, j, k, l} [\mathbf{X}]_{k, l}[H]i,j​[U]i,j​k∑​l∑​[W]i,j,k,l​[X]k,l​为方便推导重新索引下标令kiak iakia和ljbl jbljb将其转换为中心坐标加偏移量(a,b)(a, b)(a,b)的形式[H]i,j[U]i,j∑a∑b[V]i,j,a,b[X]ia,jb [\mathbf{H}]_{i, j} [\mathbf{U}]_{i, j} \sum_a \sum_b [\mathsf{V}]_{i, j, a, b} [\mathbf{X}]_{ia, jb}[H]i,j​[U]i,j​a∑​b∑​[V]i,j,a,b​[X]ia,jb​2. 引入“平移不变性”约束由于特征提取不依赖于绝对位置(i,j)(i, j)(i,j)权重张量V\mathsf{V}V和偏置U\mathbf{U}U中的iii和jjj维度可以被消去。偏置退化为常数uuu权重退化为二维滤波器矩阵V\mathbf{V}V。此时全连接层转化为了二维互相关通常称为卷积操作[H]i,ju∑a∑b[V]a,b[X]ia,jb [\mathbf{H}]_{i, j} u \sum_a\sum_b [\mathbf{V}]_{a, b} [\mathbf{X}]_{ia, jb}[H]i,j​ua∑​b∑​[V]a,b​[X]ia,jb​3. 引入“局部性”约束为了只关注局部信息我们限定偏移量(a,b)(a, b)(a,b)的范围在一个极小的窗口内即设置阈值Δ\DeltaΔ。当∣a∣Δ|a| \Delta∣a∣Δ或∣b∣Δ|b| \Delta∣b∣Δ时权重[V]a,b0[\mathbf{V}]_{a, b} 0[V]a,b​0。最终得到卷积层Convolutional Layer的严格数学定义[H]i,ju∑a−ΔΔ∑b−ΔΔ[V]a,b[X]ia,jb [\mathbf{H}]_{i, j} u \sum_{a -\Delta}^{\Delta} \sum_{b -\Delta}^{\Delta} [\mathbf{V}]_{a, b} [\mathbf{X}]_{ia, jb}[H]i,j​ua−Δ∑Δ​b−Δ∑Δ​[V]a,b​[X]ia,jb​补充多通道Channels扩展由于真实图像如RGB及深层特征图均为三维张量通道数、高、宽卷积层需进一步向通道维度扩展。设ccc为输入通道ddd为输出通道完整的卷积运算为[H]i,j,d∑a−ΔΔ∑b−ΔΔ∑c[V]a,b,c,d[X]ia,jb,c [\mathsf{H}]_{i,j,d} \sum_{a -\Delta}^{\Delta} \sum_{b -\Delta}^{\Delta} \sum_c [\mathsf{V}]_{a, b, c, d} [\mathsf{X}]_{ia, jb, c}[H]i,j,d​a−Δ∑Δ​b−Δ∑Δ​c∑​[V]a,b,c,d​[X]ia,jb,c​图像卷积互相关运算是什么严格来说深度学习中绝大多数“卷积层”执行的其实是互相关运算cross-correlation而不是数学上严格意义的卷积运算。怎么算过程设定一个二维的卷积窗口即卷积核大小如2×22 \times 22×2。该窗口从输入张量的左上角开始依次从左到右、从上到下滑动。局部计算在窗口滑动的每一个位置将窗口内的输入子张量与卷积核张量进行按元素相乘并求和得到一个单一的标量值这就是该位置的输出。输出维度变化如果没有进行边界填充Padding由于卷积核需要完全贴合在输入张量内部滑动输出的尺寸会略小于输入。具体公式为(nh−kh1)×(nw−kw1)(n_h-k_h1) \times (n_w-k_w1)(nh​−kh​1)×(nw​−kw​1)。卷积层卷积层对输入和卷积核权重进行互相关运算并在添加标量偏置之后产生输出。所以卷积层中的两个被训练的参数是卷积核权重Weight和标量偏置Bias。卷积核如何学习虽然我们可以通过先验知识手工设计特定的卷积核例如用[1, -1]的核去检测图像中水平相邻像素的差异从而检测垂直边缘但在实际的深层网络中手动设计是不现实的。现代深度学习通过反向传播算法自动学习卷积核。过程为随机初始化卷积核张量→\rightarrow→执行前向互相关运算得到预测输出→\rightarrow→比较输出与真实目标的平方误差Loss→\rightarrow→对卷积核权重求导计算梯度→\rightarrow→使用梯度下降等优化算法更新权重。最终网络会自行学习到最适合当前任务的特征提取器。互相关与卷积如何相互变换在数学中要得到严格的“卷积”运算输出需要将二维卷积核张量进行水平翻转和垂直翻转相当于旋转180度然后再对输入张量执行“互相关”运算。为什么深度学习不区分由于卷积核本身是从数据中随机初始化并学习得到的不论网络底层使用的是严格卷积还是互相关优化算法最终学到的权重本质上是等价的只是相差一个翻转。为了术语的统一和计算实现的便捷深度学习社区通常直接将“互相关运算”称为“卷积”。特征映射和感受野特征映射 (Feature Map)卷积层的输出张量通常被称为特征映射因为它代表了将上一层的输入在空间维度上提取特征后的新表示。感受野 (Receptive Field)对于某一层特征映射上的任意一个元素xxx其“感受野”是指在前向传播中所有能够影响到xxx计算结果的原始输入区域。维度关系在单层卷积中xxx的感受野大小等于卷积核的大小例如2×22 \times 22×2输出的 1 个像素来源于输入层的2×22 \times 22×2个像素。当网络变得更深即多个卷积层叠加时感受野的维度会快速扩张。深层特征图上的一个像素其感受野可能覆盖原始图像上一大块极其广阔的区域。这解释了为什么深层网络能够捕捉到更加宏观和全局的图像特征。填充与步幅填充为什么需要填充防止边缘信息丢失在互相关运算中图像内部的像素会被卷积核多次重复扫描参与计算而边缘像素只会被扫描极少数次甚至只有一次。这导致图像边缘的特征在传递过程中逐渐被边缘化甚至丢失。控制特征图的空间分辨率在不进行填充的情况下每次卷积操作都会导致输出尺寸减小由n×nn \times nn×n变为(n−k1)×(n−k1)(n-k1) \times (n-k1)(n−k1)×(n−k1)。对于一个极深的网络如果不加干预特征图的分辨率会迅速缩减为1×11 \times 11×1这极大地限制了网络的层数和深度。怎么填举例填充通常是在输入矩阵的四周添加值为 0 的额外行和列即零填充。假设我们在高度上填充php_hph​行上下各ph/2p_h/2ph​/2在宽度上填充pwp_wpw​列左右各pw/2p_w/2pw​/2输出尺寸公式更新为Output(np−k1) \text{Output} (n p - k 1)Output(np−k1)举例说明假设输入X\mathbf{X}X形状为3×33 \times 33×3卷积核K\mathbf{K}K形状为3×33 \times 33×3。不加填充 (p0p0p0)输出尺寸为(3−31)×(3−31)1×1(3 - 3 1) \times (3 - 3 1) 1 \times 1(3−31)×(3−31)1×1。四周各填充 1 行/列 (p2p2p2)输入变相地扩展成了5×55 \times 55×5。此时输出尺寸为(32−31)×(32−31)3×3(3 2 - 3 1) \times (3 2 - 3 1) 3 \times 3(32−31)×(32−31)3×3。通过这种方式我们成功保持了特征图的尺寸与输入完全一致。当满足以下三个条件时卷积核大小为奇数设k2m1k 2m 1k2m1所有边填充相同即上下左右各填充pmp mpm行/列总填充量为2m2m2m输入与输出尺寸相同根据公式n2m−(2m1)1nn 2m - (2m1) 1 nn2m−(2m1)1n刚好成立。这意味着在进行计算时卷积核的几何中心在输入矩阵上的坐标移动轨迹与输出矩阵的索引是完全重合的。因此输出特征图上的每一个点Y[i,j]Y[i, j]Y[i,j]其对应感受野的绝对中心恰好就是输入图上的X[i,j]X[i, j]X[i,j]。这在语义上提供了极高的空间位置对齐性对于目标检测中的边界框定位、图像分割以及视觉追踪任务中保持目标的绝对坐标一致性至关重要。步幅步幅是指卷积核每次在输入矩阵上滑动的行数和列数。默认步幅为 1。当步幅s1s 1s1时卷积窗口会跳过中间的像素进行采样。举例说明假设输入尺寸为7×77 \times 77×7卷积核大小为3×33 \times 33×3不加填充p0p0p0。步幅s1s1s1卷积核每次向右移动 1 列。输出大小为7−3115×5\frac{7 - 3}{1} 1 5 \times 517−3​15×5。步幅s2s2s2卷积核每次向右直接跳过 1 列移动 2 列从第1列直接跳到第3列、第5列。输出大小为⌊7−32⌋13×3\lfloor\frac{7 - 3}{2}\rfloor 1 3 \times 3⌊27−3​⌋13×3。为什么要用不同的步幅成倍降低计算量与内存开销当处理高分辨率的输入如百万级像素图像时若步幅始终为 1特征图下降速度极慢会导致后续层产生海量的特征图和极高的计算负载。增大步幅可以瞬间对特征图进行空间上的稀疏抽样大幅提高前向与反向传播的效率。快速扩大感受野Receptive Field大步幅意味着底层的神经元能够以更快的速度跳跃扫描使得更浅的层就能覆盖和捕捉到原始输入中更宏观、更大尺度的全局语义特征这对于需要兼顾实时响应和全局视野的系统非常高效。空间降采样Downsampling在很多现代网络架构中大步幅的卷积常用来替代传统的池化层Pooling在提取特征的同时实现空间维度的缩减。