【大模型基础_毛玉仁】2.2 大语言模型架构概览
- 2.2 大语言模型架构概览
- 2.2.1 主流模型架构的类别
- 1)Encoder-only 架构
- 2)Encoder-Decoder 架构
- 3)Decoder-only 架构
- 2.2.2 模型架构的功能对比
- 1)注意力矩阵
- 2)适用任务
- 2.2.3 模型架构的历史演变
- 1)早期发展阶段--Encoder-only
- 2)中期发展阶段--Encoder-Decoder
- 3)后期发展阶段--Decoder-only
2.2 大语言模型架构概览
Transformer框架的问世代表着一个划时代的转折点。对并行计算的支持极大地加速了模型的训练过程。其自注意力(Self-Attention)机制提升了模型对序列数据的处理能力,在捕捉长距离依赖关系方面表现出色。
以 Transformer 框架为核心,演化出了三种经典架构:
-
Encoder-only架构;
-
Decoder-only 架构;
-
Encoder-Decoder 架构。
2.2.1 主流模型架构的类别
1)Encoder-only 架构
Encoder-only 架构仅选取了 Transformer 中的编码器(Encoder)部分,用于接收输入文本并生成与上下文相关的特征。
Encoder-only架构包含三个部分:
-
输入编码:包含分词、向量化以及添加位置编码。
-
特征编码:多个相同的编码模块(Encoder Block),每个编码模块包含自注意力模块(Self-Attention)和全连接前馈模块。
-
任务处理:针对任务需求专门设计。
图2.3: Encoder-only 架构。
Encoder-only 架构模型的预训练阶段和推理阶段在输入编码和特征编码部分是一致的,而任务处理部分则需根据任务的不同特性来进行定制化的设计。
(1)输入编码部分:
原始输入文本会被分词器(Tokenizer)拆解为Token序列,随后通过词表和词嵌入(Embedding)矩阵映射为向量序列,确保文本信息得以数字化表达。接着为了保留文本中单 词的顺序信息,每个向量序列会被赋予位置编码(PositionalEncoding)。
(2)特征编码部分:
先前得到的向量序列会依次通过一系列编码模块,这些模块通过自注意力机制和前馈网络进一步提取和深化文本特征。
(3)任务处理部分:
-
在预训练阶段,模型通常使用全连接层作为输出头,用于完成掩码预测等任务。
-
在下游任务适配阶段,输出头会根据具体任务需求进行定制。例如,对判别任务,只需添加分类器直接输出判别结果。但对生成任务,则需添加全连接层,逐个预测后续的Token。
但以这种形式来完成生成任务存在着诸多的限制,例如在每次生成新的Token时,都需要重新计算整个输入序列的表示,这增加了计算 成本,也可能导致生成的文本缺乏连贯性。
2)Encoder-Decoder 架构
为了弥补Encoder-only 架构在文本生成任务上的短板,Encoder-Decoder 架构在其基础上引入了一个解码器(Decoder),并采用交叉注意力机制来实现编码器与解码器之间的有效交互。
Encoder-Decoder 架构具体来说,编码器如Encoder-only 架构所示,解码器包含了:
-
输出编码:包含分词、向量化以及添加位置编码 三个过程,将原始输入文本转换化为带有位置信息的向量序列。
-
特征解码:与特征编码部分高度相似,包括掩码自注意力(MaskedSelf Attention)模块,交叉注意力模块和全连接前馈模块。掩码自注意力模块确保 模型只关注上文。交叉注意力模块则负责处理从编码模块向解码模块传递相关信息。
-
输出生成:由一个线性层以及一个Softmax层组成,负责将特征解码后的向量转换为词表上的概率分布,并从这个分布中采样得到最合适的 Token 作为输出。
图2.4: Encoder-Decoder 架构。
其中分词器和输出文本只在训练阶段存在,而实现 “自回归”的红色虚线只在推理阶段存在。
图2.4展示了Encoder-Decoder 架构的具体工作流程:
(1)在训练阶段:
-
样本中同时包含了输入和真实(GroundTruth)输出文本。
-
其中输入文本首先被输入编码部分转化为向量序列,接着在特征编码模块中被多个堆叠起来的编码模块进一步处理, 从而被转化为上下文表示。
-
而输出文本之前会被添加特殊的开始标记 [START],然后在输出编码部分被分词、词嵌入和位置编码处理后,并行输入到特征解码模块中。
-
接着解码模块使用TeacherForcing技术,在每轮预测时,使用真实输出文本中 的已知部分作为输入,并结合从最后一个编码块得到的上下文信息,来预测下一个 Token,计算预测的Token和真实Token之间的损失,通过反向传播更新模型参数。
(2)在推理阶段:
-
由于缺少了真实的输出文本,所以输出序列原始状态只有开始 标记 [START],也不再需要分词器。
-
模型需要通过自回归的方式,在每轮采样生成 Token 后,会将其拼接到输出序列中,用于下一轮预测。
-
这个过程循环进行,直到生成特定的结束标记 [end]或达到模型设定的最大输出长度。
-
在这一过程中,由于每轮的输入依赖于上一轮的采样结果,因此只能一步步地串行输出。
3)Decoder-only 架构
为了有效缩减模型的规模以及降低整体的计算复杂度,Decoder-only架构摒弃了Encoder-Decoder 架构中的编码器部分以及与编码器交互的交叉注意力模块。
这种架构利用“自回归”机制, 在给定上文的情况下,生成流畅且连贯的下文。
图2.5: Decoder-only 架构
Decoder-only 架构同样包含了三个部分,分别是输入编码部分、特征解码部 分以及输出生成部分。
Decoder-only架构的核心特点在于省略了每个编码模块中的交叉注意力子模块,这也是其与Encoder Decoder 架构中解码器部分的主要区别。
2.2.2 模型架构的功能对比
上述Encoder-only、Encoder-Decoder 和 Decoder-only 三种架构在注意力矩阵上有着显著区别。
1)注意力矩阵
注意力矩阵(Attention Matrix)是 Transformer 中的核心组件,用于计算输入序列中各个Token之间的依赖关系。
通过注意力机制,模型可以在处理当前Token 时,灵活地关注序列中其他Token所携带的信息。
如图所示,三种架构在注意力矩阵上有着显著差异。
图2.6: 三种架构的注意力矩阵
Encoder-only 架构:
-
注意力矩阵来自于自注意力模块,用于捕捉输入序列中各个Token之间的关系。
-
Encoder-only架构的注意力矩阵呈现出“完全”的注意力,即对于每个Token的理解都依赖于整个输入序列中的所有Token。体现了双向注意力机制。
-
例如,在将输入Token x_i 转换为上下文向量y_i的过程中,模型能够综合利用从x_1∼x_n的所 有输入信息,这就是所谓的双向注意力机制。在这种机制下,模型能同时利用前后文信息,深入理解复杂的语义联系和上下文依赖。
Encoder-Decoder 架构:
-
注意力矩阵较复杂,它结合了编码器的自注意力、解码器的掩码自注意力以及交叉注意力三种机制。
-
编码器的自注意力矩阵与 Encoder-only 架构类似,用于生成输入序列的全面上下文表示,呈现“完全”的注意力。
-
而解码器的掩码自注意力矩阵则呈现出“下三角”的注意力,确保在生成当 前Token时,模型只关注之前生成的Token。
-
此外,交叉注意力机制允许解码器始终能够动态地参考编码器生成的完整上下文表示,确保输出与输入序列高度相关 且连贯。
-
例如,在编码器将输入x_i转化为上下文向量时,可以利用从x_1∼x_n的所有输入信息;当解码器在生成Token y_i的时候,可以参考由x_1∼x_n转化得到的上下文向量以及先前生成的Token序列 y 1 ∼ y i − 1 y_1∼y_{i−1} y1∼yi−1的相关信息。
Decoder-only 架构:
-
注意力矩阵来自于掩码自注意力模块,其特点是呈现出“下三角”的注意力模式。
-
这意味着在预测当前Token时,模型只能依赖于已经 生成的历史Token信息,体现了单向注意力机制。
-
例如,在生成Token y_i的时候, 模型只能考虑先前 y 1 ∼ y i − 1 y_1∼y_{i−1} y1∼yi−1的信息,这样的设计确保了生成过程的顺序性和文本的连贯性。
2)适用任务
由于各自独特的模型设计以及注意力矩阵上的差异,在同等参数规模下,这三种架构的模型在适用任务上也都各有倾向。
Encoder-only 架构:
双向注意力机制允许模型在预测每个Token时都充分考虑序列中的前后文信息,捕捉丰富的语义和依赖关系。因此,Encoder-only架构的模型特别适合于自然语言理解(NaturalLanguageUnderstanding,NLU)任务,如情感分析或文本分类等判别任务。然而,由于缺少解码器组件,Encoder-only架 的模型无法直接生成所需目标序列,因此在自然语言生成任务(NaturalLanguage Generation, NLG)上可能表现不如专门设计的生成模型。
Encoder-Decode 架构:
在 Encoder-only 架构的基础上添加了解码器,使模型能够基于编码器输出的上下文表示逐步生成输出序列。这种编码器和解码器的结合,使得模型可以有效地处理复杂的输入条件,并生成相关且连贯的高质量内容。因此,Encoder-Decoder 架构的模型非常适合于处理各种复杂的有条件生成任务,例如机器翻译、文本摘要和问答系统等需要同时理解输入并生成相应输出的场景。但新添加解码器也同样带来了模型规模以及计算量庞大的问题。
Decoder-only 架构:
进一步删除了Encoder-Decoder 架构中的编码器部分,从而降低了模型本身的计算复杂度。这一架构的模型使用掩码(Mask)操作确保在每 个时间步生成当前Token时只能访问先前的Token,并通过自回归生成机制,从起 始Token 开始逐步生成文本。大规模预训练数据的加持使得Decoder-only架构的 模型能够生成高质量、连贯的文本,在自动故事生成、新闻文章生成此类不依赖 于特定的输入文本的无条件文本生成任务中表现出色。然而,在模型规模有限的 情况下(例如GPT-1以及GPT-2等模型),由于缺乏编码器提供的双向上下文信 息,Decoder-only 架构的模型在理解复杂输入数据时存在一定局限性,表现可能不如Encoder-Decoder 架构。
在不同的历史阶段,三种模型架构分别展现了自身的优势。随着模型规模以 及数据规模的显著增长,Decoder-only架构的模型逐渐占据上风,以其强大的任务泛化性能展现出成为“大一统”的架构的潜力。当前,以GPT-3、GPT-4等为代表的大型Decoder-only语言模型,已经发展出了与人类媲美甚至超越人类的记忆、推理以及执行复杂任务的能力。
2.2.3 模型架构的历史演变
随着时间的流逝,我们见证了上述三种架构的演变和流行趋势的更替。
1)早期发展阶段–Encoder-only
大语言模型的早期发展阶段(2018年左右),BERT和GPT-1分别作为Encoder-only和 Decoder-only 架构的代表几乎同时出现。但受限于当时的模型参数规模,BERT强大的上下文理解能力比GPT-1初阶的文本生成能力更为亮眼。使得Encoder-only架构到了更为广泛的探索和应用,而Decoder-only架构吸引得关注则相对关注较少。
然而,随着用户对机器翻译等生成任务需求的增加,缺乏解码组件的Encoder-only 架构逐渐无法满足直接生成的需求,因而被逐渐“冷落”。
2)中期发展阶段–Encoder-Decoder
同时,2019年末诞生了 一众Encoder-Decoder 架构的模型,由于其能够有效处理序列到序列(SequencetoSequence)的生成任务,逐渐成为主流。
到了2019年末,随着算力资源的急速发展,Decoder-only 架构下的模型参数量急剧扩充,文本生成能力大幅提升。
3)后期发展阶段–Decoder-only
自2021 年之后,在GPT-3等模型的推动下,Decoder-only架构开始占据主流,甚至逐渐主导了大语言模型的发展。
.
Encoder-only 架构:生成能力则不尽如人意。缺少专门用于生成输出的组件。
Encoder-Decoder架构:模型参数规模更为庞大,显著增加的计算复杂度。沉重的计算负担。
Decoder-only架构:计减少了模型的参数量和计算需求。
.
其他参考:【大模型基础_毛玉仁】系列文章
声明:资源可能存在第三方来源,若有侵权请联系删除!