3.3 预训练语言模型部分
3.3 预训练语言模型部分
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
在大语言模型中,一个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层;