docs:第三章 预训练语言模型 (除GLM外)修复完成,等待添加deepseek-v3

This commit is contained in:
KMnO4-zx
2025-05-10 13:46:08 +08:00
parent 9821f37bc0
commit a1e533632e
2 changed files with 109 additions and 69 deletions

View File

@@ -2,50 +2,65 @@
## 3.1 Encoder-only PLM
在上一章,我们详细讲解了给 NLP 领域带来巨大变革的 Attention 机制以及使用 Attention 机制搭建的模型 TransformerNLP 模型的里程碑式转变也就自此而始。在上文对 Transformer 的讲解中我们可以看到Transformer 主要由 Encoder、Decoder 两个部分组成,两个部分分别具有不一样的结构和输入输出。
在上一章,我们详细讲解了给 NLP 领域带来巨大变革注意力机制以及使用注意力机制搭建的模型 TransformerNLP 模型的里程碑式转变也就自此而始。在上文对 Transformer 的讲解中我们可以看到Transformer 结构主要由 Encoder、Decoder 两个部分组成,两个部分分别具有不一样的结构和输入输出。
针对 Encoder、Decoder 的特点,引入 ELMo 的预训练思路,开始出现不同的、对 Transformer 进行优化的思路。例如Google 仅选择了 Encoder 层,通过将 Encoder 层进行堆叠,再提出不同的预训练任务 MLMMask Language Model掩码语言模型),打造了一统 NLUNatural Language Understanding自然语言理解任务的代表模型——BERT。而 OpenAI 则选择了 Decoder 层,使用原有的 LM语言模型)任务,通过不断增加模型参数和预训练语料,打造了在 NLGNatural Language Generation自然语言生成任务上优势明显的 GPT 系列模型,也是现今大火的 LLM 的基座模型。当然,还有一种思路是同时保留 Encoder 与 Decoder打造预训练的 Transformer 模型,例如由 Google 发布的 T5模型。
针对 Encoder、Decoder 的特点,引入 ELMo 的预训练思路,开始出现不同的、对 Transformer 进行优化的思路。例如Google 仅选择了 Encoder 层,通过将 Encoder 层进行堆叠,再提出不同的预训练任务-掩码语言模型Masked Language ModelMLM),打造了一统自然语言理解Natural Language UnderstandingNLU任务的代表模型——BERT。而 OpenAI 则选择了 Decoder 层,使用原有的语言模型Language ModelLM)任务,通过不断增加模型参数和预训练语料,打造了在 NLGNatural Language Generation自然语言生成任务上优势明显的 GPT 系列模型,也是现今大火的 LLM 的基座模型。当然,还有一种思路是同时保留 Encoder 与 Decoder打造预训练的 Transformer 模型,例如由 Google 发布的 T5模型。
在本章中,我们将以 Encoder-Only、Encoder-Decoder、Decoder-Only 的顺序来依次介绍 Transformer 时代的各个主流预训练模型,分别介绍三种核心的模型架构、每种主流模型选择的预训练任务及其独特优势,这也是目前所有主流 LLM 的模型基础。
### 3.1.1 BERT
BERT全名为 Bidirectional Encoder Representations from Transformers是由 Google 团队在 2018年发布的预训练语言模型。该模型发布于论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》实现了包括 GLUE、MultiNLI 等七个自然语言处理评测任务的 the-state-of-art最优分数),堪称里程碑式的成果。自 BERT 推出以来,预训练+微调的模式开始成为自然语言处理任务的主流,不仅 BERT 自身在不断更新迭代提升模型性能,也出现了如 MacBERT、BART 等基于 BERT 进行优化提升的模型。可以说BERT 是自然语言处理的一个阶段性成果,标志着各种自然语言处理任务的重大进展以及预训练模型的统治地位建立,一直到 LLM 的诞生NLP 领域的主导地位才从 BERT 系模型进行迁移。即使在 LLM 时代,要深入理解 LLM 与 NLPBERT 也是无法绕过的一环。
BERT全名为 Bidirectional Encoder Representations from Transformers是由 Google 团队在 2018年发布的预训练语言模型。该模型发布于论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》实现了包括 GLUE、MultiNLI 等七个自然语言处理评测任务的最优性能State Of The ArtSOTA),堪称里程碑式的成果。自 BERT 推出以来,预训练+微调的模式开始成为自然语言处理任务的主流,不仅 BERT 自身在不断更新迭代提升模型性能,也出现了如 MacBERT、BART 等基于 BERT 进行优化提升的模型。可以说BERT 是自然语言处理的一个阶段性成果,标志着各种自然语言处理任务的重大进展以及预训练模型的统治地位建立,一直到 LLM 的诞生NLP 领域的主导地位才从 BERT 系模型进行迁移。即使在 LLM 时代,要深入理解 LLM 与 NLPBERT 也是无法绕过的一环。
#### 1思想沿承
BERT 是一个统一了多种思想的预训练模型。其所沿承的核心思想包括:
- Transformer 架构。正如我们在上一章所介绍的,在 2017年发表的《Attention is All You Need》论文提出了完全使用 Attention 机制而抛弃 RNN、LSTM 结构的 Transformer 模型带来了新的模型架构。BERT 正沿承了 Transformer 的思想,在 Transformer 的模型基座上进行优化,通过将 Encoder 结构进行堆叠,扩大模型参数,打造了在 NLU 任务上独居天分的模型架构;
- Transformer 架构。正如我们在上一章所介绍的,在 2017年发表的《Attention is All You Need》论文提出了完全使用 注意力机制而抛弃 RNN、LSTM 结构的 Transformer 模型带来了新的模型架构。BERT 正沿承了 Transformer 的思想,在 Transformer 的模型基座上进行优化,通过将 Encoder 结构进行堆叠,扩大模型参数,打造了在 NLU 任务上独居天分的模型架构;
- 预训练+微调范式。同样在 2018年ELMo 的诞生标志着预训练+微调范式的诞生。ELMo 模型基于双向 LSTM 架构,在训练数据上基于语言模型进行预训练,再针对下游任务进行微调,表现出了更加优越的性能,将 NLP 领域导向预训练+微调的研究思路。而 BERT 也采用了该范式,并通过将模型架构调整为 Transformer引入更适合文本理解、能捕捉深层双向语义关系的预训练任务 MLM将预训练-微调范式推向了高潮。
接下来,我们将从模型架构、预训练任务以及下游任务微调三个方面深入剖析 BERT分析 BERT 的核心思路及优势,帮助大家理解 BERT 为何能够具备远超之前模型的性能,也从而更加深刻地理解 LLM 如何能够战胜 BERT 揭开新时代的大幕。
#### 2模型架构——Encoder Only
BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成,其主要结构如图:
BERT 的模型架构是取了 Transformer 的 Encoder 部分堆叠而成,其主要结构如图3.1所示
![](./figures/1-0.png)
<div align="center">
<img src="./figures/1-0.png" alt="图片描述" width="100%"/>
<p>图3.1 BERT 模型结构</p>
</div>
BERT 是针对于 NLU 任务打造的预训练模型,其输入一般是文本序列,而输出一般是 Label例如情感分类的积极、消极 Label。但是正如 Transformer 是一个 Seq2Seq 模型,使用 Encoder 堆叠而成的 BERT 本质上也是一个 Seq2Seq 模型,只是没有加入对特定任务的 Decoder因此为适配各种 NLU 任务,在模型的最顶层加入了一个分类头 prediction_heads用于将多维度的隐藏状态通过线性层转换到分类维度例如如果一共有两个类别prediction_heads 输出的就是两维向量)。
模型整体既是由 Embedding、Encoder 加上 prediction_heads 组成:
![](./figures/1-1.png)
<div align="center">
<img src="./figures/1-1.png" alt="图片描述" width="70%"/>
<p>图3.2 BERT 模型简略结构</p>
</div>
输入的文本序列会首先通过 tokenizer 转化成 input_ids基本每一个模型在 tokenizer 的操作都类似,可以参考 Transformer 的 tokenizer 机制,后文不再赘述),然后进入 Embedding 层转化为特定维度的 hidden_states再经过 Encoder 块。Encoder 块中是对叠起来的 N 层 Encoder LayerBERT 有两种规模的模型,分别是 base 版本12层 Encoder Layer768 的隐藏层维度,总参数量 110Mlarge 版本24层 Encoder Layer1024 的隐藏层维度,总参数量 340M。通过Encoder 编码之后的最顶层 hidden_states 最后经过 prediction_heads 就得到了最后的类别概率,经过 Softmax 计算就可以计算出模型预测的类别。
输入的文本序列会首先通过 tokenizer(分词器) 转化成 input_ids基本每一个模型在 tokenizer 的操作都类似,可以参考 Transformer 的 tokenizer 机制,后文不再赘述),然后进入 Embedding 层转化为特定维度的 hidden_states再经过 Encoder 块。Encoder 块中是对叠起来的 N 层 Encoder LayerBERT 有两种规模的模型,分别是 base 版本12层 Encoder Layer768 的隐藏层维度,总参数量 110Mlarge 版本24层 Encoder Layer1024 的隐藏层维度,总参数量 340M。通过Encoder 编码之后的最顶层 hidden_states 最后经过 prediction_heads 就得到了最后的类别概率,经过 Softmax 计算就可以计算出模型预测的类别。
prediction_heads 其实就是线性层加上激活函数,一般而言,最后一个线性层的输出维度和任务的类别数相等:
prediction_heads 其实就是线性层加上激活函数,一般而言,最后一个线性层的输出维度和任务的类别数相等如图3.3所示
![](./figures/1-5.png)
<div align="center">
<img src="./figures/1-5.png" alt="图片描述" width="20%"/>
<p>图3.3 prediction_heads 结构</p>
</div>
而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层:
而每一层 Encoder Layer 都是和 Transformer 中的 Encoder Layer 结构类似的层如图3.4所示
![](./figures/1-2.png)
<div align="center">
<img src="./figures/1-2.png" alt="图片描述" width="40%"/>
<p>图3.4 Encoder Layer 结构</p>
</div>
如图,已经通过 Embedding 层映射的 hidden_states 进入核心的 attention 机制,然后通过残差连接的机制和原输入相加,再经过一层 Intermediate 层得到最终输出。Intermediate 层是 BERT 的特殊称呼,其实就是一个线性层加上激活函数:
如图3.5所示,已经通过 Embedding 层映射的 hidden_states 进入核心的 attention 机制,然后通过残差连接的机制和原输入相加,再经过一层 Intermediate 层得到最终输出。Intermediate 层是 BERT 的特殊称呼,其实就是一个线性层加上激活函数:
![](./figures/1-3.png)
<div align="center">
<img src="./figures/1-3.png" alt="图片描述" width="40%"/>
<p>图3.5 Intermediate 结构</p>
</div>
注意BERT 所使用的激活函数是 GELU 函数,全名为高斯误差线性单元激活函数,这也是自 BERT 才开始被普遍关注的激活函数。GELU 的计算方式为:
@@ -53,17 +68,20 @@ $$GELU(x) = 0.5x(1 + tanh(\sqrt{\frac{2}{\pi}})(x + 0.044715x^3))$$
GELU 的核心思路为将随机正则的思想引入激活函数,通过输入自身的概率分布,来决定抛弃还是保留自身的神经元。关于 GELU 的原理与核心思路,此处不再赘述,有兴趣的读者可以自行学习。
BERT 的 Attention 机制和 Transformer 中 Encoder 的 Self-Attention 机制几乎完全一致,但是 BERT 将相对位置编码融合在了 Attention 机制中,将相对位置编码同样视为可训练的权重参数:
BERT 的 注意力机制和 Transformer 中 Encoder 的 自注意力机制几乎完全一致,但是 BERT 将相对位置编码融合在了注意力机制中,将相对位置编码同样视为可训练的权重参数如图3.6所示
![](./figures/1-4.png)
<div align="center">
<img src="./figures/1-4.png" alt="图片描述" width="40%"/>
<p>图3.6 BERT 注意力机制结构</p>
</div>
如图BERT 的 Attention 计算过程和 Transformer 的唯一差异在于,在完成注意力分数的计算之后,先通过 Position Embedding 层来融入相对位置信息。这里的 Position Embedding 层,其实就是一层线性矩阵。通过可训练的参数来拟合相对位置,相对而言比 Transformer 使用的绝对位置编码 Sinusoidal 能够拟合更丰富的相对位置信息,但是,这样也增加了不少模型参数,同时完全无法处理超过模型训练长度的输入(例如,对 BERT 而言能处理的最大上下文长度是 512 个 token
如图BERT 的注意力计算过程和 Transformer 的唯一差异在于,在完成注意力分数的计算之后,先通过 Position Embedding 层来融入相对位置信息。这里的 Position Embedding 层,其实就是一层线性矩阵。通过可训练的参数来拟合相对位置,相对而言比 Transformer 使用的绝对位置编码 Sinusoidal 能够拟合更丰富的相对位置信息,但是,这样也增加了不少模型参数,同时完全无法处理超过模型训练长度的输入(例如,对 BERT 而言能处理的最大上下文长度是 512 个 token
可以看出BERT 的模型架构既是建立在 Transformer 的 Encoder 之上的,这也是为什么说 BERT 沿承了 Transformer 的思想。
#### 3预训练任务——MLM + NSP
相较于基本沿承 Transformer 的模型架构BERT 更大的创新点在于其提出的两个新的预训练任务上——MLM 和 NSPNext Sentence Prediction。预训练-微调范式的核心优势在于,通过将预训练和微调分离,完成一次预训练的模型可以仅通过微调应用在几乎所有下游任务上,只要微调的成本较低,即使预训练成本是之前的数倍甚至数十倍,模型仍然有更大的应用价值。因此,可以进一步扩大模型参数和预训练数据量,使用海量的预训练语料来让模型拟合潜在语义与底层知识,从而让模型通过长时间、大规模的预训练获得强大的语言理解和生成能力。
相较于基本沿承 Transformer 的模型架构BERT 更大的创新点在于其提出的两个新的预训练任务上——MLM 和 NSPNext Sentence Prediction,下一句预测)。预训练-微调范式的核心优势在于,通过将预训练和微调分离,完成一次预训练的模型可以仅通过微调应用在几乎所有下游任务上,只要微调的成本较低,即使预训练成本是之前的数倍甚至数十倍,模型仍然有更大的应用价值。因此,可以进一步扩大模型参数和预训练数据量,使用海量的预训练语料来让模型拟合潜在语义与底层知识,从而让模型通过长时间、大规模的预训练获得强大的语言理解和生成能力。
因此,预训练数据的核心要求即是需要极大的数据规模(数亿 token。毫无疑问通过人工标注产出的全监督数据很难达到这个规模。因此预训练数据一定是从无监督的语料中获取。这也是为什么传统的预训练任务都是 LM 的原因——LM 使用上文预测下文的方式可以直接应用到任何文本中,对于任意文本,我们只需要将下文遮蔽将上文输入模型要求其预测就可以实现 LM 训练,因此互联网上所有文本语料都可以被用于预训练。
@@ -76,9 +94,9 @@ BERT 的 Attention 机制和 Transformer 中 Encoder 的 Self-Attention 机制
由于模型可以利用被遮蔽的 token 的上文和下文一起理解语义来预测被遮蔽的 token因此通过这样的任务模型可以拟合双向语义也就能够更好地实现文本的理解。同样MLM 任务无需对文本进行任何人为的标注只需要对文本进行随机遮蔽即可因此也可以利用互联网所有文本语料实现预训练。例如BERT 的预训练就使用了足足 3300M 单词的语料。
不过MLM 也存在其固有缺陷。LM 任务模拟了人自然创作的过程,其训练和下游任务是完全一致的,也就是说,训练时是根据上文预测下文,下游任务微调和推理时也同样如此。但是 MLM 不同,在下游任务微调和推理时,其实是不存在我们人工加入的 \<MASK\> 的,我们会直接通过原文本得到对应的隐藏状态再根据下游任务进入分类器或其他组件。预训练和微调的不一致,会极大程度影响模型在下游任务微调的性能。针对这一问题,作者对 MLM 的策略进行了改进。
不过MLM 也存在其固有缺陷。LM 任务模拟了人自然创作的过程,其训练和下游任务是完全一致的,也就是说,训练时是根据上文预测下文,下游任务微调和推理时也同样如此。但是 MLM 不同,在下游任务微调和推理时,其实是不存在我们人工加入的 `<MASK>` 的,我们会直接通过原文本得到对应的隐藏状态再根据下游任务进入分类器或其他组件。预训练和微调的不一致,会极大程度影响模型在下游任务微调的性能。针对这一问题,作者对 MLM 的策略进行了改进。
在具体进行 MLM 训练时,会随机选择训练语料中 15% 的 token 用于遮蔽。但是这 15% 的 token 并非全部被遮蔽为 \<MASK\>,而是有 80% 的概率被遮蔽10% 的概率被替换为任意一个 token还有 10% 的概率保持不变。其中 10% 保持不变就是为了消除预训练和微调的不一致,而 10% 的随机替换核心意义在于迫使模型保持对上下文信息的学习。因为如果全部遮蔽的话,模型仅需要处理被遮蔽的位置,从而仅学习要预测的 token 而丢失了对上下文的学习。通过引入部分随机 token模型无法确定需要预测的 token从而被迫保持每一个 token 的上下文表征分布,从而具备了对句子的特征表示能力。且由于随机 token 的概率很低,其并不会影响模型实质的语言理解能力。
在具体进行 MLM 训练时,会随机选择训练语料中 15% 的 token 用于遮蔽。但是这 15% 的 token 并非全部被遮蔽为 `<MASK>`,而是有 80% 的概率被遮蔽10% 的概率被替换为任意一个 token还有 10% 的概率保持不变。其中 10% 保持不变就是为了消除预训练和微调的不一致,而 10% 的随机替换核心意义在于迫使模型保持对上下文信息的学习。因为如果全部遮蔽的话,模型仅需要处理被遮蔽的位置,从而仅学习要预测的 token 而丢失了对上下文的学习。通过引入部分随机 token模型无法确定需要预测的 token从而被迫保持每一个 token 的上下文表征分布,从而具备了对句子的特征表示能力。且由于随机 token 的概率很低,其并不会影响模型实质的语言理解能力。
除去 MLMBERT 还提出了另外一个预训练任务——NSP即下一个句子预测。NSP 的核心思想是针对句级的 NLU 任务,例如问答匹配、自然语言推理等。问答匹配是指,输入一个问题和若干个回答,要求模型找出问题的真正回答;自然语言推理是指,输入一个前提和一个推理,判断推理是否是符合前提的。这样的任务都需要模型在句级去拟合关系,判断两个句子之间的关系,而不仅是 MLM 在 token 级拟合的语义关系。因此BERT 提出了 NSP 任务来训练模型在句级的语义关系拟合。
@@ -100,13 +118,13 @@ NSP 任务的核心思路是要求模型判断一个句对的两个句子是否
在具体预训练时BERT 使用了 800M 的 BooksCorpus 语料和 2500M 的英文维基百科语料90% 的数据使用 128 的上下文长度训练,剩余 10% 的数据使用 512 作为上下文长度进行预训练,总共约训练了 3.3B token。其训练的超参数也是值得关注的BERT 的训练语料共有 13GB 大小,其在 256 的 batch size 上训练了 1M 步40 个 Epoch。而相较而言LLM 一般都只会训练一个 Epoch且使用远大于 256 的 batch size。
可以看到相比于传统的非预训练模型其训练的数据量有指数级增长。当然更海量的训练数据需要更大成本的算力BERT 的 base 版本和 large 版本分别使用了 16块 TPU 和 64块 TPU 训练了 4天才完成。
可以看到相比于传统的非预训练模型其训练的数据量有指数级增长。当然更海量的训练数据需要更大成本的算力BERT 的 Base 版本和 Large 版本分别使用了 16块 TPU 和 64块 TPU 训练了 4天才完成。
#### 4下游任务微调
作为 NLP 领域里程碑式的成果BERT 的一个重大意义就是正式确立了预训练-微调的两阶段思想,即在海量无监督语料上进行预训练来获得通用的文本理解与生成能力,再在对应的下游任务上进行微调。该种思想的一个重点在于,预训练得到的强大能力能否通过低成本的微调快速迁移到对应的下游任务上。
针对这一点BERT 设计了更通用的输入和输出层来适配多任务下的迁移学习。对每一个输入的文本序列BERT 会在其首部加入一个特殊 token /<CLS/>。在后续编码中,该 token 代表的即是整句的状态,也就是句级的语义表征。在进行 NSP 预训练时,就使用了该 token 对应的特征向量来作为最后分类器的输入。
针对这一点BERT 设计了更通用的输入和输出层来适配多任务下的迁移学习。对每一个输入的文本序列BERT 会在其首部加入一个特殊 token `<CLS>`。在后续编码中,该 token 代表的即是整句的状态,也就是句级的语义表征。在进行 NSP 预训练时,就使用了该 token 对应的特征向量来作为最后分类器的输入。
在完成预训练后,针对每一个下游任务,只需要使用一定量的全监督人工标注数据,对预训练的 BERT 在该任务上进行微调即可。所谓微调,其实和训练时更新模型参数的策略一致,只不过在特定的任务、更少的训练数据、更小的 batch_size 上进行训练,更新参数的幅度更小。对于绝大部分下游任务,都可以直接使用 BERT 的输出。例如,对于文本分类任务,可以直接修改模型结构中的 prediction_heads 最后的分类头即可。对于序列标注等任务,可以集成 BERT 多层的隐含层向量再输出最后的标注结果。对于文本生成任务,也同样可以取 Encoder 的输出直接解码得到最终生成结果。因此BERT 可以非常高效地应用于多种 NLP 任务。
@@ -131,7 +149,7 @@ RoBERTa 的模型架构与 BERT 完全一致,也就是使用了 BERT-large2
实验结果证明,后两组显著优于前两组,且单文档的 MLM 组在下游任务上微调时性能最佳。因此RoBERTa 在预训练中去掉了 NSP只使用 MLM 任务。
同时RoBERTa 对 MLM 任务本身也做出了改进。在 BERT 中Mask 的操作是在数据处理的阶段完成的,因此后期预训练时同一个 sample 待预测的 \<MASK\> 总是一致的。由于 BERT 共训练了 40 个 Epoch为使模型的训练数据更加广泛BERT 将数据进行了四次随机 Mask也就是每 10个 Epoch 模型训练的数据是完全一致的。而 RoBERTa 将 Mask 操作放到了训练阶段,也就是动态遮蔽策略,从而让每一个 Epoch 的训练数据 Mask 的位置都不一致。在实验中,动态遮蔽仅有很微弱的优势优于静态遮蔽,但由于动态遮蔽更高效、易于实现,后续 MLM 任务基本都使用了动态遮蔽。
同时RoBERTa 对 MLM 任务本身也做出了改进。在 BERT 中Mask 的操作是在数据处理的阶段完成的,因此后期预训练时同一个 sample 待预测的 `<MASK>` 总是一致的。由于 BERT 共训练了 40 个 Epoch为使模型的训练数据更加广泛BERT 将数据进行了四次随机 Mask也就是每 10个 Epoch 模型训练的数据是完全一致的。而 RoBERTa 将 Mask 操作放到了训练阶段,也就是动态遮蔽策略,从而让每一个 Epoch 的训练数据 Mask 的位置都不一致。在实验中,动态遮蔽仅有很微弱的优势优于静态遮蔽,但由于动态遮蔽更高效、易于实现,后续 MLM 任务基本都使用了动态遮蔽。
#### 2优化二更大规模的预训练数据和预训练步长
@@ -143,11 +161,11 @@ RoBERTa 使用了更大量的无监督语料进行预训练,除去 BERT 所使
#### 3优化三更大的 bpe 词表
RoBERTa、BERT 和 Transformer 一样,都使用了 bpe 作为 tokenizer 的编码策略。bpe,即 Byte Pair Encoding字节对编码是指以子词对作为分词的单位。例如对“Hello World”这句话可能会切分为“HelloWorld”四个子词对。而对于以字为基本单位的中文一般会按照 字节编码进行切分。例如,在 UTF-8 编码中“我”会被编码为“E68891”那么在 bpe 中可能就会切分成“E68”“891”两个字词对。
RoBERTa、BERT 和 Transformer 一样,都使用了 BPE 作为 Tokenizer 的编码策略。BPE,即 Byte Pair Encoding字节对编码是指以子词对作为分词的单位。例如对“Hello World”这句话可能会切分为“HelloWorld”四个子词对。而对于以字为基本单位的中文一般会按照 字节编码进行切分。例如,在 UTF-8 编码中“我”会被编码为“E68891”那么在 BPE 中可能就会切分成“E68”“891”两个字词对。
一般来说,bpe 编码的词典越大,编码效果越好。当然,由于 Embedding 层就是把 token 从词典空间映射到隐藏空间(也就是说 Embedding 的形状为 (vocab_size, hidden_size),越大的词表也会带来模型参数的增加。
一般来说,BPE 编码的词典越大,编码效果越好。当然,由于 Embedding 层就是把 token 从词典空间映射到隐藏空间(也就是说 Embedding 的形状为 (vocab_size, hidden_size),越大的词表也会带来模型参数的增加。
BERT 原始的 bpe 词表大小为 30KRoBERTa 选择了 50K 大小的词表来优化模型的编码能力。
BERT 原始的 BPE 词表大小为 30KRoBERTa 选择了 50K 大小的词表来优化模型的编码能力。
通过上述三个部分的优化RoBERTa 成功地在 BERT 架构的基础上刷新了多个下游任务的 SOTA也一度成为 BERT 系模型最热门的预训练模型。同时RoBERTa 的成功也证明了更大的预训练数据、更大的预训练步长的重要意义,这也是 LLM 诞生的基础之一。
@@ -161,7 +179,7 @@ BERT 等预训练模型具有远超传统神经网络的参数量,如前所述
而从另一个角度看Embedding 层输出的向量是我们对文本 token 的稠密向量表示,从 Word2Vec 的成功经验来看这种词向量并不需要很大的维度Word2Vec 仅使用了 100维大小就取得了很好的效果。因此Embedding 层的输出也许不需要和隐藏层大小一致。
因此ALBERT 对 Embedding 层的参数矩阵进行了分解,让 Embedding 层的输出维度和隐藏层维度解绑,也就是在 Embedding 层的后面加入一个线性矩阵进行维度变换。ALBERT 设置了 Embedding 层的输出为 128因此在 Embedding 层后面加入了一个 128\*768 的线性矩阵来将 Embedding 层的输出再升维到隐藏层大小。也就是说Embedding 层的参数从 $V*H$ 降低到了 $V*E + E*H$,当 E 的大小远小于 H 时,该方法对 Embedding 层参数的优化就会很明显。
因此ALBERT 对 Embedding 层的参数矩阵进行了分解,让 Embedding 层的输出维度和隐藏层维度解绑,也就是在 Embedding 层的后面加入一个线性矩阵进行维度变换。ALBERT 设置了 Embedding 层的输出为 128因此在 Embedding 层后面加入了一个 $128*768$ 的线性矩阵来将 Embedding 层的输出再升维到隐藏层大小。也就是说Embedding 层的参数从 $V*H$ 降低到了 $V*E + E*H$,当 E 的大小远小于 H 时,该方法对 Embedding 层参数的优化就会很明显。
#### 2优化二跨层进行参数共享
@@ -209,30 +227,34 @@ T5 的大一统思想将不同的 NLP 任务如文本分类、问答、翻译等
#### 1模型结构Encoder-Decoder
Bert 采用了 Encoder-Only 结构,只包含编码器部分;而 GPT 采用了 Decoder-Only 结构只包含解码器部分。T5 则采用了 Encoder-Decoder 结构,其中编码器和解码器都是基于 Transformer 架构设计。编码器用于处理输入文本,解码器用于生成输出文本。编码器和解码器之间通过注意力机制进行信息交互,从而实现输入文本到输出文本的转换。其主要结构如所示:
BERT 采用了 Encoder-Only 结构,只包含编码器部分;而 GPT 采用了 Decoder-Only 结构只包含解码器部分。T5 则采用了 Encoder-Decoder 结构,其中编码器和解码器都是基于 Transformer 架构设计。编码器用于处理输入文本,解码器用于生成输出文本。编码器和解码器之间通过注意力机制进行信息交互,从而实现输入文本到输出文本的转换。其主要结构如图3.7所示:
<div align='center'>
<img src="./figures/2-1.png" alt="alt text" width="70%">
<div align="center">
<img src="./figures/2-1.png" alt="图片描述" width="100%"/>
<p>图3.7 T5 模型详细结构</p>
</div>
从整体来看 T5 的模型结构包括 Tokenizer 部分和 Transformer 部分。Tokenizer 部分主要负责将输入文本转换为模型可接受的输入格式包括分词、编码等操作。Transformer 部分又分为 EncoderLayers 和 DecoderLayers 两部分,他们分别由一个个小的 Block组成每个 Block 包含了多头注意力机制、前馈神经网络和 Norm 层。Block 的设计可以使模型更加灵活,像乐高一样可以根据任务的复杂程度和数据集的大小来调整 Block 的数量和层数。
如图3.8所示,从整体来看 T5 的模型结构包括 Tokenizer 部分和 Transformer 部分。Tokenizer 部分主要负责将输入文本转换为模型可接受的输入格式包括分词、编码等操作。Transformer 部分又分为 EncoderLayers 和 DecoderLayers 两部分,他们分别由一个个小的 Block组成每个 Block 包含了多头注意力机制、前馈神经网络和 Norm 层。Block 的设计可以使模型更加灵活,像乐高一样可以根据任务的复杂程度和数据集的大小来调整 Block 的数量和层数。
<div align='center'>
<img src="./figures/2-2.png" alt="alt text" width="60%">
<div align="center">
<img src="./figures/2-2.png" alt="图片描述" width="70%"/>
<p>图3.8 T5 模型整体结构</p>
</div>
T5 模型的 Encoder 和 Decoder 部分都是基于 Transformer 架构设计的,主要包括 Self-Attention 和 Feed-Forward 两种结构。Self-Attention 用于捕捉输入序列中的全局依赖关系,Feed-Forward 用于处理特征的非线性变换。
T5 模型的 Encoder 和 Decoder 部分都是基于 Transformer 架构设计的,主要包括 Self-Attention 和前馈神经网络两种结构。Self-Attention 用于捕捉输入序列中的全局依赖关系,前馈神经网络用于处理特征的非线性变换。
和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。
和 Encoder 不一样的是,在 Decoder 中还包含了 Encoder-Decoder Attention 结构,用于捕捉输入和输出序列之间的依赖关系。这两种 Attention 结构几乎完全一致,只有在位置编码和 Mask 机制上有所不同。如图3.9所示Encoder 和 Decoder 的结构如下:
<div align='center'>
<img src="./figures/2-3.png" alt="alt text" width="50%">
<p>图3.9 Encoder 和 Decoder</p>
</div>
T5 的 Self-Attention 机制和 Bert 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同,主要是为了区分输入和输出序列。
T5 的 Self-Attention 机制和 BERT 的 Attention 机制是一样的,都是基于 Self-Attention 机制设计的。Self-Attention 机制是一种全局依赖关系建模方法,通过计算 Query、Key 和 Value 之间的相似度来捕捉输入序列中的全局依赖关系。Encoder-Decoder Attention 仅仅在位置编码和 Mask 机制上有所不同,主要是为了区分输入和输出序列。如图3.10所示Self-Attention 结构如下:
<div align='center'>
<img src="./figures/2-4.png" alt="alt text" width="50%">
</p>图3.10 Self-Attention 结构</p>
</div>
与原始 Transformer 模型不同T5 模型的LayerNorm 采用了 RMSNorm通过计算每个神经元的均方根Root Mean Square来归一化每个隐藏层的激活值。RMSNorm 的参数设置与Layer Normalization 相比更简单只有一个可调参数可以更好地适应不同的任务和数据集。RMSNorm函数可以用以下数学公式表示
@@ -255,7 +277,7 @@ T5 模型的预训练任务是一个关键的组成部分,它能使模型能
我们可以简单概括一下 T5 的预训练任务,主要包括以下几个部分:
- 预训练任务: T5模型的预训练任务是遮蔽语言模型(Masked Language Model MLM)也称为BERT-style目标。具体来说就是在输入文本中随机遮蔽15%的token然后让模型预测这些被遮蔽的token。这个过程不需要标签可以在大量未标注的文本上进行。
- 预训练任务: T5模型的预训练任务是 MLM也称为BERT-style目标。具体来说就是在输入文本中随机遮蔽15%的token然后让模型预测这些被遮蔽的token。这个过程不需要标签可以在大量未标注的文本上进行。
- 输入格式: 预训练时T5将输入文本转换为"文本到文本"的格式。对于一个给定的文本序列随机选择一些token进行遮蔽并用特殊的占位符(token)替换。然后将被遮蔽的token序列作为模型的输出目标。
- 预训练数据集: T5 使用了自己创建的大规模数据集"Colossal Clean Crawled Corpus"(C4)该数据集从Common Crawl中提取了大量干净的英语文本。C4数据集经过了一定的清洗去除了无意义的文本、重复文本等。
- 多任务预训练: T5 还尝试了将多个任务混合在一起进行预训练而不仅仅是单独的MLM任务。这有助于模型学习更通用的语言表示。
@@ -273,10 +295,11 @@ T5模型的一个核心理念是“大一统思想”即所有的 NLP 任务
T5通过大规模的文本数据进行预训练然后在具体任务上进行微调。这一过程与BERT、GPT等模型类似但T5将预训练和微调阶段的任务统一为文本到文本的形式使其在各种任务上的适应性更强。
我们可以通过下面这张图来直观地理解 T5 的大一统思想:
我们可以通过图3.11,更加直观地理解 T5 的大一统思想:
<div align='center'>
<img src="./figures/2-0.png" alt="alt text" width="90%">
<p>图3.11 T5 的大一统思想</p>
</div>
对于不同的NLP任务每次输入前都会加上一个任务描述前缀明确指定当前任务的类型。这不仅帮助模型在预训练阶段学习到不同任务之间的通用特征也便于在微调阶段迅速适应具体任务。例如任务前缀可以是“summarize: ”用于摘要任务或“translate English to German: ”用于翻译任务。
@@ -299,9 +322,12 @@ GPT即 Generative Pre-Training Language Model是由 OpenAI 团队于 2018
#### 1 模型架构——Decoder Only
![](./figures/3-0.png)
<div align='center'>
<img src="./figures/3-0.png" alt="alt text" width="100%">
<p>图3.12 GPT 模型结构</p>
</div>
可以看到GPT 的整体结构和 BERT 是有一些类似的,只是相较于 BERT 的 Encoder选择使用了 Decoder 来进行模型结构的堆叠。由于 Decoder-Only 结构也天生适用于文本生成任务,所以相较于更贴合 NLU 任务设计的 BERTGPT 和 T5 的模型设计更契合于 NLG 任务和 Seq2Seq 任务。同样,对于一个自然语言文本的输入,先通过 tokenizer 进行分词并转化为对应词典序号的 input_ids。
如图3.12可以看到GPT 的整体结构和 BERT 是有一些类似的,只是相较于 BERT 的 Encoder选择使用了 Decoder 来进行模型结构的堆叠。由于 Decoder-Only 结构也天生适用于文本生成任务,所以相较于更贴合 NLU 任务设计的 BERTGPT 和 T5 的模型设计更契合于 NLG 任务和 Seq2Seq 任务。同样,对于一个自然语言文本的输入,先通过 tokenizer 进行分词并转化为对应词典序号的 input_ids。
输入的 input_ids 首先通过 Embedding 层,再经过 Positional Embedding 进行位置编码。不同于 BERT 选择了可训练的全连接层作为位置编码GPT 沿用了 Transformer 的经典 Sinusoidal 位置编码,即通过三角函数进行绝对位置编码,此处就不再赘述,感兴趣的读者可以参考第二章 Transformer 模型细节的解析。
@@ -361,15 +387,18 @@ GPT-3 则是更进一步展示了 OpenAI“力大砖飞”的核心思路
### 3.3.2 LLaMA
Llama模型是由Meta前Facebook开发的一系列大型预训练语言模型。从Llama-1到Llama-3Llama系列模型展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。
LLaMA模型是由Meta前Facebook开发的一系列大型预训练语言模型。从LLaMA-1到LLaMA-3LLaMA系列模型展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。
#### 1 模型架构——Decoder Only
与GPT系列模型一样Llama模型也是基于Decoder-Only架构的预训练语言模型。Llama模型的整体结构与GPT系列模型类似只是在模型规模和预训练数据集上有所不同。以下是Llama-3模型的架构示意图:
与GPT系列模型一样LLaMA模型也是基于Decoder-Only架构的预训练语言模型。LLaMA模型的整体结构与GPT系列模型类似只是在模型规模和预训练数据集上有所不同。如图3.13是LLaMA模型的架构示意图:
![alt text](./figures/3-1.png)
<div align='center'>
<img src="./figures/3-1.png" alt="alt text" width="100%">
<p>图3.13 LLaMA-3 模型结构</p>
</div>
与GPT类似llama模型的处理流程也始于将输入文本通过tokenizer进行编码转化为一系列的input_ids。这些input_ids是模型能够理解和处理的数据格式。接下来这些input_ids会经过embedding层的转换这里每个input_id会被映射到一个高维空间中的向量即词向量。同时输入文本的位置信息也会通过positional embedding层被编码以确保模型能够理解词序上下文信息。
与GPT类似LLaMA模型的处理流程也始于将输入文本通过tokenizer进行编码转化为一系列的input_ids。这些input_ids是模型能够理解和处理的数据格式。接下来这些input_ids会经过embedding层的转换这里每个input_id会被映射到一个高维空间中的向量即词向量。同时输入文本的位置信息也会通过positional embedding层被编码以确保模型能够理解词序上下文信息。
这样input_ids经过embedding层和positional embedding层的结合形成了hidden_states。hidden_states包含了输入文本的语义和位置信息是模型进行后续处理的基础hidden_states随后被输入到模型的decoder层。
@@ -377,29 +406,29 @@ Llama模型是由Meta前Facebook开发的一系列大型预训练语言模
在完成masked self-attention层之后hidden_states会进入MLP层。在这个多层感知机层中模型通过两个全连接层对hidden_states进行进一步的特征提取。第一个全连接层将hidden_states映射到一个中间维度然后通过激活函数进行非线性变换增加模型的非线性能力。第二个全连接层则将特征再次映射回原始的hidden_states维度。
最后经过多个decoder block的处理hidden_states会通过一个线性层进行最终的映射这个线性层的输出维度与词表维度相同。这样模型就可以根据hidden_states生成目标序列的概率分布进而通过采样或贪婪解码等方法生成最终的输出序列。这一过程体现了llama模型强大的序列生成能力。
最后经过多个decoder block的处理hidden_states会通过一个线性层进行最终的映射这个线性层的输出维度与词表维度相同。这样模型就可以根据hidden_states生成目标序列的概率分布进而通过采样或贪婪解码等方法生成最终的输出序列。这一过程体现了LLaMA模型强大的序列生成能力。
#### 2 Llama模型的发展历程
#### 2 LLaMA模型的发展历程
**Llama-1 系列**
**LLaMA-1 系列**
- Meta于2023年2月发布了Llama-1包括7B、13B、30B和65B四个参数量版本。
- Meta于2023年2月发布了LLaMA-1包括7B、13B、30B和65B四个参数量版本。
- 这些模型在超过1T token的语料上进行了预训练其中最大的65B参数模型在2,048张A100 80G GPU上训练了近21天。
- Llama-1因其开源性和优异性能迅速成为开源社区中最受欢迎的大模型之一。
- LLaMA-1因其开源性和优异性能迅速成为开源社区中最受欢迎的大模型之一。
**Llama-2 系列**
**LLaMA-2 系列**
- 2023年7月Meta发布了Llama-2包含7B、13B、34B和70B四个参数量版本除了34B模型外其他均已开源。
- Llama-2将预训练的语料扩充到了2T token并将模型的上下文长度从2,048翻倍到了4,096。
- 2023年7月Meta发布了LLaMA-2包含7B、13B、34B和70B四个参数量版本除了34B模型外其他均已开源。
- LLaMA-2将预训练的语料扩充到了2T token并将模型的上下文长度从2,048翻倍到了4,096。
- 引入了分组查询注意力机制Grouped-Query Attention, GQA等技术。
**Llama-3 系列**
**LLaMA-3 系列**
- 2024年4月Meta发布了Llama-3包括8B和70B两个参数量版本同时透露400B的Llama-3还在训练中。
- Llama-3支持8K长文本并采用了编码效率更高的tokenizer词表大小为128K。
- 使用了超过15T token的预训练语料是Llama-2的7倍多。
- 2024年4月Meta发布了LLaMA-3包括8B和70B两个参数量版本同时透露400B的LLaMA-3还在训练中。
- LLaMA-3支持8K长文本并采用了编码效率更高的tokenizer词表大小为128K。
- 使用了超过15T token的预训练语料是LLaMA-2的7倍多。
Llama模型以其技术创新、多参数版本、大规模预训练和高效架构设计而著称。模型支持从7亿到数百亿不等的参数量适应不同规模的应用需求。Llama-1以其开源性和优异性能迅速受到社区欢迎而Llama-2和Llama-3进一步通过引入分组查询注意力机制和支持更长文本输入显著提升了模型性能和应用范围。特别是Llama-3通过采用128K词表大小的高效tokenizer和15T token的庞大训练数据实现了在多语言和多任务处理上的重大进步。Meta对模型安全性和社区支持的持续关注预示着Llama将继续作为AI技术发展的重要推动力促进全球范围内的技术应用和创新。
LLaMA模型以其技术创新、多参数版本、大规模预训练和高效架构设计而著称。模型支持从7亿到数百亿不等的参数量适应不同规模的应用需求。LLaMA-1以其开源性和优异性能迅速受到社区欢迎而LLaMA-2和LLaMA-3进一步通过引入分组查询注意力机制和支持更长文本输入显著提升了模型性能和应用范围。特别是LLaMA-3通过采用128K词表大小的高效tokenizer和15T token的庞大训练数据实现了在多语言和多任务处理上的重大进步。Meta对模型安全性和社区支持的持续关注预示着LLaMA将继续作为AI技术发展的重要推动力促进全球范围内的技术应用和创新。
### 3.3.3 GLM
@@ -450,14 +479,25 @@ ChatGLM3-6B 发布于 23年 10月相对于二代在语义、数学、推理
**参考资料**
1. [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)
2. [RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)
3. [ALBERT: A Lite BERT for Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942)
4. [Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer](http://arxiv.org/abs/1910.10683)
5. [DatasetColossal Clean Crawled Corpusc4](https://www.tensorflow.org/datasets/catalog/c4)
6. [Improving Language Understanding by Generative Pre-Training](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)
7. [Language Models are Unsupervised Multitask Learners](https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf)
8. [Language Models are Few-Shot Learners](https://arxiv.org/pdf/2005.14165)
9. [万字长文带你梳理Llama开源家族从Llama-1到Llama-3](https://mp.weixin.qq.com/s/5_VnzP3JmOB0D5geV5HRFg)
10. [ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools](https://arxiv.org/abs/2406.12793)
11. [GLM: General Language Model Pretraining with Autoregressive Blank Infilling](https://arxiv.org/abs/2103.10360)
```
待处理 GLM
1. [ChatGLM: A Family of Large Language Models from GLM-130B to GLM-4 All Tools](https://arxiv.org/abs/2406.12793)
2. [GLM: General Language Model Pretraining with Autoregressive Blank Infilling](https://arxiv.org/abs/2103.10360)
```
[1] Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. (2019). *BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.* arXiv preprint arXiv:1810.04805.
[2] Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov. (2019). *RoBERTa: A Robustly Optimized BERT Pretraining Approach.* arXiv preprint arXiv:1907.11692.
[3] Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut. (2020). *ALBERT: A Lite BERT for Self-supervised Learning of Language Representations.* arXiv preprint arXiv:1909.11942.
[4] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu. (2023). *Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.* arXiv preprint arXiv:1910.10683.
[5] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, Peter J. Liu. (2020). *Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.* Journal of Machine Learning Research, 21(140), 167.
[6] Alec Radford, Karthik Narasimhan. (2018). *Improving Language Understanding by Generative Pre-Training*. Retrieved from https://api.semanticscholar.org/CorpusID:49313245
[7] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei. (2020). *Language Models are Few-Shot Learners.* arXiv preprint arXiv:2005.14165.
[8] 张帆, 陈安东的文章“万字长文带你梳理Llama开源家族从Llama-1到Llama-3”来源https://mp.weixin.qq.com/s/5_VnzP3JmOB0D5geV5HRFg