LLM的Transformer架构

文章目录

一、前文回顾和本文概要

博文 核心内容 与本节关系
第一篇 预训练 → SFT → RM → RL 的训练流程 讲了训练流程“做了什么”
第二篇 神经网络、梯度下降、机器学习六步骤 讲了模型内部“怎么学会的”
第三篇 Transformer 架构详解 把前两节串起来——训练流程 + 模型内部结构 = 完整图景

二、Transformer 总体架构

2.1 经典架构(2017 年论文)

2017 年 Attention Is All You Need 论文提出了完整的 Transformer 架构,分为两大模块:

┌─────────────────────────────────────────────────┐
│                 Transformer                      │
│  ┌──────────────┐    ┌──────────────────────┐   │
│  │   Encoder    │    │      Decoder         │   │
│  │  (编码器)    │    │     (解码器)          │   │
│  │              │    │                      │   │
│  │  理解输入文字  │───▶│  基于理解生成输出文字  │   │
│  │  提取语义信息  │    │  逐字续写            │   │
│  └──────────────┘    └──────────────────────┘   │
└─────────────────────────────────────────────────┘
  • Encoder(编码器):把人类能看懂的文字变成人类看不懂的数学向量
  • Decoder(解码器):把数学向量再生成人类能看懂的文字

2.2 从 Encoder-Decoder 到 Decoder-Only

架构 代表模型 特点
Encoder-Only Google BERT 只做理解,不做生成;适合分类、情感分析
Encoder-Decoder 2017 原始 Transformer 翻译等 seq2seq 任务
Decoder-Only GPT(2018 起全部) 只用解码器,既理解又生成

为什么 GPT 选择 Decoder-Only?

  • Decoder 本身就能理解文字(它在生成回答时需要理解上下文)
  • Encoder 能做的,Decoder 也能做
  • 那还要 Encoder 干什么?→ 干脆去掉,只留 Decoder

从 2018 年 GPT-1 开始,OpenAI 就选择了 Decoder-Only 架构。现在几乎所有主流大语言模型(GPT-4、Llama、Qwen 等)都是 Decoder-Only。


三、Transformer 的五大核心步骤

以一段 650 字的用户-法律顾问对话为例,大模型需要输出第 651 个字。整个过程分为五个步骤:

步骤一:Tokenization(分词/字词化)

把一段文字拆成 Token(最小处理单元)。

"海南清华" 这五个汉字:
├── GPT-3.5:拆成 11 个 Token
├── Llama(710M):英文和中文都约 40 万个 Token(处理《哈利波特》全书)
└── 不同模型 Token 拆分方式完全不同
  • 英文中 subword 可能拆成 sub + word
  • 中文平均 1 个汉字 ≈ 2 个 Token(GPT-3.5)
  • OpenAI 开源了 Tiktoken —— 纯代码(无 AI/神经网络),展示不同 GPT 版本的 Token 拆分规则

关键数字(以 GPT-3 为例):

  • 1,000 个 Token ≈ 750 个英文单词 ≈ 500 个汉字

步骤二:Embedding(嵌入/向量化)

把每个 Token 变成一个高维数学向量。

2.1 最简单的方法:One-Hot 编码

假设常用汉字 3,000 个,每个字用一个长度为 3,000 的向量表示:

我 → [1, 0, 0, 0, ..., 0]  (只有第 1 位是 1)
你 → [0, 1, 0, 0, ..., 0]  (只有第 2 位是 1)

One-Hot 的问题:

  1. 维度太高:10 万个 Token 需要 10 万维向量
  2. 过于稀疏:99.99% 的位都是 0,信息密度极低
  3. 没有距离概念:无法体现"吃饭"和"用餐"语义相近、经常一起出现

2.2 Embedding 的做法

神经网络来学习每个 Token 的最佳向量表示:

每个 Token → Embedding 神经网络 → 一个高维向量(如 GPT-3 的 12,288 维)
模型 Embedding 维度
GPT-3 12,288 维
其他模型 各不相同(人工设计)

为什么需要这么高的维度?

因为后续要经过 96 轮(甚至 120+ 轮)信息聚合,每次聚合都会让向量包含越来越多的信息。一个向量最终要能代表 100 万字的语义——起点不高不行。

类比:你给一个 U 盘存东西,一开始你觉得 12,288 维去存一个字太浪费。但如果这个 U 盘后续要经过 96 次信息拷贝、融合、扩展,最后要能代表整本书的内容——那就不浪费了。

步骤三:Positional Encoding(位置编码)

问题:机器不像人类从左到右阅读,它一次性看到所有 Token。它怎么知道"我爱你"和"你爱我"是不同的?

解决:为每个位置生成一个专属的位置向量,加到对应的词向量上。

位置 1 → 位置向量₁ (12,288 维)
位置 2 → 位置向量₂ (12,288 维)
位置 3 → 位置向量₃ (12,288 维)
...

最终向量 = 词向量 + 位置向量(同位相加)

为什么位置编码能提高相邻词的相似度?

“首先"和"明确"这两个词本身的语义相似度可能只有 0.38,但当它们紧挨着出现在同一段文字中时,加入位置编码后,它们的相似度可能提升到 0.4+。这样可以促进相邻词之间更多的信息交换,帮助模型形成短语(phrase)级别的理解。

  • GPT-3 的上下文窗口是 2,048 个 Token,所以最多只需要计算 2,048 个位置向量的编码
  • 位置编码在训练初期也是随机初始化的,跟着整个模型一起学习

步骤四:Encoder / Decoder 的信息聚合

这是 Transformer 最核心、最复杂的部分。

核心思想:多轮信息聚合

初始:1,300 个向量(每个只代表一个 Token 的语义 + 位置,合起来表达上面提到的 650 字对话)

第 1 轮聚合:
  每个向量作为"中心主题词",去其他 1,299 个向量那里"借"信息
  → 相关性高的多借,相关性低的少借
  → 得到新的一组 1,300 个向量

第 2 轮聚合:
  此时每个向量已经不再只代表一个字了(可能代表短词/短语的意思)
  继续互相"借"信息
  → 短语和短语之间信息交换

...

第 96 轮聚合:
  每个向量都经历了 96 轮信息交换
  → 每个向量都包含了整段文字中极其丰富的语义信息

关键特性:

  • 向量数量始终不变(输入 1,300 个 → 输出 1,300 个)
  • 但每个向量包含的信息量呈指数增长
  • 最后一个向量代表整段文字——前面的都扔掉,只保留最后一个

**Encoder vs Decoder 的区别,核心是自注意力机制(Self-Attention)的具体计算方式。

步骤五:Linear + Softmax(线性层 + 输出概率)

这是整个 Transformer 的最后一步,也是最简单的一步。

最后一个向量(代表整段文字的语义)
           │
           ▼
    ┌─────────────┐
    │   Linear     │  线性变换,映射到词表大小
    │   (全连接层)  │  GPT-3 词表约 5 万个 Token
    └──────┬──────┘
           │
           ▼
    ┌─────────────┐
    │   Softmax    │  把分数转为概率(总和 = 1)
    └──────┬──────┘
           │
           ▼
    选择概率最高的 Token 作为第 651 个字
  • Linear 层的参数通常复用 Embedding 层的参数(或独立训练)
  • 个别模型不共享参数,则 Linear 层也需要自行梯度更新

四、完整训练流程

一张图理解全部

┌──────────────────────────────────────────────────────────┐
│                  无论训练还是推理,都是这张图              │
│                                                          │
│  输入文字                                                  │
│    │                                                     │
│    ▼                                                     │
│  Tokenization ──▶ Embedding ──▶ Positional Encoding      │
│                                      │                   │
│                                      ▼                   │
│                           Decoder × 96 层                │
│                         (信息聚合 × 96 轮)               │
│                                      │                   │
│                                      ▼                   │
│                          取最后一个向量                    │
│                                      │                   │
│                                      ▼                   │
│                          Linear ──▶ Softmax              │
│                                      │                   │
│                                      ▼                   │
│                              输出下一个 Token              │
└──────────────────────────────────────────────────────────┘

训练过程

  1. 一条训练数据:给模型前 N 个字,让它预测第 N+1 个字
  2. 计算误差:预测的 Token ≠ 正确答案 → 产生误差(损失函数)
  3. 梯度反向传播
    • GPT-3 总共有 1,750 亿个参数
    • 其中 Embedding 层约 6 亿个参数(维度参数)、位置编码约 2,500 万个参数
    • 96 层 Decoder 占了超过 1,000 亿参数——真正的大户
    • 每个参数都要计算"该变大还是变小"来降低总误差
  4. 参数更新:所有参数同时调整
  5. Batch 循环:数据分批(Batch),每批训练完就更新一次参数
  6. Epoch:全部训练数据跑完一轮 = 1 个 Epoch

神经网络的应用

  • 神经网络就是一个"万能公式”——Embedding、位置编码、Decoder 背后都是神经网络
  • 梯度下降:每次计算误差后,让 1,750 亿参数"都挪一点"
  • 混沌到有序:从随机初始化的参数,到能够理解 100 万字并准确续写

五、Encoder vs Decoder 应用场景对比

组件 擅长任务 典型应用 核心能力
Encoder 分析/理解 语义相似度比较、情感分析、文本分类 把一段文字理解后输出一个语义向量
Decoder 生成/创作 回答问题、翻译、写文章、文生图 从向量生成人类可读的内容

多模态中的 Encoder-Decoder:

  • 文字 → Text Encoder → 向量
  • 图片 → Image Encoder → 向量
  • 两个向量相似度高 → 说明文字和图片内容匹配
  • 文生图:Text Encoder 把文字变向量 → Image Decoder 把向量变图片

六、核心概念速查表

概念 一句话解释
Token 模型处理文本的最小单元(可能是字、词或子词)
Tokenization 把自然语言文字拆成 Token 序列的过程
Embedding 用一个高维向量来表示一个 Token 的语义
Positional Encoding 给每个向量加上位置信息,让模型知道字词的顺序
Encoder 用多轮信息聚合来"看懂"输入文字
Decoder 在理解的基础上,逐字生成输出
Decoder-Only GPT 系列采用的架构,只用解码器完成理解+生成
信息聚合 每个向量去其他向量那里"借"信息,轮次越多理解越深
Linear + Softmax 最后一步:把语义向量映射为"下一个 Token 是哪个"的概率
最后一个向量 无论输入多少字,Encoder/Decoder 输出的最后一个向量代表整段文字

七、Q&A

Q: 向量有方向吗? A: 所有向量都有方向。二维向量是从原点到坐标点的连线,一万多维也同理。

Q: 为什么 Embedding 维度要这么高(12,288 维)? A: 因为后续要经过 96 轮信息聚合,每个向量最终需要承载极其丰富的语义信息。如果一开始维度太低,信息量瓶颈会导致理解能力不足。

Q: RAG 知识库里的 Embedding 和这里的 Embedding 是一回事吗? A: 类似但不同。RAG 的 Embedding 是一个独立训练的小模型,专门用于把一段文本变成一个向量(用于向量检索),相当于这里的 Embedding + Encoder 合在一起的功能。

Q: 位置编码为什么能提高相邻词的相似度? A: 两个词本身语义相似度可能不高,但它们在句子中紧挨着出现。加入位置编码后,它们的向量相似度被"拔高"了一点,从而促进更多信息交换,帮助模型形成短语级别的理解。

Q: Mask(掩码)只在训练时用吗? A: 是的。训练时需要用 Mask 遮住后面的内容(不能让模型偷看答案),使用模型时不需要——因为使用时就只有前面的内容,没什么可遮的。

Q: 参数越多越好吗? A: 不一定。如果数据量固定,参数过多会导致问题(过拟合等)。需要在数据量和参数量之间找到平衡。