高效神经网络设计II
模型设计
卷积方式的使用和设计
- 通道拆分:
7*7->1*7+7*1
,7*7*7->1*1*7+1*7*1+7*1*1
- 提升单层通道利用率
- 特征通道补偿:输入通道取反和输入通道进行 concat(CReLU)
- 密集连接网络:DenseNet
- 1 通道/2.3 多尺度分组卷积:
- Depthwise conv + Pointwise conv
- BigLittleNet:将通道分为高分辨率网络和低分辨率网络
- Octave Convolution:将通道分解为低频+高频分量,低频使用更小的分辨率
- 多尺度卷积核与感受野卷积
- Squeezenet:使用
1*1
和3*3
的卷积核
- Squeezenet:使用
- MixNet:分组卷积时使用不同大小的卷积核
- ScaleNet:使用不同大小的特征图
- 分数+整数的分组卷积
- DSConv:VQK 只有整数值,不可训练,从预训练模型中来。KDS 是浮点数值,可训练。KDS 相当于学习 VQK 带来的残差。
- 剪枝与分组卷积
- condensenet:去除权重小的层,重组,做分组卷积
- 可学习的分组
- FLGC、DGC
剪枝
- 剪枝维度
通道级别的最常用
- Pruning Filters
- 根据卷积核的 L1Norm(即绝对值)判断是否裁剪掉卷积核
- ThiNet:使用网络下一层来指导当前层的剪枝,通过最小化剪枝前后的下一层网络的输出。
- Network Slimming:利用 BN 中的缩放因子来对不重要的通道进行裁剪
量化
- 二值量化:Binarized Neural Networks(BNN)
权重和每层的激活值全部二值化
- 三值量化:Ternary weight networks
最小化全精度权值 W 和三元权值$W^t$之间的欧氏距离
$$ \left\{\begin{array}{rl} {\alpha^{*}, \mathbf{W}^{t *}=} & {\underset{\alpha, \mathbf{W}^{t}}{\arg \min } J\left(\alpha, \mathbf{W}^{t}\right)=\left\|\mathbf{W}-\alpha \mathbf{W}^{t}\right\|_{2}^{2}} \\ {} & {\text { s.t. } \quad \alpha \geq 0, \mathbf{w}_{i}^{t} \in\{-1,0,1\}, i=1,2, \ldots, n} \end{array} \quad \mathbf{W}_{i}^{t}=f_{t}\left(\mathbf{W}_{i} | \Delta\right)=\left\{\begin{aligned} +1, & \text { if } \mathbf{W}_{i}>\Delta \\ 0, & \text { if }\left|\mathbf{W}_{i}\right| \leq \Delta \\ -1, & \text { if } \mathbf{W}_{i}<-\delta \end{aligned}\right.\right.="" ="" $$=""- Google 的 8 位量化
- NVIDIA 的 8 位量化
- 混合精度量化 HAQ (AutoML 模型)
- 剪枝与量化的结合:Deep Compression
- teacher 模型+更小的模型(studnet 模型)
- FitNet:比较浅而宽的 teacher 模型的知识迁移到更窄更深的 student 模型
- ProjectNet:同时训练一个大模型和一个小模型,实现高比率的压缩
- 量化与蒸馏的结合
- 协同学习
- BranchyNet:不同难度的样本,根据累积的熵来决定是否提前退出 inference
- Blockdrop:训练一个网络来决定每一个 block 是否 drop 的概率
前向传播中使用量化,反向时仍然按照全进度的浮点进行计算
根据每一层的校准集上的激活值确定阈值 T
知识蒸馏
teacher 模型是一个全精度模型,Apprentice 模型是一个低精度模型
动态推理
参考
-\delta>本文作者 : HeoLis
原文链接 : https://ishero.net/%E9%AB%98%E6%95%88%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E8%AE%BE%E8%AE%A1II.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得