Loading

【Layerwise Channel Selection】2020-AAAI-Dynamic Network Pruning with Interpretable Layerwise Channel Selection-论文阅读

Layerwise Channel Selection

2020-AAAI-Dynamic Network Pruning with Interpretable Layerwise Channel Selection

来源:ChenBong 博客园

  • Institute:THU, Ant Financal
  • Author:Yulong Wu, Xiaolu Zhang, Hang Su*
  • GitHub:/
  • Citation:/

Introduction

给每个卷积层附加上一个决策单元, 在推理时,根据第 i 层的 input feature maps, 生成第 i 层的 mask, 根据mask来决定第 i 层要激活的卷积核, 并将mask乘在第 i 层的output feature maps 上。

mask的值是0~1之间的值,但相对比较稀疏,即小的很小(接近0或等于0),即某一层的mask有2个作用:

  • 一个是决定该层的卷积核的激活程度(如果某个卷积核对应的mask值为0,相当于本次推理删除了该卷积核,不进行卷积计算但仍然保留输出channels);
  • 另一个是乘在输出的 feature maps 上。

动态剪枝网络可以通过根据不同的输入动态决定推理路径,实现实时线上加速目的。


image-20200810171227874

Motivation

之前的方法大多直接对每个权重通道输出连续重要值,来决定权重的使用情况,但缺乏清晰可理解的剪枝过程。


Contribution


Method

Pipleline

image-20200810171227874

图示为第 \(l\) 个卷积层, 每个卷积层都会附加一个决策单元(Decision Unit), 每个决策单元又分为2部分:

  • Action Head
    • 输入第 \(l\) 层的input feature maps:\(x_{l-1}\)
    • 经过 ReLU 层、AvgPool 层,得到一个m维的向量 \(A(x_{l-1})\)
      • \(A(x_{l-1})= Linear(GlobalAvgPool(Relu(x_{l-1})))=[p_1, \ p_2, \ ..., \ p_m], \ A(x_{l-1})∈R^m \qquad (5)\)
  • Masks Sets
    • 保存第 \(l\) 层的 m 种mask:\(G_l ∈ R^{m×C_{l}}\)
    • \(A(x)\) 中最大的 \(i=arg \ max(A(x))\)\(G_l[i]\) 作为第 \(l\) 层运行时的mask
    • \(G_l[i]∈R^{C{_l}}\)\(G_l[i]\) 维度与第 \(l\) 层的通道数相同。
    • \(G_l[i]\) 是一个稀疏向量(一些元素等于0),将 \(G_l[i]\) 中非0元素对应位置的卷积核进行计算,没有计算的卷积核的output feature map 直接用0填充,得到 output feature maps
    • 将output feature maps再乘以 \(G_l[i]\) ,得到第 l 层最终的output feature maps(通道数还是\(C_l\) )。

Loss

\(\min _{\{\Theta, \Phi\}} \mathcal{L}=\sum_{h} \mathcal{L}_{e n t}\left(f_{\Theta}\left(\mathbf{x}_{k}\right), y_{k}\right)+\gamma \cdot \Omega\left(\left\{\mathbf{G}_{l}\right\}_{L}\right) \qquad (1)\)

公式(1)说明:

  • \(\Theta\) :表示全部层的网络权重(第 \(l\) 层的网络权重记为 \(\theta_l\)
  • \(\Phi\) :表示所有层的决策单元的参数(第 \(l\) 层的决策参数记为 \(\phi_l\)),包括:
    • 所有层的 Action Head (ReLU层、AvgPool层没有参数,全连接Linear层有参数) 的参数: \(\theta_A\)
    • 所有层的 Masks Sets: \(\{G_l\}_L\)
  • \(\Omega\left(\left\{\mathbf{G}_{l}\right\}_{L}\right)\) 的作用是使 masks 稀疏化, \(\gamma\) 为超参

\(\Theta\) 网络权重使用proximal gradient descent 优化器学习, \(\Phi\) 决策单元参数使用Adam优化器学习)


\(l\) 层的执行过程

image-20200810171227874

\(A(x_{l-1})= Linear(GlobalAvgPool(Relu(x_{l-1}))), \ A(x_{l-1})∈R^m \qquad (5)\)

公式(5)说明:

  • \(l\) 层的输入\(x_{l-1}\) 经过Action Head,输出m维向量

\(\pi(x_{l-1}, \phi_{l})=\mathbf{G}[i], \ where \ i=\arg \max A(x_{l-1}) \qquad(3)\)

公式(3)说明:

  • \(\pi(x_{l-1}, \phi_{l})\) 确定第 \(l\) 层的mask:
  • 根据第 \(l\) 层的 input feature maps 和第 \(l\) 层的 决策参数,来确定第 \(l\) 层的mask: \(\mathbf{G}[i]\)

\(\mathbf{x}_{l}=\operatorname{conv}\left(\mathbf{x}_{l-1}, \theta_{l}\right) \qquad (2)\)

公式(2)说明:

  • 常规卷积, \(\mathbf{x}_{l-1}\) 为第 \(l\) 层的输入, \(\theta_l\) 为第 \(l\) 层的网络权重

\(\mathbf{x}_{l}=conv\left(\mathbf{x}_{l-1}, \theta^\prime_{l}\right) \cdot \pi\left(\mathbf{x}_{l-1}, \phi\right),\ 其中\theta_{l}^{\prime}=\left\{\theta_{l}[j] \mathbf{G}[i][j] \neq 0\right\} \qquad (4)\)

公式(4)说明:

  • \(\theta^\prime_{l}\) 为经过 mask \(G[i]\) 选择过后的新的卷积核(保留mask中非0元素位置的卷积核);
  • \(G_l[i]\) 是一个稀疏向量(其中有些元素为0),将 \(G_l[i]\) 中非0元素对应位置的卷积核进行计算,没有计算的卷积核的output feature map 直接用0填充,得到output feature maps;
  • \(G_l[i]\) 作为第 \(l\) 层运行时的 mask, \(G_l[i]∈R^{C{_l}}\)\(G_l[i]\) 维度与第 \(l\) 层的输出通道数(卷积核个数)相同;
  • 将output feature maps再乘以 \(G_l[i]\) ,得到第 l 层最终的output feature maps(通道数还是\(C_l\) )。

Mask稀疏化正则项

\(\Omega\left(\left\{\mathbf{G}_{l}\right\}_{L}\right)=\left(\frac{\left\|\operatorname{concat}\left(\mathbf{G}_{1}, \cdots, \mathbf{G}_{L}\right)\right\|_{1}}{\sum_{l} C_{l}}-r\right)^{2} \qquad (8)\)

公式(8)说明:

  • 公式(8)在前向完毕后进行计算
  • 这里的 \((G_1,\ G_2,\ ...,\ G_L)\) 应该是前向过程中,每一层决策单元选中的mask vector,而不是mask set,即 \(G_1\) 是一个(而不是m个) \(C_1\) 维的向量,..., \(G_L\) 是一个 \(C_L\) 维的向量。
  • 所以 \(\operatorname{concat}\left(\mathbf{G}_{1}, \cdots, \mathbf{G}_{L}\right)\) 是一个 \(\sum_{l} C_{l}\) 维的向量。
  • \(\frac{\left\|\operatorname{concat}\left(\mathbf{G}_{1}, \cdots, \mathbf{G}_{L}\right)\right\|_{1}}{\sum_{l} C_{l}}\) 表示每一层 mask vector 的每个元素的平均值,即整个网络每个卷积核的 mask 的平均稀疏程度,而 L1-norm 会使G稀疏化(有的项变为0),所以可以作为网络的总稀疏程度(如该项的值为0.6,表示每一层的 mask vetor 所有元素中有60%的元素值为0,那么前向过程中就有60%的卷积核不用执行卷积计算)
  • r 为指定的剪枝率

\(arg max A(x)\) ,softmax可微分处理

image-20200810171227874

根据前面的前向pipeline有:

  • \(A(x)= Linear(GlobalAvgPool(Relu(x_{l-1})))=[p_1, \ p_2, \ ..., \ p_m], \ A(x)∈R^m \qquad (5)\)
  • \(\pi(\mathbf{x}, \phi)=\mathbf{G}[i], \ where \ i=\arg \max A(x) \qquad(3)\)

其中的 \(arg \ max\) 步骤是不可微分的,无法反向传播,无法更新到决策单元中的全连接层的参数(因此作以下softmax处理(和DARTS几乎相同的处理方法):

\(I_{i}=\frac{\exp \left(\left(\log p_{i}+G_{i}\right) / \tau\right)}{\sum_{j=1}^{m} \exp \left(\left(\log p_{j}+G_{j}\right) / \tau\right)}, \quad \forall i=1, \cdots, m \qquad (7)\)

公式(7)说明:

  • 其中 \(p_i\) 为原始输出概率, \(G_i\) 为 Gumbel 随机变量(添加微小的扰动,增加随机性), \(τ\) 为温度系数(超参)。
  • \([p_1, \ p_2, \ ..., \ p_m]\) 转化为 \([I_1, \ I_2, \ ..., \ I_m]\)
  • 最终 \(x_l = \sum_{i=1}^m I_i \cdot G[i] \cdot x_l\) ,即不是取A(x)中最大的元素对应位置的mask,而是每个mask都使用,不过每个mask 使用程度不同
  • 使得 arg max 操作转变为矩阵乘法操作(可微)

ps. 对比DARTS: \(\frac{\exp \left(\alpha_{o}^{(i, j)}\right)}{\sum_{o^{\prime} \in \mathcal{O}} \exp \left(\alpha_{o^{\prime}}^{(i, j)}\right)}\)


Experiments

CIFAR-10

Settings

  • 每层的决策单元,masks组数m=5
  • 稀疏率r = 0.1 for VGG16-BN, r=0.4 for ResNet-56
  • batch size=128
  • train epoch=100
  • train learning rate = 0.01
  • fine-tune epoch=100
  • fine-tune learning rate = 0.001
    • 这里的fine-tune是冻结所有层的决策单元参数,更新网络权重
    • && 这里不再需要更新决策单元中的全连接层的参数,是不是在前向过程中可以用arg max操作,因为后续推理过程中的决策路径中每一层看起来只选择一个mask?

Result

image-20200810195404531

ImageNet

Settings

  • 每层的决策单元,masks组数m=40
  • 稀疏率r = 0.6 for VGG16 and ResNet-50
  • batch size=64
  • 基于pretrain compressed model
  • train epoch=30
  • train learning rate = 0.01
  • fine-tune learning rate = 0.001

Result

image-20200810195345090

Action Numer m

m 即每层的决策单元中 mask set 中 mask 的数量

image-20200810201133486

表3说明:

  • 对于VGG16-BN,m的影响不大
  • 对于ResNet-56,m=5左右acc较高,m太小和太大都会导致acc降低

决策路径可视化

image-20200810201457638


使用决策路径做 feature embedding

image-20200810201853908

图3说明:

  • 每个样本经过每层的决策单元,都会得到一个离散的概率向量 \(\left\{\mathbf{p}_{l} \in \mathcal{R}^{m} \mid l=1, \cdots, L\right\}\)
  • 网络一共 L 层,则一共会得到 L 个向量 \(p_l\),每个向量 \(p_l\) 都有m维
  • 将L个向量concat起来,得到一个L×m维的向量,可以作为该样本的 feature embedding ,用来做样本分类

对抗攻击实验

image-20200810202002164

图4说明:

  • 左中右分别为3种不同的对抗攻击算法(用不同攻击算法生成对抗样本)
  • 彩色点为原始样本,灰色点为对抗样本
  • 可以看出,使用上面提到的 feature embedding 来编码每个样本,可以较好地区分出对抗样本和原始样本

image-20200810202115800

表4说明:

  • 不同行是不同的攻击算法
  • 不同列是不同的检测算法
  • 有了feature embedding,还需要分类算法,Adaboost、RF、GBDT是3种传统的二元分类器
  • Area Under ROC (AUROC) 越高越好

Conclusion


Summary

  • 都属于自适应剪枝/动态剪枝,但和之前看过的RANet等不同:
    • RANet是根据输入自适应调整网络规模,hard 样本用大网络,eazy样本用小网络
    • 本文是根据输入自适应激活同一个超网中不同的子网络,这些子网络的规模都相同
  • 由动态剪枝到使用动态剪枝的决策路径来作为样本的feature embedding,进而做对抗样本的检测,很新颖,以前没见过

Reference

https://mp.weixin.qq.com/s/FQ_r40qDUcAM4UG-xrPS9Q

https://zhuanlan.zhihu.com/p/110228919

posted @ 2020-08-10 20:39  ChenBong  阅读(529)  评论(1编辑  收藏  举报