新闻  |   论坛  |   博客  |   在线研讨会
轻量级网络如MobileNet还适合继续剪枝操作,进一步压缩模型吗?
计算机视觉工坊 | 2022-06-16 20:28:37    阅读:384   发布文章

作者丨LiteAI@知乎(已授权)

来源丨https://www.zhihu.com/question/343562568/answer/2514880247编辑丨极市平台

导读

 

分享一篇ICML2022文章,关于实现硬件友好方式压缩网络的新范式,其能在基于MobileNetV2的网络上进行剪枝,且在移动端/边缘端Google Pixel 3/Raspberry Pi 4的性能超过通道和层剪枝SOTA方法。

分享一篇ICML2022文章,关于实现硬件友好方式压缩网络的新范式,其能在基于MobileNetV2的网络上进行剪枝,且在移动端/边缘端Google Pixel 3/Raspberry Pi 4的性能超过通道和层剪枝SOTA方法。由莱斯大学&Meta提出的《DepthShrinker:一种面向增强实际硬件效率的紧凑型神经网络的新的压缩范式》。

图片图片

文章链接: https://arxiv.org/abs/2206.00843

项目链接: https://github.com/RICEEIC/DepthShrinker

高效的深层神经网络(DNN)模型配备紧凑型算子(例如深度卷积),降低DNN的理论复杂度(例如总的权重/计算量),同时保持较好的模型准确度。然而,现有高效的DNN在实现其承诺提高实际硬件效率方面是有限的,由于其常用的紧致算子的硬件利用率低。在这项工作中,我们提出一种新的压缩范式,用于开发真正的硬件高效DNN,从而在保持模型准确性的同时提高硬件效率。有趣的是,我们观察到一些DNN层的激活函数有助于DNN的训练优化和提升准确度,可以在不影响模型准确度的情况下,在训练后以适当的方式去除。受此启发,我们提出了DepthShrinker,开发硬件友好型紧致网络,通过将具有不规则计算模式的现有高效DNN的基本构建块收缩为密集的,从而实现网络的紧致化,硬件利用率大大提高,从而实现真正的硬件效率。令人兴奋的是, 我们的DepthShrinker框架实现了硬件友好紧凑型网络,超过现有SOTA高效DNN和压缩方法,例如,准确度提高3.06%,在Tesla V100实现1.53× 现有逐通道剪枝方法MetaPruning的吞吐量。

以下为文章详细解读:

1 文章提出的的深度收缩框架1.1 概述

关键理念。 DepthShrinker旨在开发真正的硬件 高效的DNN,通过删除冗余激活功能,然后合并连续线性操作。关键理念是通过删除带有两个激活函数的反向残差块(Sandler等人2018),即大部分高效DNN的基本构建块,整个块合并成一个密集的卷积层,卷积核大小与原始块的深度卷积相同,输入/输出通道数与原始块相同。

框架概述。 为了实现上述目标,存在两个重要的挑战:哪些激活函数需要去除,如何在剩余激活函数较少的情况下恢复准确度。为了解决这些问题, 建立在现有SOTA高效DNN之上的深度收缩器集成了三个阶段的工作,如图2所示:(1)识别冗余激活函数,(2)去除已识别的激活函数并微调阶段(1)生成的DNN和(3)合并在前一阶段删除激活函数后的网络,以得到最终的网络。请注意,我们在公开可用的预训练模型之上应用DepthShrinker,以下为常见模型压缩方法(He等人2018;Wen等人2016年;Han等人2015;Jacob等人2018)。

图片

图2 DepthShrinker三个阶段设计的整体框架。

1.2 阶段1:识别冗余激活函数

为了识别不重要的激活函数,预定义的标准如分层修剪(Li等人2016;Wen 等人2016)对于不同层耦合的激活函数是不合适的, 比如去除前面层的激活函数可能会更改后面层的特征分布。因此,我们提出了一种可微搜索方法来了解所有激活函数的重要性,通过考虑其联合影响而实现,灵感来自最近的剪枝工作(Kang&Han2020;Ramanujan等人2020; Fu等人2021)。

搜索方法概述。 我们的搜索方法指定可学习掩码(N是激活函数的总数)到所有激活函数,其用作激活函数代理的重要性得分。在搜索过程中更新m时,应考虑不同激活函数的耦合情况,同时确保m的稀疏性足够高,例如应高于 (1 − k/N),其中k是剩余激活函数的数量,以满足合并后阶段的目标效率(见第1.4节)。在DepthShrinker中,搜索方法联合学习掩码m和模型权重θ。

搜索方法表示。 推导最佳θ和m本质上是一个双层优化问题(Liu等人2018)。在DepthShrinker中,我们将其近似为一级优化方式(Xie等人2018;Hu等人2020;Bi等人2020年)共同更新θ和m:

其中|是损失函数,  和  是第 i个输入和标签对,  (这里是y尖号) 是在参数  和激 活掩码  下的预测标签。为了达到目标稀疏性 , 我们通过在正向过程中仅激活  的前  个元素来对 m施加  约束。具体而言, 我们采用二进制掩码  (这里是m尖号)使用元素1和 0 来 近似前  个元素, 否则直接进行前向, 而m中的所有元素都是通过直通更新估计,Bengio等人2013 年)进行更新。特别地, 前向函数可以表示为:

其中  (这里是m尖号) 是第一个1层的网络函数,◦是函数合成的运算符,  是激活函数,  是一个变换(例如卷积或其他线性操作), 其由  参数化。等式 (2) 中的二进制掩码使得第I层 中的激活函数完全启用或禁用。在反向传播过程中, 我们直接传递二进制掩码的梯度  (这里是m 尖号)至 , 即  (这里是m尖号)。因为只有对应于掩码  的前  个值的激活函数参与前

搜索方法实现。 我们的搜索方法进行两种设置:(1)块收缩和(2)m的延迟感知衰减。对于前者,由于我们的目标是将整个反向残差块合并为一个密集卷积,我们共享对应于一个块中的两个激活函数的掩码值m,即删除或保留两个激活功能。对于后者,我们对m的每个元素额外增加衰减,其通过相应成本块的权重来进行加权。在这项工作中,我们直接采用搜索过程中在RTX 2080Ti GPU上预先测量的延迟,使其对于平台感知,以增强更长搜索时间的效率。

1.3 阶段2:如何微调

在上述搜索过程之后,具有最不重要m的激活函数被去除,并进行微调以恢复精度。

自由额外添加激活函数。 密集卷积后没有了激活函数,是因为反向残余块(Sandler等人2018)仅包含两个激活函数。为了提高所达到的准确度,我们在每次合并后,在每个密集卷积后额外添加一个激活函数(本工作中使用ReLU6),其硬件成本可以忽略不计。

自蒸馏。 在DepthShrinker中,我们在微调期间启用自蒸馏机制,即在原始网络的激活函数指导下进行知识蒸馏(Hinton等人2015),以进一步提高生成网络的准确度。需要注意的是,我们仅将原始网络作为教师网络,没有引入额外的模型。

1.4 阶段3:如何合并

微调移除不重要的激活函数后的网络,最后一步是合并相邻的线性操作(例如卷积/全连接, 平均池化或BN层)。

合并两个相邻层。 在不丧失一般性的情况下, 这里我们考虑两个相邻的卷积层, 输入特征 , 中间特征 , 输出特征 , 以及第一层和 第二层的卷积核权重为  和  被移除, 并假定:

上述两层可合并为一层。假设层  和  的步长均为 1 , 我们得到:

其中  和

其中  是大小为  的合并核。请注意, 如果层  和  的步长大于1, 则卷积核仍然可 以合并为一个步长为  、核大小为  的卷积 核。

合并反转残差块。 从上面的分析可以看出,当连续的卷积层合并到一个卷积层时,产生的卷积层的输入输出通道仅由第一卷积层中的输入通道数量和最后一个卷积层中的输出通道数量决定,而不需要考虑中间层结构。结果是,反向残差块的设计规则(Sandler等人2018),即三个卷积层的通道数先扩展后减少,自然有利于我们的深度收缩器。我们相信该方法由于未来的硬件高效DNN设计。

1.5 DepthShrinker:展开然后收缩

上述DepthShrinker的常规设计为,即利用不重要的激活功能可在训练后适当去除,不会损害推理准确度。令人兴奋的是,这种方式也可以用来改进DNN训练。具体而言,我们建议通过对给定DNN先扩展后收缩策略进行训练,则将其命名为DepthShrinker。在深度收缩训练中,我们首先(1)将一个或一些卷积层展开为反转残差块,由于在扩展模型中增加了过参数化,则有利于训练优化,(2)训练扩展的DNN,然后(3)应用DepthShrinker合并上述新引入的块,用于恢复原始网络结构。该训练计划可以被视为用于增强原始DNN的复杂度,有利于其训练优化,从而得到可实现的准确性,同时推理效率保持不变。

2 实验2.1 网络和数据集

我们将DepthShrinker应用于MobileNetV2(Howard等人2017)和EfficientNet-Lite(Google2020),即EfficientNet的硬件高效变体(Tan&Le 2019)系列,在ImageNet数据集之上(Russakovsky等人2015)进行实验。

2.2 和SOTA剪枝方法的基线对比

和通道剪枝方法基线对比结果如表2和表3所示。

图片

表2 DepthShrinker与SOTA通道剪枝方法MetaPruning对比结果。

图片

表3 DepthShrinker与SOTA通道剪枝方法AMC对比结果。

和层剪枝基线对比结果如图3所示。

图片

图3 DepthShrinker与SOTA层剪枝方法基线对比结果。

合并前后块的延迟可视化结果如图4所示,内存可视化如图5所示。

图片

图4 MobileNetV2-1.4合并前(实线)/后(虚线)的延迟可视化。

图片

图5 内存可视化。

2.3 和SOTA高效DNN方法基线对比

和高效DNN方法对比如图6所示。

图片

图6 与高效DNN方法对比结果。

2.4 消融实验

预训练和额外添加激活函数贡献如表4所示。

图片

表4 预训练和额外添加激活函数贡献结果。

随机搜索比较如表2和表3所示。

CPU设备(实验使用Google Pixel3和Raspberry Pi 4) 上的实验结果如表5所示。

图片

表5 CPU设备Google Pixel 3和Raspberry Pi 4的测试结果。

DepthShrinker评估结果如表6所示。

图片

表6 DepthShrinker评估结果。

本文仅做学术分享,如有侵权,请联系删文。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客