链接: https://arxiv.org/abs/1912.03458v2
本文针对卷积神经网络, 提出一种动态卷积模块, 仅增加很少的计算量, 来获得性能上的较大提升.
相近的工作
动态卷积中的 Attention 模块来源于 SENet[13] 网络, 它可以自动学习到不同通道特征的重要程度, 生成对应的权重, 这相当于一种注意力机制.
与 SENet 不同的是, 动态卷积处理的对象是卷积核, 按权重相加, 而后者是处理特征图, 对每个特征图乘上一个权重.
方法
相对动态卷积来说, 传统的感知器可以看成静态的:y = g ( W T x + b )
\mathbf{y}=g(\mathbf{W^Tx}+\mathbf{b})
y = g ( W T x + b )
本文提出的动态感知器的概念可以表达为:y = g ( W ~ T ( x ) x + b ~ ( x ) ) W ~ ( x ) = ∑ k = 1 K π k ( x ) W ~ k , b ~ ( x ) = ∑ k = 1 K π k ( x ) b ~ k s.t. 0 ≤ π k ( x ) ≤ 1 , ∑ k = 1 K π k ( x ) = 1
\begin{aligned}
\mathbf{y} &=g\left(\widetilde{\mathbf{W}}^{T}(\mathbf{x}) \mathbf{x}+\tilde{\mathbf{b}}(\mathbf{x})\right) \\
\widetilde{\mathbf{W}}(\mathbf{x}) &=\sum_{k=1}^{K} \pi_{k}(\mathbf{x}) \widetilde{\mathbf{W}}_{k}, \tilde{\mathbf{b}}(\mathbf{x})=\sum_{k=1}^{K} \pi_{k}(\mathbf{x}) \tilde{\mathbf{b}}_{k} \\
\text { s.t. } & 0 \leq \pi_{k}(\mathbf{x}) \leq 1, \sum_{k=1}^{K} \pi_{k}(\mathbf{x})=1
\end{aligned}
y W ( x ) s.t. = g ( W T ( x ) x + b ~ ( x ) ) = k = 1 ∑ K π k ( x ) W k , b ~ ( x ) = k = 1 ∑ K π k ( x ) b ~ k 0 ≤ π k ( x ) ≤ 1 , k = 1 ∑ K π k ( x ) = 1
其中 W ~ k , b ~ k \tilde{\mathbf{W}}_{k}, \tilde{\mathbf{b}}_{k} W ~ k , b ~ k 分别是 K K K 个网络的权重参数.
聚合的意思是将 K K K 个卷积核根据权重 π k ( x ) \pi_k{(\mathbf{x})} π k ( x ) 按元素求和, 得到处理后的卷积核 W ~ , b ~ \mathbf{\tilde{W}}, \mathbf{\tilde{b}} W ~ , b ~ . 由于 π k ( x ) \pi_k{(\mathbf{x})} π k ( x ) 的生成是非线性的, 所以动态卷积具有更强的表达能力. 流程图如下:
上图中可能会产生误解, x \mathbf{x} x 是卷积网络中前一层的特征图, “attention” 模块输入的是本层的卷积核, 经过 SENet[13] 中的操作, 得到权重 π ( k ) \pi(k) π ( k ) , 与 c o n v k conv_k c o n v k 分别作积并求和得到聚合的卷积核, 这个卷积核再对输入 x \mathbf{x} x 处理得到本层的特征图 y \mathbf{y} y .
由于需要同步优化所有的卷积核, 因为这会带来训练上的困难. 针对训练问题, 本文提出两个改进.
注意到 ∑ k = 1 K π k ( x ) = 1 \sum_{k=1}^{K} \pi_{k}(\mathbf{x})=1 ∑ k = 1 K π k ( x ) = 1 这个设定也是本文的一个亮点, 文中分析了这有利于更好的训练. 如下图所示:
假设 W ~ 1 , W ~ 2 , W ~ 3 \widetilde{\mathbf{W}}_1, \widetilde{\mathbf{W}}_2, \widetilde{\mathbf{W}}_3 W 1 , W 2 , W 3 是三个卷积核, 当 ∑ k = 1 K π k ( x ) = 1 \sum_{k=1}^{K} \pi_{k}(\mathbf{x})=1 ∑ k = 1 K π k ( x ) = 1 时, 聚合的卷积核将映射到阴影三角形中, 这缩小了范围, 从而有利于训练.
另外关于 Softmax 归一化函数引入热度(temperature)的参数:π k = exp ( z k / τ ) ∑ j exp ( z j / τ )
\pi_{k}=\frac{\exp \left(z_{k} / \tau\right)}{\sum_{j} \exp \left(z_{j} / \tau\right)}
π k = ∑ j exp ( z j / τ ) exp ( z k / τ )
当 τ \tau τ 值变大时, π k \pi_k π k 的分布将更加集中. 通常情况下 τ = 1 \tau = 1 τ = 1 , 这使得 π k \pi_k π k 的分布较为分散, 对于较大的 π k \pi_k π k 值, 其对应的卷积核 W ~ k \widetilde{\mathbf{W}}_k W k 能够得到优化, 而较小的值对应的 W ~ k \widetilde{\mathbf{W}}_k W k 则得不到优化. 因此在训练初期设置较大的 τ \tau τ 值, 随着训练进行, 再将数值减小.
进一步改进
虽然动态卷积仅在增加很少的计算量的前提下, 能够提高网络的表达能力, 但这大大增加了网络参数的数量, 对硬件条件有更高的要求. 具体来说, 一个卷积层通常要输出很多个特征图, 而每一个特征图, 都要有一个动态卷积层来输出, 这使得卷积核的数量增加了 K K K 倍, 而文中 K = 8 K=8 K = 8 时效果比较好. 为了减少参数数量, 可考虑构造多个注意力模块, 然后复用 K K K 个动态卷积和.
参考
[13] Jie Hu, Li Shen, and Gang Sun. Squeeze-and-excitation networks. In The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), June 2018.
本人才疏学浅, 如有遗漏或错误之处, 请多多指教!