机器学习 - 生成式预训练模型(Generative - Pre-trained - Transformer)

Transformers 综合解析与总结

Transformers 自 2017 年由 Google 提出以来,已成为处理文本、图像、音频等多模态数据的重要架构。其基本思想是通过自注意力机制(Attention)和前馈神经网络(MLP)对输入信息进行编码,再借助解码或生成机制预测下一个 token,从而实现文本翻译、对话生成、图像生成等任务。


1. 数据预处理与 Tokenization

  • Token 切分
    将输入内容(例如文本、图像、音频)切分成小片段。文本中的 token 可以是单词、子词或常见字符组合;图像和音频则切成一小块图像区域或声音片段。

  • Embedding
    每个 token 被映射到一个高维向量空间(如 12288 维),以捕捉其语义信息。相似含义的 token 在向量空间中通常距离较近。比如,在词向量中可以通过简单的加减法关系找到:

    E(queen) ≈ E(king) + E(woman) - E(man)

    在 GPT-3 中,Embedding 矩阵规模一般为 50257 x 12288,这意味着共有约 6.18 亿个参数,负责将词汇映射到语义空间。


2. 数据流动与网络结构

Transformers 内部的数据流程大致可以分为以下几个模块:

  1. Embedding 层
    对输入的 token 进行向量化(直接在Embedding Matrix中找词对应的embedding,这里的Embedding Matrix也是模型预训练出来的),同时还会编码位置信息,使得模型能够区分词语在序列中的顺序。

  2. 自注意力 Attention Block

    • 通过 Query、Key、Value 三组向量,计算每个 token 与序列中其他 token 之间的相关性(通过点积衡量对齐程度)。
    • 自注意力(Self-Attention)机制帮助模型捕捉长距离依赖关系,识别哪些 token 对当前 token 的含义影响最大,从而调整表示。
  3. 前馈层(MLP)

    • 在经过 Attention 模块的信息交互后,每个 token 的向量独立进入多层感知器(前馈网络)。
    • 这一步类似于每个 token 提出一系列问题,通过解答更新自己的表示。
  4. 层堆叠

    • Attention Block 与前馈层通常交替堆叠多个层(Transformer Encoder 或 Decoder 层),进一步提炼和融合信息。
    • 最终目标是使整个序列的关键信息集中表达在输出向量中。
  5. Unembedding(解嵌入)

    • 最后一个向量(或整个序列中的每个 token 表示)通过与 Unembedding 矩阵 相乘,得到原始 token 空间中的 logits。这一步通常是将网络内部的高维表示映射回词汇表维度。
    • 注意:Unembedding 矩阵常常与 Embedding 矩阵共享参数(转置形式),而非严格意义上的“逆矩阵”。
  6. Softmax 激活

    • 对 logits 应用 softmax 函数,转化为每个 token 出现的概率分布,从而可以预测下一个 token。

3. GPT-3 及其参数构成

  • 预设词汇表
    例如,GPT-3 采用一个包含 50257 个词汇的词典。

  • 参数数量
    GPT-3 拥有大约 1750 亿个参数,这些参数分布在大约 28000 个矩阵中,大致分为 8 类:

    • Embedding
    • Key
    • Query
    • Value
    • Output(注意力输出)
    • Up-projection
    • Down-projection(前馈层内部分解)
    • Unembedding
  • 数据流动实例
    在实际应用中,如 GPT-3 的运行流程通常包括:

    • System Prompt:设定用户与 AI 助手的互动场景。
    • User Prompt:用户的输入问题。
    • 结合上述提示,模型通过前向传播依次经过 Embedding、Attention、MLP 层,并在最后经过 Unembedding 得到 logits,再通过 softmax 输出下一个 token 出现的概率。
    • 模型不断重复预测下一个 token,逐步生成完整的回答或文本。

4. 数学工具:点积与向量几何

  • 点积
    点积(内积)用于衡量两个向量之间的相似性。
    • 如果两个向量方向接近,点积为正值,且较大;
    • 如果正交,点积接近零;
    • 如果方向相反,则点积为负值。

这种几何特性使得向量表示可以捕捉词义之间的关系,并通过计算注意力权重来决定各个 token 之间的信息传递。


总结

Transformers 架构通过先将输入拆分为 token、利用 Embedding 向量表示其含义,随后在多层 Attention 和前馈网络中不断融合上下文信息,最终利用 Unembedding 和 softmax 生成下一个 token 的概率分布。这一流程不仅适用于文本生成,还能扩展到语音、图像等多种模态,为 ChatGPT 等工具提供了强大的基础架构和海量参数支持,从而实现高质量的信息预测和生成。

5. 注意力机制 - Attention Block 综合解析

Transformers 的注意力机制是整个模型的关键部分,其核心思想在于让每个 token 能够“关注”序列中其他 token 的信息,从而更好地捕捉上下文关系。下面对整个 Attention Block 的工作流程及关键组件进行详细解析。


1. 基础组件:Query、Key 和 Value

  • Embedding 到向量的映射
    每个输入 token 首先通过预训练好的 embedding 矩阵映射到一个高维向量中,这个向量不仅包含了该 token 的语义信息,还编码了其位置信息。

  • Query 向量

    • 计算方法:

      Q = W_Q x embedding

    • 说明:
      我要找什么特征。通过查询矩阵 W_Q 将高维 embedding 映射到一个较小的查询空间(例如128维)。Query 向量用于表示“在当前 token 处,我想寻找什么样的信息”,例如【寻找前置形容词】的特定概念。

  • Key 向量

    • 计算方法:

      K = W_K x embedding

    • 说明:
      我自己有哪些特征。通过 Key 矩阵 W_K 将相同的 embedding 映射到与 Query 同维数的低维空间。Key 向量可以视为对 token 信息的“描述”,用于与 Query 进行匹配,确定哪些 token 对当前 token 的语义最有参考价值。

  • Value 向量

    • 计算方法:

      V = W_V x embedding

    • 说明:
      我具体携带了什么内容信息。通过值矩阵 W_V 同样映射出一个向量序列。Value 向量携带的信息是之后更新 token 表示时所需要“借用”的内容。它们最终在注意力计算中按匹配权重加权求和,形成一个新的、更富上下文信息的向量。


2. Attention 计算流程

(1) 计算匹配度(相似性得分)

  • 点积相似度
    对于每一个 token 的 Query 向量,会计算其与所有 token 的 Key 向量的点积:

    score(i, j) = Q_i <#> K_j

    该分数衡量了 token (i) 和 token (j) 之间的相关性,点积越高表示相关性越强。

  • 缩放与 Softmax
    通常会对点积结果进行缩放(除以 sqrt{d_k}),其中 d_k 是 Key 向量的维度),再通过 softmax 函数归一化,得到一个概率分布:

    alpha[i,j] = Softmax( (Q[i] · K[j]) / sqrt(d_k) )

  • alpha[i,j] 表示第 i 个 Query 与第 j 个 Key 之间的注意力权重;

  • Q[i] · K[j] 是第 i 个 Query 向量与第 j 个 Key 向量之间的点积;

  • sqrt(d_k) 是 Key 向量的维度的平方根,用于缩放;

  • Softmax(...) 表示对所有 j 的点积结果做 softmax 运算,输出一个归一化的概率分布。

    这表示每个查询 token 与所有键 token 的匹配程度。

    • 掩码(Masking)
      在某些任务中(例如语言模型的自回归生成),对未来(或不希望关注的位置)的 token 分数设为 -∞,使其 softmax 后为0,从而避免后词影响前词。

(2) 更新向量表示

  • 加权求和
    将得到的注意力权重(相似性分布)用于对所有 Value 向量进行加权求和:

    Attention(Q, K, V)[i] = Σ (alpha[i,j] * V[j]),对所有 j 求和

    这样,每个 token 的输出既保留了自身的信息,又“吸收”了上下文中相关 token 的内容,形成一个更新后的向量表示。并且将Attention(Q, K, V)[i] + 原词embedding中。


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

  • 并行多个注意力头
    为了让模型能够关注到不同的语义关系和上下文特征,Transformers 会并行使用多个注意力头。

    • 每个头都有独立的 W_Q、W_K 和 W_V 矩阵,负责从不同的角度对输入进行“观察”。
    • 例如,GPT-3 中可能有96个并行注意力头,每个头捕捉不同的信息模式。
  • 头输出的整合
    各个头经过各自的注意力计算后,得到的结果会被拼接(concatenate)起来,并通过一个线性投影层整合为最终的向量。这一步实现了多角度信息的融合:

    Output = W_O × Concat(head_1, head_2, ..., head_h)

    其中 W_O 是整合矩阵,而 h 则是注意力头的个数。


4. 关键点总结

  • 线性映射
    Query、Key 和 Value 都是通过各自的线性变换由原始 embedding 得来的,目的是将高维信息压缩到便于计算匹配度的低维空间。

  • 点积与归一化
    通过计算 Query 与 Key 的点积来衡量词之间的相关性,再经过 softmax 归一化,确保输出是一个有效的概率分布,指示了各 token 的影响力度。

  • 加权更新
    注意力机制利用计算得到的权重对 Value 向量进行加权求和,实现对原始嵌入表示的更新,增强了上下文信息的表达能力。

  • 多头设计
    多头注意力使得模型可以同时关注语义信息的多个方面,经过整合后,生成一个综合了全局上下文信息的更精准的表示。

6. MLP 存储(前馈网络)

输入向量 E(Embedding 向量)经过以下过程处理:

  1. E -> Linear(W_up, B_up):
    首先,E 乘以上投矩阵 W_up(权重矩阵)并加上偏置向量 B_up,得到中间结果 E':
    E' = W_up * E + B_up

  2. E' -> ReLU 激活:
    对 E' 进行 ReLU 非线性激活,得到:
    E'' = ReLU(E')

    ReLU(Rectified Linear Unit)激活函数形式为:
    ReLU(x) = max(0, x)
    它引入非线性特征,有助于模型学习复杂的模式。

  3. E'' -> Linear(W_down, B_down):
    将 E'' 再次线性变换,乘以下投矩阵 W_down 并加上偏置 B_down,得到:
    E''' = W_down * E'' + B_down

  4. 残差连接(Residual Connection):
    将 E''' 与原始输入向量 E2 相加(E2 通常就是原始的 E),形成最终的输出:
    Output = E''' + E2

    这个残差连接有助于缓解深层网络中的梯度消失问题,加快训练收敛,并让网络更容易学习恒等映射。

总结:
整个 MLP 存储模块包含两个线性层(上投和下投),一个 ReLU 非线性激活层,以及一个残差连接:
E → Linear → ReLU → Linear → +E → Output

posted @ 2025-04-08 15:45  代码世界faq  阅读(186)  评论(0)    收藏  举报