导航:首页 > 蒸馏问题 > 神经网络蒸馏

神经网络蒸馏

发布时间:2023-07-26 06:06:50

① 模型压缩简述

如今学术界新提出的神经网络模型越来越大,而在实际应用中很多模型都要被部属在移动端。移动端的存储空间以及算力都有限,无法运行太大的模型,所以模型压缩这个概念就应运而生。本文简单介绍一下在算法(软件)层面的模型压缩方法和paper,不涉及硬件上的技巧。内容大多来自2020年李宏毅老师的课程。
目前在算法层面模型压缩主要有四个流派,简介如下:

剪枝思想加入神经网络中。将网络中不重要的weight和neuron(网络中每层的层数)删除。

传说中的知识蒸馏。利用已经训练好的大模型来指导小模型。主要用在分类任务上。

从数据存储角度节省空间,将存储参数的浮点数压缩为更小的单位,用更少的位来表示值。

调整结构/使用特殊的结构来节省参数,后面再详细介绍。

前面提到了删除不重要的weight和neuron。对于权重来说,他的范数(比如L1或L2)大小可以看出重要程度:范数太小,不重要。对于神经元,不同输入下的输出是0的频率可以看出重要程度:经常输出0,不重要。删完之后,对新的模型进行fine-tune。这是剪枝最基础的思路,具体每层剪几个,低于多少要剪掉不同paper有提出不同算法。注意可以迭代多次删除,不要一次删除太多。在实践中,删除神经元的方式更容易被执行计算。
下面两张图是对于剪枝降低了参数的示意图:

至于为什么不直接训练小的模型,因为大的网络容易训练,小的网络容易陷入局部最优,所以就把大网络裁剪成小网络而不是直接训练小网络。
当然可以剪枝的部分不限于weight和neuron,对于剪枝完之后模型的处理方法也有新的发现。下面给出相关的paper list:

Pruning Filters for Efficient ConvNets(ICLR 2017)
Learning Efficient Convolutional Networks Through Network Slimming(ICCV2017)
Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration(CVPR2019)
The Lottery Ticket Hypothesis:Finding Sparse,Trainable Neural Networks(ICLR2019)
Rethinking the value of network pruning(ICLR2019)
Deconstructing Lottery Tickets:Zeros,Signs,and the Supermask(ICML2019)

通过已训练好的teacher模型训练student模型,指导/学习的过程在这里被抽象为蒸馏(distillation)。可以蒸馏模型的输出,直接匹配logits,或者蒸馏模型中间输出的特征feature,直接匹配feature或者学习feature如何转换 。
先说最经典的,对logits的蒸馏。结构如下图:

至于为什么要在softmax前除T,paper给的解释是让softmax的输出更平滑(意为输入更加类似soft target,而不是one-hot那样的hard target)。知识蒸馏还有一个有趣的点就是让小的模型还学会了不同输出label间的关系,比如在mnist模型可以学会label1和7很相似。
对于logits distillation的研究还有Deep Mutual Learning,Born Again Neural Networks,Improved Knowledge Distiilation via Teacher Assistant等研究,在下面的paperlist也有列出。
接下来简单介绍feature distillation。

类似的研究还有Similarity-Preserving Knowledge Distiilation,下面是paper list:

Distilling the knowledge in a Neural Network(NIPS2014)
Deep Mutual Learning(CVPR2018)
Born Again Neural Networks(ICML2018)
Improved Knowledge Distiilation via Teacher Assistant(AAAI2020)
Paying More Attention to Attention:Improving the Performance of Convolutional Neural Networks via Attention Transfer(ICLR2017)
Relational Knowledge Distiilation(CVPR2019)
Similarity-Preserving Knowledge Distiilation(ICCV2019)

可以用的方法有权重聚类,如下图:

也可以用一些经典的方法比如哈夫曼编码。
还有一种方法是使权重全都是+1或-1:

调整结构来节省参数的图示如下:

对于卷积结构也类似,传统的卷积结构需要3x3x2x4=72个参数,而以下结构只需要18+8=26个:

著名的模型有SqueezeNet,MobileNet,ShuffleNet,Xception。

② 知识蒸馏综述:网络结构搜索应用

【GiantPandaCV导语】知识蒸馏将教师网络中的知识迁移到学生网络,而NAS中天然的存在大量的网络,使用KD有助于提升超网整体性能。两者结合出现了许多工作,本文收集了部分代表性工作,并进行总结。

知识蒸馏可以看做教师网络通过提供soft label的方式将知识传递到学生网络中,可以被视为一种更高级的label smooth方法。soft label与hard label相比具有以下优点:

那么知识蒸馏在网络结构搜索中有什么作用呢?总结如下:

知识蒸馏在很多工作中作为训练技巧来使用,比如OFA中使用渐进收缩训练策略,使用最大的网络指导小网络的学习,采用inplace distillation进行蒸馏。BigNAS中则使用三明治法则,让最大的网络指导剩下网络的蒸馏。

目标:解决教师网络和学生网络的匹配问题(知识蒸馏中教师网络和学生网络匹配的情况下效果更好)。

在知识蒸馏中,选择不同的教师网络、不同的学生网络的情况下,最终学生网络的性能千差万别。如果学生网络和教师网络的容量相差过多,会导致学生难以学习的情况。Cream这篇文章就是为了解决两者匹配问题。

普通的SPOS方法如左图所示,通过采样单路径子网络进行训练。右图则是结合了知识蒸馏的方法,Cream提出了两个模块:

Cream中心思想是,子网络可以在整个训练过程中协作学习并相互教导,目的是提高单个模型的收敛性。

消融实验如下:

目标:通过教师引导各个block特征层的学习,根据loss大小评判各子网的性能。

这是一篇将NAS和KD融合的非常深的一个工作,被CVPR20接收。之前写过一篇文章进行讲解,这里简单回顾一下。

DNA是两阶段的one-shot NAS方法,因此其引入蒸馏也是为了取代普通的acc指标,提出了使用子网络与教师网络接近程度作为衡量子网性能的指标。

在训练的过程中,进行了分块蒸馏,学生网络某一层的输入来自教师网络上一层的输出,并强制学生网络这一层的输出与教师网络输出一致(使用MSELoss)。在搜索过程结束后,通过计算各子网络与教师网络的接近程度来衡量子网络。

目标:通过改进KL divergence防止学生over estimate或者under estimate教师网络。

上图展示了OFA,BigNAS等搜索算法中常用到的蒸馏方法,子网使用的是KL divergence进行衡量,文中分析了KL 散度存在的局限性:即避零性以及零强制性。如下公式所示,p是教师的逻辑层输出,q是学生逻辑层输出。

AlphaNet提出了一个新的散度衡量损失函数,防止出现过估计或者低估的问题。如下所示,引入了 。

其中 不为0或者1,这样如下图所示:

蓝色线对应example 2表示,当 为负值,如果q过估计了p中的不确定性, 的值会变大。

紫色线对应example 1表示,当 为正数,如果q低估了p中的不确定性, 的值会变大

同时考虑两种情况,取两者中最大值作为散度:

目标:提出了衡量学生网络和教师网络 内部激活相似度 衡量指标,通过表征匹配可以用来加速网络结构搜索。

这部分其实是属于知识蒸馏分类中基于关系的知识,构建的知识由不同样本之间的互作用构成。

具体的指标构成如上图所示,是一个bsxbs大小的矩阵,这个在文中被称为Representational Dissmilarity Matrix,其功能是构建了激活层内部的表征,可以通过评估RDM的相似度通过计算上三角矩阵的关系系数,比如皮尔逊系数。

该文章实际上也是构建了一个指标P+TG来衡量子网的性能,挑选出最优子网络。

如上图所示,RDM的计算是通过衡量教师网络的feature以及学生网络的feature的相似度,并选择选取其中最高的RDM相似度。通过构建了一组指标,随着epoch的进行,排序一致性很快就可以提高。

目标:固定教师网络,搜索最合适的学生网络。

对于相同的教师网络来说,不同的架构的学生网络,即便具有相同的flops或者参数,其泛化能力也有所区别。在这个工作中选择固定教师网络,通过网络搜索的方法找到最优的学生网络,使用L1 Norm优化基础上,选择出与教师网络KL散度差距最小的学生网络。

目标:在给定教师网络情况下,搜索最合适的学生网络。

神经网络中的知识不仅蕴含于参数,还受到网络结构影响。KD普遍方法是将教师网络知识提炼到学生网络中,本文提出了一种架构感知的知识蒸馏方法Architecture-Aware KD (AKD),能够找到最合适提炼给特定教师模型的学生网络。

Motivation: 先做了一组实验,发现不同的教师网络会倾向于不同的学生网络,因此在NAS中,使用不同的教师网络会导致模型倾向于选择不同的网络结构。

AKD做法是选择使用强化学习的方法指导搜索过程, 使用的是ENAS那种通过RNN采样的方法。

目标:从集成的教师网络中学习,并使用NAS调整学生网络模型的容量。NAS+KD+集成。

这篇文章之前也进行了讲解,是网络结构搜索,知识蒸馏,模型集成的大杂烩。

详见: https://blog.csdn.net/DD_PP_JJ/article/details/121268840

这篇文章比较有意思,使用上一步中得到的多个子网络进行集成,可以得到教师网络,然后使用知识蒸馏的方法来引导新的子网络的学习。关注重点在于:

AdaNAS受Born Again Network(BAN)启发, 提出Adaptive Knowledge Distillation(AKD)的方法以辅助子网络的训练。

集成模型选择

从左到右代表四次迭代,每个迭代中从搜索空间中选择三个模型。绿色线框出的模型代表每个迭代中最优的模型,AdaNAS选择将每个迭代中最优subnet作为集成的对象。

最终集成的时候还添加了额外的weight参数w1-w4:

最终输出逻辑层如下所示:(这个w权重也会被训练,此时各个集成网络的权重是固定的,只优化w)

Knowledge Distillation

目标:解决知识蒸馏的效率和有效性,通过使用特征聚合来引导教师网络与学生网络的学习,网络结构搜索则是体现在特征聚合的过程,使用了类似darts的方法进行自适应调整放缩系数。ECCV20

文章总结了几种蒸馏范式:

最后一种是本文提出的方法,普通的特征蒸馏都是每个block的最后feature map进行互相蒸馏,本文认为可以让教师网络的整个block都引导学生网络。

具体如何将教师网络整个block中所有feature map进行聚合,本文使用的是darts的方法进行动态聚合信息。(a) 图展示的是对group i进行的可微分搜索过程。(b)表示从教师到学生的路径loss构建,使用的是CE loss。(c)表示从学生到教师网络的路径loss构建,使用的是L2 Loss。其中connector实际上是一个1x1 卷积层。

(ps: connector让人想到VID这个工作)

阅读全文

与神经网络蒸馏相关的资料

热点内容
移动猫的mac过滤的源 浏览:335
反渗透ro膜怎样安装视频 浏览:837
沁园净水机废水桶满了不停止制水 浏览:63
空气净化器万向轮多少钱 浏览:459
冷水壶如何去水垢 浏览:773
小米净化器的价格多少钱一台 浏览:220
没有饮水机怎么把桶装水抽出 浏览:755
卫莱仕净水器品牌有限公司在哪里 浏览:425
海尔空气净化器怎么清理 浏览:231
去哪里购买正品的汽车空调滤芯 浏览:219
朗逸空气滤芯什么品牌好 浏览:98
美菱纯水机多少钱一辆 浏览:128
洁厕灵强力除垢 浏览:281
蒸馏过程中吸收液颜色变化 浏览:686
清洗饮水机用什么工具 浏览:647
珠海哪里有污水横流 浏览:677
周公解梦梦见从污水中过去 浏览:626
高加索反渗透净水机安装视频 浏览:101
无氧去离子水是蒸馏水吗 浏览:29
亚魔斯空气净化器怎么用 浏览:105