Lazy loaded image
技术
✔️Transformer
Words 2820Read Time 8 min
2025-3-12
2025-3-12
type
status
date
slug
summary
tags
category
icon
password
comment
Status

Transformer 核心结构

notion image

1. 词嵌入 (Token Embeddings)

  • 函数get_token_embeddings(vocab_size, num_units, zero_pad=True)作用:生成词向量矩阵,支持零填充(padding符号的向量设为全零)。 • 流程
  1. 使用Xavier初始化创建嵌入矩阵。
  1. 若开启零填充,首行(索引0)设为全零。 • 用途: • 将离散的词汇ID映射为连续向量。 • 零填充用于处理变长序列的掩码。

2. 位置编码 (Positional Encoding)

  • 函数positional_encoding(inputs, maxlen, masking=True)作用:为序列添加位置信息,弥补无时序结构的不足。 • 生成规则: • 偶数位置用正弦,奇数位置用余弦。 • 频率随维度增加递减,捕获不同粒度的位置关系。 • 掩码处理:屏蔽padding位置的位置编码。

3. 层归一化 (Layer Normalization)

  • 函数ln(inputs, epsilon=1e-8, scope="ln")作用:对输入进行层归一化,稳定训练过程。 • 流程
  1. 计算输入最后一个维度的均值和方差。
  1. 使用可学习的参数 gammabeta 进行缩放和偏移。 • 关键点: • 归一化沿特征维度(最后一个维度)进行。 • 防止梯度消失/爆炸,加速收敛。

4. 缩放点积注意力 (Scaled Dot-Product Attention)

  • 函数scaled_dot_product_attention(Q, K, V, key_masks, causality=False, dropout_rate=0, training=True)作用:计算注意力权重并聚合上下文信息。 • 流程
  1. 点积缩放:计算Q和K的点积,除以√d_k(防止梯度消失)。
  1. 掩码处理: ◦ Key掩码:屏蔽padding位置。 ◦ 因果掩码:防止未来信息泄漏(用于解码器)。
  1. Softmax:归一化注意力权重。
  1. Dropout:训练时随机丢弃部分权重。
  1. 加权求和:用权重对V聚合,得到上下文向量。 • 关键点: • 掩码通过添加极大负值实现,Softmax后对应位置接近零。

5. 多头注意力 (Multi-Head Attention)

  • 函数multihead_attention(queries, keys, values, key_masks, num_heads=8, ...)作用:将输入拆分到多个子空间并行计算注意力,增强模型表达能力。 • 流程
  1. 线性投影:通过全连接层生成Q、K、V。
  1. 拆分多头:沿特征维度切分张量,拼接批次维度。
  1. 并行注意力:每个头独立计算缩放点积注意力。
  1. 合并输出:拼接所有头的输出,通过全连接层整合。
  1. 残差连接 & 层归一化:保留原始信息,稳定训练。 • 关键点: • 多头机制允许模型关注不同子空间的信息。

6. 前馈网络 (Feed-Forward Network)

  • 函数ff(inputs, num_units, scope="positionwise_feedforward")作用:对每个位置独立进行非线性变换。 • 结构
  1. 全连接层(扩大维度)+ ReLU激活。
  1. 全连接层(恢复原始维度)。
  1. 残差连接 & 层归一化。 • 关键点: • 提供模型非线性能力,独立处理每个位置。

7. 编码器 (encode 方法)

  • 处理输入序列 (xs),包括词嵌入、位置编码、掩码(masking)。
  • 经过多个自注意力(self-attention)和前馈(feed-forward)层后,返回编码后的表示 memory

8. 解码器 (decode 方法)

  • 处理目标序列 (ys),包括词嵌入、位置编码、掩码(masking)。
  • 先进行 masked self-attention,再与编码器 memory 进行 cross-attention。
  • 经过前馈层后,得到最终的预测 logits

训练 (train 方法)

  • 计算目标 y 的标签平滑 (label_smoothing)。
  • 计算交叉熵损失 (cross-entropy loss) 并进行梯度优化(Adam)。
  • 记录训练指标(学习率 lr、损失 loss)。
 

推理 (eval 方法)

  • 采用 自回归(autoregressive) 方式预测序列:
      1. 先用 <s> 作为起始符。
      1. 逐步生成下一个 token,直到达到最大长度或遇到 <pad> 结束。

BERT

ERT(Bidirectional Encoder Representations from Transformers, 2018) 主要基于 Transformer 的 Encoder 部分,用于预训练文本表示。

BERT 的特点

  1. 双向(Bidirectional)
      • BERT 的核心创新是双向预训练,即在处理一个单词时,它不仅看左侧的上下文,也看右侧的上下文(相比之下,GPT 只能看左侧)。
      • 这让 BERT 能够更好地理解句子含义,特别是填空任务和文本分类任务。
  1. 预训练任务
      • 掩码语言模型(Masked Language Model, MLM)
        • 训练时随机遮蔽(mask)输入中的部分单词,要求模型预测被遮蔽的单词。
        • 例如:
        • 下一句预测(Next Sentence Prediction, NSP)
          • 判断两句话是否是连续的,比如:
            • 这个任务有助于文本匹配和问答系统。
      1. 应用场景
          • 文本分类(情感分析、主题分类)
          • 机器阅读理解(如 SQuAD)
          • 命名实体识别(NER)
          • 句子匹配(如搜索引擎)

      GPT

      GPT(Generative Pre-trained Transformer, 2018) 主要基于 Transformer 的 Decoder 部分,用于生成任务。

      GPT 的特点

      1. 单向(Autoregressive, Left-to-Right)
          • 在处理一个 token 时,GPT 只看它前面的 token,而不会看到右侧的 token。
          • 例如:
            • 这种自回归(Autoregressive)方式非常适合文本生成任务。
        1. 预训练任务
            • 自回归语言模型(Causal Language Modeling, CLM)
              • 目标是预测下一个 token:
                • 只看过去的 tokens,不看未来的 tokens。
          1. 应用场景
              • 文本生成(如 ChatGPT)
              • 代码生成(如 Codex)
              • 对话系统(如 ChatGPT)
              • 文章续写
           
          BERT
          GPT
          架构
          Transformer Encoder
          Transformer Decoder
          方向
          双向(Bidirectional)
          单向(Left-to-Right, Autoregressive)
          目标任务
          语言理解(NLU)
          语言生成(NLG)
          预训练
          Masked Language Model (MLM) & Next Sentence Prediction (NSP)
          自回归语言模型 (Causal LM)
          应用
          句子分类、阅读理解、NER
          文本生成、对话、代码生成
          上一篇
          大模型概念扫盲
          下一篇
          自注意力机制