真实面经题目 · 原创解析
1x1 卷积核在 CNN 中有什么作用?
这道题考察 CNN 中 1x1 卷积的真实作用。它不是用来扩大空间感受野,而是在每个空间位置上做通道维度的线性组合,常用于通道融合、升降维、减少计算量、构造瓶颈层,以及在合适网络结构中增强表达效率。
真实面经题目 · 原创解析
这道题考察 CNN 中 1x1 卷积的真实作用。它不是用来扩大空间感受野,而是在每个空间位置上做通道维度的线性组合,常用于通道融合、升降维、减少计算量、构造瓶颈层,以及在合适网络结构中增强表达效率。
1x1 卷积可以理解为对每个像素位置上的通道向量做一次可学习的线性变换。输入是 H×W×Cin,输出是 H×W×Cout,空间位置通常不变,但每个输出通道都是同一位置 Cin 个输入通道的加权组合。它的作用主要有几类:第一,融合不同通道的特征,让网络学习哪些通道组合更有用;第二,改变通道数,既可以降维减少后续 3x3 或 5x5 卷积计算,也可以升维增强表达;第三,配合 BN 和 ReLU 在不改变空间尺寸的情况下增加非线性,相当于对每个位置做一个小 MLP;第四,在 Inception、ResNet bottleneck、MobileNet depthwise separable convolution 等结构中作为关键的通道投影层。需要注意,单独的 1x1 卷积不整合邻域像素,也不会扩大空间感受野,它利用的是前面卷积已经编码到通道里的空间模式。
1x1 卷积的卷积核空间尺寸是 1x1,但深度覆盖所有输入通道。对某个位置 (h,w),它拿到的是一个 Cin 维向量,然后用 Cout 组权重映射成 Cout 维输出。因此它本质上是在每个空间位置共享参数的通道投影。
普通 3x3 卷积同时做空间邻域聚合和通道融合,1x1 卷积只做通道融合。深层 CNN 的不同通道往往代表不同纹理、边缘、部件或语义响应,1x1 卷积可以学习这些通道之间的加权组合,生成更适合下一层使用的新特征。
如果直接在 Cin 很大的特征图上做 3x3 卷积,参数量约为 3×3×Cin×Cout。先用 1x1 把 Cin 降到 Cmid,再做 3x3,参数量变成 Cin×Cmid + 3×3×Cmid×Cout,通常会小很多。Inception 和 ResNet bottleneck 都大量利用这一点。
1x1 卷积不只用于压缩通道,也可以把低维特征映射到更高维空间。升维后再接非线性和空间卷积,可以让模型在更丰富的通道空间中组合特征,在合适结构里提升表达或效率。
1x1 卷积后通常会接 BN、ReLU 或其他激活函数。这样每个空间位置不只是线性变换,而是一个共享的小型多层感知机。Network in Network 的思想就是用 1x1 卷积增强局部表示能力,但面试重点仍是通道投影和结构取舍。
在 MobileNet 这类网络中,depthwise convolution 只负责每个通道内部的空间卷积,pointwise 1x1 convolution 再负责跨通道混合。两者组合能显著减少计算量,同时保留空间建模和通道建模两部分能力。
1x1 卷积本身不看相邻像素,所以不能单独完成边缘、角点或局部纹理提取。它的空间语义来自前面层已经提取出的特征。回答时要避免把它说成特殊的空间卷积或池化操作。
默认 stride 为 1、padding 合理时不会改变宽高,只改变通道数。如果设置 stride 大于 1,也可以下采样,但这不是它最典型的用途。
对单个空间位置看,它像一个共享权重的全连接层;但它在所有 H×W 位置复用同一组参数,所以保留空间布局,并且参数量远小于把整张特征图展平后的全连接。
主要是先降通道,降低后续大卷积核的计算量,同时做一次通道重组,让后面的空间卷积处理更紧凑的特征。
它能重新组合已有通道特征,并通过激活函数引入非线性。虽然不直接看邻域,但前面层已经把局部空间模式编码进通道里,1x1 可以学习这些模式之间的组合关系。
depthwise 部分只做每个通道自己的空间卷积,通道之间没有交流;1x1 pointwise convolution 负责跨通道融合,是轻量化结构保持表达能力的关键。