【NLP】Transformer网络结构(1)

发布于:2025-04-07 ⋅ 阅读:(26) ⋅ 点赞:(0)

在当前的自然语言处理领域,Transformer已经成为了当前NLP模型的标配,因此针对Transformer模型也需要重新从网络结构到实际应用回味一下。Transformer 是由 Vaswani 等人在 2017 年提出的革命性模型(论文 Attention Is All You Need),彻底改变了序列建模的范式。它完全依赖自注意力机制(Self-Attention)替代传统的 RNN/CNN,实现了并行化计算和长距离依赖建模。以下从网络结构角度详细解析其设计。
在这里插入图片描述

1. 整体架构

Transformer 由 编码器(Encoder)解码器(Decoder) 堆叠组成,结构对称但功能不同。以机器翻译为例:

  • 输入:源语言序列(编码器处理)
  • 输出:目标语言序列(解码器生成)
核心组件
  1. 嵌入层(Embedding Layer)
  2. 位置编码(Positional Encoding)
  3. 多头注意力(Multi-Head Attention)
  4. 前馈网络(Feed-Forward Network)
  5. 残差连接 & 层归一化(Add & Norm)

2. 编码器(Encoder)

单个编码器层包含两个核心子层,均采用 残差连接(Residual Connection) 和 层归一化(Layer Normalization):

(1) 多头自注意力(Multi-Head Self-Attention)
  • 目标:捕捉序列中词与词之间的全局依赖关系。
  • 计算步骤
    a. 输入变换
    输入向量 X ∈ R n × d model X \in \mathbb{R}^{n \times d_{\text{model}}} XRn×dmodel( n n n 为序列长度, d model = 512 d_{\text{model}}=512 dmodel=512)被线性投影到 h h h个不同的子空间(头),每个头的维度为 d k = d v = d model / h d_k = d_v = d_{\text{model}} / h dk=dv=dmodel/h(论文中 h = 8 h=8 h=8)。
    b. 缩放点积注意力(Scaled Dot-Product Attention)
    对每个头分别计算:
    Attention ( Q , K , V ) = Softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=Softmax(dk QKT)V
    其中 Q Q Q(查询)、 K K K(键)、 V V V(值)由输入向量线性变换得到。
    c. 多头拼接
    h h h个头的输出拼接后再次线性变换:
    MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,,headh)WO
    其中 W O ∈ R d model × d model W^O \in \mathbb{R}^{d_{\text{model}} \times d_{\text{model}}} WORdmodel×dmodel 为可学习参数。
(2) 前馈神经网络(Feed-Forward Network, FFN)
  • 结构:两层全连接网络,中间维度扩展为 d f f = 2048 d_{ff}=2048 dff=2048
    FFN ( x ) = ReLU ( x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2 FFN(x)=ReLU(xW1+b1)W2+b2
    W 1 ∈ R d model × d f f , W 2 ∈ R d f f × d model W_1 \in \mathbb{R}^{d_{\text{model}} \times d_{ff}}, W_2 \in \mathbb{R}^{d_{ff} \times d_{\text{model}}} W1Rdmodel×dff,W2Rdff×dmodel
(3) 残差连接与层归一化

对每个子层输出:
Output = LayerNorm ( x + Sublayer ( x ) ) \text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x)) Output=LayerNorm(x+Sublayer(x))
其中 Sublayer \text{Sublayer} Sublayer为多头自注意力或 FFN。

3. 解码器(Decoder)

解码器层在编码器基础上增加一个编码器-解码器注意力层,并引入掩码自注意力。

(1) 掩码多头自注意力(Masked Multi-Head Self-Attention)
  • 目标:防止解码器在生成时“看到”未来信息(保证自回归性)。
  • 实现:在计算注意力分数时,将未来位置的权重设为 − ∞ -\infty (通过掩码矩阵实现):
    Mask ( Q , K , V ) = Softmax ( Q K T d k + M ) V \text{Mask}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M\right)V Mask(Q,K,V)=Softmax(dk QKT+M)V
    其中掩码矩阵 M M M的上三角元素为 − ∞ -\infty ,其余为 0。
(2) 编码器-解码器注意力(Cross-Attention)
  • 目标:融合编码器的输出信息(Key 和 Value 来自编码器,Query 来自解码器)。
  • 计算方式:与多头自注意力相同,但 K K K V V V来自编码器的输出。
(3) 前馈神经网络

结构与编码器的 FFN 完全相同。

4. 关键模块详解

(1) 位置编码(Positional Encoding)
  • 作用:为无顺序的输入序列注入位置信息。
  • 公式(正弦/余弦函数):
    P E ( p o s , 2 i ) = sin ⁡ ( p o s 1000 0 2 i / d model ) PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PE(pos,2i)=sin(100002i/dmodelpos)
    P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s 1000 0 2 i / d model ) PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) PE(pos,2i+1)=cos(100002i/dmodelpos)
    其中 p o s pos pos是位置, i i i是维度索引。
  • 替代方案:可学习的位置嵌入(如 BERT)。
(2) 自注意力机制的优势
  • 并行计算:无需像 RNN 一样逐步处理序列。
  • 长距离依赖:任意两词直接交互,解决梯度消失问题。
  • 可解释性:注意力权重可视化词与词的关系(如指代消解)。
(3) 残差连接与层归一化

在 Transformer 的编码器和解码器中,Add & Norm 是每个子层(如自注意力、前馈网络)后的核心模块,由 残差连接(Add)层归一化(Norm) 组成。它通过梯度稳定和特征融合,显著提升了深层网络的训练效果。以下是其原理、作用和实现细节。

1. 残差连接(Add)
  • 目标:解决深层网络中的梯度消失问题,保留原始输入信息。
  • 操作:将子层(如自注意力或 FFN)的输入 x x x与其输出 Sublayer ( x ) \text{Sublayer}(x) Sublayer(x)直接相加:
    Add ( x , Sublayer ( x ) ) = x + Sublayer ( x ) \text{Add}(x, \text{Sublayer}(x)) = x + \text{Sublayer}(x) Add(x,Sublayer(x))=x+Sublayer(x)
  • 核心思想
    • 假设深层网络需要学习的映射为 F ( x ) F(x) F(x),残差连接将其转化为 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)x,即 H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x
    • 网络只需学习残差 F ( x ) F(x) F(x),而非完整映射 H ( x ) H(x) H(x),简化了优化难度。
  • 优势
    • 梯度可直接通过加法回传,缓解梯度消失。
    • 允许构建极深网络(如百层以上的 Transformer 变体)。
2. 层归一化(Layer Normalization, Norm)
  • 目标:对特征维度进行联合标准化,稳定训练过程。
  • 操作:对每个样本的所有特征维度计算均值和方差,并进行缩放和平移:
    μ = 1 d ∑ i = 1 d x i , σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \mu = \frac{1}{d} \sum_{i=1}^d x_i, \quad \sigma^2 = \frac{1}{d} \sum_{i=1}^d (x_i - \mu)^2 μ=d1i=1dxi,σ2=d1i=1d(xiμ)2
    Norm ( x ) = γ ⋅ x − μ σ 2 + ϵ + β \text{Norm}(x) = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta Norm(x)=γσ2+ϵ xμ+β
    其中 d d d是特征维度, γ \gamma γ β \beta β是可学习的缩放和偏移参数, ϵ \epsilon ϵ是为数值稳定性添加的小常数(如 1 0 − 5 10^{-5} 105)。
  • 与批量归一化(BatchNorm)的区别
    • BatchNorm:在批次维度计算统计量,依赖批次大小,不适合变长序列(如 NLP 任务)。
    • LayerNorm:在特征维度计算统计量,独立于批次大小,更适合序列数据。
3. Add & Norm 的组合流程

以编码器的自注意力子层为例,输入 x x x的处理步骤如下:

  1. 子层计算:通过多头自注意力得到输出 SelfAttn ( x ) \text{SelfAttn}(x) SelfAttn(x)
  2. 残差连接:将输入 x x x与子层输出相加:
    x add = x + SelfAttn ( x ) x_{\text{add}} = x + \text{SelfAttn}(x) xadd=x+SelfAttn(x)
  3. 层归一化:对相加后的结果进行归一化:
    x norm = LayerNorm ( x add ) x_{\text{norm}} = \text{LayerNorm}(x_{\text{add}}) xnorm=LayerNorm(xadd)
  4. 传递到下一层:归一化后的结果作为下一子层(如 FFN)的输入。

5. 模型输入输出流程

  1. 输入嵌入

    • 词嵌入:将词映射为 d model d_{\text{model}} dmodel维向量。
    • 位置编码:与词嵌入相加,得到最终输入 X = Embedding + Positional Encoding X = \text{Embedding} + \text{Positional Encoding} X=Embedding+Positional Encoding
  2. 编码器处理

    • 输入 X X X经过 N N N层编码器,每层包含多头自注意力和 FFN。
    • 输出上下文相关的表示 H enc ∈ R n × d model H_{\text{enc}} \in \mathbb{R}^{n \times d_{\text{model}}} HencRn×dmodel
  3. 解码器生成

    • 初始输入为起始符(如 <sos>),逐步生成目标序列。
    • 通过掩码自注意力、交叉注意力和 FFN 逐层处理。
    • 最终输出通过线性层和 Softmax 得到词的概率分布。

6. 核心公式总结

组件 公式
缩放点积注意力 Attention ( Q , K , V ) = Softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=Softmax(dk QKT)V
多头注意力 MultiHead = Concat ( head 1 , … , head h ) W O \text{MultiHead} = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O MultiHead=Concat(head1,,headh)WO
位置编码(正弦/余弦) P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d ) , P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d ) PE_{(pos, 2i)} = \sin(pos/10000^{2i/d}), PE_{(pos, 2i+1)} = \cos(pos/10000^{2i/d}) PE(pos,2i)=sin(pos/100002i/d),PE(pos,2i+1)=cos(pos/100002i/d)
残差连接与层归一化 LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))

7. 优缺点分析

优点
  • 并行性:自注意力机制允许全序列并行计算,显著提升训练速度。
  • 长距离建模:任意词对直接交互,解决 RNN 的长期依赖问题。
  • 灵活性:适用于多种任务(如翻译、生成、分类)。
缺点
  • 计算复杂度:自注意力时间复杂度为 (O(n^2)),长序列处理成本高。
  • 位置编码局限:静态位置编码可能无法适应复杂序列模式(动态位置编码可缓解)。
  • 内存消耗:存储注意力矩阵需大量显存(如序列长度 4096 时,矩阵大小 16M×16M)。

网站公告

今日签到

点亮在社区的每一天
去签到