模型蒸馏与压缩简单介绍

DistilBERT是通过知识蒸馏技术将BERT模型压缩至40%参数量,同时提升60%推理速度,保留约97%的性能。它采用三重损失函数,包括有监督MLM损失、蒸馏MLM损失和词向量余弦损失,以教师模型的输出指导学生模型的学习,实现模型压缩与性能保持。

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

目录

一、概述

二、DistilBERT模型介绍

2.1 基本结构

2.2 知识蒸馏方法


一、概述

预训练语言模型虽然在众多自然语言任务中取得了很好的效果,但通常这类模型的参数量较大,很难满足实际应用中的时间和空间需求。 下图给出了常见预训练语言模型参数量的发展趋势。可以看到,预训练语言模型的参数量呈加速增大的趋势。这使得在实际应用中使用这些预训练语言模型变得越来越困难。
因此,除了优化预训练语言模型的预测精度,如何能够降低预训练语言模型参数量以及加快运行效率也是非常重要的研究方向。目前主流的预训练语言模型压缩方法是知识蒸馏技术。 知识蒸馏
Knowledge Distillation,KD)是一种常用的知识迁移方法,通常由教师 (Teacher)模型和学生(Student)模型构成。 知识蒸馏就像老师教学生的过程,将知识从教师模型传递到学生模型,使得学生模型的性能尽量与教师模型接近 。虽然知识蒸馏技术并不要求学生模型的体积(或参数量)一定要比教师模型小,但在实际应用过程中,通常使用该技术将较大的模型压缩到一个较小的模型,同时基本保持原模型的效果。
本文将结合一种十分经典的知识蒸馏模型( DistilBERT ),简要说明模型的蒸馏与压缩过程。

二、DistilBERT模型介绍

DistilBERT  应用了基于三重损失(Triple Loss)的知识蒸馏方法。相比BERT 模型,DistilBERT 的参数量压缩至原来的40%,同时带来 60%的推理速度提升,并且在多个下游任务上达到BERT模型效果的97%。接下来,针对Dis-tilBERT使用的知识蒸馏方法进行介绍。

2.1 基本结构

DistilBERT的基本结构如下图所示。学生模型(即DistilBERT)的基本结构是一个六层 BERT 模型,同时去掉了标记类型向量(Token type Embedd-ing) 和池化模块(Pooler)。教师模型是直接使用了原版的BERT-base模型。由于教师模型和学生模型的前六层结构基本相同,为了最大化复用教师模型中的知识,学生模型使用了教师模型的前六层进行初始化。DistilBERT模型的训练方法与常规的BERT训练基本一致,只是在计算损失函数时有所区别,接下来对这部分展开介绍。另外
需要注意的是,DistilBERT只采用了掩码语言模型(MLM)进行预训练,并没有使用预测下一个句子预测(NSP)任务。

2.2 知识蒸馏方法

 为了将教师模型的知识传输到学生模型,DistilBERT采用了三重损失:有监督MLM损失、蒸馏MLM损失和词向量余弦损失,如下所示。

(1) 有监督MLM损失 利用掩码语言模型训练得到的损失,即通过输入带有掩码的句子,得到每个掩码位置在词表空间上的概率分布,并利用交叉熵损失函数学习。有监督MLM损失的计算方法为:

上式中,y i 表示第 i 个类别的标签;s i 表示学生模型对该类别的输出概率。
(2)蒸馏MLM损失 利用教师模型的概率作为指导信号,与学生模型的概率计算交叉熵损失进行学习。由于教师模型是已经过训练的预训练语言模型,其输出的概率分布相比学生模型更加准确,能够起到一定的监督训练目的。因此,在预训练语言模型的知识蒸馏中,通常将有监督MLM称作 硬标签 (Hard Label)训练方法,将蒸馏MLM称作 软标签 (Soft Label)训练方法。硬标签对应真实的MLM训练标签,而软标签是教师模型输出的概率。蒸馏MLM损失的计算方法为:

式中,t 表示教师模型对第i个类别的输出概率;s 表示学生模型对该类别的输出概率。对比上文前两个公式 可以很容易看出有监督MLM损失和蒸馏MLM损失之间的区别。需要注意的是,当计算概率 ti 和 si  时,DistilBERT采用了带有温度系数的Softmax函数

式中,P i 表示带有温度的概率值(ti  和 s 均使用该方法计算);z i 和 zj  表示未激活的数值;T 表示温度系数。在训练阶段,通常将温度系数设置为T=8。在推理阶段,将温度系数设置为T=1,即还原为普通的 Softmax 函数。
(3)词向量余弦损失 词向量余弦损失用来对齐教师模型和学生模型的隐含层向量的方向,从隐含层维度拉近教师模型和学生模型的距离,如下所示:

 式中,h和 h分别表示教师模型和学生模型最后一层的隐含层输出。

至此我们对模型的蒸馏和压缩过程有了一个初步的认知,想要深入了解的读者可以自行查阅资料或继续关注作者的其他文章。

### 模型蒸馏技术及其应用 模型蒸馏是一种用于减少深度学习模型大小并提高其效率的技术,它通过让较小的学生模型模仿较大的教师模型的行为来实现这一目标。这种方法不仅能够显著减小模型尺寸,还能保持较高的预测准确性。 #### 在线知识蒸馏 在线知识蒸馏允许在无需预先训练好的大型模型情况下完成知识的学习转移过程[^1]。这种机制特别适合多任务学习环境,在这些环境中多个子模型可以相互作用、共享信息,并动态调整各自所学得的知识结构以达到最佳整体表现效果。尽管如此,由于参交互的组件增多,因此可能带来额外计算成本上的开销。 #### 图形化知识表示法 一些最新的研究提出了利用图形来表达数据内部联系的新颖方式来进行更深层次的知识提炼工作[^2]。具体而言就是把复杂的模式映射到节点之间边的关系上去描述它们之间的相似性差异性等方面特性;再借助这些构建起来的地图指导整个教学环节如何有效地传播有用的信息给接收方即小型网络架构那里去吸收消化掉。 #### 量化蒸馏方法概述 另一种重要的压缩手段叫做“量化”,它是通过对浮点数权重采用整数值近似处理从而极大地减少了所需的存储空间需求量的同时也加快了推理速度[^3]。当结合使用时,“量化蒸馏”则意味着先对原始的大规模高精度版本执行一次初步简化操作——也就是所谓的‘量化’步骤之后再将其所得结果当作新的源材料继续向下传授直至最终形成一个既紧凑又高效的轻量级替代品出来为止。 以下是几个典型例子展示了不同类型的具体实施方案: - **自蒸馏(Self-Distillation)**: 让同一个神经元层内的单元彼此竞争选出最能代表全体成员特性的少数佼佼者作为保留对象其余全部舍弃掉。 ```python def self_distill(model, temperature=20): logits = model(input_tensor) soft_targets = F.softmax(logits / temperature, dim=-1).detach() loss_fn_kd = nn.KLDivLoss(reduction="batchmean", log_target=True) return loss_fn_kd(F.log_softmax(student_output/temperature),soft_targets)* (temperature**2) ``` - **基于图的蒸馏(Graph-based Distillation)**: 构建样本间关联矩阵并通过谱分解提取主要成分进而引导后续优化方向设定等工作流程开展下去。 ```python import torch_geometric.nn as pyg_nn class GraphDistiller(torch.nn.Module): def __init__(self,...): super().__init__() ... def forward(self,x,edge_index): z_teacher=self.encoder(x, edge_index)#获取teacher embedding adj_reconstructed=torch.sigmoid((z@z.T))#重建邻接关系概率估计值 # 对student施加约束条件使其尽可能接近上述理想状态分布形式呈现出来的样子... ``` - **量化蒸馏(Quantization-aware Distillation)**: 预先定义好目标平台支持的数据类型范围限制然后再据此设计相应的损失函数项加入常规训练过程当中共同求解最优参数组合方案即可达成目的。 ```python from nni.compression.pytorch import Quantizer quantizer = Quantizer(...) quantized_model = quantizer.compress(original_large_model) distilled_quantized_loss += compute_distance_between_features( large_fused_feature_maps, small_student_corresponding_outputs_after_quantization) ``` ### 总结说明 综上所述可以看出无论是哪一种具体的实施策略背后都离不开这样一个核心理念支撑那就是努力寻找那些隐藏于海量冗余表象背后的真正有价值的核心要素并将他们高效浓缩下来以便日后能在资源受限条件下依然维持良好运作水平的表现能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值