0% found this document useful (0 votes)
81 views69 pages

Transformer & GPT Model Basics

This is the slides for the book 'Large Language Model: From Theory to Implementations', chapter 2.

Uploaded by

张逸骅
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views69 pages

Transformer & GPT Model Basics

This is the slides for the book 'Large Language Model: From Theory to Implementations', chapter 2.

Uploaded by

张逸骅
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 69

《大规模语言模型 : 》

第 2 章 大语言模型基础

张奇 桂韬 郑锐 黄萱菁

复旦大学
2023.11.07 1
2 大语言模型基础

语言模型的目标是建模自然语言的概率分布,在自然语言处理研究中具有重要的作用,是自然语言处理的基础任务之一。包括:
• n 元语言模型( n-gram Language Models )
• 神经语言模型
• 预训练语言模型

随着基于 Transformer 的各类语言模型的发展及预训练微调范式在自然语言处理各类任务中取得突破性进展,从 2020


年 OpenAI 发布 GPT-3 开始,对大语言模型的研究逐渐深入。虽然大语言模型的参数量巨大,通过有监督微调和强化学习
能够完成非常多的任务,但是其基础理论仍然离不开对语言的建模。

2
目录
Content
s

2.1 Transformer 结构

2.2 生成式预训练语言模型 GPT

2.3 大语言模型结构

2.4 实践思考

3
目录
Content
s

2.1 Transformer 结构

2.2 生成式预训练语言模型 GPT

2.3 大语言模型结构

2.4 实践思考

4
2.1 Transformer 结构

Transformer 结构是由谷歌在 2017 年提出并首先应用于机器翻译


Transformer 结构完全通过注意力机制完成对源语言序列和目标语言序列全局依赖的建模。如今,几乎全部大语言模型都是基
于 Transformer 结构的。
本节以应用于机器翻译的基于 Transformer 的编码器和解码器为例介绍该模型。

5
2.1 Transformer 结构

基于 Transformer 的编码器和解码器结构如图 2.1


所示
• 左侧和右侧分别对应着编码器( Encoder )和解码器
( Decoder )结构,它们均由若干个基本的 Transformer
块( Block )组成(对应图中的灰色框)
• 每个 Transformer 块都接收一个向量序列作为输入
,并输出一个等长的向量序列作为输出
• yi 是当前 Transformer 块对输入 xi 进一步整合其上下文语
义后对应的输出。

6
2.1 Transformer 结构

• 注意力层:使用多头注意力( Multi-Head Attention )机制整合上下文语义,


它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构,从而更好
地解决文本的长程依赖问题。

• 位置感知前馈层( Position-wise FFN ):通过全连接层对输入文本序列中


的每个单词表示进行更复杂的变换。

• 残差连接:对应图中的 Add 部分。它是一条分别作用在上述两个子层中的直连通路,被用于


连接两个子层的输入与输出,使信息流动更高效,有利于模型的优化。

• 层归一化:对应图中的 Norm 部分。它作用于上述两个子层的输出表示序列,对表示序列


进行层归一化操作,同样起到稳定优化的作用。

7
2.1. 嵌入表示层
1
对于输入文本序列,先通过输入嵌入层( Input Embedding )将每个单词转换为其相对应的向量表示。通常,直接对
每个单词创建一个向量表示。
由于 Transformer 结构不再使用基于循环的方式建模文本输入,序列中不再有任何信息能够提示模型单词之间的相对位置关
系 。 在 送 入 编 码 器 端 建 模 其 上 下 文 语 义 之 前 , 一 个 非 常 重 要 的 操 作 是 在 词 嵌 入 中 加 入 位 置 编 码 ( Positional
Encoding )
• 序列中每一个单词所在的位置都对应一个向量。这一向量会与单词表示对应相加并送入后续模块中做进一步处理。在训练过程中,模型会自动地学习到如何利用
这部分位置信息。

• 为了得到不同位置所对应的编码, Transformer 结构使用不同频率的正余弦函数,如下所示:

POS 表示单词所在的位置, 2i 和 2i+1 表示位置编码向量中的对应维度, d 则对应位置编码的总维度 8


2.1. 嵌入表示层
1

9
2.1. 注意力层
2
自注意力( Self-Attention )操作是基于 Transformer 的机器翻译模型的基本操作,在源语言的编码和目标
语言的生成中频繁地被使用以建模源语言、目标语言任意两个单词之间的依赖关系。
将由单词语义嵌入及其位置编码叠加得到的输入表示为 ,为了实现对上下文语义依赖的建模,引入自注意力机制涉
及的三个元素:查询 ( Query )、键 ( Key )和值 ( Value )

10
2.1. 注意力层
2
为了得到编码单词 xi 时所需要关注的上下文信息,通过位置 i 查询向量与其他位置的键向量做点积得到匹配分数

为了防止过大的匹配分数在后续 Softmax 计算过程中导致的梯度爆炸及收敛效率差的问题,这些得分会除以放缩因子 以


稳定优化
放缩后的得分经过 Softmax 归一化为概率,与其他位置的值向量相乘来聚合希望关注的上下文信息,并最小化不相关信息的干
扰。上述计算过程可以被形式化地表述如下:

11
2.1. 注意力层
2
为了进一步增强自注意力机制聚合上下文信息的能力,提出了多头自注意力( Multi-head Attention )机制,以
关注上下文的不同侧面。

具体来说,上下文中每一个单词的表示 xi 经过多组线性 映射到不同的表示子空间中

线性变换 用于综合不同子空间中的上下文表示并形成自注意力层最终的输出

12
2.1. 注意力层
2

13
2.1. 前馈层
3
前 馈 层 ( Feed-Forward Network, FFN ) 接 收 自 注 意 力 子 层 的 输 出 作 为 输 入 , 并 通 过 一 个 带 有
ReLU 激活函数的两层全连接网络对输入进行更复杂的非线性变换。实验证明,这一非线性变换会对模型最终的性能产生重要的影
响。

实验结果表明,增大前馈子层隐状态的维度有利于提高最终翻译结果的质量,因此,前馈子层隐状态的维度一般比自注意力子层要大。

14
2.1. 前馈层
3

15
2.1. 残差连接与层归一化
4
由 Transformer 结构组成的网络结构通常都非常庞大。编码器和解码器均由很多层基本的 Transformer 块组成,
每一层中都包含复杂的非线性映射,这就导致模型的训练比较困难。
因此,研究人员在 Transformer 块中进一步引入了残差连接与层归一化技术,以进一步提升训练的稳定性。具体来说,残差
连接主要是指使用一条直连通道直接将对应子层的输入连接到输出,避免在优化过程中因网络过深而产生潜在的梯度消失问题:

其中 xl 表示第 l 层的输入, f(.) 表示一个映射函数。此外,为了使每一层的输入 / 输出稳定在一个合理的范围内,层归一化


技术被进一步引入每个 Transformer 块中:

16
2.1. 残差连接与层归一化
4

17
2.1. 编码器和解码器结构
5

基于上述模块,根据 图 2.1 给出的网络架构,编码器端较


容易实现。相比于编码器端,解码器端更复杂。具体来说,解码
器的每个 Transformer 块的第一个自注意力子层额外
增加了注意力掩码,对应图中的掩码多头注意力
( Masked Multi-Head
Attention )部分

18
2.1. 编码器和解码器结构
5
掩码多头注意力( Masked Multi-Head Attention )主要是因为在翻译的过程中,
• 编码器端主要用于编码源语言序列的信息,而这个序列是完全已知的,因而编码器仅需要考虑如何融合上下文语义信息。

• 解码器端则负责生成目标语言序列,这一生成过程是自回归的,即对于每一个单词的生成过程,仅有当前单词之前的目标语言序列是可以被观测的。

• 这一额外增加的掩码是用来掩盖后续的文本信息的,以防模型在训练阶段直接看到后续的文本序列,进而无法得到有效的训练。

19
2.1. 编码器和解码器结构
5
解 码 器 端 额 外 增 加 了 一 个 多 头 交 叉 注 意 力 ( Multi-
Head Cross-Attention )模块,使用交
叉注意力( Cross-Attention )方法,同时接收来
自编码器端的输出和当前 Transformer 块的前一个掩
码注意力层的输出。

20
2.1. 编码器和解码器结构
5
多头交叉注意力( Multi-Head Cross-Attention )模块中查询是通过解码器前一层的输出进行投影的,而键和值是
使用编码器的输出进行投影的。
• 其作用是在翻译的过程中,为了生成合理的目标语言序列,观测待翻译的源语言序列是什么。

基于上述编码器和解码器结构,待翻译的源语言文本,经过编码器端的每个 Transformer 块对其上下文语义进行层层抽象,


最终输出每一个源语言单词上下文相关的表示。
解码器端以自回归的方式生成目标语言文本,即在每个时间步 t ,根据编码器端输出的源语言文本表示,以及前 t − 1 个时刻生成
的目标语言文本,生成当前时刻的目标语言单词。

21
2.1. 编码器和解码器结构
5
编码器:

22
2.1. 编码器和解码器结构
5
解码器:

23
目录
Content
s

2.1 Transformer 结构

2.2 生成式预训练语言模型 GPT

2.3 大语言模型结构

2.4 实践思考

24
2.2 生成式预训练语言模型 GPT

OpenAI 公司在 2018 年提出的生成式预训练语言模型( Generative Pre-Training , GPT )


是典型的生成式预训练语言模型之一。 GPT 的模型结构如图 2.3 所示,它是由多层 Transformer 组成的单向语言模
型,主要分为输入层、编码层和输出层三部分。

图 2.3 GPT 的模型结构 25


2.2. 无监督预训练
1
GPT 采用生成式预训练方法,单向意味着模型只能从左到右或从右到左对文本序列建模,所采用的 Transformer 结构和
解码策略保证了输入文本每个位置只能依赖过去时刻的信息。

给定文本序列 , GPT 首先在输入层中将其映射为稠密的向量:

随后将 v 送入模型编码层。编码层由 L 个 Transformer 模块组成,在自注意力机制的作用下,每一层的每个表示向量


都会包含之前位置表示向量的信息

26
2.2. 无监督预训练
1
GPT 模型的输出层基于最后一层的表示 h(L) ,预测每个位置上的条件概率,其计算过程可以表示为:

为词向量矩阵, |V| 为词表大小

单向语言模型按照阅读顺序输入文本序列 w ,用常规语言模型目标优化 w 的最大似然估计,使之能根据输入历史序列对当前词做出准确


的预测:

27
2.2. 有监督下游任务微调
2
通过无监督语言模型预训练,使得 GPT 模型具备了一定的通用语义表示能力。下游任务微调( Downstream Task
Fine-tuning )的目的是在通用语义表示的基础上,根据下游任务的特性进行适配。

先将文本序列 x 输入 GPT 模型,获得最后一层的最后一个词所对应的隐藏层输出 h(L)n ,在此基础上,通过全连接层变换结


合 Softmax 函数,得到标签预测结果。

通过对整个标注数据集 D 优化如下目标函数精调下游任务:

28
2.2. 有监督下游任务微调
2
灾难性遗忘( Catastrophic Forgetting )问题。因此,通常采用混合预训练任务损失和下游微调损失的方法来缓解
上述问题。在实际应用中,通常采用如下公式进行下游任务微调:

29
2.2. 基于 HuggingFace 的预训练语言模型实践
3
HuggingFace 是一个开源自然语言处理软件库,其目标是通过提供一套全面的工具、库和模型,使得自然语言处理技术对开
发人员和研究人员更易于使用。
HuggingFace 最著名的贡献之一是 Transformer 库,基于此,研究人员可以快速部署训练好的模型,以及实现新
的网络结构。
HuggingFace 还提供了 Dataset 库,可以非常方便地下载自然语言处理研究中经常使用的基准数据集。
本节将以构建 BERT 模型为例,介绍基于 HuggingFace 的 BERT 模型的构建和使用方法。

30
2.2. 基于 HuggingFace 的预训练语言模型实践
3
1. 数据集准备

常见的用于预训练语言模型的大规模数据集都可以在 Dataset 库中直接下载并加载。例如,如果使用维基百科的英文语料集,可


以直接通过如下代码完成数据获取:

31
2.2. 基于 HuggingFace 的预训练语言模型实践
3
2. 训练词元分析器

BERT 采用 WordPiece 分词,根据训练语料中的词频决定是否将一个完整的词切分为多个词元。因此,需要先训练词元分


析器( Tokenizer )。可以使用 transformers 库中的 BertWordPiece-Tokenizer 类来完成任
务,代码如下所示:

32
2.2. 基于 HuggingFace 的预训练语言模型实践
3

33
2.2. 基于 HuggingFace 的预训练语言模型实践
3
3. 预处理语料集合

在启动整个模型训练之前,还需要将预训练语料根据训练好的 Tokenizer 进行处理。如果文档长度超过 512 个词元


( Token ),就直接截断。数据处理代码如下所示:

34
2.2. 基于 HuggingFace 的预训练语言模型实践
3
3. 预处理语料集合

35
2.2. 基于 HuggingFace 的预训练语言模型实践
3
4. 模型训练

在构建处理好的预训练语料之后,就可以开始模型训练。代码如下所示:

36
2.2. 基于 HuggingFace 的预训练语言模型实践
3
5. 模型使用

基于训练好的模型,可以针对不同应用需求使用,以句子补全为例的代码如下所示:

37
目录
Content
s

2.1 Transformer 结构

2.2 生成式预训练语言模型 GPT

2.3 大语言模型结构

2.4 实践思考

38
2.3 大语言模型的结构

当前,绝大多数大语言模型都采用了类似 GPT 的架构,使用基于 Transformer 架构构建的仅由解码器组成的网络结构,


采用自回归的方式构建语言模型,但是在位置编码、层归一化位置、激活函数等细节上各有不同。
• 文献 [5] 介绍了 GPT-3 模型的训练过程,包括模型架构、训练数据组成、训练过程及评估方法。由于 GPT-3 并没有开放源代码,根据论文直接
重现整个训练过程并不容易

• 文 献 [31] 介 绍 了 根 据 GPT-3 的 描 述 复 现 的 过 程 , 构 造 并 开 源 了 系 统 OPT ( OpenPre-trained Transformer


Language Models )。

• MetaAI 也仿照 GPT-3 的架构开源了 LLaMA 模型 [37] ,公开评测结果及利用该模型进行有监督微调后的模型都有非常好的表现。

GPT-3 模型后, OpenAI 就不再开源(也没有开源模型),因此并不清楚 ChatGPT 和 GPT-4 采用的模型架


构。

39
2.3. LLaMA 的模型结构
1
文献 [37] 介绍了 LLaMA 采用的 Transformer 结构和细节,与 2.1
节介绍的 Transformer 结构的不同之处为:
• 前置层归一化( Pre-normalization )

• RMSNorm 归一化函数( Normalizing Function )

• SwiGLU 激活函数

• 旋转位置嵌入( Rotary Positional Embeddings , RoPE )

使用的 Transformer 结构与 GPT-2 类似,如图 2.4 所示。

40
图 2.4 GPT-2 的模型结构
2.3. LLaMA 的模型结构
1
1. RMSNorm 归一化函数

为了使模型训练过程更加稳定, GPT-2 相较于 GPT 引入了前置层归一化方法,将第一个层归一化移动到多头自注意力层之


前,将第二个层归一化移动到全连接层之前。同时,残差连接的位置调整到多头自注意力层与全连接层之后。层归一化中也采用了
RMSNorm 归一化函数 [49] 。针对输入向量 a , RMSNorm 函数计算公式如下:

此外, RMSNorm 还可以引入可学习的缩放因子 gi 和偏移参数 bi ,从而得到

41
2.3. LLaMA 的模型结构
1
1. RMSNorm 归一化函数

42
2.3. LLaMA 的模型结构
1
2. SwiGLU 激活函数

SwiGLU 激活函数是 Shazeer 在文献 [50] 中提出的,在 PaLM[14] 等模型中进行了广泛应用,并且取得了


不错的效果,相较于 ReLU 函数在大部分评测中都有不少提升。在 LLaMA 中,全连接层使用带有 SwiGLU 激活函数
的 FFN ( Position-wise Feed-Forward Network )的计算公式如下:

σ(x) 是 Sigmoid 函数
43
2.3. LLaMA 的模型结构
1
2. SwiGLU 激活函数
图 2.5 给出了 Swish 激活函数在参数 β 不同取值下的形状。可以看到,当 β 趋近于 0 时, Swish 函数趋近于线
性函数 y = x ;当 β 趋近于无穷大时, Swish 函数趋近于 ReLU 函数;当 β 取值为 1 时, Swish 函数是光
滑且非单调的。在 HuggingFace 的 transformer 库中 Swish 函数被 SiLU 函数 [51] 代替。

44
2.3. LLaMA 的模型结构
1
3. RoPE 位置嵌入

在位置编码上,使用旋转位置嵌入 [52] 代替原有的绝对位置编码。 RoPE 借助复数的思想,出发点是通过绝对位置编码的方


式实现相对位置编码。其目标是通过下述运算给 q, k 添加绝对位置信息:

经过上述操作, 和 就带有了位置 m 和 n 的绝对位置信息。

45
2.3. LLaMA 的模型结构
1
3. RoPE 位置嵌入

详细的证明和求解过程可以参考文献 [52] ,最终可以得到二维情况下用复数表示的 RoPE :

根据复数乘法的几何意义,上述变换实际上是对应向量旋转,所以位置向量称为“旋转式位置编码”。还可以使用矩阵形式表示:

46
2.3. LLaMA 的模型结构
1
3. RoPE 位置嵌入

根据内积满足线性叠加的性质,任意偶数维的 RoPE 都可以表示为二维情形的拼接,即:

由于上述矩阵 Rd 具有稀疏性,因此可以使用逐位相乘⊗ 操作进一步提高计算速度。

47
2.3. LLaMA 的模型结构
1
3. RoPE 位置嵌入

48
2.3. LLaMA 的模型结构
1
4. 模型整体框架
基于上述模型和网络结构可以实现解码器层,根据自回归方式利用训练语料进行模型训练的过程与 2.3.4 节介绍的过程基本一致。不
同规模的 LLaMA 模型使用的超参数如表 2.1 所示。

49
2.3. LLaMA 的模型结构
1
4. 模型整体框架

50
2.3. 注意力机制优化
2
在 Transformer 结构中,自注意力机制的时间和存储复杂度与序列的长度呈平方的关系,因此占用了大量的计算设备内存并
消耗了大量的计算资源。如何优化自注意力机制的时空复杂度、增强计算效率是大语言模型面临的重要问题。
• 一些研究从近似注意力出发,旨在减少注意力计算和内存需求,提出了稀疏近似、低秩近似等方法。
• 也有一些研究从计算加速设备本身的特性出发,研究如何更好地利用硬件特性对 Transformer 中的注意力层进行高效计
算。
本节将分别介绍上述两类方法。

51
2.3. 注意力机制优化
2
1. 稀疏注意力机制
对一些训练好的 Transformer 结构中的注意力矩阵进行分析时发现,其中很多是稀疏的,因此可以通过限制 Query-
Key 对的数量来降低计算复杂度。这类方法称为稀疏注意力( SparseAttention )机制。可以将稀疏化方法进一步分成
基于位置的和基于内容信息的两类。
基于位置的稀疏注意力机制的基本类型如图 2.6 所示,主要包含如下五种类型:全局注意力( Global Attention )、
带状注意力( Band Attention )、膨胀注意力( Dilated Attention )、随机注意力( Random
Attention )、局部块注意力( Block Local Attention )。

52
2.3. 注意力机制优化
2
1. 稀疏注意力机制

53
2.3. 注意力机制优化
2
1. 稀疏注意力机制
现有的稀疏注意力机制,通常是基于上述五种基于位置的稀疏注意力机制的复合模式,图 2.7 给出了一些典型的稀疏注意力模型

54
2.3. 注意力机制优化
2
1. 稀疏注意力机制
基于内容的稀疏注意力机制根据输入数据创建稀疏注意力,其中一种很简单的方法是选择和给定查询( Query )有很高相似度的键
( Key )。
Routing Transformer[59] 采用 K-means 聚类方法,针对 Query 和 Key 进行聚类,类中心向量
集合为 ,其中 k 是类中心的个数。每个 Query 只与其处在相同簇( Cluster )下的 Key 进行交互。中
心向量采用滑动平均的方法进行更新:

55
2.3. 注意力机制优化
2
1. 稀疏注意力机制
Reformer[60] 则采用局部敏感哈希( Local-Sensitive Hashing , LSH )的方法为每个 Query
选择 Key-Value 对。其主要思想是使用 LSH 函数对 Query 和 Key 进行哈希计算,将它们划分到多个桶内,以
提升在同一个桶内的 Query 和 Key 参与交互的概率。假设 b 是桶的个数,给定一个大小为 [Dk, b/2] 的随机矩阵
R , LSH 函数的定义为:

如果 时, 才可以与相应的 Key-Value 对进行交互。

56
2.3. 注意力机制优化
2
2. FlashAttention
NVIDIA GPU 中 的 内 存 ( 显 存 ) 按 照 它 们 物 理 上 是 在
GPU 芯片内部还是板卡 RAM 存储芯片上,决定了它们的速
度、大小以及访问限制。 GPU 显存分为:
• 全局内存( Global memory )
• 本地内存( Local memory )
• 共享内存( Shared memory , SRAM )
• 寄存器内存( Register memory )
• 常量内存( Constant memory )
• 纹理内存( Texture memory )

57
2.3. 注意力机制优化
2
2. FlashAttention
全局内存和本地内存使用的高带宽显存( High Bandwidth Memory , HBM )位于板卡 RAM 存储芯片
上,该部分内存容量很大。全局内存是所有线程都可以访问,而本地内存则只能当前线程访问。 NVIDIA H100 中全局内存有
80GB 空间,其访问速度虽然可以达到 3.35TB/s ,但是如果全部线程同时访问全局内存时,其平均带宽仍然很低。
共享内存和寄存器位于 GPU 芯片上,因此容量很小,并且共享内存只有在同一个 GPU 线程块( Thread Block )内
的线程才可以共享访问,而寄存器仅限于同一个线程内部才能访问。 NVIDIA H100 中每个 GPU 线程块在流式多处理器
( Stream Multi-processor , SM )可以使用的共享存储容量仅有 228KB ,但是其速度非常快,远高于全
局内存的访问速度。

58
2.3. 注意力机制优化
2
2. FlashAttention
在本章第 2.2 节中介绍了自注意力机制的原理,在 GPU 中进行计算时,传统的方法还需要引入两个中间矩阵 S 和 P 并存储到
全局内存中。具体计算过程如下:

按照上述计算过程,需要首先从全局内存中读取矩阵 Q 和 K ,并将计算好的矩阵 S 再写入全局内存,之后再从全局内存中获取矩


阵 S ,计算 Softmax 得到矩阵 P 再写入全局内存,之后读取矩阵 P 和矩阵 V ,计算得到矩阵 O 。
这样的过程会极大占用显存的带宽。在自注意力机制中,计算速度比内存速度快得多,因此计算效率越来越多地受到全局内存访问的瓶颈。

59
2.3. 注意力机制优化
2
2. FlashAttention
FlashAttention 就是通过利用 GPU 硬件中的特殊设计,针对全局内存和共享存储的 I/O 速度的不同,尽可能地避免
HBM 中读取或写入注意力矩阵。
FlashAttention 目标是尽可能高效地使用 SRAM 来加快计算速度,避免从全局内存中读取和写入注意力矩阵。达成该目标
需要能做到在不访问整个输入的情况下计算 Softmax 函数,并且后向传播中不能存储中间注意力矩阵。

60
2.3. 注意力机制优化
2
2. FlashAttention
FlashAttention 就提出了不使用中间注意力矩阵,通过存储归一化因子来减少全局内存消耗的方法。
FlashAttention 算法并没有将 S 、 P 整体写入全局内存,而是通过分块写入,存储前向传递的 Softmax 归一化因
子,在后向传播中快速重新计算片上注意力,这比从全局内存中读取中间注意力矩阵的标准方法更快。
虽然大幅减少了全局内存的访问量,重新计算也导致 FLOP 增加,但其运行的速度更快且使用的内存更少。

61
2.3. 注意力机制优化
2
2. FlashAttention

62
2.3. 注意力机制优化
2
3. 多查询注意力
多查询注意力( Multi Query Attention )是多头注意力的一种变体。其特点是,在多查询注意力中不同的注意力头
共享一个键和值的集合,每个头只单独保留了一份查询参数,因此键和值的矩阵仅有一份,这大幅减少了显存占用,使其更高效。
由于多查询注意力改变了注意力机制的结构,因此模型通常需要从训练开始就支持多查询注意力。文献 [63] 的研究结果表明,可以通过
对已经训练好的模型进行微调来添加多查询注意力支持,仅需要约 5% 的原始训练数据量就可以达到不错的效果。
包括 Falcon[64] 、 SantaCoder[65] 、 StarCoder[66] 在内的很多模型都采用了多查询注意力机制。

63
2.3. 注意力机制优化
2
3. 多查询注意力

64
目录
Content
s

2.1 Transformer 结构

2.2 生成式预训练语言模型 GPT

2.3 大语言模型结构

2.4 实践思考

65
2.4 实践思考

预 训 练 语 言 模 型 除 了 本 章 介 绍 的 自 回 归 ( Autoregressive ) 模 型 GPT , 还 有 自 编 码 模 型
( Autoencoding ) BERT[1] 、编 - 解码( Encoder-Decoder )模型 BART[67] ,以及融合
上 述 三 种 方 法 的 自 回 归 填 空 ( Autoregressive Blank Infilling ) 模 型 GLM ( General
Language Model ) [68] 。
ChatGPT 的出现,使得目前几乎所有大语言模型神经网络结构趋同,采用自回归模型,基础架构与 GPT-2 相同,但在归一
化函数、激活函数及位置编码等细节方面有所不同。归一化函数和激活函数的选择对于大语言模型的收敛性具有一定影响,因此在
LLaMA 模型被提出之后,大多数开源模型沿用了 RMSNorm 和 SwiGLU 的组合方式。
由于 LLaMA 模型所采用的位置编码方法 RoPE 的外推能力不好,因此后续一些研究采用了 ALiBi[69] 等具有更好外
推能力的位置编码方法,使模型具有更长的上下文建模能力。

66
2.4 实践思考

大语言模型训练需要使用大量计算资源,其中计算设备的内存是影响计算效率的最重要因素之一,因此注意力机制改进算法也是在模型架
构层的研究热点。本章介绍了注意力机制优化的典型方法,在这些方法的基础上,有很多研究陆续开展,如 FlashAttention-
2[70] 等。如何更有效地利用计算设备内存,以及如何使内存消耗与模型上下文近似线性扩展,都是重要的研究方向。
本章介绍的方法都围绕 GPT-3 架构,而 OpenAI 发布的 GPT-4 相较于 ChatGPT 有显著的性能提
升。 GPT-4 的神经网络模型结构和参数规模尚未公开,由于模型参数庞大且计算成本高昂。

67
2.4 实践思考

有未经证实的消息称, GPT-4 采用了专家混合模型( Mixture of Experts , MoE )架构,总共有 1.8


万亿个参数。 GPT-4 使用了 16 个专家,每个专家的参数约为 1 110 亿,每次前向传递使用 2 个专家进行路由,同时
还有 550 亿个共享参数用于注意力机制。 MoE 架构在减少推理所需的参数量的同时,仍然可以使用更大规模的模型参数。

68
本章小结
哎呀小小草
专业设计

语言模型目标是建模自然语言的概率分布,在自然语言处理研究中具有重要的作用,是自然语言处理基础任务之一。从 2020 年

2015
OpenAI 发布 GPT-3 开始,大语言模型研究也逐渐深入。虽然大语言模型的参数量巨大,通过有监督微调和强化学习能
够完成非常多的任务,但是其基础理论也仍然离不开对语言的建模。

本章介绍了 Transformer 结构,并在此基础上介绍生成式预训练语言模型 GPT 、大语言模型网络结构和注意力机制优


哎呀小小草演示设计
化以及相关实践。

69

You might also like