参考资料:https://github.com/datawhalechina/happy-llm
Decoder-Only是当前大型语言模型(LLM)的基础架构,如 GPT 系列。GPT 是 Decoder-Only 架构的代表,而开源 LLM 如 LLaMA 也是在 GPT 架构基础上发展而来的。
3.3.1 GPT
GPT(Generative Pre-Training Transformer)是由 OpenAI 团队于 2018 年发布的预训练语言模型。虽然 BERT 通常被认为是预训练语言模型时代的代表,但 GPT 实际上是首个明确提出预训练-微调思想的模型。GPT 提出了通用预训练的概念,即在海量无监督语料上进行预训练,然后在每个特定任务上进行微调,从而实现这些任务的巨大收益。
尽管 GPT 在发布之初由于性能略逊于随后发布的 BERT,并未取得轰动性成果,也没有让其使用的 Decoder-Only 架构成为学界研究的主流,但 OpenAI 团队坚定地选择了不断扩大预训练数据和增加模型参数,在 GPT 架构上不断优化。最终在 2020 年发布的 GPT-3 成就了 LLM(Large Language Model)时代的基础,并以 GPT-3 为基座模型的 ChatGPT 成功打开了新时代的大门,成为 LLM 时代的最强竞争者和目前的最大赢家。
(1) 模型架构——Decoder Only
整体结构:
GPT 的整体结构与 BERT 类似,但使用 Decoder 进行堆叠,而不是 Encoder。
更适合文本生成(NLG)和序列到序列(Seq2Seq)任务。
输入处理:
输入文本通过 tokenizer 分词,转化为 input_ids。
input_ids 经过 Embedding 层和 Positional Embedding 层编码成 hidden_states。
GPT 使用经典的 Sinusoidal 位置编码,与 BERT 的可训练全连接层位置编码不同。
解码器(Decoder):
第一代 GPT 模型包含 12 层解码器层。
每层的结构更接近 Transformer 的 Encoder 层,包含一个带掩码的自注意力层和一个 MLP 层。
LayerNorm 层在注意力层之前,与 Transformer 的设计不同。
掩码自注意力:
Decoder 层中的掩码自注意力限制每个 token 只能关注之前的 token。
通过掩码矩阵遮蔽未来 token 的注意力权重。
MLP 层:
GPT 的 MLP 层使用两个一维卷积核,而不是线性矩阵,但效果类似。
输出生成:
经过 N 个 Decoder 层后的 hidden_states 通过线性矩阵映射到词表维度。
最终生成目标序列的 token。
(2)预训练任务——CLM
CLM 是基于一个自然语言序列的前面所有 token 来预测下一个 token 的任务。输入一个部分完成的文本序列,模型预测下一个 token。通过不断重复该过程,生成完整的文本序列。例如:
input: 今天天气
output: 今天天气很
input: 今天天气很
output:今天天气很好
生成过程:
对于输入序列长度为 256,期望输出序列长度为 256 的任务,模型会根据前 256 个 token、257 个 token(输入 + 预测的第一个 token)等,进行 256 次计算,最终生成长度为 512 的输出文本。
输出文本的前 256 个 token 为输入,后 256 个 token 为模型的输出。
CLM 的优势
与人类书写习惯契合:CLM 与人类书写自然语言文本的习惯相契合,也与下游任务直接匹配。
直接性:相对于 BERT 的 MLM 任务,CLM 更直接,可以在任何自然语言文本上直接应用。
预训练:CLM 可以使用海量的自然语言语料进行大规模的预训练,无需额外标注数据。
(3)GPT 系列模型的发展
GPT-1
模型结构:12 层 Decoder Block,隐藏层维度 768,12 个注意力头,每个头的维度 64。
参数量:1.17 亿(0.12B)。
预训练数据:5GB 的 BooksCorpus 数据集。
特点:第一个使用 Decoder-Only 的预训练模型,模型体量和预训练数据较少,性能略逊于 BERT。
GPT-2
模型结构:48 层 Decoder Block,隐藏层维度 1600,25 个注意力头,每个头的维度 64。
参数量:15 亿(1.5B)。
预训练数据:40GB 的 WebText 数据集。
特点:大幅增加了预训练数据集和模型体量,引入了 Pre-Norm(先进行 LayerNorm 计算,再进入注意力层计算)以优化梯度稳定性。提出了 zero-shot(零样本学习)的概念,但效果有限。
GPT-3
模型结构:96 层 Decoder Block,隐藏层维度 12288,96 个注意力头,每个头的维度 128。
参数量:1750 亿(175B)。
预训练数据:570GB 的数据,包括 CC、WebText、维基百科等。
特点:进一步增大了模型体量和预训练数据量,使用了稀疏注意力机制来优化计算效率。提出了 few-shot(少样本学习)的概念,通过提供少量示例显著提升了模型的性能。
GPT-3 的影响
涌现能力:GPT-3 展示了大型语言模型的涌现能力,即模型在达到一定规模后能够展现出之前未被发现的能力。
few-shot 学习:通过提供少量示例,模型可以取得远好于 zero-shot 的表现,为 NLP 的突破带来了重要进展。
上下文学习:few-shot 也被称为上下文学习,即让模型从提供的上下文中的示例里学习问题的解决方法。
ChatGPT
训练方法:引入了预训练-指令微调-人类反馈强化学习的三阶段训练。
特点:在 GPT-3 的基础上,通过指令微调和人类反馈强化学习,进一步提升了模型的性能和适应性。
3.3.2 LLaMA
LLaMA模型是由Meta(前Facebook)开发的一系列大型预训练语言模型。从LLaMA-1到LLaMA-3,LLaMA系列模型展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。
(1) 模型架构——Decoder Only
LLaMA模型的整体结构与GPT系列模型类似,只是在模型规模和预训练数据集上有所不同。
输入编码:
输入文本通过 tokenizer 编码,转化为 input_ids。
Input_ids 经过 Embedding 层,每个 input_id 被映射为词向量。
位置信息通过 Positional Embedding 层编码,确保模型理解词序上下文信息。
Hidden States 形成:
Input_ids 经过 Embedding 层和 Positional Embedding 层的结合,形成 hidden_states。
Hidden_states 包含输入文本的语义和位置信息,是后续处理的基础。
Decoder 层处理:
Hidden_states 输入 Decoder 层,由多个 Decoder Block 组成。
每个 Decoder Block 包括:
Masked Self-Attention 层:
计算 query、key 和 value 向量。
使用 softmax 函数计算 attention score,反映不同位置之间的关联强度。
将 value 向量与 attention score 相乘,得到加权后的 value,即 attention 结果。
MLP 层:
通过两个全连接层对 hidden_states 进行特征提取。
第一个全连接层映射到中间维度,通过激活函数进行非线性变换。
第二个全连接层将特征映射回原始 hidden_states 维度。
最终输出:
经过多个 Decoder Block 处理后的 hidden_states 通过线性层映射到词表维度。
生成目标序列的概率分布,通过采样或贪婪解码等方法生成最终输出序列。
(2) LLaMA模型的发展历程
LLaMA-1 系列:
- Meta于2023年2月发布了LLaMA-1,包括7B、13B、30B和65B四个参数量版本。
- 这些模型在超过1T token的语料上进行了预训练,其中最大的65B参数模型在2,048张A100 80G GPU上训练了近21天。
- LLaMA-1因其开源性和优异性能迅速成为开源社区中最受欢迎的大模型之一。
LLaMA-2 系列:
- 2023年7月,Meta发布了LLaMA-2,包含7B、13B、34B和70B四个参数量版本,除了34B模型外,其他均已开源。
- LLaMA-2将预训练的语料扩充到了2T token,并将模型的上下文长度从2,048翻倍到了4,096。
- 引入了分组查询注意力机制(Grouped-Query Attention, GQA)等技术。
LLaMA-3 系列:
- 2024年4月,Meta发布了LLaMA-3,包括8B和70B两个参数量版本,同时透露400B的LLaMA-3还在训练中。
- LLaMA-3支持8K长文本,并采用了编码效率更高的tokenizer,词表大小为128K。
- 使用了超过15T token的预训练语料,是LLaMA-2的7倍多。
LLaMA 模型的核心特点
技术创新:引入分组查询注意力机制(GQA)等新技术
多参数版本:提供从7亿到数百亿不等的参数量,适应不同规模的应用需求
大规模预训练:使用超过1T到15T token的庞大语料进行预训练
高效架构设计:支持长文本输入,采用高效tokenizer
LLaMA 模型的影响
开源性:LLaMA-1的开源性使其迅速受到社区欢迎
性能提升:LLaMA-2和LLaMA-3通过技术创新和预训练语料的扩充,显著提升了模型性能和应用范围
多语言和多任务处理:LLaMA-3在多语言和多任务处理上取得重大进步
社区支持:Meta对模型安全性和社区支持的持续关注,推动了LLaMA作为AI技术发展的重要推动力,促进了全球范围内的技术应用和创新
3.3.3 GLM
GLM(General Language Model)系列模型是由智谱开发的主流中文 LLM 之一,包括 ChatGLM1、ChatGLM2、ChatGLM3 及 GLM-4 系列模型。这些模型覆盖了指令理解、代码生成等多种应用场景,并在多种中文评估集上达到了 SOTA(State Of The Art)性能。
(1)模型架构-相对于 GPT 的略微修正
GLM 的整体模型结构与 GPT 类似,均为 Decoder-Only 结构,但存在以下三点细微差异:
归一化方式:
Post Norm:GLM 使用 Post Norm,即在进行残差连接计算时,先完成残差计算,再进行 LayerNorm 计算。这种方式对参数正则化的效果更强,增强模型的鲁棒性。
Pre Norm:GPT 和 LLaMA 等模型使用 Pre Norm,即先进行 LayerNorm 计算,再进行残差的计算。这种方式可以防止模型的梯度爆炸或梯度消失,对于更大体量的模型效果更好。尽管如此,GLM 论文提出使用 Post Norm 可以避免 LLM 的数值错误。
最终 token 预测:
GLM 使用单个线性层实现最终 token 的预测,而不是使用 MLP。这种结构更加简单且鲁棒,减少了最终输出的参数量,将更大的参数量放在模型本身。
激活函数:
GLM 使用 GeLU(Gaussian Error Linear Unit)作为激活函数,而不是传统的 ReLU(Rectified Linear Unit)。
ReLU:核心计算逻辑为去除小于 0 的传播,保留大于 0 的传播。
GeLU:对接近于 0 的正向传播进行非线性映射,保证激活函数后的非线性输出具有一定的连续性。
GLM的核心创新点是提出了一种结合自编码(MLM)和自回归(CLM)思想的预训练方法。它通过优化自回归空白填充任务,随机遮蔽连续的tokens,既利用上下文预测遮蔽部分,又在遮蔽部分内部按CLM方式预测tokens。这种结合使模型既适合逐token生成任务,又适合理解类任务,其预训练任务产出的模型性能优于同体量BERT系模型。
GLM预训练任务在预训练模型时代有一定优势,但进入LLM时代后,CLM在大规模预训练中表现更优,其生成模型在文本理解上也能超越MLM训练的模型。因此,ChatGLM系列从第二代开始回归CLM建模。尽管GLM预训练任务在LLM整体发展路径中看似失败,但其融合CLM与MLM的设计以及率先产出中文开源原生LLM的思路,仍具有借鉴意义。
(3)GLM 家族的发展
ChatGLM-6B(2023年3月)
基础:基于原生GLM架构及预训练任务,参考ChatGPT技术思路进行SFT和RLHF。
特点:首个中文开源LLM,1T语料预训练,支持2K上下文长度,为中文LLM研究提供起点。
ChatGLM2-6B(2023年6月)
架构:回归LLaMA架构,引入MQA注意力机制。
预训练任务:回归经典CLM,放弃GLM预训练尝试。
性能提升:上下文长度扩展至32K,更大预训练规模带来性能大幅提升。
ChatGLM3-6B(2023年10月)
性能表现:在语义、数学、推理、代码和知识方面达当时SOTA性能。
架构:与二代相比架构无变化。
优化来源:更多样化训练数据集、更充足训练步骤、更优化训练策略。
新功能:支持函数调用与代码解释器,可实现Agent开发,应用价值更广泛。
GLM-4系列(2024年1月)
性能表现:支持128K上下文,英文基准上达GPT-4水平。
开源情况:未直接开源GLM-4,开源轻量级版本GLM-4-9B。
GLM-4-9B特点:1T token多语言语料预训练,上下文长度8K,使用与GLM-4相同管道和数据后训练,训练计算量少时超越Llama-3-8B,支持GLM-4所有工具功能。