分享
3.3 预训练语言模型部分
输入“/”快速插入内容
3.3 预训练语言模型部分
用户5190
用户5190
用户9935
用户9935
用户1672
用户1672
2024年6月10日修改
再探语言模型:为什么是transformer?
上节我们了解了transformer的具体结构,transformer和这个系列和前面提到的
RNN
,
GRU
,
LSTM
,
CNN
一样都属于神经网络语言模型。之所以transformer能够脱颖而出成为各家LLM的基础架构,很大程度上取决于它
相较RNN(GRU, LSTM),CNN而言
较低的计算复杂度。不仅如此,大规模transformer模型的训练是可行的,这
相较RNN类模型
是很大的优势。同时,OpenAI通过分析大量的训练数据得到的经验规律
Scaling Laws
表明,神经网络语言模型训练最终得到的损失函数值
仅与模型参数量
,训练数据量
以及计算量
有关,而当
以及
足够大,
与
的关系是:
可以看到
,进一步从经验上说明了大规模类transformer模型性能较其他神经网络语言模型优越的原因。
常见预训练语言模型架构
下面我们将简单了解集中常见的预训练语言模型架构以及其具有代表性的语言模型。
Encoder-only 结构: BERT系列模型
transformer使得训练大规模神经网络语言模型成为可能,而基于transformer encoder的模型
BERT
则推广了语言模型预训练(pretrain)+微调(finetune, 也叫做精调)的新范式,
也开启了语言模型用芝麻街人物命名的新纪元。
下面将详细介绍BERT模型的结构和预训练,微调方法,并简单介绍一下BERT系列的其他模型。
BERT
•
模型结构
Tokenizer
Tokenizer将输入的句子按词表分词,并转换成词表中相应词的编号,BERT的tokenizer使用wordpiece算法构建词表([
详细介绍
] [
论文链接
]), 其词表中有30000个token。
在大语言模型中,一个token并不严格对应一个词汇或者一个字符,大多数token对应的是部分或多个词汇。还有一些特殊token,如:
[BOS]
,
[EOS]
:标识一个句子的开始和结束,有时会以不同的形式出现,如
<s>
,
</s>
等
[PAD]
: 填充token, 当训练数据长度小于最大训练长度时,用这个token填充到最大长度
[UNK]
: 词表当中没有出现的词汇将统一使用这个token代替
[CLS]
: 在BERT中,这个token附加在输入之前,大多数情况下其最后一层隐藏状态会作为分类任务的LM head输入。
[MASK]
:用于BERT的MLM任务,将随机选择的部分token替换为此token
[SEP]
: 这个用来分割句子对中的两个句子,可用于NSP任务预训练以及NLI, QA等需要多个句子输入的下游任务
词嵌入(word embedding)
不同于原始transformer, BERT的词嵌入由3部分组成:
1.
词表示嵌入:用于将离散的token映射到
hidden_size
,为一个
nn.Embedding
层;
2.
位置编码:用于给序列添加位置信息,与transformer使用的三角位置编码不同,BERT使用了可学习的位置编码;
3.
句子类型编码:用于下面将会讲到的NSP任务,标识一个句子对中的token属于哪一个句子;
在
transformers
的
实现
中,位置编码和句子类型编码均使用了
nn.Embedding
。
值得注意的是,
transformers
在实现ViT(Vision Transformer, 将transformer encoder用于图像分类任务,模型主体结构与BERT高度相似)模型时,使用了
nn.Parameter
作为可学习的位置编码。
主体骨架结构(backbone)
BERT的模型骨架结构与transformer encoder基本相似,此处就不再赘述了。在原论文中,作者提供了两种大小的模型,具体如下:
模型名称
Encoder layer 层数
Hidden size
Attention heads 个数
模型参数量
BERT-base
12
768
12
110M
BERT-large
24
1024
16
340M
其中在FFN模块,intermediate层(中间层)的维度均为4*Hidden size
模型头(LM head)
是一个用于下游任务(包括文本分类,自然语言推理(NLI),序列标注,问题回答(QA))的线性层,对于NLI,文本分类等分类任务,其输入是
[CLS]
;对于序列标注,问题回答等token级别的任务,其输入是所有token的最后一层隐藏状态。
•
预训练
BERT提供了一种基于transformer encoder的双向无监督深度表示训练方法(
B
idirectional
E
ncoder
R
epresentations from
T
ransformers)。具体来说,BERT在预训练阶段训练2个任务,即掩码语言建模(Masked Language Modeling, MLM) 以及下一句预测(Next Sentence Prediction, NSP),预训练的总体框架如下图所示。
下图输入token仅作示例,不代表BERT词表的真实情况
画板
1.
MLM任务
由于给模型提供双向的注意力信息会使得每个token“看到”自己,从而使得模型非常轻易地给出预测(往往并不是我们想要的结果),为解决这个问题,作者在训练数据的每个句子随机选取15% token进行掩码处理。
但是,
[MASK]
不会出现在微调阶段,这就会带来预训练与微调不匹配(原文使用了mismatch一词)的问题,为了保证网络训练效果同时缓解"mismatch"问题,作者并没有将所有被选择的token直接替换成
[MASK]
, 而是将其中的10%保持不变(但仍需模型预测),10%替换为随机的token,剩余80%替换为
[MASK]
,训练时仅需要预测这些掩码所对应的原始token即可。
2.
NSP任务