大模型基础--从传统序列模型到基于Transformer的预训练模型(2)

举报
剑指南天 发表于 2026/04/19 20:13:03 2026/04/19
【摘要】 研究NLP模型的发展历史,理解大模型基础架构的设计

1.2.5 Seq2Seq(Sequence to Sequence,序列到序列)

Seq2Seq 模型由一个编码器(Encoder)和一个解码器(Decoder)构成。编码器负责提取输入序列的语义信息,并将其压缩为一个固定长度的上下文向量(Context Vector);解码器则基于该向量,逐步生成目标序列。

编码器主要由一个循环神经网络(RNN/LSTM/GRU)构成,其任务是将输入序列的语义信息提取并压缩为一个上下文向量。

解码器主要也由一个循环神经网络(RNN / LSTM / GRU)构成,其任务是基于编码器传递的上下文向量,逐步生成目标序列。

优点:第一编码器和解码器的范式成为一种标准的模型范式。第二再次证明向量在高维空间中表达语义上的能力(Word2Vec中有证明这一点)。第三自回归生成(Autoregressive Generation)方法也成为标准的模型范式。

不足的点:使用的(RNN / LSTM / GRU)作为核心编解码工具,天然具有这些模型的不足。最主要就是导致context vector对语义表达缺失。

1.2.6 Attention机制

为了处理循环神经网络(RNN / LSTM / GRU)表达语义的不足,研究者引入了 Attention 机制。其核心思想是:解码器在生成目标序列的每一步时,不再依赖于一个静态的上下文向量,而是根据当前的解码状态,动态地从编码器各时间步的隐藏状态中选取最相关的信息,以辅助当前步的生成。这种机制赋予模型“对齐”能力,使其能够自动判断源句中哪些位置对当前的目标词更为重要,从而有效缓解信息瓶颈问题,提升生成质量与表达能力

Attention 机制的核心计算:

相关性计算:在目标序列生成的每一步,解码器都会计算当前时间步的隐藏状态与编码器各个时间步输出之间的相关性。这些相关性衡量了源句中每个位置对当前生成内容的重要程度,从而决定模型应将多少注意力分配给不同的源位置。相关性的计算依赖于特定的函数,通常被称为注意力评分函数(attention scoring function)。

点积评分(Dot):点积评分是注意力机制中最简单、最直接的一种相关性评分方法。它通过计算解码器当前时间步的隐藏状态与编码器每个时间步的隐藏状态的点积,来衡量二者之间的相关性。其含义可以理解为:如果两个向量方向越一致(即越接近),它们的点积就越大,表示相关性越强,模型应当给予更多注意力。

通用点积评分:在点积的基础上引入了一个可学习的权重矩阵W,用于先对编码器隐藏状态进行线性变换,再与解码器隐藏状态进行点积。该方法的设计动机主要是为了解决编码器和解码器隐藏状态维度不一致的问题。通过引入权重矩阵W,不仅实现了维度对齐,也增强了模型对编码器输出的适应能力,从而提升了注意力机制的表达能力。

拼接评分:是一种表达能力更强的相关性评分方法。它的核心思想是:将解码器当前隐藏状态与编码器每个时间步的隐藏状态拼接为一个长向量,经过线性变换和非线性激活,最后用一个向量进行投影,得到最终打分值。相比前两种方法,Concat 评分方式在建模能力上更强。它不仅考虑了两个状态的数值关系,还引入非线性变换,能够捕捉更复杂的交互模式,更适合处理对齐关系复杂的任务场景。

注意力权重计算:得到所有源位置的注意力评分后,使用 Softmax 函数将其归一化为概率分布,作为注意力权重。得分越高的位置,其对应的权重越大,代表模型在当前生成中更关注该位置的信息。

上下文向量计算:将所有编码器输出按照注意力权重进行加权求和,得到一个上下文向量。这个向量就表示当前时间步,模型从源句中提取出的关键信息。

优点:改进循环神经网络(RNN / LSTM / GRU)中历史时间步对最后时间步贡献权重分步不合理的问题。使用attention机制,通过训练权重方法,改进了权重分布不合理的问题。

不足点:循环神经网络(RNN / LSTM / GRU)依然有三个问题需要解决。第一时间步之间具有强依赖性,无法并行计算。第二虽然梯度消失问题,但并不能完全消除。当序列极长时,模型依然难以有效捕捉非常远距离的依赖关系。第三点ht生成的核心公式,就会看出ht是x1和ht-1训练出来的,和xt之后词(xt+1xt+2...xt+n)无关.也就是说每个时间步的h都会丢失两部分信息,一部分丢失未来词的信息,另一部分丢失的信息是过去时间步h丢失的信息。背离了“分布假设”原理。

1.2.7 Transformer模型

为了解决这些问题,Google在2017 年发表一篇论文《Attention Is All You Need》,提出了一种全新的模型架构——Transformer。该模型完全摒弃了 RNN 结构,转而使用注意力机制直接建模序列中各位置之间的关系。通过这种方式,Transformer不仅显著提升了训练效率,也增强了模型对长距离依赖的建模能力。

前馈神经网络层:前馈神经网络(Feed-Forward Network,简称 FFN)是 Transformer 编码器中每个子层的重要组成部分,紧接在多头注意力子层之后。它通过对每个位置的表示进行逐位置非线性的特征变换,进一步提升模型对复杂语义的建模能力。

自注意层:自注意力机制(Self-Attention)是 Transformer 编码器的核心结构之一,它的作用是在序列内部建立各位置之间的依赖关系,使模型能够为每个位置生成融合全局信息的表示。之所以被称为“自”注意力,是因为模型在计算每个位置的表示时,所参考的信息全部来自同一个输入序列本身。解决了循环神经网络信息信息丢失的问题,并且对词和全局信息的关系进行了建模。

自注意力的计算过程:

(1)生成Query、Key、Value向量

三个向量的计算公式如下:

(2)计算位置间相关性

评分函数采用向量点积形式。由于在高维空间中,点积的数值可能过大,会影响 softmax 的稳定性,因此在实际计算中对结果进行了缩放。最终的评分函数为:

其中是key向量的维度,用于缩放点积的幅度。这个分数越大,表示第 i 个位置越应该关注第 j 个位置的信息。对于整个序列,可以通过矩阵运算一次性计算所有位置之间的评分,计算公式如下图所示:

(3)计算注意力权重

在得到每个位置与所有位置之间的相关性评分后,模型会使用 softmax 函数进行归一化,确保每个位置对所有位置的关注程度之和为 1,从而形成一个有效的加权分布。

(4)加权汇总生成输出,统一了不同词对语义表达能力的量纲

总的来说公式:

从Q、K、V的应用,可以推测出参数的学习目标分别是表达更多词独立的语义,表达更多整体语义和均衡部分和整体的语义表达。

多头注意力机制(Multi-Head Attention):一个句子往往同时包含多种类型的语义关系,通过多组独立的 Query、Key、Value 投影,让不同注意力头分别专注于不同的语义关系,最后将各头的输出拼接融合。

残差连接与层归一化:

残差连接(Residual Connection)用于缓解深层神经网络中的梯度消失问题。其核心思想是:将子层的输入直接与其输出相加,形成一条跨越子层的“捷径”,其数学形式为:

层归一化(Layer Normalization,简称 LayerNorm)每个子层在残差连接之后都会进行层归一化。它的主要作用是规范输入序列中每个token的特征分布(某个token的表示可能在不同维度上有较大数值差异),提升模型训练的稳定性,抑制梯度爆炸。

位置编码(Positional Encoding):为每个词引入一个表示其位置信息的向量,并将其与对应的词向量相加,作为模型输入的一部分。这样一来,模型在处理每个词时,既能获取词义信息,也能感知其在句子中的位置,从而具备对基本语序的理解能力。

Transformer 使用了一种基于正弦(sin)和余弦(cos)函数的位置编码方式,具体定义如下:


Transformer提出的这种编码方式具备以下优势:所有值都在[−1,1]范围内,数值稳定;编码方式固定、可预计算,无需训练;相同位置的编码在不同句子中保持一致;编码之间具有数学规律,便于模型在注意力机制中感知词语之间的相对位置关系。

Masked自注意力(Masked Self Attention):解码器在自注意力机制中引入了遮盖机制(Mask)。该机制会在计算注意力时,阻止模型访问当前位置之后的词,只允许它依赖自身及前文的信息。这样,即使在并行训练时,模型也只能像逐词生成一样“看见”它应该看到的内容,从而保持训练与推理阶段的一致性。

Mask 机制的实现非常简单:只需将注意力得分矩阵中当前位置对其后续位置的评分设置为 −∞

编码器-解码器注意力的核心机制与前面讲过的自注意力机制完全一致,区别仅在于:Query 来自解码器当前的输入表示,即当前生成状态;Key和Value 来自编码器的输出表示,即整个源序列的上下文。

模型的训练:训练时,Transformer 将目标序列整体输入解码器,并在每个位置同时进行预测。为防止模型“看到”后面的词,破坏因果顺序,解码器在自注意力机子层中引入了 遮盖机制(Mask),限制每个位置只能关注它前面的词。这种机制让模型在结构上模拟逐词生成,但在实现上能充分利用并行计算,大幅提升训练效率。

模型推理:推理时,每一步都要重新输入整个已生成序列,模型需要基于全量前文重新计算注意力分布,决定下一个词的输出。整个过程必须顺序执行,无法并行。推理阶段,模型每一步都要重新输入当前已生成的全部词,通过自注意力机制建模上下文关系,预测下一个词。

优点:第一具备全局自注意力机制,能够有效建模长距离依赖信息。第二残差连接解决了模型梯度消失的问题。第三并行计算效率高,适合大规模训练。

1.2.8 预训练模型

Transformer 是预训练模型的主流基础架构。

1)解码器(Decoder-only)模型

仅使用Transformer解码器,代表模型为GPT(Generative Pre-trained Transformer),其由 OpenAI于2018年6月提出,论文题为《Improving Language Understanding by Generative Pre-Training》。GPT是第一个系统性提出“预训练 + 微调”范式的语言模型

GPT核心思想是通过大规模无监督语料进行生成式语言建模预训练,即训练模型根据左侧上下文预测下一个词,从而让模型学习自然语言的通用语法、语义和上下文依赖能力。完成预训练后,再通过微调适应具体的下游任务。

输入嵌入层(Text & Position Embedding):Text Embedding:将词或子词映射为向量;Position Embedding:提供词在序列中的位置信息。GPT不同于原始Transformer的一点在于:位置编码采用的是可学习的位置嵌入(learnable positional embedding)。这意味着每个位置对应一个可训练的向量,模型可以在训练过程中自动优化这些向量,而非使用不可训练的三角函数编码(如正弦/余弦函数)每个token的最终表示是词嵌入与位置嵌入的向量和,向量维度为 768。

解码器:解码器部分由12个结构相同的解码器层堆叠而成,每个解码器层只包含如下两个子层: 掩码多头自注意和前馈网络

输出层:根据任务不同,GPT模型的输出可以接入不同的任务头Text Prediction(文本预测)和 Task Classifier(任务分类器)

预训练:GPT 的预训练阶段采用生成式语言建模(Generative Language Modeling)作为训练目标,在大规模无监督文本上进行自监督学习。具体而言,模型的任务是基于已观察到的前文上下文,预测当前词的位置应出现的词,从而学习自然语言的统计规律与上下文依赖关系。这种自回归语言建模方式不依赖人工标注,训练样本可以直接从原始文本中自动构建,极大地降低了构建数据的成本。

微调:GPT的微调阶段是在完成无监督语言建模预训练之后,使用有监督的任务数据对模型进行进一步训练,使其适应具体的下游任务。微调的核心思路是:在保留预训练语言建模能力的基础上,利用标注数据对整个模型进行端到端优化,从而实现知识迁移。具体实践中,GPT采用了如下两个关键措施:

添加任务输出层,在预训练模型顶部引入一个线性输出层(Linear Head),用于将 GPT 的隐藏状态映射为下游任务所需的标签或输出。

统一输入格式设计,GPT 作为自回归语言模型,其输入需为连续的文本序列。因此,在微调过程中需将各种下游任务转化为统一的文本输入格式。

下图展示了不同任务的微调逻辑:

以文本分类任务为例,假设我们有一个带标注的微调数据集如下:

首先,将每条评论转为 token 序列,并添加特殊标记 [Start] 与 [Extract],形成模型标准输入格式:

然后,将转换后的序列送入 GPT 模型。模型逐层处理后,输出每个位置的预测。我们提取序列中最后一个位置 [Extract] 对应的输出,再通过新添加的线性输出层完成分类预测,最中输出标签“0”或“1”。如下图所示:

通过这种方式,GPT 在保留预训练模型结构和参数的基础上,仅添加极少量新参数(如线性层),便可高效完成从语言建模到多种下游任务的迁移。此外,统一的输入格式设计进一步简化了多任务处理流程,使 GPT 能以一致的方式应对多种 NLP 任务,从而展现出强大的通用性与扩展性。

2)编码器(Encoder-only)模型

仅使用Transformer 编码器,代表模型为BERT(Bidirectional Encoder Representations from Transformers),由Google于2018年10月提出,论文题为《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》。

BERT 基于标准的 Transformer 编码器构建。BERT模型各部分的结构细节如下:

输入表示层:BERT 的每个输入 token 表示由Token Embedding,词本身的语义表示;Position Embedding,表示 token 在序列中的位置,为可学习向量;Segment Embedding,用于区分句子对任务中的两个句子,分别用一个可学习的向量表示。[CLS]:句首标志。[SEP]:句间分隔符,出现在每个句子末尾。

输出层:BERT 可以接入不同的任务输出头:Token-Level 任务(如命名实体识别):使用每个位置的输出表示;Sequence-Level 任务(如文本分类、句子对分类):使用特殊 token [CLS] 的输出表示,输入时被加在序列开头,专门用于汇总整个序列的语义信息。

预训练:BERT 的预训练阶段包含两个核心任务:掩码语言模型(Masked Language Modeling, MLM) 和 下一句预测(Next Sentence Prediction, NSP),分别用于学习词级语义和句间逻辑关系。

掩码语言模型:为实现双向语言建模,BERT 不采用传统的从左到右或从右到左预测方式,而是引入了掩码语言模型。在训练中,BERT 会随机遮盖输入序列中约 15% 的 token,并训练模型根据上下文预测被遮盖的词。

下一句预测:为了提升模型理解句间关系的能力,BERT 引入了“下一句预测”任务。训练时模型接收两个句子,判断第二句是否是第一句的真实后续句,其中50% 的训练样本是上下文中真实相邻的句子(正例);50% 是从语料中随机采样的非相邻句子(反例)。

在预训练时,BERT 同时优化 MLM 和 NSP 两个目标

微调: 在预训练完成后,BERT 可通过少量微调适配多种下游任务,如文本分类、句子匹配、问答系统、序列标注等。微调时,模型主体结构保持不变,仅在顶部添加一个任务特定的输出层,并使用下游任务数据对整个模型进行训练

a) 句子对分类任务

输入格式:[CLS] 句子1 [SEP] 句子2 [SEP]

输出方式:使用 [CLS] 的输出向量接入线性层进行分类,用于判断两个句子之间是否存在重复、蕴含、矛盾等关系。

(b) 单句分类任务

输入格式:[CLS] 句子 [SEP]

输出方式:同样使用 [CLS] 的输出向量,经过线性层用于情感极性判断、语法可接受性判断等。

(c) 问答任务

输入格式:[CLS] 问题 [SEP] 段落 [SEP]

输出方式: 模型不会使用 [CLS] 向量,而是对每个 token 分别预测其作为答案起始位置和结束位置的概率。最终根据得分确定答案在段落中的位置范围,从中直接抽取连续的答案文本。

(d) 序列标注任务

输入格式:[CLS] 句子 [SEP]

输出方式:对每个 token 的输出向量单独进行分类,例如判断是否为人名(B-PER)、地名(B-LOC)等。

3)编码器-解码器(Encoder-Decoder)模型

同时使用Transformer编码器和解码器,代表模型为T5(Text-to-Text Transfer Transformer),由Google于2019年10月提出,论文题为《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》。T5的核心思想是将所有自然语言处理任务统一表示为“文本到文本”的转换问题(Text-to-Text Framework),即无论输入是文本分类、问答还是翻译,模型的输入输出均是自然语言形式的字符串,如下图所示:

预训练:T5模型的预训练目标被称为Corrupted span prediction,具体过程如下:1)随机遮盖输入文本中的若干连续片段(span);2)将每个被遮盖的连续片段替换为一个个特殊token;3)令模型学习生成这些遮盖片段的内容,作为输出序列。

微调:T5微调阶段需要将所有任务转换为文本到文本的形式


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。