学习目标:理解大模型"预测下一个词"的本质,用生活类比掌握Attention/Position等核心概念,建立"原理→行为→调优"的认知链条 --- 一、大模型到底是什么? 1.1 通俗解释:超级"下一个词预测器" 想象一下,你给AI看完了整个互联网上所有"/>
侧边栏壁纸
博主头像
毕业帮 博主等级

提供丰富的资源和服务,涵盖从论文写作、毕业设计、职业规划、就业准备等多个方面

  • 累计撰写 66 篇文章
  • 累计创建 18 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

Part1:Transformer原理大白话:大模型到底怎么"思考"?

流苏
2026-03-03 / 0 评论 / 0 点赞 / 3 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Part1:Transformer原理大白话:大模型到底怎么"思考"?

学习目标:理解大模型"预测下一个词"的本质,用生活类比掌握Attention/Position等核心概念,建立"原理→行为→调优"的认知链条


一、大模型到底是什么?

1.1 通俗解释:超级"下一个词预测器"

想象一下,你给AI看完了整个互联网上所有的书、文章、代码、对话。它不是"记住"这些内容,而是学习语言的统计规律——看到"今天天气很",它知道下一个词大概率是"好",而不是"苹果"。

核心认知:大模型不是"知识库",而是"概率预测器"

  • 训练时:给模型一句话,遮盖最后一个词,让它猜("今天天气很___" → "好")
  • 使用时:给模型开头,让它一个词一个词往下"接龙"
  • 质量来源:训练数据量极大(TB级),模型参数极多(数十亿到数万亿),学到规律足够丰富

1.2 为什么能生成"有逻辑"的答案?

直觉理解:模型通过学习海量文本,掌握了:

  • 语法:主谓宾搭配("我吃饭"而非"饭吃我")
  • 事实:北京是中国首都(出现次数极多)
  • 推理:"太阳从东边升起"+"现在早上8点"→"太阳在东边"

但模型不理解这些知识,只是知道这些Token组合出现概率高。


二、Transformer:大模型的"心脏"(2017年革命性架构)

2.1 为什么需要Transformer?

之前的痛点(RNN/LSTM时代):

  • 像 singly reading(逐个阅读),无法并行计算
  • 长距离遗忘:读到第1000个词,忘了第1个词说了什么
  • 梯度消失/爆炸:训练不稳定

Transformer三大创新

  1. Self-Attention:让每个词直接看到所有词(全局视野)
  2. Positional Encoding:给词打"位置标签"(解决顺序问题)
  3. Residual + LayerNorm:让深层网络可训练(训练稳定性)

三、Self-Attention:核心中的核心

3.1 微信群聊类比(让每个词"学会看上下文")

假设你在一个10人群聊,每条消息被所有人看到:

每个词会做三件事:

  1. Query(我在找什么):每个词会说"我需要关注哪些信息?"

    • 词"很"的Query:我需要知道"形容什么"(天气?人?心情?)
  2. Key(我能提供什么):每个词会自我介绍"我是什么类型"

    • 词"天气"的Key:我是"自然现象"相关词
    • 词"好"的Key:我是"评价/形容词"
  3. Value(我的实际内容):我真正的身份信息

计算匹配度:

"很"问"天气":匹配度0.8 (天气需要形容词修饰)
"很"问"吃":匹配度0.1 (吃的动作不需要"很"修饰)

最后加权汇总:根据匹配度,把相关词的Value加起来,得到"很"的新表示。

效果:词"很"现在知道它和"天气"强相关,和"吃"弱相关。

3.2 Self-Attention计算流程图

输入序列:["猫", "抓", "老", "鼠"]
    ↓
每个词生成三个向量:Query、Key、Value
    ↓
计算注意力得分矩阵(4×4):
      猫  抓  老  鼠
猫 [ 0.1 0.8 0.05 0.05 ]  ← "猫"最关注"抓"
抓 [ 0.7 0.1 0.15 0.05 ]  ← "抓"最关注"猫"
老 [ 0.05 0.1 0.7 0.15 ]  ← "老"最关注"鼠"
鼠 [ 0.05 0.05 0.1 0.8 ]  ← "鼠"最关注"老"
    ↓
Softmax归一化(每行和为1)
    ↓
加权求和:每个词的新表示 = 所有词的Value × 对应得分
    ↓
输出:每个词都有了"看过上下文"的新理解

一句话总结:Attention让每个词都能看到整句话,并学会"该关注谁"。


四、Multi-Head Attention:多专家视角

4.1 为什么需要"多头"?

单一注意力头的局限

  • 可能只学会一种模式(比如语法关系)
  • 信息混合不充分

多头·并行的思路(戴不同眼镜看画):

  • 头1:关注语法结构(主谓宾关系)
  • 头2:关注语义主题(话题相关度)
  • 头3:关注指代关系(代词指代谁)
  • ... 总共8/12/16个头

最终:把所有头的输出拼接起来,再通过一个线性层融合。

4.2 多专家协作示意图

输入一句话
    ↓
┌─────────────────────────────┐
│  分成12个"专家小组"同时工作  │
├─────────┬─────────┬─────────┤
│ 头1     │ 头2     │ 头3...  │
│ 看语法  │ 看主题  │ 看指代  │
├─────────┼─────────┼─────────┤
│ 头4     │ 头5     │ 头6...  │
│ 看情感  │ 看逻辑  │ 看修饰  │
└─────────┴─────────┴─────────┘
    ↓
12个小组各自给出建议
    ↓
汇总所有建议 → 最终答案

工程经验

  • 头数选择:通常8(小模型)、12(Base)、16/32(Large)
  • 可以剪枝:训练后去掉低贡献头,速度↑,精度↓<1%

五、位置编码:给词贴"位置指纹"

5.1 为什么需要位置信息?

Attention本身只看内容相似度,不看顺序:

  • 输入"猫抓老鼠"和"老鼠抓猫",Attention得分一样(对称问题)
  • 但两句话意思完全不同!

解决方案:给每个词额外加一个"位置向量",告诉模型它的位置。

5.2 正弦位置编码(原始方案)

核心思想:用不同频率的正弦波为每个位置生成独特的指纹。

就像每个人的工牌:

  • 位置1:工牌号001
  • 位置2:工牌号002
  • 每个位置有唯一编码,相邻位置相似,远距离差异大

几何直觉:位置i和位置j的编码向量内积 ≈ f(|i-j|) 只和距离有关

5.3 RoPE:旋转位置编码(🌟 当前主流)

核心思想:把词向量看作2D平面上的向量,按位置旋转不同角度。

想象指南针

  • 位置0:指针指向0°
  • 位置1:指针旋转+θ°
  • 位置2:指针旋转+2θ°
  • 位置n:指针旋转+nθ°

关键是:旋转角度只和相对位置有关,所以:

  • 位置3和位置5的距离 = 位置100和位置102的距离(都是2步)
  • 天然支持外推:训练用2K长度,推理可以扩展到8K

RoPE优势

  • ✅ 绝对位置 → 相对位置:位置差m的内积不变
  • ✅ 数学优雅:旋转操作可结合
  • ✅ 无参数:纯数学计算,不占参数
  • 🌟 应用:LLaMA、ChatGLM等主流模型

六、完整Transformer Block:食材的融合

6.1 架构总览(6大组件)

x (输入) 
  ↓
[1] LayerNorm → 让输入更"规矩"
  ↓
[2] Multi-Head Attention → 词与词之间"互相了解"
  ↓
[3] Residual Connection → x + attn_output(保留原始信息)
  ↓
[4] LayerNorm → 再次规范化
  ↓
[5] Feed-Forward Network (FFN) → 每个词自己"思考消化"
  ↓
[6] Residual Connection → x + ffn_output (最终输出)

6.2 各组件作用

LayerNorm(层归一化)

  • 作用:稳定训练,每层输入分布更"规矩"
  • 类比:健身前先热身,避免受伤

Residual Connection(残差连接)

  • 作用:解决梯度消失,让梯度"抄近路"回传
  • 公式:output = x + f(x)
  • 直观:如果f(x)学不好,至少还有x本身

Feed-Forward Network(前馈网络)

  • 作用:对每个位置的表示进行非线性变换,增强模型表达能力
  • 经验:中间维度通常是 d_ff = 4 * d_model(如768→3072→768)

6.3 Pre-LN vs Post-LN(训练稳定性)

Post-LN(原始Transformer)

x → Attention → LayerNorm → 残差

Pre-LN(现代主流)

x → LayerNorm → Attention → 残差

为什么Pre-LN更好?

健身例子:

  • Post-LN:先疯狂训练(梯度爆炸风险),最后才按摩放松(归一化)→ 容易受伤
  • Pre-LN:先热身按摩(归一化),再合理训练 → 更安全稳定

工程经验:现在99%的大模型用Pre-LN。


七、大模型如何生成答案:解码过程

7.1 生成流程(自回归)

像接龙游戏

  1. 你说"今天天气"
  2. 模型预测下一个词是"很"(概率最高)
  3. 你说"今天天气很"
  4. 模型预测下一个词是"好"
  5. 重复直到生成完整回答

关键理解

  • 每次只预测下一个词(不是一次生成整段)
  • 新生成的词追加到输入,再预测下一个 → 自回归(Auto-regressive)
  • 这就是为什么GPT是Decoder-only架构(需要mask避免看到未来词)

7.2 解码策略(影响生成质量)

策略 原理 优点 缺点 适用场景
贪心搜索 每次都选概率最高的词 快、确定 重复、无创意 事实问答
束搜索 保留3-5条候选路径,选整体概率最高 质量好 慢、内存大 翻译、摘要
采样 按概率随机采(引入多样性) 有创意、多样 可能不可控 创意写作
带温度采样 调整概率分布平滑度 可控随机性 需调参 通用场景
Top-p采样 从累积概率90%的词中采样 自适应、常用 计算略复杂 ChatGPT默认

实践建议

  • 🎯 ChatGPT默认:temperature=0.8 + top_p=0.9
  • 🎯 代码生成:temperature=0.2 + top_p=0.5(更确定)
  • 🎯 创意写作:temperature=1.0 + top_p=0.95

Top-p(核采样)直观理解

  • 不固定选几个词,而是看"这些词的概率加起来已经90%了吗?"
  • 在这个范围内再按概率采样
  • 既避免选荒谬的低概率词,又保留一定多样性

八、为什么大模型会"胡说八道"?—— 幻觉问题

8.1 根本原因

  1. 概率生成本质:模型只会"猜最可能的词",不保证事实准确

    • 训练数据中"地球是平的"出现很多(某些历史文本)→ 模型可能学偏
  2. 知识压缩损失:海量知识压缩进参数,必然丢失细节

    • 模型知道"爱因斯坦生于1879",但记不清具体日期
  3. 上下文未覆盖:训练数据截止后的事件一概不知

    • ChatGPT-3.5训练截止2021年 → 不懂2024年奥运会
  4. 推理链断裂:多步推理时,中间步骤出错,最终结果离谱

    • "小明有5苹果,买3袋每袋4个..." → 中间算错3×4=16 → 最终5+16=21

8.2 缓解策略(工程实践)

  • RAG检索增强:提供权威参考资料,减少自由发挥
  • Chain-of-Thought:强制输出推理过程,人工检查中间步骤
  • Self-Consistency:多次采样,选出现最多的答案(降低偶然错误)
  • Fact-Checking工具:调用搜索API验证关键事实
  • 约束解码:禁止特定词汇,限制输出格式

九、训练稳定性:让深层网络可训练

9.1 梯度消失/爆炸问题

现象

  • 梯度消失:深层网络反向传播时,梯度越来越小,前面层几乎不更新
  • 梯度爆炸:梯度越来越大,导致参数突变,损失NaN

原因:链式法则连乘

dL/dW1 = dL/dW2 * dW2/dW1
       = dL/dW3 * dW3/dW2 * dW2/dW1
       = ...
       = Π(各层导数)→ 如果每层导数<1,连乘→0;>1,连乘→∞

9.2 解决方案组合拳

现代Transformer的稳定性三件套

  1. LayerNorm:每层输入标准化为均值0、方差1,避免激活值过大/过小
  2. Pre-LN:归一化在残差块内部,更稳定(对比Post-LN)
  3. Residual:梯度可以直接从output传到input,避免连乘衰减

其他优化

  • 梯度裁剪:限制梯度最大值,防止爆炸
  • 学习率预热:前1000步逐步增大学习率(如1e-6 → 1e-4),避免早期震荡
  • AdamW优化器:解耦权重衰减,防止正则化与自适应学习率冲突(🔥主流)

十、动手任务

任务1:手绘Attention流程图

画出以下流程:

  1. 输入序列"猫 抓 老 鼠" → 转换为词向量
  2. 生成Q/K/V矩阵
  3. 计算Attention Score矩阵(4×4)
  4. Softmax归一化
  5. 加权求和得到输出

任务2:设计"位置编码"小游戏

用Python生成正弦位置编码,验证:

pe = positional_encoding(seq_len=10, d_model=64)
# 计算位置0和位置1的点积,应该≈位置3和位置4的点积(它们距离都是1)
cos_sim = cosine_similarity(pe[0], pe[1])
print(f"位置0和1的余弦相似度: {cos_sim}")

任务3:CRIS框架分析

找一个真实Prompt(如"写一封请假邮件"),用CRIS四要素拆解:

  • Context: 背景是什么?
  • Role: 模型扮演谁?
  • Instruction: 具体指令?
  • Style: 输出格式?

✅ 学习检查点

完成本Part后,您应该能:

  1. 解释为什么大模型本质是"概率预测器"

    • 不是存储知识,而是学习统计规律
    • 通过预测下一个词,涌现出推理能力
  2. 画出Self-Attention完整计算流程

    • Q/K/V生成 → Attention Score → Softmax → 加权求和
    • 能解释每个步骤的数学意义
  3. 对比Pre-LN vs Post-LN

    • Pre-LN为何更稳定?(归一化在残差内)
    • 现代模型为何99%用Pre-LN?
  4. 选择合适解码策略

    • 什么时候用贪心?束搜索?采样?
    • Top-p和Top-k的区别?
  5. 定位幻觉根源

    • 概率生成的固有问题
    • 如何用工程手段缓解?(RAG、CoT、Self-Consistency)

📚 延伸阅读

  • 原始论文:《Attention Is All You Need》(2017)[了解历史背景]
  • 可视化工具:BERTViz(https://github.com/expertise/bertviz)观察注意力头
  • 深入讲解:《The Illustrated Transformer》(Jay Alammar博客,图文并茂)
  • 代码实践:HuggingFace Transformers库的 modeling_llama.py查看RoPE实现

Part 1 结束!
掌握Transformer原理后,您已经理解了"大模型怎么思考"的核心。
下一部分我们将深入 Part 2:Tokenization与Embedding —— 文本如何变成数字,以及词向量如何承载语义。

学习节奏建议:Part 1理论性强,建议2周时间,务必动手实现简化版Attention和位置编码,加深理解。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区