大模型算法面试笔记——Bert
动机
提出一个基于微调的NLP模型,预训练的模型抽取了足够多的信息,新的任务只需要增加一个简单的输出层。
Bert本质是只有编码器的Transformer,分为两类
- BERT-Base: 12层,hidden size = 768,heads = 12,parameters = 110M
- BERT-Large: 24层,hidden size = 1024,heads = 16,parameters = 340M
- 在大规模数据上训练>3B词
两类预训练任务
- 掩码语言模型(Masked Language Model, MLM):挖完形填空,用[MASK]代替原词,根据左右上下文(双向)来预测原词
- 下一句预测:训练模型理解句子间的逻辑关系,用句子开始标记[CLS]向量对应的输出进行二分类任务(是否为下一句)
三部分Embedding
不同于Transformer的encoder-decoder架构,输入输出的句子对分别进encoder和decoder,Bert的输入是将句子对拼接起来,句子开头打[CLS]标记,句子之间(每个句子结尾)打<sep>标记。同时加入额外的片段嵌入和位置编码,片段嵌入用来区分不同的句子,位置编码非手动设计,而是可学习编码。
Bert在预训练时,用了掩码(mask),每次随机(15%概率)将一些词元换成,为了让预训练的模型可以很好的适用于通用任务,用概率来控制使用mask的部分(如80%将选中的词元变成,10%的选中词元被替换成随机词元,剩下10%保持原有词元,这里的概率是针对被选中的15%数据来算的)。
例:
- 80%的词被正常替换成[Mask]:my dog is hairy → \to →my dog is [MASK]
- 10%被替换成随机的词:my dog is hairy → \to →my dog is apple,引入噪音,防止模型对[MASK]过拟合,加强鲁棒性
- 10%不替换:my dog is hairy → \to →my dog is hairy,桥接预训练与微调任务,提高微调任务的稳定性
15%的掩码比例如果改变,过低则学习信号不足,过高则破坏句子的语义结构。
超参数与可学习参数换算
可学习参数主要来自于两部分,embedding和transformer块。
embedding层
- 输入:词典大小30k
- 输出:隐藏层维度 H H H
transformer块
- QKV可学习矩阵: H 2 × 3 H^2\times 3 H2×3
- 输出投影矩阵: H 2 H^2 H2
- 两个输入为 H H H输出为 4 H 4H 4H的全连接层: 8 H 2 8H^2 8H2
- L L L个transformer块: L × 12 H 2 L\times 12H^2 L×12H2
总参数: 30 k × H + L × H 2 × 12 30k\times H+L\times H^2\times 12 30k×H+L×H2×12