深度学习基础网络|Transfomer

论文链接:1706.03762

一、研究背景

在Transformer模型出现以前,很多语言模型是基于RNN(循环神经网络)的,比如LSTM(长短时记忆网络)或GRU(门控循环单元)的,这些模型在处理输入时,是按照顺序逐个处理输入的。这种处理方式存在两个不足:

  • 只能串行计算,计算效率低:后一个神经元的计算依赖前一个神经元的输出,无法并行计算。
  • 难以捕捉长距离依赖关系:当文本长度过长时,RNN很难捕捉长距离的依赖关系。

为了解决这两个不足,Transformer横空出世,具有如下优势:

  • 可以并行计算,计算效率高:抛弃了 RNN 的串行依赖,序列中每个 token 的计算相互独立,可一次性并行完成,再借助 GPU 矩阵运算实现高效并行。
  • 能够捕捉长距离依赖关系:自注意力机制可以让模型很容易地捕捉到句子中长距离的依赖关系。
  • 可扩展性好:Transformer的结构比较简单,很容易扩展到更大的模型,如BERT,GPT,Qwen等模型。

Transformer统一了 NLP 领域的技术范式,还延伸到计算机视觉、多模态等领域,成为当下大模型时代的基础架构。Transformer 在多个领域展现了强大的能力:

  • 自然语言处理(NLP):在机器翻译、语言建模、文本分类等任务上取得了显著成果。例如,BERT、GPT 等模型均基于 Transformer 架构。
  • 计算机视觉(CV):Vision Transformer(ViT)等模型将 Transformer 应用于图像分类、目标检测等任务。
  • 时间序列分析:Transformer 被用于时间序列数据的去噪和预测。

二、模型架构

Transfomer的核心架构由编码器(Encoder)和解码器(Decoder)组成。

1.编码器:将输入序列编码为固定长度的向量。

编码器由多个相同的层堆叠而成,每层包含两个主要的子层:

  • 多头注意力(Multi-Head Self-Attention):通过将输入序列分割成多个子空间,分别计算注意力权重,从而捕捉不同位置之间的关系。
  • 前馈神经网络(Feed-Forward Neural Network):对每个位置的特征进行非线性变换。
  • 其他组件:残差链接(Residual Connection)和层归一化(Layer Normalization),以减轻训练过程中的梯度消失和梯度爆炸问题。

2.解码器:根据编码器的输出生成目标序列。

解码器由多个相同的层堆叠而成,每层包含三个主要的子层:

  • 掩码多头自注意力(Masked Multi-Head Self-Attention):确保解码器只能关注目标序列中当前和之前的位置,防止数据泄露(用未来预测现在)。
  • 编码器-解码器自注意力(Encoder-Decoder Attention):将解码器的状态与编码器的输出结合,捕获输入和输出之间的关系。
  • 前馈神经网络(Feed-Forward Neural Network):对每个位置的特征进行非线性变换。

三、训练流程

我们将英文句子”Hello, how are you?”翻译成中文”你好,你好吗?”为例,详细说明 Transformer 在机器翻译中的迭代生成过程。为了简化说明,我们假设模型已经训练完成,现在处于推理(翻译)阶段。

1.输入

(1)源语言序列 (Source Sequence)

  • 英文句子: “Hello, how are you?”
  • 经过分词处理后: [“Hello”, “,”, “how”, “are”, “you”, “?”]

(2)目标语言序列 (Target Sequence)

  • 中文句子: “你好,你好吗?”
  • 经过分词处理后: [“你好”, “,”, “你”, “好”, “吗”, “?”]

(3)输入嵌入

  • 词嵌入 (Word Embedding) : 将每个单词或标记映射为固定维度的向量。
    • 例如, "Hello" 映射为向量 [0.1,0.2,0.3,]
  • 位置编码 (Positional Encoding) : 为每个 Token 注入位置信息
    • 例如, 位置编码向量为 [0.01,0.02,0.03,]
  • 最终输入嵌入 : 词嵌入与位置编码相加, 形成最终的输入嵌入。

2.编码器

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

  • 编码器中的每个 Token 会计算与其他所有 Token 的相关性(注意力分数)。
    • 例如,”Hello” 会计算与 “Hello”、”,”、”how”、”are”、”you”、”?” 的相关性。
  • 多头机制将输入分割成多个子空间,分别计算注意力,然后将结果拼接起来。

(2)前馈神经网络 (Feed-Forward Neural Network)

  • 对每个 Token 的特征进行非线性变换。

(3)残差连接和层归一化

  • 每个子层后面都接有残差连接和层归一化。

编码器经过多层(假设为 6 层)处理后,将源语言序列编码为一个固定长度的上下文向量 (Context Vector)。

3.解码器

解码器以自回归的方式逐步生成目标语言序列。以下是详细的迭代生成过程:

1.初始状态

  • 解码器的初始输入是一个特殊的起始标记(例如 <sos>,表示 “start of sentence”)。
  • 假设起始标记 <sos> 的嵌入为 [0.5, 0.5, 0.5, ...]

2.生成第一个 Token:

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

  • 由于解码器只能看到之前的位置,因此对 <sos> 进行掩码处理。
  • 计算 <sos> 的自注意力,得到更新后的状态。

(2)编码器 – 解码器注意力机制(Encoder-Decoder Attention)

  • 使用编码器的输出(上下文向量)作为键(Key)和值(Value),解码器的当前状态作为查询(Query)。
  • 计算注意力分数,得到与源语言序列相关的特征。

(3)前馈神经网络

  • 对特征进行非线性变换。

(4)线性层和 Softmax

  • 经过线性层,将特征映射到目标语言的词汇表大小的维度。
  • 使用 Softmax 函数计算每个 Token 的概率分布,选择概率最高的 Token 作为输出。
  • 假设生成的 Token 是 “你好”。

    3.生成第二个 Token:

    (1)更新输入

    • 将之前生成的 Token”你好” 加入到解码器的输入序列中,即 [<sos>, "你好"]

    (2)掩码多头自注意力机制

    • [<sos>, "你好"] 进行掩码处理,确保只能看到之前的位置。
    • 计算 <sos> 和 “你好” 的自注意力,得到更新后的状态。

    (3)编码器 – 解码器注意力机制

    • 使用编码器的输出作为键和值,解码器的当前状态作为查询。
    • 计算注意力分数,得到与源语言序列相关的特征。

    (4)前馈神经网络

    • 对特征进行非线性变换。

    (5)线性层和 Softmax

    • 经过线性层,将特征映射到目标语言的词汇表大小的维度。
    • 使用 Softmax 函数计算每个 Token 的概率分布,选择概率最高的 Token 作为输出。
    • 假设生成的 Token 是 “,”。

    4.后续步骤

    • 重复上述过程,逐步生成 “你”、”好”、”吗”、”?” 等 Token。
    • 当解码器生成结束标记(例如 <eos>,表示 “end of sentence”)时,翻译完成。

    4.输出

    • 生成的目标语言序列:["你好", ",", "你", "好", "吗", "?"],即 “你好,你好吗?”。

    Transformer 在机器翻译中的迭代生成过程如下:

    • 编码器将源语言序列编码为上下文向量。
    • 解码器以自回归的方式逐步生成目标语言序列。
    • 每次生成一个 Token 后,将其加入到解码器的输入中,继续生成下一个 Token。
    • 重复上述过程,直到生成结束标记。

    这种自回归的生成方式使得 Transformer 能够生成流畅且准确的翻译结果。

    四、组件详细解读

    1.多头自注意力机制

    2.前馈神经网络

    3.掩码多头自注意力机制

    4.编码器-解码器注意力机制

    (1)输入

    (2)Query(查询),Key(键),Value(值)的计算

    (3)计算注意力分数

    (4)计算注意力权重

    (5)计算加权和

    发表评论