URL
https://arxiv.org/pdf/2109.09310.pdf
TL;DR
- 本文提出一种多功能的卷积核,可以有效提高算法效果,降低计算量与存储空间
- 具体做法是:将 一个 主卷积核与 多个 二值 mask 点积生成 多个次级卷积核,用次级卷积核进行计算
- 二值 mask 包括 H、W、C 方向,即每个次级卷积核的 H、W、C 都可能不同
Algorithm
思路
- 神经网络轻量化(参数量与计算量)常用方法:
- 模型压缩,主要包括:
- 权重分解
- 网络剪枝
- 权重量化
- 知识蒸馏
- 网络结构轻量化,主要包括:
- Xception
- MobileNet series
- ShuffleNet series
- OctConv
- MixConv
- 模型压缩,主要包括:
- 本论文思路:
- 将 一个 主卷积核与 多个 二值 mask 点积生成 多个次级卷积核
- 二值 mask 作用在 H、W、C 上,所以每 个次级卷积核的感受野可能不同,关注的 channel 可能不同
网络设计
在空间方向设计多功能卷积

-
空间方向就是指 H、W 方向
-
图中用一个极端例子演示,实际上二值 mask 不是由人手工设计的,而是神经网络自动学习得到
-
普通卷积计算过程:
- (“@” means convolution operation)
-
多功能卷积计算过程(在空间方向上):
$s.t.\ s = \lceil \frac{d}{2} \lceil,\ { M_i }s_{i=1}\in{0, 1}{d\times d\times c}\ $
“[]” means concat, means bias
- naive version:
$ s.t.\ s = \lceil \frac{d}{2} \lceil,\ { M_i }s_{i=1}\in{0, 1}{d\times d\times c}\ $
在 Channel 方向设计多功能卷积

-
在卷积神经网络中 C >> H、W,所以在 Channel 方向设计多功能卷积非常必要
-
数学表示:
$ s.t.\ \ \forall i, \hat{f}_i \in \mathbb{R}^{d\times d\times c},\ \ n = (c - \hat{c})/g+1$
- 其中:
- 省略 bias
- g means channel-wise stride
- means non-zeros channels
- n means 一个 filter 用几次
- [] means concat
学习策略
mask 具体如何设计

- mask 两种设计策略:
- 方案 a:每个主卷积核共享一套二值 mask
- 方案 b:每个二值 mask 只用一次
- 实验证明,方案 b 效果更好,原因是:方案 b 中二值 mask 的假设空间更大
如何让主卷积核对应的多个二值 mask 相似性
-
极端情况:如果一个主卷积核对应的所有二值 mask 都相同,那理论上模型效果与只是用主卷积核运算表现基本相同
-
所以需要加入一种使得 同一个主卷积核对应的多个每个二值 mask 更倾向不同 的损失函数
-
损失函数数学表示:
$ \mathcal{L}_{ortho} = \frac{1}{2} \lVert \frac{1}{d2c}MTM-I\rVert_F^2$
- 其中:
- means loss of Orthogonal(正交损失)
- means 任务相关 loss
- 表示一个主卷积核的一个二值 mask
- 正交矩阵的性质:
- 假设 M 是一个正交矩阵,则
- 正交矩阵的列向量线性无关
对主卷积核的优化方法
- 总 loss 包括 任务相关 loss 和 mask 正交 loss
- 只有 任务相关 loss 与主卷积核相关
-
- 其中 k 表示主卷积核的个数
对二值 mask 的优化方法
- 先将 展开:
- 所以:
- 交换门,
- 因为 M 是 binary 的离散值,所以需要一个代理的连续变量 H,实现 直通估计器 STE 的作用

Thought
- 这篇文章在 2018 年就已经发表在 nips 上了,最近做了一些详细实验后重新挂在了 arxiv 上了
- 本文实验非常详细,虽然没有开源,前向计算和反向计算的数学推导很精彩~~(敲 latex 敲的想哭)~~,像一篇 survey
- 这篇文章 inference 阶段有点重参数化的感觉,RepMLP 思想和本文有点相似
- STE 部分让我想起了 DoReFa-Net 😂






























