简述BERT模型的训练过程、BERT模型在推断过程中做了哪些性能优化、BERT模型在训练过程中做了哪些性能优化

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


fasttext模型在大量类别上能够快速训练的原因、为了提升fasttext模型的评估指标做了哪些优化 

简述BERT模型的训练过程、BERT模型在推断过程中做了哪些性能优化、BERT模型在训练过程中做了哪些性能优化 

在某个模型训练过程中遇到的难题及其解决办法、对自动超参数调优方法的理解、模型部署时如何实现热更新、说一说最近看过的一篇论文

Softmax反向传播推导、Bert的模型架构


 


 

问题:简述BERT模型的训练过程

解题思路

第一步: 找出核心知识点并解析

  • BERT模型:
    • BERT也称双向Transformer编码器,它是由Transformer为基本单元构成的双向网络结构。BERT模型的创新点在于开启了迁移学习的篇章,它能够提供Masked LM,Next Sentence Prediction以及Question Answering任务的预训练模型,以增强在有限数据集下fine-tuning这些任务的效果。

  • 一般模型的训练过程:
    • 1,训练数据预处理
    • 2,初始化模型参数
    • 3,批次化数据载入模型
    • 4,对损失函数进行优化计算损失与梯度
    • 5,梯度在反向传播中更新模型参数
    • 6,按照以上过程迭代所有数据获得模型参数

第二步: 整合核心知识点形成答案

答案

1,BERT模型训练数据预处理,包括数值映射,截断补齐,以及为句子对添加标记等
2,初始化BERT模型参数,即初始化各个Transformer中的带参数层,一般按照均匀分布方式初始化
3,将数据使用迭代器批次化,以节约内存载入模型
4,对BERT的交叉熵损失函数进行优化获得每个批次的平均损失与梯度
5,使用梯度在反向传播算法中更新模型所有的层参数
6,按照以上过程迭代所有数据获得模型参数


问题:BERT模型在推断过程中做了哪些性能优化

解题思路

第一步: 找出核心知识点并解析

  • BERT模型:
    • BERT也称双向Transformer编码器,它是由Transformer为基本单元构成的双向网络结构。BERT模型的创新点在于开启了迁移学习的篇章,它能够提供Masked LM,Next Sentence Prediction以及Question Answering任务的预训练模型,以增强在有限数据集下fine-tuning这些任务的效果。

  • 大型模型在推断过程中的优化措施:
    • 1,对训练完成的模型进行量化,包括动态量化和静态量化
    • 2,对训练完成的模型进行剪枝
    • 3,使用量化意识训练
    • 4,拓展硬件资源,使用分布式或GPU加速

第二步: 整合核心知识点形成答案

答案

在我们的项目中,对训练后的BERT模型采用动态量化技术来优化推断性能,将模型参数由FLOAT32量化为INT8,理论上参数量大小减少4倍,实际工程中减小约3.5倍(由420M到120M),单条数据的平均推断时间由原来的380ms减小到85ms,当然,模型在验证集上的acc指标也下降了约两个百分点,这是在可接受范围之内的。(动态量化是最简单方便的推断性能优化方法)


问题:BERT模型在训练过程中做了哪些性能优化

解题思路

第一步: 找出核心知识点并解析

  • BERT模型:
    • BERT也称双向Transformer编码器,它是由Transformer为基本单元构成的双向网络结构。BERT模型的创新点在于开启了迁移学习的篇章,它能够提供Masked LM,Next Sentence Prediction以及Question Answering任务的预训练模型,以增强在有限数据集下fine-tuning这些任务的效果。

  • 大型模型在训练过程中的优化措施:
    • 1,数据并行(分布式)训练
    • 2,模型并行(分布式)训练
    • 3,数据与模型混合并行(分布式)训练

第二步: 整合核心知识点形成答案

答案

在我们训练BERT模型的过程中,为了能够迭代调优方法,我们使用了数据并行的方式来加快训练。我们将模型copy到4台服务器上,然后使用将每个批次的数据4等分feed给模型处理,之后将每个模型的梯度在主节点上进行求和平均得到最终的更新梯度。通过这种方式,我们将模型的训练速度提升了约3.5倍,在10万文本数据集上训练的时间由原来的2h38min,减小到45min左右,为我们的整个模型从实验到上线节约了大量时间。


Bert的模型架构

2: 关于Bert训练过程中的关键点.
2.1: 四⼤关键词: Pre-trained, Deep, Bidirectional Transformer, Language
Understanding
a: Pre-trained: ⾸先明确这是⼀个预训练的语⾔模型, 未来所有的开发者可以直接继承!
整个Bert模型最⼤的两个亮点都集中在Pre-trained的任务部分。
b: Deep:
Bert_BASE: Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M
Bert_LARGE: Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M
对⽐于Transformer: Layer = 6, Hidden = 2048, Head = 8, 是⼀个浅⽽宽, 说明
Bert这样深⽽窄的模型效果更好 (和CV领域的总体结论基本⼀致)。
c: Bidirectional Transformer: Bert的⼀个创新点, 它是⼀个双向的Transformer⽹络。
原始的Transformer其实是⼀个单向的⽹络, 和GPT⼀致, ⻅上图。
d: Language Understanding: 更加侧重语⾔的理解, ⽽不仅仅是⽣成 (Language
Generation)
2.2: Bert的语⾔输⼊表示包含了3个组成部分: (⻅上图)
词嵌⼊张量: word embeddings
语句分块张量: segmentation embeddings
位置编码张量: position embeddings
2.3: Bert的预训练中引⼊两⼤核⼼任务 (这两个任务也是Bert原始论⽂的两个最⼤的创新点)
a: 引⼊ Masked LM (带mask的语⾔模型训练)
a.1: 在原始训练⽂本中, 随机的抽取15%的token作为即将参与mask的对象。
a.2: 在这些被选中的token中, 数据⽣成器并不是把他们全部变成[MASK], ⽽是有
下列3个选择:
a.2.1: 在80%的概率下, ⽤[MASK]标记替换该token, ⽐如my dog is hairy ->
my dog is [MASK]
a.2.2: 在10%的概率下, ⽤⼀个随机的单词替换该token, ⽐如my dog is
hairy -> my dog is apple
a.2.3: 在10%的概率下, 保持该token 不变, ⽐如my dog is hairy -> my dog
is hairy
a.3: Transformer Encoder在训练的过程中, 并不知道它将要预测哪些单词? 哪些
单词是原始的样⼦? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词?
正是在这样⼀种⾼度不确定的情况下, 反倒逼着模型快速学习该token的分布式上
下⽂的语义, 尽最⼤努⼒学习原始语⾔说话的样⼦!!! 同时因为原始⽂本中只有15%
的token参与了MASK操作, 并不会破坏原语⾔的表达能⼒和语⾔规则!!!
b: 引⼊Next Sentence Prediction (下⼀句话的预测任务)
b.1: ⽬的是为了服务问答, 推理, 句⼦主题关系等NLP任务。
b.2: 所有的参与任务训练的语句都被选中参加。
50%的B是原始⽂本中实际跟随A的下⼀句话。(标记为IsNext, 代表正样本)
50%的B是原始⽂本中随机抽取的⼀句话。(标记为NotNext, 代表负样本)
b.3: 在该任务中, Bert模型可以在测试集上取得97-98%的准确率。
2.4: 关于基于Bert的模型微调(fine-tuning)
只需要将特定任务的输⼊, 输出插⼊到Bert中, 利⽤Transformer强⼤的注意⼒机制就可
以模拟很多下游任务。(句⼦对关系判断, 单⽂本主题分类, 问答任务(QA), 单句贴标签
(命名实体识别))
微调的若⼲经验:
batch size: 16, 32
epochs: 3, 4
learning rate: 2e-5, 5e-5
全连接层添加: layers: 1-3, hidden_size: 64, 128

 

3: Bert模型本身的优点和缺点。(没有标准答案)
优点: Bert的基础建⽴在transformer之上, 拥有强⼤的语⾔表征能⼒和特征提取能⼒。在11
项NLP基准测试任务中达到了state of the art。同时再⼀次证明了双向语⾔模型的能⼒更加
强⼤。
缺点:
1: 可复现性差, 基本没法做, 只能拿来主义直接⽤!
2: 训练过程中因为每个batch_size中的数据只有15%参与预测, 模型收敛较慢, 需要强
⼤的算⼒⽀撑!
引申:1:深度学习就是表征学习 (Deep learning is representation learning)
整个Bert在11项语⾔模型⼤赛中, 基本思路就是双向Transformer负责提取特征,
然后整个⽹络加⼀个全连接线性层作为fine-tuning微调。但即便如此傻⽠式的组
装, 在NLP中著名的难任务-NER(命名实体识别)中, 甚⾄直接去除掉了CRF层, 照样
⼤⼤超越BiLSTM + CRF的组合效果, 这去哪⼉说理去???
2: 规模的极端重要性 (Scale matters)
不管是Masked LM, 还是下⼀句预测Next Sentence Prediction, 都不是⾸创的概
念, 之前在其他的模型中也提出过, 但是因为数据规模 + 算⼒局限没能让世⼈看到
这个模型的潜⼒, 那些Paper也就不值钱了。但是到了⾕歌⼿⾥, 不差钱的结果就
是Paper值钱了!!!!!!
3: 关于进⼀步的研究展示了Bert在不同的层学习到了什么。
低的⽹络层捕捉到了短语结构⽅⾯的信息。
单词和字的特征表现在3-4层, 句法信息的特征表现在6-9层, 句⼦语义信息的特征
表现在10-12层。
主谓⼀致的特征表现在8-9层 (属于句法信息的⼀种)。

1: 串讲Bert的时候已经提到了很多细节。
2: 关于特征提取器的差异
2.1: ELmo采⽤双向LSTM提取
2.2: Bert采⽤双向Transformer提取
2.3: GPT采⽤单向Transformer提取
3: 关于语⾔模型的差异
3.1: ELmo采⽤双向语⾔模型, 可以同时采集前后语义的关系和含义
3.2: Bert采⽤双向语⾔模型, 相当于只⽤了Transformer中的Encoder, 可以看⻅完整的句⼦,
是三者中提取特征能⼒最强⼤的
3.3: GPT采⽤单向语⾔模型, 相当于只⽤了Transformer中的Decoder, 看不⻅完整的句⼦, 特
征采集能⼒不如Bert
知识图谱是NLP⼀个单独的细分领域, 需要专⻔做, ⽐较窄, 除⾮特别有兴趣专攻, 不然不建议押注
这个领域。Neo4j就是主要针对知识图谱的。
词义消歧, 语义消歧:
    雷军对⼩⽶有特别的感情。
    那家店卖的⼩⽶特别棒。
    我昨天刚买了⼀个苹果。
1: 基于词典的语义消歧
2: 有监督的深度学习语义消歧 (类似于词性标注, NER任务)
3: ⽆监督 (但是依赖于在⼀个⼤规模语料库上的句法分析结果)
4: https://www.bbsmax.com/A/E35pl6QE5v/

句向量:
    1: 词的叠加
    2: Bert (Transformer)
⽂档向量:
    1: LDA (⽂档主题模型)
    2: Bert

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章