一.为什么会出现Transformer模型?

Transformer的横空出世,就像是为AI领域注入了一剂强心针。它完全摒弃了RNN结构,转而使用自注意力机制直接建模序列中各位置之间的关系,完美解决了前辈们在计算效率长程建模上的核心缺陷,为之后整个生成式AI的繁荣铺平了道路。

Transformer 的提出对自然语言处理产生了深远影响。在机器翻译任务中,它首次超越了RNN 模型的表现,并成为后续各类预训练语言模型的基础框架,如 BERT、GPT等。这些模型推动NLP进入了“预训练+微调”的新时代,极大地提升了模型在多种任务上的通用性与性能。如今,Transformer 架构不仅广泛应用于NLP,还扩展至语音识别、图像处理、代码生成等多个领域,成为现代深度学习中最具代表性的通用模型之一。

✅ Transformer解决了哪些核心问题?

二.Transformer模型结构详解

2.1核心思想

        在Seq2Seq模型中,注意力机制的引入显著增强了模型的表达能力。它允许解码器在生成每一个目标词时,根据当前解码状态动态选择源序列中最相关的位置,并据此融合信息。这一机制有效缓解了将整句信息压缩为固定向量所带来的信息瓶颈,显著提升了翻译等任务中的建模效果。
        进一步分析可以发现,注意力机制不仅是信息提取的工具,其本质是在每一个目标位置上,显式建模该位置与源序列中各位置之间的依赖关系。在Seq2Seq模型中,注意力机制与循环神经网络(RNN)在功能上具有等价性,即两者都是为了建模序列中不同位置之间的依赖关系。既然注意力机制已经具备建立这种联系的能力,它理论上就可以替代RNN。而相比RNN必须顺序计算且难以捕捉长距离依赖,注意力机制不仅支持高效的并行计算,还能让任意位置之间直接建立关联,因此在效率和效果上都更具优势,这也解释了为何以自注意力为核心的Transformer能够最终取代RNN架构。

传统基于RNN的attention结构理解:


   

改进全是attention结构理解:

更能体现无需顺序计算的并行处理优势!

    注意:上述结构不是标准的结构,只是帮助你更好的理解Transformer模型!!!!

2.2整体结构

        Transformer 的整体结构延续了Seq2Seq模型中“编码器-解码器”的设计理念,其中,编码器(Encoder)负责对输入序列进行理解和表示,而解码器(Decoder)则根据编码器的输出逐步生成目标序列。
        与基于RNN 的 Seq2Seq模型一样,Transformer 的解码器采用自回归方式生成目标序列。(运行阶段才能并行计算,预测阶段还是得一个Token 一个Token 生成的)(Token(词元)是模型处理文本的最小单位。)不同之处在于,每一步的输入是此前已生成的全部词,模型会输出一个与输入长度相同的序列,但我们只取最后一个位置的结果作为当前预测。这个过程不断重复,直到生成结束标记<eos>。

        所以,Transformer 在预测时就像在玩一个超高智商的拼字游戏:每次只看已经写好的部分,然后填上最合理的下一个片段(Token),再把新片段接在后面,如此循环往复。

        此外,Transformer 的编码器和解码器模块分别由多个结构相同的层堆叠而成。通过层层堆叠,模型能够逐步提取更深层次的语义特征,从而增强对复杂语言现象的建模能力。标准的Transformer 模型通常包含6个编码器层和6个解码器层。

2.3编码器Encoder

2.3.1概述

        Transformer的编码器用于理解输入序列的语义信息,并生成每一个Token 的上下文表示。为解码器生成目标序列提供基础。

        编码器由多个结构相同的编码器层(Encoder Layer)堆叠而成。

        每个EncoderLayer的主要任务都是对其输入序列进行上下文建模,使每个位置的表示都能融合来自整个序列的全局信息。每个EncoderLayer都包含两个子层(sublayer),分别是自注意力子层(Self-Attention Sublayer)和前馈神经网络子层(Feed-Forward Sublayer)。

2.3.2(多头)自注意力层

        自注意力机制(Self-Attention)是Transformer 编码器的核心结构之一,它的作用是在序列内部建立各位置之间的依赖关系,使模型能够为每个位置生成融合全局信息的表示。

之所以被成为“自”注意力,是因为模型在计算每个位置的表示是,所参考的信息全部来自同一个输入序列本身,而不是来自另一个序列。

1)自注意力计算过程

①生成Query,Key,Value向量

        自注意力机制的第一步,是将输入序列中的每个位置表示映射为三个不同的向量,分别是查询(Query),键(Key)和值(Value)。

这些向量的作用如下:
Query:表示当前词的用于发起注意力匹配白勺向量;
Key:表示序列中每个位置的内容标识,用于与Query进行匹配;

Value:表示该位置携带的信息,用于加权汇总得到新的表示。
        自注意力的核心思想是:每个位置用自身的Query向量,与整个序列中所有位置的Key 向量进行相关性计算,从而得到注意力权重,并据此对对应的Value向量加权汇总,形成新的表示。

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

②计算位置间的相关性

        完成Query,Key,Value向量的生成后,模型会使用每个位置的Query向量与所有位置的Key向量进行相关性评分。

图中仅展示了x1对其他位置的相关性评分:

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

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

③计算注意力权重

        在得到每个位置与所有位置之间的相关性评分后,模型会使用 softmax 函数(主要作用是将一个任意实数向量转换成一个概率分布向量)进行归一化,确保每个位置对所有位置的关注程度之和为1,从而形成一个有效的加权分布。

图中仅展示了x1对其他位置的注意力权重:

对于整个序列,模型要做的是对之前得到的注意力评分矩阵的每一行进行softmax归一化。

④加权汇总生成输出
        最后,模型会根据注意力权重对所有位置的Value向量进行加权求和,得到每个位置融合全局信息后的新表示。

对于整个序列,同样可以通过矩阵运算一次性计算所有位置的输出,如下图所示:

综上所述,可得整个自注意力机制的完整的计算公式如下:

(2)多头注意力机制

        自注意力机制通过 Query、Key 和Value 向量计算每个位置与其他位置之间的依赖关系,使模型能够有效捕捉序列中的全局信息。
        然而,自然语言本身具有高度的语义复杂性,一个句子往往同时包含多种类型的语义关系。例如,句子“那只动物没有过马路,因为它太累了”中就涉及多个层面的语言关系:

  • “它”指代“那只动物”,属于跨句的代指关系;
  • “因为”连接前后两个分句,体现语义上的因果逻辑;M
  • “过马路”构成动词短语,属于固定的动宾结构。

        要准确理解这类句子,模型需要同时识别并建模多种层次和类型的依赖关系。但这些信息很难通过单一视角或一套注意力机制完整捕捉。

        为此,Transformer 引入了多头注意力机制(Multi-Head Attention)。其核心思想是通过多组独立的Query、Key、Value 投影,让不同注意力头分别专注于不同的语义关系,最后将各头的输出拼接融合。

多头注意力的计算过程如下:

①分别计算各头注意力

每个Self-Attention Head独立计算一套注意力输出。

②合并多头注意力

多个输出矩阵按维度拼接,再乘以W0得到最终多头注意力的输出。

原始具有8头注意力!!!

2.3.3前馈神经网络层

  • 前馈:信息只向前流动,没有循环或反馈。

  • 网络:由多个层次的神经元相互连接而成。

       前馈神经网络的目标是通过一系列的简单变换,拟合出从输入到输出之间任意复杂的函数关系

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

一个标准的FFN子层包含2个线性变换和一个非线性激活函数,中间通常使用ReLU激活。其计算公式如下:

2.3.4残差连接与层归一化

在Transformer的每个编码器层中,每个子层,包括自注意力子层(6个)前馈神经网络子层(6个),其输出都要经过残差连接(Residual Connection)和层归一化(Layer Normalization)处理。这两者是深层神经网络中常用的结构,用于缓解模型训练中的梯度消失、收敛困难等问题,对于Transformer能够堆叠多层至关重要。

(1)残差连接
        残差连接(ResidualConnection,也称“跳跃连接”或“捷径连接”)最初在计算机视觉领域被提出,用于缓解深层神经网络中的梯度消失问题。其核心思想是:
        将子层的输入直接与其输出相加,形成一条跨越子层的“捷径”,其数学形式为:
                                        y = x +  SubLayer(x)
具体计算过程如图所示:

        残差连接确保反向传播时,梯度至少有1条稳定通路可回传,是深层网络可稳定训练的关键结构。

(2)层归一化

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

该操作会将每个token的向量调整为均值为0、方差为1的规范分布,具体效果如下图所示:

具体的计算公式如下:
        假如某个token的特征向量为x=[x1,x2,x3,x4,....x2],

①均值计算:
        计算该向量在所有特征维度上的平均值

其中d为特征维度(向量长度)

②标准差计算

        计算向量各维度的标准差

③标准化变换

        将每个特征值转换为均值为0,方差为1 的标准正态分布:

为一个小的常数,防止出现除以0的情况。

④缩放和平移

        让模型可以学习在归一化后的基础上进行适当的调整,保证归一化不会限制模型的表示能力。

2.3.5位置编码

        Transformer 模型完全摒弃了RNN 结构,意味着它不再按顺序处理序列,而是可以并行处理所有位置的信息。尽管这带来了显著的计算效率提升,却也引发了一个问题:Transformer 无法像 RNN 那样天然地捕捉词语之间的顺序关系。换句话说,在没有额外机制的情况下,Transformer 无法区分“猫吃鱼”和“鱼吃猫”这类语序不同但词汇相同的句子。
        为了解决这一问题,Transformer 引入了一个关键机制一一位置编码(PositionalEncoding)。该机制为每个词引入一个表示其位置信息的向量,并将其与对应的词向量相加,作为模型输入的一部分。这样一来,模型在处理每个词时,既能获取词义信息,也能感知其在句子中的位置,从而具备对基本语序的理解能力。

位置编码最直接的方式是使用绝对位置编码号来表示每个词的位置,例如第一个词用 0,第二个词用 1,依此类推:

这样做虽然简单,但有一个明显的问题,越靠后的 token 位置编码越大,若直接与词向量相加,会造成数值倾斜,让模型更关注位置,而忽视词义。

为缓解这一问题,可以考虑将位置编号归一化为[0,1]区间,例如用表示位置,其中T为句子长度。

这种方式虽然使数值范围更平稳,但也引入了一个严重的问题:

        相同位置的词在不同长度句子中的位置编码不再一致。        

        

        序列中的每个位置pos 对应一个长度为的位置编码向量,该向量的偶数维度通过正弦函数生成,奇数维度通过余弦函数生成,如下图所示:

        为了帮助更直观的理解正余弦位置编码的构造和变化规律,可以使用以下可视化工具进行交互体验:

Transformer提出的这种编码方式不依赖任何可学习参数,数值稳定,并具备以下优势:所有值都在

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

2.3.6小结

Transformer编码器通过多个结构一致的编码器层堆叠构成,每一层由2个核心子层组成:

最后,为弥补模型并行结构下缺乏顺序感的缺陷,Transformer使用基于正余弦函数的位置编码来提供序列中每个词的位置信息。

编码器的完整结构如下图所示:

Transformer的编码器负责将输入序列(如一个句子)转化为富含上下文语义的表示序列。它并非单一结构,而是由多个结构相同(但不共享权重)的编码器层堆叠而成。以论文原文为例,通常堆叠 N=6 层。

每一个编码器层又可以细分为两个子层,结构如下:

  1. 第一子层(自注意力层)多头自注意力机制(Multi-Head Self-Attention) + 残差连接(Residual Connection) + 层归一化(Layer Normalization)

  2. 第二子层(前馈网络层)前馈全连接网络(Feed-Forward Network, FFN) + 残差连接(Residual Connection) + 层归一化(Layer Normalization)

编码器的工作过程是一个层层提炼、增强表示的过程:输入的向量先经过多头自注意力机制,捕捉序列内部的词与词之间的依赖关系;输出的结果再经过前馈网络,进行非线性的特征变换。每个子层后的"残差连接"和"层归一化"则像"稳定器",确保深层网络的训练既平稳又高效。

🔑 编码器的五大核心知识点

理解编码器的工作机制,关键在于掌握以下五个核心组件:

  • 输入嵌入(Input Embedding)与位置编码(Positional Encoding):这是数据进入编码器前的第一步。

    • 词向量:将输入的每一个词(或子词)映射为一个固定维度的稠密向量(如 d_model=512)。

    • 位置编码:由于注意力机制本身无法感知词的先后顺序,必须额外注入位置信息。Transformer 巧妙地使用了正弦和余弦函数来生成位置向量,并将其加到词向量上。这样做的好处是,模型不仅能知道词的绝对位置,还能轻松学习到词与词之间的相对位置关系

  • 多头自注意力机制(Multi-Head Self-Attention):这是编码器的核心,也是其得名"Transformer"的原因。

    • 核心思想:让序列中的每个词,都与序列中的所有词(包括它自己)进行交互,计算彼此的相关性(注意力权重),然后以此为基础,聚合所有词的信息来更新当前词的表示。这就好比理解"它"这个词时,模型需要关注句子中所有可能的名词,来确定"它"到底指代什么。

    • 计算公式Attention(Q,K,V) = softmax(QK^T / √d_k) V。这里,Q(查询)、K(键)、V(值)均由输入向量通过线性变换得到。除以 √d_k 是为了防止内积过大,稳定梯度。

    • "多头"的意义:与其只做一次注意力计算,不如将模型拆分成 h 个"头"(如 h=8),让每个头在不同的子空间里独立学习,捕捉不同层面、不同类型的依赖关系(例如,一个头关注语法结构,另一个头关注指代关系)。最后将所有头的输出拼接起来,得到更丰富、更全面的特征表示。

  • 前馈全连接网络(Feed-Forward Network, FFN):这是一个逐位置(position-wise)的全连接网络,对序列中的每一个词向量独立且相同地进行变换。

    • 结构:通常包含两个线性变换层,中间使用 ReLU 激活函数。公式为 FFN(x) = max(0, xW₁ + b₁)W₂ + b₂

    • 作用:自注意力层主要负责信息的"聚合"与"交流",而 FFN 则负责对聚合后的信息进行更深层次的加工和抽象,增强了模型的拟合能力。通常,中间层的维度会比输入输出维度大(如从 512 升维到 d_ff=2048 再降回 512),这有助于发现更复杂的特征。

  • 残差连接(Residual Connection)与层归一化(Layer Normalization):这两个技巧是训练深层神经网络的"护航编队",在每个子层(注意力层和FFN层)后都会出现。

    • 残差连接:将子层的输入与输出直接相加(输出 = 输入 + 子层(输入))。这能有效缓解深层网络中的梯度消失问题,让梯度可以"抄近道"直接流过,使训练数十层的网络成为可能。

    • 层归一化:对每个样本的隐藏层输出进行归一化处理,使其均值为0、方差为1。这可以稳定训练过程,加快模型收敛速度,并起到一定的正则化作用。

  • 双向注意力(Bidirectional Attention):这是编码器与解码器的一个关键区别。

    • 在编码器中,自注意力机制是双向的,这意味着模型在为某个词生成新表示时,可以同时看到它左侧和右侧的所有词。这使其能够完美地融合上下文信息,因此特别适合需要深度理解句子整体含义的任务,如文本分类、情感分析、实体识别等。BERT 这类著名的"仅编码器"模型正是利用了这一特性。

2.4解码器Decoder

2.4.1概述

Transformer解码器的主要功能使:根据编码器的输出,逐步生成目标序列中的每一个词。其生成方式采用自回归机制(autoregressiv):每一步的输入由此前已生成的所有词组成,模型将输出一个与当前输入长度相同的序歹表示。我们只取最后一个位置的输出,作为当前步的预测结果。这一过程会不断重复,直至生成特殊的结束标记<eos>,表示序列生成完成。

编码器也由多个结构相同的解码器层堆叠组成。

每一个Decoder Layer都包含三个子层,分别是Masked自注意力子层、编码器-解码器注意力子层(Encoder-Decoder Attention)和前馈神经网路子层(Feed-Forward Network)。

各层作用如下:
        Masked 自注意力子层 (Masked Self Attention)
        用于建模当前位置与前文词之间的依赖关系。为了在训练时模拟逐词生成的过程,引入遮盖机制(Mask),限制每个位置只能关注它前面的词。

        强制它只能看到句子中它前面的词(即已经生成过的词),而不能看到它后面的词(即未来的词)。这是确保Transformer在生成文本时符合因果逻辑的关键。

       编码器-解码器注意力子层(Encoder-Decoder Attention)
        用于建模当前解码位置与源序列各位置之间的依赖关系。通过注意力机制,模型能够根据当前状态从编码器的输出中提取相关上下文信息(相当于Seq2Seq模型中的 Attention机制)。

        这个子层是连接Transformer的编码器和解码器两座大山的桥梁。如果说掩码自注意力是确保解码器关注自己已经生成的内容,那么这个子层的作用就是让解码器学会关注原始的输入序列


        前馈神经网络子层(Feed-ForwardNetwork)

        与编码器中结构完全一致,对每个位置的表示进行非线性变换,增强模型的表达能力。
每个子层后也都配有残差连接与层归一化(LayerNormalization),结构设计与编码器保持一致,确保训练的稳定性和效率。

        如果说注意力机制的作用是聚合信息(让序列中的各个位置相互交流,从整个序列中收集相关信息),那么前馈神经网络的作用就是对聚合后的信息进行独立的、深层的加工

        每个子层后也都配有残差连接与层归一化,结构设计与编码器保持一致,确保训练的的稳定性和效率。

此外,解码器在输入端同样需要加入位置编码(Position Encoding),用于提供序列中的位置信息,其计算方式与编码器中的相同。

在输出端,解码器的隐藏向量会送入一个线性变换层(Linear),映射为词表大小的向量,并通过Softmax生成一个概率分布,用于预测当前应输出的词。

2.4.2Masked自注意力子层

        该子层的主要作用是:建模目标序列中当前位置与前文之间的依赖关系,为当前词的生I成提供上下文语义支持。
        由于Transformer 不具备像 RNN那样的隐藏状态传递机制,无法在序列生成过程中保留上下文信息,因此在生成每一个词时,必须将此前已生成的所有词作为输入,通过自注意力机制重新建模上下文关系,以预测下一个词。
        此外,从结构上看,Transformer编解码器都具有一个典型特性:输入多少个词,就输出多少个表示。需要注意的是,在推理阶段,我们只使用解码器最后一个位置的输出作为当前步的预测结果,如下图所示:

如果训练阶段也完全按照推理流程进行,就必须将每个目标序列拆分成多个训练样本,每个样本输入一段前文,只预测一个词。如下图所示:

这种方式虽然逻辑合理,但训练效率极低,完全无法利用Transformer并行计算的优势。

为提升效率,Transformer采用并行训练策略:一次性输入完整目标序列,同时预测每个位置的词。如下图所示:

但如果不加限制,这种方式会让模型在预测每个位置时“看到”后面的词,即提前访问未来信息,破坏生成任务的因果结构,如下图所示:

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

这个掩码主要是在并行训练的时候作用很大,推理的时候数据本身也没有后面的信息!!

Mask 机制的实现非常简单:只需将注意力得分矩阵中当前位置对其后续位置的评分设置为负无穷,如下图所示:

这样,在经过softmax 运算后,这些位置的权重会趋近于0。最终在加权求和时,来自我i来位置的信息几乎不会参与计算,从而实现了  “当前词只能看到它前面词”  的约束,如下图所示:

2.4.3编码器-解码器注意力层

        该子层的主要作用是:建模当前解码位置与源语言序列中各位置之间的依赖关系,帮助模型在生成目标词时有效地参考输入内容,相当于Seq2Seq模型中的注意力机制。

        编码器-解码器注意力的核心机制与前面讲过的自注意力机制完全一致,区别仅在于:

        Query 来自解码器当前的输入表示,即当前生成状态;        

        Key和Value来自编码器的输出表示,即整个源序列的上下文。

        也就是说,当前生成位置使用自己的Query,去“询问”编码器输出中的哪些位置最相关。注意力机制会根据Query与所有Key 的相似度,为每个源位置分配一个权重,然后用这些权重对Value进行加权求和,得到当前生成词所需的上下文信息。

简而言之,在生成每个目标语言词时,让解码器能够从源语言句子中寻找最相关的信息

以机器翻译"猫在垫子上" -> "The cat is on the mat"为例:

  • 当解码器要生成"The"时,它可能需要关注源语言中的"猫"。

  • 当解码器生成"on"时,它需要强烈关注源语言中的"在...上"或者"上"。

  • 当解码器生成"mat"时,它需要关注"垫子"。

如果没有这个子层,解码器就只能根据已经生成的目标词(如"The cat is")来猜测下一个词,它无法知道源语言具体说了什么,这就像让一个人在不看原文的情况下做翻译,是不可能完成的。编码器-解码器注意力机制就是那个让解码器能够"看到"原文的眼睛。

2.4.4小结

与编码器专注于构建丰富的上下文表示不同,Transformer的解码器肩负着序列生成的使命。它的核心特点是自回归,即在生成下一个词时,只能看到已经生成的部分,不能窥探未来的信息。

解码器在结构上与编码器有相似之处,但更为复杂。它同样是由 N=6 个相同的层堆叠而成,但每个解码器层内部包含了三个子层,而非两个。

一个标准的解码器层结构如下(由底向上):

  1. 第一子层(掩码自注意力层)掩码多头自注意力机制 + 残差连接 + 层归一化。

  2. 第二子层(交叉注意力层)多头交叉注意力机制 + 残差连接 + 层归一化。

  3. 第三子层(前馈网络层)前馈全连接网络 + 残差连接 + 层归一化。

🔑 解码器的六大核心知识点

理解解码器的关键在于掌握它如何保证生成的自回归特性,以及如何利用编码器的输出。

  • 1. 输出嵌入(Output Embedding)与位置编码(Positional Encoding)

    • 过程:与编码器类似,解码器的输入(即已生成的目标序列,如"<start>"或"我")首先被映射为词向量,并加上位置编码,以引入序列的顺序信息。

    • 偏移一位(Shifted Right):训练时,一个重要的技巧是给解码器的输入加上起始符(如<sos>),并将整个目标序列向后偏移一位。这样做的目的是让解码器在预测第 *i* 个位置的词时,只能看到第 1 到 *i-1* 个位置的真实词,这与推理时逐个生成词的场景完全一致。

  • 2. 掩码多头自注意力机制(Masked Multi-Head Self-Attention)

    • 核心问题:在自回归生成中,预测第 *t* 个词时,模型不应该知道第 *t* 个词及其之后的真实词是什么。

    • 解决方案:这就是掩码的作用。在计算注意力权重时,通过一个上三角矩阵,将当前词与未来位置的注意力分数设置为 负无穷大-∞),这样经过Softmax后,这些位置的注意力权重就变成了 0。这就像给模型戴上了眼罩,让它只能"回头看",不能"向前看",从而确保了序列生成的自回归性质。

  • 3. 交叉注意力机制(Cross-Attention)

    • 功能:这是连接编码器和解码器的桥梁,也是整个Transformer模型协同工作的关键。它让解码器能够关注输入源序列(如源语言句子)的相关信息。

    • 工作机制:在这个子层中,查询(Q)来自解码器上一层的输出,而键(K)和值(V)则来自编码器的最终输出。因此,解码器的每个位置,都会根据自身当前的表示(Q),去和源序列的所有位置(K)计算注意力权重,然后聚合源序列的信息(V),从而找到当前生成步骤最应该关注的源语言部分。这正是机器翻译等任务中"注意力"的直观体现——在翻译某个词时,模型会聚焦于源句中的相关词。

  • 4. 解码器的自回归生成过程

    • 训练阶段:解码器并行接收整个目标序列(已偏移)作为输入。由于掩码机制的存在,模型可以一次性计算出所有位置的下一个词的概率分布,然后与真实标签计算损失。这种训练方式效率非常高,被称为教师强制

    • 推理阶段:这是一个循环过程。最开始,解码器只有一个起始符<sos>。它结合编码器的输出,预测出第一个词。然后,将这个预测出的词作为新的输入,送入解码器,结合编码器输出预测第二个词。如此循环,直到模型预测出终止符<eos>为止。可以看到,推理时,当前步的输入依赖于上一步的输出,是一个串行的过程。

  • 5. 编码器-解码器注意力机制中的双向性

    • 这是一个重要的辨析点:解码器内部的第一个自注意力子层是单向的(因为有掩码),但在第二个子层,即交叉注意力机制中,解码器在关注编码器输出时,是可以无限制地访问源序列的所有位置的。也就是说,对于源语言句子,解码器看到的是双向的全局信息。因此,在翻译任务中,解码器在生成每个目标词时,都能利用整个源句的完整信息。

  • 6. 最终输出与线性层+Softmax

    • 在最后一层解码器堆叠之后,模型会通过一个线性层(全连接层)将解码器输出的向量映射到一个与目标语言词汇表大小相同的维度上。

    • 随后,通过一个Softmax层将这些分数转换为概率分布。概率最大的那个词,就是模型在这一步预测出的词。

整体来看,Transfoemer  解码器通过合理设计得多层结构与注意力机制,既保持了训练效率,又满足了生成任务的因果约束,是现代自然语言生成模型的核心组件之一。

解码器与编码器的核心区别:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐