1×1 卷积有什么作用?它不是没有空间信息吗?
简化版
1×1 卷积(卷积核大小 1×1)看似「只看一个像素、没有空间信息」,但它的作用在通道(channel)维度上,非常重要:① 改变通道数(升维/降维)——用 N 个 1×1 卷积核就能把输入的 C 个通道变成 N 个通道,常用来降维减少计算量(如在 3×3 卷积前用 1×1 把通道压小,即「瓶颈 bottleneck」结构);② 跨通道信息融合——1×1 卷积在每个空间位置上对所有输入通道做加权组合,实现通道间的信息交互;③ 增加非线性——1×1 卷积后接激活函数,能在在 stride=1 且 padding 合适时不改变空间尺寸的情况下加深网络、增强表达。它是 GoogLeNet(Inception)、ResNet 瓶颈结构、MobileNet 等的关键组件。
详细版
1×1 卷积在做什么:
输入:H × W × C_in (C_in 个通道)
1×1 卷积核(共 C_out 个):每个核大小 1×1×C_in
输出:H × W × C_out
- 空间尺寸 H×W 不变
- 通道数从 C_in 变成 C_out
- 每个输出 = 该位置所有输入通道的加权和(+偏置+激活)
三大作用:
| 作用 | 说明 |
|---|---|
| 改变通道数 | 升维/降维,控制通道数(降维省计算) |
| 跨通道融合 | 对每个位置的所有通道做加权组合 |
| 增加非线性 | 配合激活函数,加深网络不改空间尺寸 |
降维省计算的例子(bottleneck):
直接 256通道 → 3×3卷积 → 256通道:参数 ≈ 3×3×256×256 ≈ 59万
先 1×1 降到 64 → 3×3 → 1×1 升回 256:参数大幅减少(ResNet 瓶颈)
完整版教学
一、疑问:1×1 卷积不是「什么都没做」吗
初看 1×1 卷积很奇怪:卷积核只有 1×1,每次只覆盖一个像素位置,好像没有提取任何空间信息(不像 3×3 能看邻域)。那它有什么用?
关键在于——图像的卷积是三维的,除了空间(H×W),还有通道(channel)维度。1×1 卷积虽然在空间上只看一个点,但它在通道维度上是「全连接」的:它对这个位置上的所有输入通道做加权组合。所以 1×1 卷积的作用不在空间,而在通道维度——这才是理解它的钥匙。
二、作用一:改变通道数(升维/降维)
1×1 卷积最重要的作用是灵活地改变通道数。
- 输入是
H×W×C_in,用 C_out 个 1×1 卷积核(每个核大小是1×1×C_in),输出就是H×W×C_out。 - 空间尺寸 H×W 完全不变,只有通道数从 C_in 变成 C_out。
想降维(减少通道)就让 C_out < C_in,想升维就 C_out > C_in。这在控制网络计算量上极其有用:
经典用途——降维省计算(瓶颈 bottleneck 结构):直接对高通道数做大卷积核很贵。可以先用 1×1 卷积把通道数压小、做完 3×3 卷积、再用 1×1 升回来:
朴素:256 通道 →(3×3 卷积)→ 256 通道
参数 ≈ 3×3×256×256 ≈ 59 万
瓶颈:256 →(1×1 降到 64)→ 64 →(3×3)→ 64 →(1×1 升回 256)→ 256
参数大幅减少,效果相近
ResNet 的瓶颈块、GoogLeNet 的 Inception 都用 1×1 卷积在昂贵的大卷积前后降维/升维,大幅节省计算和参数。
三、作用二:跨通道信息融合
1×1 卷积在每个空间位置上,对该位置的所有输入通道做加权求和——这相当于在通道之间做了一次「信息交互/混合」。
- 不同通道往往对应不同的特征(一个通道检测边缘、一个检测颜色……),1×1 卷积把这些通道的信息线性组合起来,生成新的、融合了多通道信息的特征。
- 这被形象地称为「跨通道的信息整合」或「network in network」里的微型网络。
所以 1×1 卷积虽然不看空间邻域,却在做通道维度的特征重组,是很有价值的操作。
在固定空间位置上,1×1 卷积把 C_in 维向量乘以一个共享矩阵,生成 C_out 维向量。每个输出通道都可以组合全部输入通道,因此它能学习颜色、纹理或语义通道之间的交互。它不混合相邻空间位置,这部分空间建模通常由 3×3、depthwise 卷积或其他算子完成。
四、作用三:增加非线性、加深网络
1×1 卷积后面通常接一个激活函数(ReLU)。这意味着:
- 可以在不改变特征图空间尺寸、不增加太多参数的情况下,插入一层「1×1 卷积 + 激活」,增加一层非线性变换、加深网络、增强表达能力。
- 这是 NIN(Network in Network) 提出 1×1 卷积的初衷之一——用它构建「微型网络」增加非线性。
单独一个 1×1 卷积仍是线性通道投影,只有与 ReLU、GELU 等非线性组合后才增加非线性表达。连续堆叠多个纯线性 1×1 卷积在没有其他约束时可合并为一个线性映射。实际架构还要考虑归一化顺序和瓶颈宽度,不能只按层数判断表达能力。
五、在经典架构中的应用
- GoogLeNet / Inception:Inception 模块里,在 3×3、5×5 卷积前用 1×1 卷积降维,大幅减少计算量,让「多尺度并行卷积」变得可行。
- ResNet 瓶颈块(Bottleneck):
1×1 降维 → 3×3 → 1×1 升维,让很深的网络计算可控。 - MobileNet:深度可分离卷积里,用 1×1 卷积(逐点卷积 pointwise)做通道融合。
- SENet 等注意力模块:也常用 1×1 卷积做通道维度的变换。
可以说 1×1 卷积是现代高效 CNN 架构的标准积木。
六、算清瓶颈结构到底省了多少参数
输入和输出均为 256 通道,直接使用 3×3 卷积需要 3×3×256×256=589824 个权重。若先用 1×1 降到 64 通道,再做 3×3,最后用 1×1 升回 256,权重分别为 16384、36864、16384,合计 69632。忽略偏置时约减少 8.47 倍,但中间通道过窄也会损失表达能力。
| 路径 | 参数量 |
|---|---|
| 直接 3×3:256→256 | 589824 |
| 1×1:256→64 | 16384 |
| 3×3:64→64 | 36864 |
| 1×1:64→256 | 16384 |
| 瓶颈合计 | 69632 |
1×1 卷积的核心价值是对每个空间位置执行共享的通道投影。它可以降维、升维或配合激活增加通道方向的非线性;若 stride 大于 1,也能同时下采样,因此“永远不改变 H、W”不成立。
瓶颈宽度是容量与成本的折中参数,不能只追求最小参数量。
七、常见误区与追问
- 误区:1×1 卷积无论如何都不改变空间尺寸。 stride 大于 1 时会下采样,输出尺寸仍由通用卷积公式决定。
- 误区:1×1 卷积没有感受野所以没有用。 它能在每个位置混合全部输入通道,是重要的通道投影。
- 追问:为什么瓶颈中间常配非线性? 在线性投影之间加入激活可增强函数表达,但具体布局随架构而异。
- 追问:1×1 与全连接有何关系? 它是在所有空间位置共享参数的逐位置全连接。
- 追问:降维比例如何选择? 结合精度、吞吐和内存做消融,过度压缩会形成信息瓶颈。
八、加强记忆
1×1 卷积看似「只看一个像素、没空间信息」,但它作用在通道维度(对每个位置的所有输入通道做加权组合)。三大作用:① 改变通道数(升维/降维,用 C_out 个 1×1 核把通道从 C_in 变 C_out,空间尺寸不变;常用降维省计算,如先 1×1 压小通道再做 3×3,即 ResNet 瓶颈、Inception);② 跨通道信息融合(把不同通道的特征线性重组);③ 增加非线性(配激活函数,不改空间尺寸就加深网络)。它是 GoogLeNet/Inception、ResNet 瓶颈、MobileNet 等高效架构的标准积木。记住:1×1 卷积不改空间、只玩通道。