1 .任务配置文件基于ERNIE预训练模型有效地处于行业领先地位,但由于模型较大,预测性能可能无法满足在线需求。 如果直接使用ERNIE-Tiny系列的轻量型fine-tune,效果可能会不充分。 一旦被录用
数据蒸馏
策略需要提供大量未标记的数据,可能没有客观条件。 因此,本主题采用主流知识蒸馏的方案对模型进行压缩,在满足用户预测性能、预测效果需求的同时,不依赖海量的未标记数据,提高开发效率。 文心提供了基于各种大小字粒度的ERNIE-Tiny学生模型,满足不同用户的需求。
注:知识蒸馏( KD )通过将复杂模型( teacher )中的dark knowledge迁移到简单模型( student ),使teacher具有强大的能力和表现,student更加紧凑。 希望通过知识蒸馏,使student尽量接近或超过teacher,以更少的复杂度得到同样的预测效果。
1.1模型蒸馏原理知识蒸馏是模型压缩的常用方法,是指在teacher-student的框架内,学习到了复杂的学习能力强的网络( teacher )
特征显示
“知识”被蒸馏,传递到参数量少、学习能力弱的网络( student )。 在训练过程中,往往是优化训练集的
把准确性作为训练的目标
但是,但是
实际目标应该是优化模型的泛化能力。 很明显,如果能以提高直接模型的泛化能力为目标进行训练是最好的,但这需要关于泛化能力的正确信息,通常是不能利用的。 如果我们
通过将大型模型产生的所有类概率作为训练小模型的目标,可以得到小模型不输给大模型的性能。 这种将大模型知识转移到小模型的方式就是蒸馏。
基本原理可参见Hinton经典论文: https://arxiv.org/abs/1503.02531
1.2 ERNIE-Tiny模型蒸馏原理可以参考论文Ernie-tiny:aprogressivedistillationframeworkforpretrainedtransformercompression 2023 与原论文的实现不同,为了与开发工具包中的通用蒸留学生模型一致, 将蒸馏loss替换为Attention矩阵的KQ loss和VV loss的原理是论文mini lm:deep self-attentiondistillationfortask-agnosticompressionofpre-trained ttts 可参考lti-hhilmv2的电子表格2023。 实验表明,当通用蒸馏阶段与任务蒸馏阶段的蒸馏损失不一致时,学生模型的效果会受到影响。
BERT等预训练语言模型( PLM )采用训练范式,首先通过一般数据对模型进行预训练,然后通过特定任务数据对模型进行微调,最近取得了很大的成功。 但是,PLM因其庞大的参数而臭名昭著,很难导入到现实的APP应用中。 知识蒸馏通过用一系列的数据把知识从大老师转移到小得多的学生身上来解决这个问题。 认为选择教师、培训数据、学习目标这三个重要组成部分对蒸馏的有效性至关重要。 因此,我们为了压缩PLM,提出了4阶段渐进式蒸馏的框架ERNIE-Tiny。 这使3个组件从一般层面逐渐变化到特定的任务层面。 具体而言,第一阶段,常规蒸馏在预培训老师、常规数据和潜在蒸馏损失的指导下进行。 随后,通用增强显示将教师模式从培训前教师改为微调教师。 然后,“任务自适应分布”会将训练数据从常规数据迁移到任务特定数据。 最后,任务规范在最后阶段增加了两个额外的损失:软标签和硬标签损失。 实证结果证明了我们框架的有效性和泛化增益。 实验表明,四层ERNIE-Tiny在GLUE基准测试的基础上保持了12层教师Bert 98.0 %以上的性能,超过了与前沿( SOTA ) 1.0 )的GLUE分数相同数量的参数。 另外,ERNIE-Tiny通过5个中文NLP任务实现了新的压缩SOTA,比BERT基础的精度高0.4%,参数减少了7.5倍,推理速度加快了9.4倍。
预训练的语言模型,如Bert(Devlinetal .2023 )及其变体,在各种NLP任务中取得了很大的成功。 但是,这些模型通常包含数亿个参数,延迟和容量限制给现实APP应用中的微调和在线服务带来了挑战。 在这个工作中,提出了一种简单有效的方法来压缩基于被称为深度自我注意蒸馏的大型Transformer(vaswanietal .2023 )的预训练模型。 小模型(学生)深入模仿大模型(老师)的自我提醒模块进行训练,该模块在Transformer网络中起着重要的作用。 具体来说,建议提取教师最后一个Transformer层的自我提醒模块。 这对学生来说既有效又灵活。 另外,在现有作品中使用的注意力分布,即查询和关键的变焦积分之外,还引入了自我提醒模块中位数之间的变焦积分作为新的深度自我提醒知识。 另外,实验结果表明引入教师助手Mirzadeh等人( 2023年)也有助于大规模预训练Transformer模型的提取,我们的单词模型优于不同参数大小的学生模型中最先进的基线特别是使用了50%的Transformer参数和教师模型的计算,在SQuAD 2.0和几个GLUE基准任务中维持了99%以上的精度。 我们还在将深度自我注意蒸馏应用于多语言预训练模型方面取得了竞争性结果。
我们只使用自我注意力关系蒸馏对预训练的Transformer进行任务不明的压缩,用minilm(Wangetal .2023 )推进深度自我注意力蒸馏。 特别地,将多头自我注意力关系定义为各自我注意力模块内查询、键值向量对之间的变焦点积。 然后我们利用上述相关知识训练学生模型。 除了简单统一的原则外,更有利的是,学生注意力的头数没有限制,以前的大多数工作都要保证教师和学生的头数相同。 另外,细粒度的自我注意力关系倾向于充分利用Transformer所学习的交互知识。 另外,不像MiniLM那样只依赖最后一层,而是彻底检查了教师模式的层选择策略。 我们对压缩单词和多语言预训练模式进行了广泛的实验。 实验结果表明,我们从基础规模和大型教师( BERT、RoBERTa、XLM-R )中提取的模型优于最先进的模型。
二步蒸馏:
在通用蒸馏( General Distillation,GD )预培训阶段进行培训,帮助学生网络掌握尚未微调的教师网络知识,有利于学生的泛化能力为了方便用户使用,我们提供各种尺寸的通用蒸留学生模式。 可用的通用蒸留学生模型可以参考文档。 通用型号- ERNIE3.0 Tiny。
任务蒸馏( Task-specific Distillation,TD )使用具体任务的数据学习更多任务的具体知识。
如果提供的通用蒸留学生模型尺寸符合需求,用户可以主要关注下一个任务蒸馏过程。
1.3任务蒸馏工序FT阶段
:基于ERNIE 3.0 Large蒸馏模型fine-tune得到了教师模型。 注意这里使用的教师模型和ERNIE 3.0 Large是两个不同的模型;
GED阶段(可选)
使用fine-tuned教师模型和通用数据,继续采用通用蒸馏方式蒸馏学生模型,进一步提高学生模型的效果
热启动fine-tuned教师模式和通用学生模式。 其中,通用的学生模式由文心平台提供,从bos下载。
TD1阶段:蒸馏中间层
a .是的
在学生模型的最后阶段进行蒸馏
,
设学生模型transformer的attention层的k-q矩阵、v-v矩阵和教师模型的对应矩阵为KLloss,参考: MiniLMV2。
热启动fine-tuned教师模式和GED阶段得到的学生模式。 其中,通用的学生模式由文心平台提供,从bos下载,下载链接的文档。 请参考通用模型ERNIE3.0 Tiny或预配置的下载脚本。
c .反向传播阶段只更新学生模型参数,不更新教师模型参数;
TD2阶段:蒸馏预测层,产出最终的学生模型。
热启动fine-tuned教师模式和TD1阶段培训学生模式
b. loss有两个部分。 1 ) pred
loss )软标签、学生模型预测层输出和教师模型预测层输出的交叉熵; 2 ) student
ce_loss :硬标签、学生模型预测层输出与实际label的交叉熵;
c. pred
loss和student
ce_loss之和作为最终的loss进行反向传播;
d .反向传播阶段只更新学生模型参数,不更新教师模型参数
注:关于GED阶段使用的公共数据:开发工具包中的公共数据来自开放源代码项目https://github.com/brightmart/nlp
chinese
corpus的中文维基资料( wiki2023zh )已经过预处理。 此数据仅用于demo演示,实际使用时可以通过替换为业务的无标记数据来有效提高。
2 .常见问题1 :
如何修改学生模型的层数? 以上提供了多种不同的学生模型,但每个学生模型的层数、hidden size等都是固定的,如果想更改,需要在哪里更改?
文心提供了三种不同结构的预训练学生模型,修改层数、hidden size等后,预训练学生模型参数将无法加载。 在这种情况下,不能保证蒸馏后的学生模型的效果。 建议用户使用文心提供的预训练模型,不要修改模型结构; 如果用户认为需要更改学生模型的结构,则需要对文心进行以下更改:
修改TD1阶段json配置文件的pre
火车
删除model配置项目、预训练的学生模型加载,只保留微调的教师模型
‘ pre_train_model’: [ #热启动fine-tune的teacher模型{ ‘ name ‘:’ fine tuned _ teacher _ model },’ params _ patate
‘ student _ embedding ‘:{ ‘ config _ path ‘:’ ./models _ hub/Ernie _ 3.0 _ tiny _ ch _ dir/Ernie _ confing
3 .数据蒸馏任务3.1配置文件ERNIE强大的语义理解能力背后需要同样强大的计算能力来支撑这种大规模模型的训练和预测。 许多工业应用场景对性能要求很高,如果不能有效压缩,就无法实际应用。
因此,我们基于数据蒸馏技术建立了数据蒸馏系统。 其原理是以数据为桥梁,将ERNIE模型的知识转移到小模型中,用较少损失的效果达到上千倍的预测速度提高效果。
结构数据蒸馏任务在文信
appzoo/tasks/data
距离
(– data (– dev _ data (– dict (– download _ data.sh (– predict _ data ) ) () ( download _ data.sh ( ) N((cls_Ernie_FRNIE ) e.py(((_init_.py )model (base _ cls.py (bow _ class ification
(1)添加噪声)对于原始样本中词,以一定概率(例如0.1 )替换为” UNK “标签
)替换为同词类)对于原始样本中的所有词,以一定的概率(例如0.1 )替换本数据集中的随机同词类的词
(3) N-sampling )从原始样本中随机切出长度为m的段的位置作为新样本。 这里,分段长度m是从0到原始样本长度的随机值
数据扩展策略可以参考数据扩展,并准备了使用上述三种扩展策略创建的chnsenticorp扩展数据。
3.3离线蒸馏使用预置的ERNIE 2.0 base模型
下载CD Wenxin _ app zoo/models _ hubbashdownload _ Ernie _ 2.0 _ base _ ch.sh预设的原始数据和扩展数据。
CD Wenxin _ app zoo/tasks/data _ distillation/distillbashdownload _ data.sh通过执行以下命令开始数据蒸馏
CD Wenxin _ app zoo/tasks/data _ distillationbashrun_distill.sh 3.3.1蒸馏过程由run _ distill.sh脚本完成上述三个步骤
任务数据中包含Fine-tune; 使用加载Fine-tune的良好模型并对扩展数据评分的Student模型进行训练。 脚本采用硬标签蒸馏,步骤2直接预测ERNIE标记的标签。
run_distill.sh脚本包含师生模型的json文件,如下所示:
./examples/cls
厄尼
足球俱乐部
ch.json负责教师模型的finetune,/examples/cls
厄尼
足球俱乐部
ch
infer.json负责教师模型的预测。/examples/cls
cnn_ch.json负责学生模型的训练。
预构建的扩展数据放在./distill/chnsenticorp/student/uns up中
火车
aug
脚本的步骤2使用./examples/cls
厄尼
足球俱乐部
ch
infer.json进行预测。 脚本从标准输入获取明文输入,并将评分输出到标准输出。 这样,标记了数据增强后的无监督训练的预期。 最终的标记结果位于./distill/chnsenticorp/student/train/part.1文件中。 标记结果包含两列,第一列是明文,第二列是标记标签。
在步骤3中开始了student模型的训练,其训练数据置于distill/chnsenticorp/student/train /,part.0为原始监视数据part.1为ERNIE注释数据。
注:如果用户已经具有未监视的数据,则可以将未监视的数据放入distill/chnsenticorp/student/uns up
火车
用aug就可以了。