手机创建网站的软件,介休门户网站,公司网站建设分录,盱眙建设局网站一只小狐狸带你解锁炼丹术NLP秘籍神经网络模型除了部署在远程服务器之外#xff0c;也会部署在手机、音响等智能硬件上。比如在自动驾驶的场景下#xff0c;大部分模型都得放在车上的终端里#xff0c;不然荒山野岭没有网的时候就尴尬了。对于BERT这类大模型来说#… 一只小狐狸带你解锁炼丹术NLP秘籍神经网络模型除了部署在远程服务器之外也会部署在手机、音响等智能硬件上。比如在自动驾驶的场景下大部分模型都得放在车上的终端里不然荒山野岭没有网的时候就尴尬了。对于BERT这类大模型来说也有部署在终端的需求但考虑到设备的运算速度和内存大小是没法部署完整版的必须对模型进行瘦身压缩。说到模型压缩常用的方法有以下几种量化用FP16或者INT8代替模型参数一是占用了更少内存二是接近成倍地提升了计算速度。目前FP16已经很常用了INT8由于涉及到更多的精度损失还没普及。低轶近似权重共享低轶近似是用两个更小的矩阵相乘代替一个大矩阵权重共享是12层transformer共享相同参数。这两种方法都在ALBERT中应用了对速度基本没有提升主要是减少了内存占用。但通过ALBRET方式预训练出来的Transformer理论上比BERT中的层更通用可以直接拿来初始化浅层transformer模型相当于提升了速度。剪枝通过去掉模型的一部分减少运算。最细粒度为权重剪枝即将某个连接权重置为0得到稀疏矩阵其次为神经元剪枝去掉矩阵中的一个vector模型层面则为结构性剪枝可以是去掉attention、FFN或整个层典型的工作是LayerDrop[1]。这两种方法都是同时对速度和内存进行优化。蒸馏训练时让小模型学习大模型的泛化能力预测时只是用小模型。比较有名的工作是DistillBERT[2]和TinyBERT[3]。实际工作中减少BERT层数蒸馏是一种常见且有效的提速做法。但由于不同任务对速度的要求不一样可能任务A可以用6层的BERT任务B就只能用3层的因此每次都要花费不少时间对小模型进行调参蒸馏。有没有办法一次获得多个尺寸的小模型呢今天rumor就给大家介绍一篇论文《DynaBERT: Dynamic BERT with Adaptive Width and Depth》[4]。论文中作者提出了新的训练算法同时对不同尺寸的子网络进行训练通过该方法训练后可以在推理阶段直接对模型裁剪。依靠新的训练算法本文在效果上超越了众多压缩模型比如DistillBERT、TinyBERT以及LayerDrop后的模型。Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0521】下载论文PDF。原理论文对于BERT的压缩流程是这样的训练时对宽度和深度进行裁剪训练不同的子网络推理时根据速度需要直接裁剪用裁剪后的子网络进行预测想法其实很简单但如何能保证更好的效果呢这就要看炼丹功力了 (..•˘_˘•..)请听我下面道来整体的训练分为两个阶段先进行宽度自适应训练再进行宽度深度自适应训练。宽度自适应 Adaptive Width宽度自适应的训练流程是得到适合裁剪的teacher模型并用它初始化student模型裁剪得到不同尺寸的子网络作为student模型对teacher进行蒸馏最重要的就是如何得到适合裁剪的teacher。先说一下宽度的定义和剪枝方法。Transformer中主要有Multi-head Self-attention(MHA)和Feed Forward Network(FFN)两个模块为了简化作者用注意力头的个数和intermediate层神经元的个数来定义MHA和FFN的宽度并使用同一个缩放系数来剪枝剪枝后注意力头减小到个intermediate层神经元减少到个。在MHA中我们认为不同的head抽取到了不同的特征因此每个head的作用和权重肯定也是不同的intermediate中的神经元连接也是。如果直接按照粗暴裁剪的话大概率会丢失重要的信息因此作者想到了一种方法对head和神经元进行排序每次剪枝掉不重要的部分并称这种方法为Netword Rewiring。对于重要程度的计算参考了论文[5]核心思想是计算去掉head之前和之后的loss变化变化越大则越重要。利用Rewiring机制便可以对注意力头和神经元进行排序得到第一步的teacher模型如图要注意的是虽然随着参数更新注意力头和神经元的权重会变化但teacher模型只初始化一次在后文有验证增加频率并没带来太大提升。之后每个batch会训练四种student模型如图蒸馏的最终loss来源于三方面logits、embedding和每层的hidden state。深度自适应 Adaptive Depth训好了width-adaptive的模型之后就可以训自适应深度的了。浅层BERT模型的优化其实比较成熟了主要的技巧就是蒸馏。作者直接使用训好的作为teacher蒸馏裁剪深度后的小版本BERT。对于深度系数设层的深度为[1,12]作者根据去掉深度为d的层。之所以取是因为研究表明最后一层比较重要[6]。最后为了避免灾难性遗忘作者继续对宽度进行剪枝训练第二阶段的训练方式如图实验根据训练时宽度和深度的裁剪系数作者最终可得到12个大小不同的BERT模型在GLUE上的效果如下可以看到剪枝的BERT效果并没有太多下降并且在9个任务中都超越了BERT-base。同时这种灵活的训练方式也给BERT本身的效果带来了提升在与BERT和RoBERTa的对比中都更胜一筹另外作者还和DistillBERT、TinyBERT、LayerDrop进行了实验对比DynaBERT均获得了更好的效果。在消融实验中作者发现在加了rewiring机制后准确率平均提升了2个点之多结论本篇论文的创新点主要在于Adaptive width的训练方式考虑到后续的裁剪作者对head和neuron进行了排序并利用蒸馏让子网络学习大网络的知识。总体来说还是有些点可以挖的比如作者为什么选择先对宽度进行自适应再宽度深度自适应这样的好处可能是在第二阶段的蒸馏中学习到宽度自适应过的子网络知识。但直接进行同时训练不可以吗还是希望作者再验证一下不同顺序的差距。为了简化作者在宽度上所做的压缩比较简单之后可以继续尝试压缩hidden dim。另外ALBERT相比原始BERT其实更适合浅层Transformer也可以作为之后的尝试方向。Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0521】下载论文PDF。参考文献[1]LayerDrop: https://arxiv.org/abs/1909.11556[2]DistillBERT: https://arxiv.org/abs/1910.01108[3]TinyBERT: https://arxiv.org/abs/1909.10351[4]DynaBERT: https://www.researchgate.net/publication/340523407_DynaBERT_Dynamic_BERT_with_Adaptive_Width_and_Depth[5]Analyzing multi-head self-attention: https://arxiv.org/abs/1905.09418[6]Minilm: https://arxiv.org/abs/2002.10957可能喜欢献给新一代人工智能后浪——《后丹》搜索中的 Query 理解及应用ICLR认知科学AI workshop一览All in Linux一个算法工程师的IDE断奶之路卖萌屋算法岗面试手册上线通往面试自由之路夕小瑶的卖萌屋_关注星标小夕带你解锁AI秘籍订阅号主页下方「撩一下」有惊喜哦