【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 上。
动态剪枝网络可以通过根据不同的输入动态决定推理路径,实现实时线上加速目的。
Motivation
之前的方法大多直接对每个权重通道输出连续重要值,来决定权重的使用情况,但缺乏清晰可理解的剪枝过程。
Contribution
Method
Pipleline
图示为第 \(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\) 层的执行过程
\(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可微分处理
根据前面的前向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
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
Action Numer m
m 即每层的决策单元中 mask set 中 mask 的数量
表3说明:
- 对于VGG16-BN,m的影响不大
- 对于ResNet-56,m=5左右acc较高,m太小和太大都会导致acc降低
决策路径可视化
使用决策路径做 feature embedding
图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 ,用来做样本分类
对抗攻击实验
图4说明:
- 左中右分别为3种不同的对抗攻击算法(用不同攻击算法生成对抗样本)
- 彩色点为原始样本,灰色点为对抗样本
- 可以看出,使用上面提到的 feature embedding 来编码每个样本,可以较好地区分出对抗样本和原始样本
表4说明:
- 不同行是不同的攻击算法
- 不同列是不同的检测算法
- 有了feature embedding,还需要分类算法,Adaboost、RF、GBDT是3种传统的二元分类器
- Area Under ROC (AUROC) 越高越好
Conclusion
Summary
- 都属于自适应剪枝/动态剪枝,但和之前看过的RANet等不同:
- RANet是根据输入自适应调整网络规模,hard 样本用大网络,eazy样本用小网络
- 本文是根据输入自适应激活同一个超网中不同的子网络,这些子网络的规模都相同
- 由动态剪枝到使用动态剪枝的决策路径来作为样本的feature embedding,进而做对抗样本的检测,很新颖,以前没见过