1. 轻量化网络的概念
方法 | 例子 |
---|---|
1. 压缩训练有素的模型 | 知识蒸馏; 量化剪枝的权值(①权重剪枝;②通道剪枝);注意力迁移 |
2. 轻量化网络的直接训练 | SqueezeNet;MobileNets系列;MnasNet;ShuffleNet系列;Xception;EfficientNet;EfficientDet |
3. 加快卷积运算 | im2col GEMM;Winograd低秩分解 |
4. 硬件部署 | TensorRT;JetsonTensorflow;slimTensorflow;liteOpenvino;FPGA集成电路 |
: 参数、计算、内存访问、耗时、能耗、碳排放CUDA加速,对抗学习,Transformer、Attention、Nas、嵌入式开发,FPGA、软硬件协同设计,移动终端,边缘段,智能终端
2. MnasNet创新点
- 多目标优化函数
- 多层NAS搜索空间(性能的准确性 真实手机推理时间)
这种直接用落地设备的比例FLOPs, MAC, Params要更加合理
2.1 多目标优化函数
m m a x i m i z e A C C ( m ) × [ L A T ( m ) T ] w \underset{m} maximize \ \ \ \ ACC(m) \times [\frac{LAT(m)}{T}]^w mmaximizeACC(m)×[TLAT(m)]w 中 m m m 为模型, m m a x i m i z e \underset{m}maximize mmaximize 为该模型 m m m 的优化函数的目标,即使得后面的部分最大化, A C C ( m ) ACC(m) ACC(m) 为该网络的准确率, L A T LAT LAT 为该网络的实际推理速度, T T T 为期望网络的推理速度,是一个人为设定的常数, w w w 被定义为:
w = { α , i f L A T ( m ) ≤ T β , o t h e r s w=\begin{cases} \alpha,&if \ LAT(m) \leq T \\ \beta,&others \end{cases} w={ α,β,if LAT(m)≤Tothers
要想使得目标函数足够大, A C C ACC ACC 需要变大, L A T LAT LAT 小,即上面的公式表示:找到某个模型的 m m m 使得目标函数最大化。
L A T LAT LAT = Latency,即延迟 -> 模型的推理速度
我们看一下这张数据图:
我们分析一下 α \alpha α, β \beta β 这两个参数:
-
当我们设置 α = 0 , β = 1 \alpha=0 , \beta=1 α=0,β=1 时:
- 如果模型的 L A T LAT LAT 满足我们设置的推理速度 T ( L A T ( m ) ≤ T ) T (LAT(m) \leq T) T(LAT(m)≤T) ,那么 w = α = 0 w=\alpha=0 w=α=0 ,模型的 A C C ACC ACC 就是其本身,模型并无任何波澜,甚至想笑😂;
- 如果模型的 L A T LAT LAT 不满足我们设置的推理速度 T ( L A T ( m ) ≥ T ) T (LAT(m) \geq T) T(LAT(m)≥T),那么 w = β = − 1 w = \beta = -1 w=β=−1,此时模型的 A C C = A C C × [ T L A T ( m ) ] ACC=ACC \times [\frac{T}{LAT(m)}] ACC=ACC×[LAT(m)T] ,很明显 [ T L A T ( m ) ] ≤ 1 [\frac{T}{LAT(m)}] \leq 1 [LAT(m)T]≤1,所以此时模型的 A C C = 惩 罚 系 数 × A C C ACC = 惩罚系数 \times ACC ACC=惩罚系数×ACC , A C C ACC ACC 会降低。且 L A T LAT LAT 越大,惩罚越严重,而 ,所以。
-
当我们设置 α = − 0.07 , β = − 0.07 \alpha=-0.07, \beta=-0.07 α=−0.07,β=−0.07 时:
- 如果模型的 L A T LAT LAT 满足我们设置的推理速度 T ( L A T ( m ) ≤ T ) T (LAT(m) \leq T) T(LAT(m)≤T),那么 w = α = − 0.07 w=\alpha=-0.07 w=α=−0.07,模型的 A C C = A C C ( m ) × [ T L A T ( m ) ] 0.07 ≥ 1 ACC = ACC(m) \times [\frac{T}{LAT(m)}]^{0.07} \geq 1 ACC=ACC(m)×[LAT(m)T]0.07≥1,所以;
- 如果模型的 L A T LAT LAT 不满足我们设置的推理速度 T ( L A T ( m ) ≥ T ) T (LAT(m) \geq T) T(LAT(m)≥T),那么 w = β = − 0.07 w = \beta = -0.07 w=β=−0.07,此时模型的 A C C = A C C × [ T L A T ( m ) ] 0.07 ≤ 1 ACC=ACC \times [\frac{T}{LAT(m)}]^{0.07} \leq 1 ACC=ACC×[LAT(m)T]0.07≤1,所以此时模型的 $ACC = 惩罚系数 \times ACC $, $ACC $会降低。。
我们会发现, α = 0 \alpha=0 α=0, β = 1 \beta=1 β=1 有点像one-hot编码;而 α = − 0.07 \alpha=-0.07 α=−0.07, β = − 0.07 \beta=-0.07 β=−0.07 则像label-smooth编码
通过右图我们也可以看出来, α = 0 , β = 1 \alpha=0, \beta=1 α=0,β=1 由于惩罚很激进,所以 A C C ACC ACC 和 L A T LAT LAT 都比较集中;而 α = − 0.07 , β = − 0.07 \alpha=-0.07, \beta=-0.07 α=−0.07,β=−0.07 没有那么激进,所以模型没有前者那么集中。
2.1.1 α , β \alpha, \beta α,β的选择
选择 α = − 0.07 , β = − 0.07 \alpha=-0.07, \beta=-0.07 α=−0.07,β=−0.07 , 优点如下:
- 模型的搜索空间更大
- 可以搜索到更加多样的帕累托最优解(Pareto Optimality),多种 和 的权衡
帕累托最优(Pareto Optimality),也称为帕累托效率(Pareto efficiency),是指资源分配的一种理想状态,假定固有的一群人和可分配的资源,从一种分配状态到另一种状态的变化中,在没有使任何人境况变坏的前提下,使得至少一个人变得更好,这就是帕累托改进或帕累托最优化。 多目标优化函数可以让模型在 ACC 与 LAT 之间做出tradeoff。
多目标优化函数可以让模型在 A C C ACC ACC 与 L A T LAT LAT 之间做出tradeoff。
2.2 分层的NAS搜索空间
将一个CNN分解为7个Block,每个Block中的结构是一样的,如Block2中的Layer 2-1和Layer 2-N2是一样的;但每个Block之间的结构并不是一样的。这就使得我们可以设计不同的CNN模型。
3. NAS可以设计和搜索出哪些参数呢?
上图中所有蓝色的数字都是由NAS设计出来的,如:
- 卷积的方式
- 常规卷积
- 深度可分离卷积
- 逆残差卷积
- 卷积核大小
- 3×3还是5×5
- 是否要引入SE Module
- SE ratio=?
- 跨层连接的方式
- 池化
- 恒等映射
- 无 skip connection
- 输出层卷积核大小
- 每个Block中的Layer层数
以上这些参数都是由强化学习(Reinforcement Learning, RL)去搜索得到的,这是一个非常庞大的搜索空间,但是在论文中将其预定义为7个Block的分层的、分解的 搜索空间,这就能够使得不同的Block结构是多样化的。
强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,
4. NAS分层的意义
分层的NAS搜索可以使得我们的CNN模型具有多样性,。
我们使用分层的NAS后,生成的Block都不一样了,增加了模型的多样性
5. 强化学习(Reinforcement Learning)
- 使用RNN作为强化学习的智能代理 Agent(Controller);
- 它可以采取一系列的行动,从而生成一系列的模型;每生成一个模型就将这个模型训练出来(Trainer);
- 获取它的精度(accuracy)并在真实的手机(Mobile phones)上获取它的实测速度(latency);
- 由精度和速度算出多目标的优化函数(Multi-objective reward),就是我们刚才提到的公式;
- 再由这个函数作为奖励(reward)反馈给RNN代理(Controller)。
以上就是一个典型的强化学习流程,这个流程的。用公式简单表示:
J = E p ( a 1 : T ; θ ) [ R ( m ) ] J = E_p(a_{1:T};\theta)[R(m)] J=Ep(a1:T;θ)[R(m)]
其中, E p E_p Ep 为期望, a 1 : T a_{1:T} a1:T 为一系列结构选择, θ \theta θ 为智能体参数, [ ⋅ ] [\cdot] [⋅]为决定, R ( ⋅ ) R(\cdot) R(⋅)为目标函数(奖励), m m m 为模型。
6. 通过NAS搜索出来的MnasNet
其中: × n \times n ×n表示该Block的层数 紫色为MobileNet v1的深度可分离卷积模块 绿色为MobileNet v2的逆残差模块 红色是加了SE Attention的逆残差模块
7. MnasNet实验结果
7.1 横向对比
7.2 与MobileNet v2进行对比
上图表明,MnasNet速度是MobileNet v2的1.8倍,性能也是全面超越。
MobileNet v2可以调节乘宽系数和分辨率大小(这个貌似CNN都可以😂),从上图中发现,使用了相同的系数,MnasNet也是全面超越MobileNet v2的。
7.3 限制推理时间
上表表明,MnasNet可以人为设定 T T T ,然后根据实际任务搜索出新的网络,!
在Latency预算固定的前提下,NAS的准确率更高
7.4 目标检测
MnasNet除了可以用