深入学习Transformer(一)

  • 一、大模型的发展
    • [1.1 NLP大模型族谱](#1.1 NLP大模型族谱)
    • [1.2 ChatGPT 的 RLHF(基于人类反馈的强化学习) 的完整训练流程](#1.2 ChatGPT 的 RLHF(基于人类反馈的强化学习) 的完整训练流程)
      • [1.2.1 PPOvsDPO](#1.2.1 PPOvsDPO)
    • [1.3 AGIvs传统学习](#1.3 AGIvs传统学习)
    • [1.4 大模型发展路径](#1.4 大模型发展路径)
    • [1.5 中文大模型生态](#1.5 中文大模型生态)
  • 二、大模型是如何练成的
    • [2.1 大模型训练整体流程](#2.1 大模型训练整体流程)
    • [2.2 模型训练的具体流程](#2.2 模型训练的具体流程)
    • [2.3 TRM的应用](#2.3 TRM的应用)
      • [2.3.1 TRM的整体架构](#2.3.1 TRM的整体架构)
      • [2.3.2 Attention 背后的 Intuition](#2.3.2 Attention 背后的 Intuition)
      • [2.3.3 位置编码](#2.3.3 位置编码)
      • [2.3.4 self-Attention自注意力机制](#2.3.4 self-Attention自注意力机制)
      • [2.3.5 多头注意力](#2.3.5 多头注意力)
      • [2.3.6 整体Encoder](#2.3.6 整体Encoder)
      • [2.3.7 三种注意力](#2.3.7 三种注意力)
      • [2.3.7.1 Encoder 全注意力 VS Decoder 掩码注意力](#2.3.7.1 Encoder 全注意力 VS Decoder 掩码注意力)
      • [2.3.7.2 Encoder-Decoder Attention / Cross-Attention](#2.3.7.2 Encoder-Decoder Attention / Cross-Attention)

一、大模型的发展

1.1 NLP大模型族谱

1.2 ChatGPT 的 RLHF(基于人类反馈的强化学习) 的完整训练流程

流程说明:

  1. 从数据集中采样一个新的 prompt
    示例:"Write a story about frogs"(写一个关于青蛙的故事)
  2. 策略模型(PPO)生成输出
    图中神经网络标注为 PPO(Proximal Policy Optimization,近端策略优化算法)
    生成的输出示例:"Once upon a time..."
  3. 奖励模型(RM)对该输出计算奖励分数
    RM 网络给出一个奖励值 r_k
  4. 用这个奖励值通过 PPO 算法更新策略模型
    形成闭环(图中有箭头从 r_k 指回 PPO),不断迭代优化

1.2.1 PPOvsDPO

1.3 AGIvs传统学习

维度 传统深度学习范式 大模型预训练-微调范式
代表模型 传统的 CNN、RNN 等专用模型 GPT-3 base 等通用大模型(AGI)
数据依赖 每个任务都需要大量标注数据 基座预训练需要海量数据,下游任务仅需少量数据
训练成本 每个任务都要从零训练,算力浪费严重 基于通用基座微调,成本低、落地快
模型性质 专才(一事一议) 通才(一脑多用)

1.4 大模型发展路径

维度 观察结论
技术路线 Decoder-Only 一统天下,Encoder-Only 基本退出历史舞台
参数规模 从2018年的1.17亿(GPT-1)→ 2023年的万亿级(GPT-4)
开源 vs 闭源 早期以闭源为主,2022年后开源模型(LLaMA、BLOOM、OPT)爆发
关键转折点 2020年 GPT-3 证明了"大力出奇迹";2022年 ChatGPT 引爆行业
研究方向 从"更大"转向"更聪明":指令微调(Instruct)、RLHF、MoE 稀疏化

1.5 中文大模型生态

中心主题

  • 这张图以 Awesome-Chinese-LLM 为中心,表示它是中文大模型生态的汇总入口。
  • 周围分出不同模型家族,展示 2023 年中文大模型"百花齐放"的状态。

三大重点底座

  • LLaMA 系列底座:英文开源底座中文化,是中文社区改造最多的一条路线。
  • ChatGLM 系列底座:国产自研,对话能力强,适合做垂直领域微调。
  • Baichuan 系列:国产自研底座,是中文大模型的重要代表。

两条发展路线

  • 借船出海:基于 LLaMA、BLOOM、Falcon 等英文开源底座,加入中文语料和中文指令数据进行改造。
  • 自主造船:以 ChatGLM、Baichuan、Qwen、InternLM、Moss 等国产模型为代表,强调自主可控。

垂直领域落地

  • ChatGLM 分支展示了医疗、法律、数学、心理、金融等方向。
  • 这说明中文大模型不只是做通用聊天,更重要的是面向具体行业场景落地。

二、大模型是如何练成的

2.1 大模型训练整体流程

2.2 模型训练的具体流程

上半部分:三条训练路线

  • 路线①:架构设计 + 训练
    从 Transformer 结构开始,自己设计架构、准备约 1T token 数据,再经过 Pretrained Model → SFT → Alignment。这是最完整、也最贵的路线,适合 OpenAI、Meta 这类巨头。
  • 路线②:架构复用 + 训练
    不从零设计架构,而是复用公开架构并做少量修改,再自己喂海量数据训练。它省掉了架构研发成本,但数据和算力成本依然很高,例如 Baichuan
  • 路线③:增量训练
    直接复用已有预训练模型的权重,在此基础上继续训练。它可以做垂直领域扩展,也可以做语言扩展,是中小团队和行业模型最常用的路线。

下半部分:金融 LLaMA 案例

  • 起点是通用底座 LLaMA
  • 通过增量预训练,把金融领域知识注入模型,得到 金融 LLaMA
  • 最后再用金融指令数据做 SFT,让模型学会财报解读、投研问答、行情分析等具体任务。

数据配方的关键

  • 金融领域数据 300B:用于注入金融知识,例如财报、公告、研报、财经新闻、金融术语。
  • 通用数据 500B:用于保住模型原本的语言能力,防止灾难性遗忘。
  • 这里的核心不是"只喂专业数据",而是要让模型做到"既专业,又通用"。

一句话总结

  • 路线①最强但最贵,路线②省架构但仍然贵,路线③最适合行业落地。
  • 垂直领域大模型的主流公式是:
    通用底座 + 领域/通用混合增量预训练 + SFT

2.3 TRM的应用

2.3.1 TRM的整体架构

Encoder Block:负责理解输入

  • Encoder 的核心结构是:Self-Attention → Feed-forward
  • Self-Attention 让输入序列自己看自己,每个 token 都能结合整句上下文。
  • Feed-forward / FFN 负责对每个位置的向量进一步加工,增强表达能力。

Decoder Block:负责生成输出

  • Decoder 的核心结构是:Masked Self-Attention → Encoder-Decoder Attention → Feed-forward
  • Masked Self-Attention 只能看已经生成的内容,不能偷看未来 token。
  • Encoder-Decoder Attention 让 Decoder 回头看 Encoder 输出,是连接"理解"和"生成"的桥梁。

三种 Attention 的区别

  • Self-Attention:源句内部抓重点。
  • Masked Self-Attention:译文内部协调,但不能看未来。
  • Encoder-Decoder Attention / Cross-Attention:译文回头看源句,实现输入和输出之间的对齐。

和现代大模型的关系

  • BERT 是典型 Encoder-only,偏理解。
  • T5 是典型 Encoder-Decoder,适合翻译、摘要。
  • GPT / LLaMA / ChatGPT 是典型 Decoder-only,也是现代生成式大模型的主流路线。

上方:相关词会互相注意

  • 句子 The boy is holding a blue ball 中,boyholdingball 之间有较强注意力连接。
  • 这表示模型理解 ball 时,不是孤立看这个词,而是会关注"谁拿着球""球和哪个动作有关"。

下方:同一个 it 指向不同对象

  • it was hungry 中,it 更关注 cat,因为"饿"通常描述猫。
  • it was sweet 中,it 更关注 milk,因为"甜"通常描述牛奶。
  • 两句话只改了最后一个词,但注意力焦点发生了变化。

Self-Attention 的作用

  • Self-Attention 可以自动完成类似"代词指代消解"的任务。
  • 同一个 it 在不同上下文中,会融合不同信息,得到不同的 Vector
  • 这就是"上下文决定词义"的直观体现。

self 体现在哪里

  • self 指的是:句子自己注意自己。
  • 也就是 Q / K / V 都来自同一个输入序列。
  • 如果 Q 来自 Decoder,K/V 来自 Encoder,那就是 Cross-Attention,不叫 Self-Attention。

2.3.2 Attention 背后的 Intuition

左侧:文本为什么要变成向量

  • 机器不能直接理解文字,所以要把单词或句子的含义表示成 Vector
  • 语义相近的文本,向量也应该相近,例如 价格很贵价格高
  • 但静态向量有问题:同一个词在不同上下文中含义不同,比如 吃苹果买苹果手机

中间:Transformer 的目标

  • Transformer 要做的事不是简单保存一个固定词向量。
  • 它要学习"更好的 Vector":
    新向量 = 词本身 + 上下文信息

右侧:Attention 的直觉

  • Attention 可以理解为"看书抓重点"。
  • 人读书时不会平均看每个字,而是会关注关键句、关键词。
  • 模型也是一样:它会给不同 token 分配不同的注意力权重。

Self-Attention 的作用

  • Self-Attention 表示句子内部的 token 互相看。
  • 每个 token 会结合整句话的上下文,重新生成一个更准确的向量。
  • 所以它解决的核心问题是:让词义不再是固定的,而是随上下文变化。

2.3.3 位置编码

底部:文本先变成 Word IDs

  • 一次输入 5 个样本,每个样本长度是 4
  • 所以原始输入批次形状是 5 × 4
  • 每个词先通过词表转换成整数编号,例如:
    Hello My five word → [17, 31, 88, 102]

左侧分支:Embedding

  • Embedding 本质是查表。
  • 每个 Word ID 会查出一个词向量。
  • 这里教学简化为 embed size = 3,所以形状从 5 × 4 变成 5 × 4 × 3
  • 这部分主要提供"语义信息"。

右侧分支:Position Encoding

  • 位置编码只和位置有关,不和具体单词有关。
  • 核心位置表是 4 × 3,对应 4 个位置、每个位置 3 维。
  • 因为有 5 个样本,所以它会广播复制成 5 × 4 × 3
  • 这部分主要提供"顺序信息"。

中间汇合:逐元素相加

  • EmbeddingsPosition Encodings 形状相同,都是 5 × 4 × 3
  • 所以可以逐元素相加:
    Encoder Input = Embeddings + Position Encodings
  • 相加后,每个 token 向量同时包含"这个词是什么"和"这个词在第几个位置"。

顶部:送入 Encoder

  • 最终得到的 Encoder Input 形状仍然是 5 × 4 × 3
  • 它会进入 Transformer Encoder,继续经过 Self-Attention → Add&Norm → FFN 等结构。

为什么需要位置编码

  • Self-Attention 本身没有顺序概念。
  • 如果不加入位置信息,模型只知道有哪些 token,却不知道哪个词在前、哪个词在后。
  • 所以需要给每个 token 额外加上一个 Positional Encoding

正弦 / 余弦公式的作用

  • 偶数维使用 sin,奇数维使用 cos
  • pos 表示词在句子中的位置,对应矩阵的行。
  • i 表示向量维度索引,对应矩阵的列。
  • 不同维度使用不同频率,让位置编码具有丰富的周期模式。

矩阵怎么理解

  • 位置编码矩阵大小是:Seq Len × d_model
  • 每一行对应一个词的位置,例如第 1 行对应 Hello
  • 蓝色圈出的整行才是一个完整的位置编码向量,不是单独一个格子。

怎么送入 Transformer

  • 每个 token 先通过 Word Embedding 得到词向量。
  • 再取出对应位置的 PE(pos)
  • 两者逐元素相加:
    Word Embedding(token) + PE(pos) = 最终输入向量
  • 最后送入 Self-Attention 层。

一句话总结

  • 位置编码就是给词向量加上"第几个词"的信息,让 Transformer 在理解文本时不仅知道词的含义,也知道词的先后顺序。

2.3.4 self-Attention自注意力机制

步骤 Thinking (x₁) Machines (x₂)
Embedding x₁ x₂
Q/K/V q₁, k₁, v₁ q₂, k₂, v₂
Score q₁·k₁=112, q₁·k₂=96 q₂·k₁, q₂·k₂
÷ √d_k (=8) 14, 12 缩放后的分数
Softmax 权重 0.88, 0.12 (w₂₁, w₂₂)
输出 z₁ = 0.88v₁ + 0.12v₂ z₂ = w₂₁v₁ + w₂₂v₂

相当于一个q,然后跟不同的k进行匹配

  1. 先把词变成向量
    • Thinking → x1
    • Machines → x2
    • 此时只是普通词向量,还没有上下文信息。
  2. 生成 Q / K / V
    • 每个词都会通过三个矩阵生成:q, k, v
    • q 用来"找上下文",k 用来"被匹配",v 是真正要被加权汇总的信息。
  3. 以 Thinking 为主角计算 z1
    • q1 · k1 = 112
    • q1 · k2 = 96
    • 除以 sqrt(d_k)=8 后变成 14, 12
    • 再经过 softmax 得到权重:0.88, 0.12
  4. 得到新向量
    • z1 = 0.88v1 + 0.12v2
    • 也就是 Thinking 的新表示里,主要保留自己,同时融合一点 Machines 的上下文信息。
  5. Q / K / V 的直觉
    • Query:搜索词,表示"我想找什么信息"。
    • Key:索引标签,表示"我是什么信息"。
    • Value:实际内容,表示"被选中后贡献什么"。
  6. 矩阵公式
    • Attention(Q,K,V) = softmax(QK^T / sqrt(d_k))V
    • QK^T 得到所有词之间的相关性分数。
    • Softmax 把每一行归一化成注意力权重。
    • 最后乘 V,得到所有 token 的新向量 Z
  7. 为什么能并行
    • x1, x2, x3 可以同时进入 Self-Attention。
    • 一次矩阵乘法就能算出所有词之间的注意力关系。
    • 所以 Transformer 比 RNN 更容易并行计算。
  8. 一句话总结
    • Self-Attention 本质就是:
      Query 检索 Key 得到权重,再用权重汇总 Value,最终得到上下文向量 Z

总结:

2.3.5 多头注意力

顶部:共享输入 X

  • 同一个输入矩阵 X 会被送入 8 个注意力头。
  • 这里 X 的形状是 2×4,两行分别对应 ThinkingMachines
  • 8 个头看到的是同一个输入,但每个头使用不同参数。

中间:8 个 Head 并行计算

  • 每个 head 都有自己独立的 W_h^Q / W_h^K / W_h^V
  • 每个 head 都独立执行一遍 Self-Attention:
    head_h = softmax(Q_hK_h^T / sqrt(d_k))V_h
  • 每个头输出一个 Z_h,本图中每个 Z_h 的形状是 2×3

底部:Merge 合并

  • 先把 Z0, Z1, ..., Z7 横向拼接:
    Concat(Z0, Z1, ..., Z7) → 2×24
  • 再乘输出矩阵 W^O
    2×24 × 24×4 → 2×4
  • 最终得到的 Z 形状回到 2×4,可以继续送入下一层。

为什么是 8 个头

  • 每个头可以学习一种不同的注意力模式。
  • 有的头可能关注语法,有的关注指代,有的关注相邻词,有的关注全局关系。
  • 真实 Transformer 常见设置是 d_model=512, h=8,每头 64 维,拼接后仍是 512 维。

一句话总结

  • 多头自注意力就是:
    同一个 X → 8 个独立 Head 并行计算 → 得到 Z0...Z7 → Concat → W^O → 最终 Z
  • 记忆口诀:同输入、异参数、并行算、拼接合

多头的基本思想

  • 同一个输入矩阵 X 会同时送入多个 Attention Head。
  • 每个 head 都有自己独立的 W^Q / W^K / W^V
  • 所以多头不是复制同一个结果,而是让模型从多个不同视角理解句子。

每个 Head 内部做什么

  • 每个头都会独立执行一遍 Self-Attention:
    • Q = XW^Q
    • K = XW^K
    • V = XW^V
    • Z_h = softmax(Q_hK_h^T / sqrt(d_k))V_h
  • 本图用 2 个头演示,分别得到 Z0Z1

Merge 怎么做

  • 先把多个 head 的输出横向拼接:
    Concat(Z0, Z1) → 2×6
  • 再乘输出矩阵 W^O 做线性融合:
    2×6 × 6×4 → 2×4
  • 最终输出 Z 的维度回到和输入 X 一样,方便送入下一层。

为什么多头更强

  • 单头只能学一套注意力模式。
  • 多头可以自动分工:有的关注语法,有的关注指代,有的关注相邻词,有的关注全局关系。
  • 它有点像集成学习:多个注意力视角合并,得到更强的表示。

记忆口诀

  • 同输入、异参数、并行算、拼接合
  • 也就是:同一个 X,不同参数的多个 head 并行计算,最后 Concat + W^O 合并。

拼接

顶部:共享输入 X

  • 同一个输入矩阵 X 会被送入 8 个注意力头。
  • 这里 X 的形状是 2×4,两行分别对应 ThinkingMachines
  • 8 个头看到的是同一个输入,但每个头使用不同参数。

中间:8 个 Head 并行计算

  • 每个 head 都有自己独立的 W_h^Q / W_h^K / W_h^V
  • 每个 head 都独立执行一遍 Self-Attention:
    head_h = softmax(Q_hK_h^T / sqrt(d_k))V_h
  • 每个头输出一个 Z_h,本图中每个 Z_h 的形状是 2×3

底部:Merge 合并

  • 先把 Z0, Z1, ..., Z7 横向拼接:
    Concat(Z0, Z1, ..., Z7) → 2×24
  • 再乘输出矩阵 W^O
    2×24 × 24×4 → 2×4
  • 最终得到的 Z 形状回到 2×4,可以继续送入下一层。

为什么是 8 个头

  • 每个头可以学习一种不同的注意力模式。
  • 有的头可能关注语法,有的关注指代,有的关注相邻词,有的关注全局关系。
  • 真实 Transformer 常见设置是 d_model=512, h=8,每头 64 维,拼接后仍是 512 维。

一句话总结

  • 多头自注意力就是:
    同一个 X → 8 个独立 Head 并行计算 → 得到 Z0...Z7 → Concat → W^O → 最终 Z
  • 记忆口诀:同输入、异参数、并行算、拼接合

总结:

2.3.6 整体Encoder

底部:输入 X 的来源

  • ThinkingMachines 先变成词嵌入。
  • 再加上 Positional Encoding,得到真正送入 Encoder 的输入 X
  • 这一步对应:词义信息 + 位置信息

第一个子层:Multi-Head Self-Attention

  • Self-Attention 负责让 token 之间互相看。
  • 它输出的 Z1 / Z2 已经融合了上下文信息。
  • 直观理解:注意力负责"位置间交流"和"收集上下文"。

第一次 Add & Normalize

  • 公式是:
    Z = LayerNorm(X + MultiHeadAttn(X))
  • 这里的 X + ... 就是残差连接。
  • 残差负责保留原始信息、缓解深层训练困难;LayerNorm 负责稳定数值分布。

第二个子层:Feed Forward Network

  • FFN 对每个 token 位置独立处理。
  • 它不负责 token 之间交流,而是负责对每个位置的向量做非线性加工。
  • 真实 Transformer 中常见维度变化是:512 → 2048 → 512

第二次 Add & Normalize

  • 公式是:
    Ẑ = LayerNorm(Z + FFN(Z))
  • 最终输出 Ẑ1 / Ẑ2,可以送入下一层 Encoder。
  • 因为输入 X 和输出 形状相同,所以 Encoder 可以层层堆叠。

一句话总结

  • 一个 Encoder 层 = Multi-Head Self-Attention + Add&Norm + Feed Forward + Add&Norm
  • 注意力负责交互,FFN 负责加工,残差和 LayerNorm 保证深层网络能稳定训练。

2.3.7 三种注意力

左侧:Encoder 负责理解源句

  • 输入 Thinking Machines 先经过 Embedding + Positional Encoding
  • 每个 Encoder 层包含:Self-Attention → Add & Norm → Feed Forward → Add & Norm
  • 多个 Encoder 层堆叠后,顶层输出就是源句的上下文表示。

中间:Encoder 输出作为 K/V 传给 Decoder

  • 蓝色虚线箭头表示:Encoder 顶层输出会传给每一个 Decoder 层。

  • 复制代码
    Encoder-Decoder Attention

    中:

    • Q 来自 Decoder;
    • K/V 来自 Encoder。
  • 这一步就是翻译/生成任务里"目标句回头看源句"的桥梁。

右侧:Decoder 负责生成目标句

  • Decoder 比 Encoder 多一个注意力子层。
  • 它的结构是:Masked Self-Attention → Encoder-Decoder Attention → Feed Forward
  • Masked Self-Attention 保证生成时只能看过去,不能偷看未来。
  • Encoder-Decoder Attention 负责查询 Encoder 提供的源句信息。

顶部:Linear + Softmax 生成下一个词

  • Decoder 栈顶输出先经过 Linear,投影到词表大小。
  • 再经过 Softmax,得到每个候选词的概率。
  • 推理时选择或采样一个 token,再回填到 Decoder 输入,直到生成 <EOS>

2.3.7.1 Encoder 全注意力 VS Decoder 掩码注意力

对比 Encoder 的全句双向注意力与 Decoder 的因果单向注意力。

展示 softmax 前加入 Mask Matrix 的机制。

强调 Decoder 上三角 -inf 会让未来位置权重变成 0。

适合放在"为什么 Decoder 不能偷看答案"这一页。

2.3.7.2 Encoder-Decoder Attention / Cross-Attention

用 Thinking Machine is good → LLM is funny 展示源句与目标句的跨序列对齐。

明确 Q 来自 Decoder,K/V 来自 Encoder。

用 3×4 热力矩阵体现"目标词 × 源词"的非方阵结构。

底部汇总三种注意力:Encoder Self-Attn、Decoder Masked Self-Attn、Encoder-Decoder Attn。

相关推荐
腾讯数据架构师1 小时前
摩尔线程 GPU 怎么接入 Kubernetes 跑 DeepSeek?CubeStudio 摩尔线程(MUSA)适配实操
人工智能·云原生·容器·kubernetes·开源·mlops·maas
liliangcsdn1 小时前
skewness收益偏度取负因子背后逻辑的探索
人工智能·算法·机器学习
yyxx4121231 小时前
钉钉专属版一年多少钱?2026最新价格
大数据·人工智能·物联网
雷帝木木1 小时前
DVC数据版本控制实战:让训练数据像代码一样可追溯
人工智能·python·深度学习·机器学习
楠楠子呀1 小时前
号码验证技术解析:从原理到实践
运维·人工智能·ai·electron·自动化
AI棒棒牛1 小时前
YOLO26最新创新改进系列:Dirichlet 分类证据 + DER 连续框不确定性,独家超强创新!
人工智能·分类·数据挖掘
月光船幽幽1 小时前
五层探针的哲学跃迁
人工智能·python
爱莉希雅&&&1 小时前
Git 版本控制完整学习笔记
笔记·git·学习
Kari111 小时前
AgentOps 七大闭环 vs 传统 Agent 开发:腾讯云 ADP CSP 授权服务商 JOTO 解析生产级落地的本质差异
大数据·人工智能·腾讯云