TinyBert解读

随着NLP语言模型发展,BERT难应用于资源有限设备。为此提出TinyBERT,其模型预测速度提升9.4倍,大小缩小7.5倍。论文为Transformer设计专门蒸馏方式,包括基于注意力、隐藏状态等的蒸馏。TinyBERT学习分通用蒸馏和特定任务蒸馏两步,还进行了数据增强,达到当时SOTA效果。

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

1. 背景

随着NLP语言模型的发展,模型参数越来越多,计算流程越来越复杂,很难将BERT应用到一些资源有限的设备上。为了提升模型的计算速度,提出了tinybert,模型预测提升了9.4倍的速度,模型大小缩小了7.5倍. 具体论文见 《TinyBERT: Distilling BERT for Natural Language Understanding》

1.1 模型结构变换

tinybert的层数相对bert base从12层降低到4层;FFN层输出的大小从3072降低到1200,Head个数12保持不变,hiddent size从768降低至312;最终参数量从110M降低到14.5M

2. Transformer distillation

论文为transformer设计了一套专门的蒸馏方式。

首先,对于n层的teacher bert,设计了一个mapping function n = g ( m ) n = g(m) n=g(m)j将student bert的第m层映射为原来的teacher的第n层(论文中teacher 为12层,student为4层,因此student第1层对应原来的teacher的第3层,以此类推),特别的当m=0时,对应bert输入的embedding layer。

2-1. Attention based distillation

受到attention weights携带了大量语言和语法信息的启发,因此学生网络会学习teacher transformer layer中的multi-head attention.
在这里插入图片描述
这里h为multi-head attention的head的个数,计算student attention矩阵和teacher attention矩阵权重的MSE loss 进行蒸馏学习

2-2. Hidden states based distillation

在这里插入图片描述
这里是对teacher bert的层间蒸馏,因为bert base的hidden states的维度为768,student 的hidden states的维度为128,因此引入 W h W_h Wh进行不同维度的映射(通过学习得到映射矩阵),对最终的transform的输出结果的MSE loss进行蒸馏学习

2-3. Embedding-layer distillation

在这里插入图片描述
对bert的输入embedding矩阵进行蒸馏学习,原理同以上

2-4. Prediction-layer distillation

仿照Hinton老爷子的蒸馏方式,除了前面的层间蒸馏,对最终输出层的结果的softmax带温度进行蒸馏学习
在这里插入图片描述
综上,对bert的transformer的最终蒸馏为一下,对于输入层m=0,只用embeding的MSE蒸馏loss;对0-M中间层的蒸馏,采用attention的 MSE loss和hidden states的MSE loss;对最终输出层,采用带温度的softmax 的交叉熵loss
在这里插入图片描述

3. TinyBERT Learning

作者对bert的蒸馏总结为以下两步
在这里插入图片描述

3.1 general distillation

在原始teacher bert(没有微调)上用通用预料蒸馏tinybert(方式采用上面的transformer distillation)

3.3 task-specific distillation

对teacher bert进行fine-tune后作为新的teacher,用任务相关的数据对上一步得到的tinybert进行蒸馏得到student tinybert(即以上一步3.1中的tinybert的参数初始化进行蒸馏);方式也是采用transformer distillation。

这里作者在task-specific的预料中还做了data-augmentation,具体做法如下:
在这里插入图片描述
数据增强的方式:即对bert分词结果,如果是一个完整的词,则加上mask,对teacher bert在mask对于节点的输出上,取topK个最大概率可能的词进入候选集合;否则用GloVe的词向量找topK个cosine相似度最高的词进入候选集合。最后随机候选集合中的词,以阈值p为概率决定是否替换原词。作者通过这种方式增加新的训练数据。

总结

作者引入了一种针对bert transformer专门的蒸馏方式,并且提供了一种有效分为两步的bert蒸馏框架,达到了当时SOTA的效果。

### 关于华为诺亚方舟实验室 TinyBERT 的研究与实现 #### 小型化语言模型的意义 随着大规模预训练语言模型的发展,如 BERT 和 XLNet 等模型虽然性能优异,但由于其参数量庞大,在实际部署过程中面临计算资源消耗高、推理速度慢等问题。因此,研究人员提出了通过知识蒸馏技术来压缩这些大型模型的方法,从而诞生了更轻量化的小型模型,例如 TinyBERTTinyBERT 是一种基于 BERT 的小型化版本的语言理解模型,属于“知识蒸馏和模型压缩”的范畴[^2]。它的设计目标是保持原始 BERT 性能的同时显著减少模型大小以及加速推断过程。 #### 华为诺亚方舟实验室对 TinyBERT 的贡献 华为在其开源平台上不仅提供了 NEZHA 这样的全新架构模型,还包含了经过优化后的轻量级变体——TinyBERT。这表明华为不仅仅关注如何构建强大的基础模型,同时也致力于解决工业界对于高效运行的需求问题[^4]。 具体来说,TinyBERT 主要采用了以下几种关键技术来进行模型压缩: 1. **隐藏层维度降低**: 减少了每一层神经网络中的节点数量; 2. **层数削减**: 缩短整个Transformer编码器堆叠的高度; 3. **教师学生框架下的知识迁移**: 利用较大的源模型(即Teacher Model)指导较小的目标模型(Student Model),使得后者能够在较少参数情况下模仿前者的行为模式。 以下是利用 Hugging Face Transformers 库加载并使用 TinyBERT 的简单示例代码片段: ```python from transformers import BertTokenizer, TFBertForSequenceClassification tokenizer = BertTokenizer.from_pretrained('huawei-noah/TinyBERT_General_4L_312D') model = TFBertForSequenceClassification.from_pretrained('huawei-noah/TinyBERT_General_4L_312D') text = "替换为您想要测试的具体句子" inputs = tokenizer(text, return_tensors='tf') outputs = model(inputs) print(outputs.logits.numpy()) ``` 上述脚本展示了怎样快速获取一个已经过微调可用于序列分类任务上的实例对象,并执行预测操作。 #### 结论 综上所述,华为诺亚方舟实验室通过对现有先进算法的研究改进推出了自己的特色产品线,其中就包括针对特定应用场景做了特别适配的紧凑型解决方案-TinyBERT。这种做法既满足了学术探索的要求又兼顾到了商业落地的实际考量因素。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值