面向大规模神经网络的模型压缩和加速方法

本文介绍了针对大规模神经网络的优化方法,包括知识蒸馏、高效网络结构设计、条件计算、模型剪枝和量化。知识蒸馏通过教师模型指导学生模型学习,高效网络设计如Transformer在保持性能的同时减少计算复杂度。条件计算针对输入动态调整计算部分,模型剪枝通过去掉不重要参数降低模型规模,量化则通过减少数值精度加速计算。这些方法旨在降低模型资源需求,实现更快、更小、更便宜的模型部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01effab4802ade8d9bf88a1a8b42df37.gif

©PaperWeekly 原创 ·作者 | 林野

单位 | 机器翻译学堂

本文作者介绍:

林野,东北大学自然语言处理实验室 2019 级博士生,研究方向:机器翻译、模型压缩、模型加速。

东北大学自然语言处理实验室:

东北大学自然语言处理实验室由姚天顺教授创建于 1980 年,现由朱靖波教授领导,长期从事计算语言学的相关研究工作,主要包括机器翻译、语言分析、文本挖掘等。

在神经网络发展的过程中,提高模型的容量往往会对模型性能带来正向效果,在近几年的研究工作中,为了追求性能的提升,神经网络模型规模也确实呈现出逐渐增大的趋势。提高模型容量的方法主要包括增加模型的深度和拓展模型的宽度,ResNet-156L 和 BERT 等深层网络在图像、语音、语言模型领域被充分验证其有效性,使用 Transformer Big 这类宽模型也会带来较大的性能提升。

然而,伴随着模型的增大,模型的参数量和计算量也随之增加,当前的大规模神经网络模型参数量普遍达到千万级甚至上亿级别,使其很难部署在计算资源和存储资源受限的小设备上,也使得这些性能优越的模型在一些日常交流、涉及个人隐私等场景下无法发挥其实际价值。

随着科学研究与生产实践相结合需求的与日俱增,模型压缩和加速成为当前的热门研究方向之一。本文旨在对一些常见的模型压缩和模型加速方法进行简单介绍(每小节末尾都整理了一些相关工作,感兴趣的小伙伴欢迎查阅)。这些方法可以减少模型中存在的冗余,将复杂模型转化成更轻量的模型。本文涉及方法的主要类别有:知识蒸馏、高效网络结构设计、条件计算、模型剪枝、参数共享、量化。

52fe9bba93b0c1a73abb8c055384667e.png

知识蒸馏(Knowledge Distillation)

想要减少模型的参数量和计算量,最直接的方式就是训练一个更小的模型。然而,直接训练的小模型的性能往往达不到我们的预期,这时我们就需要一些辅助的手段来提升小模型的性能,知识蒸馏就是一种可选的解决方案。

在知识蒸馏的实现中,首先我们需要一个大模型,我们将其称之为“教师模型”,并将目标模型称之为“学生模型”。知识蒸馏利用了迁移学习的思想,将网络的预测结果(输出层或中间层隐藏状态)或者参数作为知识的一种载体,将教师网络的知识转移到学生网络。知识蒸馏的有效性需要基于两点假设:(1)“知识”在模型间是可迁移的;(2)教师模型所蕴含的“知识”比原始数据中的“知识”更容易被学生模型捕捉。

针对以上假设的第一点,预训练就是个很好的例子。通过使用尽可能多的训练数据,训练模型可以提取到更丰富的特征,这样的预训练模型可以应用在不同的下游任务中,并为这些下游任务带来非常显著的收益。针对以上假设的第二点,我们可以将真实标签数据中蕴含的知识称为“硬知识”,将教师模型学习到的知识称作“软知识”。虽然神经网络对我们来说是一个黑盒模型,但我们可以把一个神经网络看成是一个未知的函数,输入输出已知为我们的训练数据。

在教师模型的训练过程中,可以学习到 softmax 分布与真实标签匹配的关系。举个例子,当我们想翻译“猫”这个词的时候,真实标签只能告诉我们“猫”被翻译为“cat”。而大模型学习到的“软知识”却能包含更丰富的信息,我们可以知道“猫”大概率被翻译为“cat”,小概率能被翻译成“dog”,但只有极小的概率可能被翻译为“noodles”。通过教师模型对原始数据中“硬知识”的学习,将其转化为“软知识”教授给学生模型,可以降低任务的学习难度,从而帮助学生模型取得更好的性能。

知识蒸馏作为一种简单有效的模型压缩方法,近些年得到了非常广泛的研究,从模型的规模方面也不再受限于“教师模型的规模比学生模型大”,一些知识蒸馏方法的变体(例如自蒸馏和反向蒸馏)也逐渐衍生出来,这都为知识蒸馏的发展提供了更多的可能性。

[1] Distilling the Knowledge in a Neural Network 

https://arxiv.org/pdf/1503.02531.pdf

知识蒸馏的经典之作,知识蒸馏的概念首次被提出。之所以取名知识“蒸馏”,就像做热力学的蒸馏实验,在这个过程中教师网络中的“精华”部分的知识通过“蒸馏”的手段提取出来,随后供学生网络去学习。

[2] FitNets: Hints for Thin Deep Nets 

https://arxiv.org/pdf/1412.6550.pdf

本文的创新之处在于,知识蒸馏中的教师模型是一个“wide and shallower”的模型,而学生模型是一个“thin and deeper”的模型,这样的学生模型可以使用更少的参数量和计算量获得比教师模型更好的性能。

[3] Sequence-Level Knowledge Distillation 

https://arxiv.org/pdf/1606.07947.pdf

本文提出的 sequence-level 知识蒸馏方法,不同于之前的 word-level,是在序列级别上学习知识,在机器翻译等任务上的实验结果优于 word-level 的知识蒸馏方法。

[4] Ensemble distillation for neural machine translation 

https://arxiv.org/pdf/1702.01802.pdf

本文将 ensemble 模型作为教师模型,提升蒸馏知识的质量,得到性能更好的学生模型。

[5] Self-Knowledge Distillation in Natural Language Processing 

https://arxiv.org/pdf/1908.01851.pdf

提出 self-knowledge distillation(自蒸馏),通过对自身知识进行提出的方式进行知识蒸馏。

[6] Selective Knowledge Distillation for Neural Machine Translation 

https://arxiv.org/pdf/2105.12967.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值