一、先看 Transformer 的整体结构

架构图:

image-20250422173313938

示例:输入:"The cat sat on the mat"--->输出:"猫坐在垫子上"

输入阶段:

  • 1)词嵌入(Word Embedding)

  • 将每个单词转换为512维向量,例如:

    • The→[0.2,-0.1,0.5,...]
    • cat→[0.7,0.3,-0.2,...]
  • 2)位置编码(Positional Encoding)

  • 使用正弦和余弦函数生成位置信息,目的是让模型感知单词的顺序,同时支持更长的序列推理

    ```shell 代码块 Position 1 (The): [sin(1/10000^(0/512)),cos(1/10000^(0/512)),,,]

    Position 2 (cat): [sin(2/10000^(0/512)),cos(2/10000^(0/512)),,,] ```

编码器层(Encoder6层堆叠):

  • 多头自注意力(Mult-Head Self-Attention)

  • 生成Q,K,V

    • 输入向量通过线性变换生成Query(Q)、Key(K)、Value(V),每个头的维度为64(总维度512=8头×64)

    image-20250422174431727

    • 例如:对"cat"的输入向量

    image-20250422174733652

  • 注意力计算

    • 以"cat"为例:计算其Q与其他单词的K的点积,得到注意力分数。

    • 分数经过Softmax归一化,例如:cat对sat的注意力权重较高(0.8),对The较低(0.1)。加权求和V向量,得到新的表示,包含上下文信息。

    image-20250422175005954

  • 残差连接与层归一化(Add&Norm)

  • 残差连接:将子层(如自注意力或FFN)的输入直接与输出相加,保留原始信息,缓解梯度消失问题。它就像“传送带”,直接传递原料(原始信息)。避免加工(子层处理)中的损耗。

    Output=LayerNorm(X+Attention(X))

  • 层归一化:对残差连接后的结果进行层归一化,调整数据分布,稳定训练过程,加速收敛。归一化就像是“质检员”,确保每道工序的输出规格统一。

  • 前馈神经网络(Feed Forward Network,FFN)

  • FFN通过两层线性变换(中间夹非线性激活函数,如ReLU)对特征进行非线性映射。它就像是"精加工车间”,对初步处理后的半成品进行深度塑形,提升成品质量。

  • 两层全连接层,激活函数为ReLU:

    FFN(x)=max(0,xW1+b1)W2+b2

    输出维度保持512,与输入一致

编码器层(Encoder6层堆叠):

  • 输入层(Output Embedding+Positional Encoding)

  • 输入为目标序列的右移版本(如翻译任务中的<SOS>猫坐在...),同样添加位置编码

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

  • 掩码(Mask):防止当前位置关注未来词。例如,生成第3个词时,只能关注前2个词,通过上三角矩阵屏蔽后续位置

  • 计算方式与Encoder的自注意力相同,但增加掩码操作:

    image-20250422183821912

  • 作用:处理目标序列的自注意力,确保当前位置仅关注已生成的序列部分(防止信息泄露)

编码器-解码器注意力(Encoder-Decoder Attention):

  • Q来自Decoder,K和V来自Encoder的输出C

例如,生成中文"猫"时,Decoder的Q会聚焦于Encoder中cat的编码向量 * 将Encoder的输出(Key/Value)与Decoder当前状态(Query)对齐,捕捉源序列与目标序列的关联,计算方式与自注意力相同。

前馈神经网络与残差连接

  • 结构与Encoder相同,通过两次残差连接和层归一化,生成最终解码结果