2. Transformer(书)

  • 大语言模型的核心目标是对自然语言的概率分布进行建模。
  • Transformer架构自2017年提出后成为自然语言处理和机器翻译领域的主流模型架构。

1. Transformer 结构

1.1 Transformer 结构简介

  • Transformer 架构:2017年由Google提出,用于机器翻译的神经网络模型。
  • 基本目标:将源语言(Source Language)转换为目标语言(Target Language)。
  • 主要思路:完全通过注意力机制完成序列对序列、目标语言序列全局依赖的建模,不依赖循环结构。

1.2 基本组成模块

  • 编码器(Encoder)解码器(Decoder)

    • 左右结构,分别对应编码和解码。
    • 每边包含多个Transformer Block(N层堆叠)。
    • 每个 Block 输入为向量序列 xii=1n,输出为 yjj=1m
  • Token 表示:输入序列(词/子词)xi,通过Transformer块,逐步编码为上下文相关的表示 ai,再由 Decoder 解码为输出 yj

  • 主要任务:实现从输入 xi到输出 yj语义抽象与转换

1.3. Transformer 关键机制

  • 多头注意力层(Multi-Head Attention)

    • 作用:并行运行多个独立注意力机制,从不同维度抽取输入序列信息。
    • 优势:可直接建模任何两单词之间的依赖关系,突破传统循环结构的限制,尤其擅长长距离依赖建模。
  • 位置感知前馈网络层(Position-wise Feed-Forward Network)

    • 作用:对输入文本序列的每个Token进行独立复杂变换(全连接层),加上位置编码,保留位置信息。
  • 残差连接与层归一化(Residual Connection & LayerNorm)

    • 残差连接(Add部分):各模块之间有跳跃连接(类似ResNet思想),使信息更好地流动、缓解深层网络训练难题。
    • 层归一化(Norm部分):对每个子层的输出进行归一化,保证训练稳定性。

1.4 位置编码(Positional Encoding)

  • 为什么需要位置编码?

    • Transformer结构不再使用 基于循环 的方式建模文本输入,模型本身不具备词语之间的顺序信息(即不能感知相对/绝对位置)。
    • 输入嵌入层(Input Embedding)只负责将每个单词(token)转换为向量表示,但这些向量没带有位置信息。
    • 编码器端,必须补充单词在序列中的"位置"特征,才能让模型捕捉顺序。
  • 什么是位置编码?

    • 位置编码(Positional Encoding):为嵌入向量加入位置信息。序列中每个单词所在的位置会被转换成一个向量(与词向量相加),以此增强模型对顺序的理解。
    • 作用:让模型获得序列中各单词的顺序和相对距离信息,帮助捕捉序列结构。
  • 位置编码的计算方法(正弦余弦编码)

    • Transformer用不同频率的正弦和余弦函数对位置编码:
      • 对于位置 pos 和维度 i,总维度 d
      • 同一个位置,偶数维用sin,奇数维用cos,频率指数增长,覆盖不同时间/距离尺度。
PE(pos,2i)=sin(pos100002i/d)PE(pos,2i+1)=cos(pos100002i/d)
  • 位置编码的优点
    • 正弦余弦范围在 [1,1],和嵌入向量相加不会极端扰动原有信息。
    • 平移不变性:由于三角函数性质,位置编码具有线性可组合性(第 pos+k 的位置编码等于第 pos 位置和第 k 个偏移量的线性组合),模型可直接获知词间距离。
    • 自动学习利用:训练时,模型会自己学会如何用这部分信息,无需额外监督。

2. 注意力层(Self-Attention & Multi-Head Attention)

2.1 自注意力(Self-Attention)核心思想

  • 自注意力机制是Transformer的核心操作,用于在序列中建模任意两个单词间的依赖关系。

  • 输入为每个单词的嵌入向量与其位置编码相加后的结果,记为{xiRd}i=1L

  • 为了实现对上下文的依赖建模,引入三个元素:查询(Query)qi键(Key)ki值(Value)vi

    • 这三者都是通过线性变换由输入xi得到:
      • Q=XWQK=XWKV=XWV
      • WQ,WK,WV为可学习权重,Q,K,V为所有输入对应的矩阵。

2.2 自注意力权重与输出计算

  • 每个输入 xi要关注序列中其他所有位置,关注程度通过 qikj 的点积打分,所有打分用softmax归一化,得到注意力权重。

  • 防止梯度爆炸/收敛效率低,打分前需除以dd为维度)。

  • 最终输出是加权求和后的所有vj,公式如下:

    Z=Attention(Q,K,V)=Softmax(QKd)V
  • Q,K,V分别为所有词的query、key、value矩阵,Z为输出矩阵。

2.3 多头自注意力(Multi-Head Attention)机制

  • 单头注意力可能只关注上下文的某一方面,多头注意力让模型能从不同子空间关注信息(如语法、语义、实体等)。

    Zj=Attention(Qj,Kj,Vj)=Softmax(QiKid)Vi
  • 方法是使用多组独立的权重WjQ,WjK,WjV,每组计算一组Zj,再拼接后用WO线性变换:

    Z=Concat(Z1,...,ZN)WO
  • 最终输出为所有头拼接后再线性变换的结果。

  • 自注意力机制使模型能自动识别输入各部分的重要性,不受距离影响,有效捕捉长距离依赖和复杂关系

3. 前馈层(Feed-Forward Network, FFN)

  • 作用与结构

    • 前馈层接收自注意力子层的输出作为输入,对每个位置的表示分别进行更复杂的非线性变换
    • 具体实现:一个带有ReLU激活函数的两层全连接网络,逐位置独立应用。
  • 数学表达式

    • 其中W1,b1,W2,b2为前馈层参数
FFN(x)=ReLU(xW1+b1)W2+b2
  • 设计要点

    • 实验发现,增加前馈层隐藏状态的维度有助于提升模型最终性能。
    • 因此,前馈层隐藏维度通常比自注意力子层要大
  • 简单讲,前馈层就是逐token的MLP,结构虽简单,却对性能影响极大。

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

4.1 残差连接(Residual Connection)

  • Transformer结构很深,包含多个堆叠的复杂非线性映射,训练难度大。

  • 为提升训练稳定性,引入残差连接:每一层的输出等于子层的输出加上输入本身(即跳跃连接):

    xl+1=f(xl)+xl
    • xl 表示第 l 层输入,f() 表示该层的变换函数。
  • 残差连接可有效缓解深层网络中的梯度消失问题。

4.2 层归一化(Layer Normalization, LN)

  • 进一步保证各层输入/输出稳定,引入层归一化,规范每一层的分布:

    LN(x)=αxμσ+b
    • μσ 分别是均值和方差(对当前层数据做归一化),αb 为可学习参数。
  • 这样处理后,数据被平移到均值0、方差1的标准分布 N(0,1)

  • 作用:有效缓解优化过程中的不稳定、收敛慢等问题。

5. 编码器+解码器

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

  • Decoder端比 Encoder端更复杂,每个Transformer块的第一个注意力子层为掩码多头自注意力。为Decoder每个Transformer块的第一层自注意力子层额外加掩码,仅用已生成(t 时刻前)目标序列的内容参与计算。
  • 机制:只允许Decoder当前单词关注其前面所有(已生成)单词,掩盖未来信息,避免训练阶段"偷看"后文,保证生成时只能用已知信息。
  • 原因:生成目标序列是自回归的,解码阶段每一步只能访问当前和之前已生成的token,掩码阻止模型看到后续内容,保证训练/推断一致性。

5.2 多头交叉注意力(Multi-Head Cross-Attention)

  • Decoder还额外增加了多头交叉注意力模块,核心思想是Decoder可同时接收Encoder输出和本层掩码自注意力的输出
  • 实现方式
    • 查询(Query)来自解码器前一层的输出,
    • 键(Key)和值(Value)来自编码器的输出。
  • 作用:允许解码器"看见"编码器处理后的源语言全部信息,实现编码-解码的信息交互;对生成目标语句的上下文语义理解至关重要。

参考资料

  • 《大语言模型:从理论到实践(第二版)》-- 张奇、桂韬、郑锐、黄萱菁

“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

2. Transformer(书)
http://neurowave.tech/2025/04/21/9-2-Transformer/
作者
Artin Tan
发布于
2025年4月21日
更新于
2025年7月29日