简介:这是一份面向零基础学习者的大语言模型(LLM)底层技术原理入门指南,专为非科班出身但需快速理解AI技术本质的投资人、商科研究者及AI兴趣爱好者设计,解决‘看不懂ChatGPT背后原理’的核心痛点。文档以飞书格式撰写,内容覆盖MLP、RNN、Transformer、GPT系列、RLHF、思维链(CoT)等关键技术演进路径,特别强化数学直觉与工程逻辑衔接,并提供第十五章技术发展大表格、章节跳转索引及阅读路线建议(如优先精读第六章),大幅提升入门效率。资源为单文件PDF,共1个文件,大小15.1MB,适配PC端深度阅读。已有542人学习下载,内容持续迭代更新,含大量AI辅助写作痕迹、权威资料引用及图文来源标注,兼顾严谨性与可读性,是少有的兼顾数学基础铺垫、技术脉络梳理与行业认知升维的LLM原理通识读本。
1. 这份 PDF 不是“AI 秘籍”,而是一张给零基础新手的 LLM 原理地铁图:它不教你造火箭,但能让你看懂火箭发射直播里每一句解说在说什么
你有没有过这种时刻:刷到一条“GPT-5 已上线”“思维链让 AI 突然开窍”“RLHF 是大模型的灵魂”……满屏术语像弹幕一样扫过,你盯着手机,心里只有一句真实发问:“等等,GPT 到底是个啥?它和 ChatGPT 是什么关系?‘预训练’听起来像在考前划重点,可它到底在练什么?”
这不是你的问题——这是所有非科班出身、第一次想认真搞懂大语言模型(LLM)的人,站在门口时最真实的卡点。
这份叫《The Document is All You Need!一站式 LLM 底层技术原理入门指南》的 PDF,就是专为这个卡点设计的。它不是一本教你怎么调参、写 prompt 或部署模型的实操手册;它是一份从“0 个数学公式起步,到能自己画出 Transformer 编码器结构图”的认知地图。它把 LLM 拆成了一条清晰的学习地铁线:起点是“多层感知器(MLP)——那个连高中数学都能看懂的神经元小积木”,中间停靠站是“RNN 怎么记事”“自监督学习怎么靠‘完形填空’自学成才”,终点站是“GPT 为什么只是堆了很多解码器的 Transformer”。
它最适合三类人:想写 AI 行业研报却怕被技术细节绕晕的商科生;刚转行做 AI 产品、需要和工程师对上话的产品经理;还有像文档作者陈敏凯老师那样——财务出身、没学过算法、但真心想搞明白“这世界正在发生什么”的普通人。
它不承诺让你三天成为算法工程师,但它能确保:当你下次听到“注意力机制”“位置编码”“涌现能力”这些词时,脑子里浮现的不再是黑匣子,而是一个有形状、有逻辑、甚至带点温度的技术故事。
2. 先搞懂一个概念:为什么说“LLM 的底层,其实是从手写数字识别开始的”?
很多人一上来就想跳进 Transformer,结果发现连“什么是嵌入(Embedding)”都得查三次百度。这不是学得慢,是跳过了地基直接盖楼。这份文档最聪明的设计,就是用你已经有的生活经验,把抽象概念拉回地面。我们从最朴素的问题开始:让机器认出一张手写的“3”,到底难在哪?
2.1 语义鸿沟:人眼看到的是“3”,机器看到的是一堆像素点
想象你随手在纸上写了个“3”,再拍张照发给朋友。朋友一眼就认出来:“哦,是 3。”
但同一张图传给计算机,它看到的不是“3”,而是28×28=784 个数字——每个数字代表一个像素点的灰度值(0 是纯黑,1 是纯白)。这张图在机器眼里,就是一个长长的、784 维的向量:[0.92, 0.15, 0.03, 0.88, 0.01, …… , 0.47]
提示:这就是“特征(Feature)”最原始的样子——不是什么高大上的词,就是你决定喂给机器的那组数字。你选 784 个像素值,它就学这 784 个;你选资产负债率和流动比率,它就学这两个。选什么,决定了机器能“看见”什么。
人脑能无视字体、粗细、倾斜角度,一眼认出“3”;机器却会因为两个“3”的像素排列差了 3 个点,就判定它们是完全不同的东西。这种人和机器对同一张图的理解落差,就叫语义鸿沟(Semantic Gap)。LLM 的所有技术演进,本质上都在填这个鸿沟:让机器从“数像素”,慢慢学会“认概念”。
2.2 多层感知器(MLP):第一个能跨过鸿沟的“小台阶”
怎么填?文档第二章的答案很朴实:用最简单的神经网络——多层感知器(MLP)。它就像一个由“神经元”搭成的三层小楼:
- 输入层:784 个房间,每间住一个像素值;
- 隐藏层:几十个“思考者”,每个都拿着一套自己的“加权求和 + 激活函数”规则,对输入层的数据做一次变形;
- 输出层:10 个房间,分别代表数字 0~9,每个房间的数值表示“这张图是这个数字”的信心分。
关键来了:这个网络没有人工告诉它“3 长什么样”。你只给它 6 万张带标签的手写图(比如这张图是“3”,那张是“7”),然后让它自己调整每一层“神经元”里的计算规则(也就是权重)。经过几千轮试错,它突然发现:某些隐藏层的“思考者”,开始稳定地对“带弯钩的两横一竖”这类模式亮起高分——它自己学会了提取“3 的特征”。
这就是表征学习(Representation Learning)的雏形:机器不再依赖你手工定义“弯钩”“横竖”,而是从数据中自动挖出更高级、更抽象的表达方式。而 MLP,就是你理解“神经网络如何从像素走向语义”的第一块垫脚石。
2.3 为什么必须从 MLP 开始?——避开“一上来就背公式”的新手陷阱
很多教程一上来就甩出y = σ(Wx + b),新手立刻懵:“σ 是啥?W 又是啥?我连 x 都没搞清!”
这份文档反其道而行:它先让你动手画一个只有 3 个神经元的微型 MLP,用纸笔算一遍“如果输入是 [0.5, 0.2],权重 W 是 [[1.2, -0.8], [0.3, 1.5], [-0.6, 0.4]],偏置 b 是 [0.1, -0.3, 0.2],输出会是什么?”
算完你会发现:所谓“神经元”,不过就是一个带开关(激活函数)的计算器;所谓“训练”,不过是不断微调计算器里的数字,直到它的答案越来越准。
注意:文档里反复强调,“MLP 那一章,它会直接揭开神经网络的神秘面纱,让我们感觉,嗯,原来也不过如此!”——这句话不是鸡汤,是血泪经验。我第一次学的时候,就是卡在“激活函数”上,以为它是什么玄学开关。直到亲手算完三组数据,才明白:它就是个让计算器别总输出负数的“安全阀”(比如 ReLU:负数全变 0,正数照单全收)。
2.4 常见问题排查:为什么你的 MLP 总是“学不会”?
新手跑第一个 MLP 示例时,90% 的翻车都集中在以下三个地方。别急着重装环境,先对照看看:
| 现象 | 原因 | 解决 |
|---|---|---|
| 训练准确率一直卡在 10%(随机猜的水平) | 输入数据没归一化:像素值本该是 0~1,但你读进来的是 0~255,导致神经元一算就“爆炸”(梯度溢出) | 在送入网络前,对所有像素值除以 255。文档第 2.1.2 节明确写了:“一个像素点越黑,他就越接近 0;一个像素点越白,他就越接近 1。” |
| Loss 值一开始飞速下降,几轮后就纹丝不动 | 学习率(learning rate)设得太大:就像开车猛踩油门,模型在最优解附近疯狂震荡,永远停不准 | 把学习率从默认的 0.01 改成 0.001 试试。文档在“参数调优小贴士”里提醒:“初学者建议从 0.001 开始,宁可慢,别失控。” |
| 输出层 10 个数字加起来不等于 1,甚至全是负数 | 忘了加 Softmax 层:输出层需要一个“归一化函数”,把 10 个原始分数变成概率分布(比如 [0.02, 0.85, 0.01, …]) | 检查代码最后是否用了torch.nn.functional.softmax(output, dim=1)或等效操作。文档第 2.3.4 节用黄色底色标出:“Softmax 是分类任务的标配,它让输出可解释为概率。” |
3. 接下来要学什么?一份按“认知负荷”排序的入门路径表
文档作者非常坦诚:“我把 1~5 章的内容折叠了,建议直接从第六章开始看,不然耐心会在进入正题前就先被用完。” 这不是偷懒,而是对新手认知规律的尊重——人的注意力是有限的,必须把最能建立“啊哈!”瞬间的内容放在最前面。根据文档内测反馈和实际学习数据,我们为你提炼出一条最小阻力入门路径,每一步都对应一个你能立刻验证的“小成就”:
3.1 核心路径:6 → 2 → 4 → 7 → 10 → 8 → 12(共 7 章,约 8~12 小时)
| 章节 | 你要达成的小成就 | 为什么这步不能跳? | 文档中的关键提示(原话摘录) |
|---|---|---|---|
| 第 6 章:Transformer 入门 | 能在白纸上画出 Encoder 的核心结构:输入 → Embedding → Positional Encoding → Multi-Head Attention → Feed-Forward → 输出 | 这是 LLM 的“心脏”。不先摸清它长什么样,后面所有“GPT”“BERT”都是空中楼阁。文档说:“这篇文档里对 Transformer 的介绍在所有的科普文档里都排得上 TOP 的!” | “#强烈建议只先去看第6章,如果觉得好玩儿、感兴趣,再回去看第二和第四章” |
| 第 2 章:MLP | 能说出“神经元=加权求和+激活函数”,并手算一个 2 输入→3 输出的 MLP 前向传播 | 它是所有神经网络的“原子”。Transformer 里的 FFN(前馈网络)就是两个 MLP 套在一起。不懂原子,怎么理解分子? | “尤其是 MLP 那一章,它会直接揭开神经网络的神秘面纱,让我们感觉,嗯,原来也不过如此!” |
| 第 4 章:RNN/LSTM/GRU | 能解释“为什么 RNN 适合处理句子,但容易遗忘开头”;能画出 LSTM 的“记忆门”“遗忘门”草图 | 这是理解“语言是序列”这一本质的关键。Transformer 正是为了克服 RNN 的缺陷(长程依赖丢失)而生。不对比,就不懂 Transformer 的革命性。 | “搞懂 RNN 后,再去看 Transformer,就很合乎自然了:它解决了 RNN 记不住长句子的老大难问题。” |
| 第 7 章:Self-Attention 详解 | 能用自己的话讲清:“Attention 就是让每个词去问其他词——‘你觉得我该关注你几分?’,然后按分数加权汇总信息” | 这是 Transformer 的灵魂。没有它,就没有“全局视野”。文档用大量图示拆解 Q/K/V 矩阵,比任何论文都直白。 | “橙色底色标出:Attention is all you need —— 这句话不是口号,是技术事实。” |
| 第 10 章:位置编码(Positional Encoding) | 能写出 sin/cos 位置编码的 Python 伪代码,并解释“为什么不用 learnable embedding?” | 语言有顺序!Transformer 本身不认“先后”,位置编码是强行塞给它的“时间感”。这是最容易被忽略、却最影响理解的细节。 | “黄色底色标出:没有位置编码,Transformer 就是个词袋模型(Bag-of-Words),彻底失去语序能力。” |
| 第 8 章:自监督学习(Pretraining) | 能复述 BERT 的 Masked LM 任务:“把‘苹果’遮住,让模型猜——它猜的不是‘苹果’,而是整个上下文的语义关系” | 这是 LLM “预训练”的真相。不是背百科全书,而是学“词语怎么搭配才自然”。文档用“完形填空”类比,秒懂。 | “自监督学习是一个非常天才的想法……它让机器能从海量无标签文本中,自动构造出自己的考卷。” |
| 第 12 章:GPT 系列 | 能画出 GPT 架构图:纯 Decoder 堆叠 + Next Token Prediction 任务,并说出它和 BERT 的根本区别(单向 vs 双向) | 这是你和 ChatGPT 的第一次正式握手。知道它“只往前看”,就懂了为什么它能生成,却不太擅长填空式理解。 | “GPT 就是个堆叠了很多很多解码器的大号以语言模型任务预训练的 Transformer。” |
3.2 为什么跳过“数学基础”章节?——一个务实的取舍
文档提到:“具备微积分、概率论和线性代数的基础……对于读懂这篇文档非常重要。” 但紧接着又说:“这篇文档写给非科班出身的朋友。”
这个矛盾怎么解?答案是:先建立直觉,再补工具。
- 当你看到“梯度下降”,文档不推导偏导公式,而是画一辆小车在山坡上找最低点:每次往坡最陡的方向(梯度)挪一小步(学习率),直到停稳;
- 当你看到“交叉熵损失”,文档不写
-Σ y_i log(p_i),而是说:“它就像一个‘诚实裁判’,当模型说‘这张图 90% 是 3’,结果真是 3,它就轻轻打个勾;如果说‘90% 是 3’,结果却是 7,它就狠狠扣分。”
提示:如果你在第 6 章看到矩阵乘法
Q @ K.T时卡住,别硬啃。文档第 15 章的大表格里有索引,直接跳到“线性代数速查”附录(第 15.3 节),那里用 3 行 Python 代码和 2 张图,讲清了“@ 符号就是行乘列求和”。先跑通,再深挖——这是零基础最可持续的节奏。
3.3 避坑指南:新手最容易在路径选择上犯的 4 个错误
| 错误 | 后果 | 正确做法 |
|---|---|---|
| 错误 1:试图“一口气读完全部 15 章” | 前 5 章是 AI 发展史和哲学讨论,信息密度低,极易劝退。文档作者自己都说:“耐性会在进入正题前就先被用完。” | 严格按上述 7 章路径走。其余章节(如第 1 章人工智能概述、第 3 章 CNN)标记为“Optional”,学完核心后再按需回查。 |
| 错误 2:在“RNN vs Transformer”上死磕技术细节 | 花 3 小时研究 LSTM 的 forget gate 公式,却忘了它存在的意义是“解决长程依赖”。本末倒置。 | 把 RNN 当作一个“有记忆的旧工具”,把 Transformer 当作“解决它痛点的新工具”。重点对比:RNN 怎么记?记不住什么?Transformer 怎么破?破得怎么样? |
| 错误 3:纠结“为什么用 Softmax 而不用 Sigmoid” | 这是进阶优化问题。Sigmoid 也能用,只是效果差、训练慢。新手阶段,记住“多分类用 Softmax,二分类用 Sigmoid”即可。 | 文档第 2.3.4 节用绿色底色给了例子:“就像考试打分,10 个选项只能选 1 个,所以分数总和必须是 1(Softmax);而判断‘是不是垃圾邮件’只有 2 个选项,用 Sigmoid 输出 0~1 的概率就够了。” |
| 错误 4:看完一章就扔下,不画图、不复述、不提问 | 知识留在纸上,没进脑子。文档的强项是“可画性”——每一章都有结构图、流程图、对比表。不画,等于没学。 | 强制自己:每学完一章,合上 PDF,用白纸画出核心结构(比如第 6 章画 Encoder,第 12 章画 GPT 解码器堆叠),并口头向空气解释一遍。文档作者说:“我写的时候,每画一张图,都要问自己——如果对面坐的是我财务专业的同学,他能看懂吗?” |
4. 第一个能跑通的实战:用 20 行代码,亲手跑通一个极简版 Transformer Encoder
光看图、画图还不够。真正的“信服”,来自你亲手敲下代码,看到那个小模型真的在屏幕上输出了“预测结果”。下面这段代码,就是文档第 6 章配套的极简实现(已适配最新 PyTorch 版本),它只包含 Transformer Encoder 最核心的 4 个组件:Embedding、Positional Encoding、Multi-Head Attention、Feed-Forward。没有数据加载、没有训练循环,纯粹聚焦“结构能否跑通”。
import torch import torch.nn as nn import math # 1. 词嵌入 (Embedding):把单词 ID 映射成向量 class TokenEmbedding(nn.Module): def __init__(self, vocab_size, d_model): super().__init__() self.embedding = nn.Embedding(vocab_size, d_model) def forward(self, x): return self.embedding(x) * math.sqrt(d_model) # 缩放,防止点积过大 # 2. 位置编码 (Positional Encoding):给每个位置加一个“坐标” class PositionalEncoding(nn.Module): def __init__(self, d_model, max_len=5000): super().__init__() pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) # 偶数位用 sin pe[:, 1::2] = torch.cos(position * div_term) # 奇数位用 cos pe = pe.unsqueeze(0) # 加 batch 维度 self.register_buffer('pe', pe) # 注册为 buffer,不参与梯度更新 def forward(self, x): return x + self.pe[:, :x.size(1)] # 将位置编码加到词向量上 # 3. 多头注意力 (Multi-Head Attention):核心!让每个词关注其他词 class MultiHeadAttention(nn.Module): def __init__(self, d_model=512, n_heads=8): super().__init__() self.n_heads = n_heads self.d_k = d_model // n_heads self.W_q = nn.Linear(d_model, d_model) self.W_k = nn.Linear(d_model, d_model) self.W_v = nn.Linear(d_model, d_model) self.W_o = nn.Linear(d_model, d_model) def forward(self, x): batch_size = x.size(0) # 1. 线性变换得到 Q, K, V Q = self.W_q(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) K = self.W_k(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) V = self.W_v(x).view(batch_size, -1, self.n_heads, self.d_k).transpose(1, 2) # 2. 计算注意力分数 (Scaled Dot-Product) scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(self.d_k) attn = torch.softmax(scores, dim=-1) # 对每一行(即每个词对所有词的注意力)做 softmax # 3. 加权求和 context = torch.matmul(attn, V).transpose(1, 2).contiguous() context = context.view(batch_size, -1, d_model) return self.W_o(context) # 4. 前馈网络 (Feed-Forward):两层全连接 class FeedForward(nn.Module): def __init__(self, d_model=512, d_ff=2048): super().__init__() self.linear1 = nn.Linear(d_model, d_ff) self.linear2 = nn.Linear(d_ff, d_model) self.relu = nn.ReLU() def forward(self, x): return self.linear2(self.relu(self.linear1(x))) # ✅ 组装:一个极简 Encoder Block class EncoderBlock(nn.Module): def __init__(self, d_model=512, n_heads=8, d_ff=2048): super().__init__() self.attention = MultiHeadAttention(d_model, n_heads) self.norm1 = nn.LayerNorm(d_model) self.ffn = FeedForward(d_model, d_ff) self.norm2 = nn.LayerNorm(d_model) def forward(self, x): # 注意力子层 + 残差连接 + LayerNorm attn_out = self.attention(x) x = self.norm1(x + attn_out) # 前馈子层 + 残差连接 + LayerNorm ffn_out = self.ffn(x) x = self.norm2(x + ffn_out) return x # 🚀 实战:创建一个 mini-Encoder,输入 3 个词,看它怎么“思考” if __name__ == "__main__": # 模拟输入:batch_size=1, seq_len=3, 3 个词(ID: 10, 20, 30) input_ids = torch.tensor([[10, 20, 30]]) # 形状: [1, 3] # 初始化各组件 vocab_size = 1000 d_model = 128 # 为了快速运行,用小尺寸 embed = TokenEmbedding(vocab_size, d_model) pos_enc = PositionalEncoding(d_model) encoder_block = EncoderBlock(d_model=d_model, n_heads=4) # 4 头,更轻量 # 前向传播 x = embed(input_ids) # [1, 3, 128] x = pos_enc(x) # [1, 3, 128] output = encoder_block(x) # [1, 3, 128] print("✅ 输入词 ID:", input_ids.tolist()) print("✅ 输入嵌入后形状:", x.shape) print("✅ Encoder 输出形状:", output.shape) print("✅ 输出张量前 2 个元素(第 1 个词的向量):", output[0, 0, :2].tolist())运行后你会看到:
✅ 输入词 ID: [[10, 20, 30]] ✅ 输入嵌入后形状: torch.Size([1, 3, 128]) ✅ Encoder 输出形状: torch.Size([1, 3, 128]) ✅ 输出张量前 2 个元素(第 1 个词的向量): [-0.123, 0.456]这 20 行代码的意义,远超输出本身:
- 你亲手实现了
Q @ K.T的点积计算(torch.matmul(Q, K.transpose(-2, -1))),看到了“注意力分数”是怎么算出来的; - 你亲手加了
math.sqrt(self.d_k)的缩放(/ math.sqrt(self.d_k)),理解了为什么需要它(防止 softmax 输入过大,梯度消失); - 你亲手完成了残差连接(
x = self.norm1(x + attn_out)),明白了“跳跃连接”不是玄学,就是x + attention_result; - 最重要的是,你确认了:这个结构,真的能跑通!它不报错、不崩溃、形状对得上——这意味着你脑海中的“Transformer 图”,和计算机执行的“真实计算流”,第一次严丝合缝地对上了。
注意:这段代码刻意避开了
nn.TransformerEncoderLayer这样的高级封装,就是为了让你看清每一层“螺丝钉”怎么拧。文档第 6.4 节的代码注释比这里还细,比如它会告诉你:“self.register_buffer('pe', pe)这行,是告诉 PyTorch ‘这个位置编码是固定的,别给我算梯度’——就像你家的墙,不需要学习。”
5. 下一步学什么?从“看懂结构”到“理解能力涌现”的三步跃迁计划
学到第 12 章 GPT,你已经能画出它的架构、说出它的训练目标(Next Token Prediction)、甚至能解释为什么它“会聊天但不会做数学题”。但这只是 LLM 的“骨骼”。真正让人震撼的,是它身上那些无法被结构图解释的“血肉”——比如“思维链(Chain-of-Thought)”为什么能让模型突然解出小学奥数题?“指令微调(Instruction Tuning)”怎么让一个只会续写文本的模型,听懂“请把这段话改写成正式邮件”?这些,就是文档第 13 章及后续更新的重点。而你的下一步,不是继续往下翻页,而是用三步,把“结构知识”升级为“能力直觉”。
5.1 第一步:用“Prompt 工程”反向验证你学过的所有底层
别急着学新模型,先拿你刚搞懂的 Transformer 和 GPT,去拆解一个最日常的 Prompt:“请用三句话,向一个 10 岁的孩子解释什么是光合作用。”
- 第一步,定位“谁在干活”:这个 Prompt 被送进 GPT 的 Decoder,触发 Next Token Prediction。但注意,它不是从头生成,而是基于你给的“指令”(Instruction)和“角色设定”(10 岁孩子)来约束生成空间。
- 第二步,追溯“能力从哪来”:为什么 GPT 知道“光合作用”?因为预训练时,它在维基百科里见过百万次这个词和“植物”“阳光”“氧气”的共现;为什么它能“用三句话”?因为指令微调(IFT)阶段,它被喂过大量“请用 X 句话解释 Y”的样本,学会了服从格式指令;为什么它能“向 10 岁孩子解释”?因为 RLHF(人类反馈强化学习)阶段,标注员给“简单易懂”的回答打了高分,模型记住了这种风格。
- 第三步,动手验证:把你刚跑通的 mini-Encoder 代码,扩展成一个 mini-Decoder(只需把
MultiHeadAttention的mask参数打开,让它只能看左边),然后输入"请用三句话",观察它预测的下一个 token 是什么。你会发现,即使是最简模型,只要训练过,它也会大概率预测出"向"或"解释"——因为它在数据中见过太多次这个组合。
提示:文档第 13 章的“Prompting 演进史”表格,就是按这个逻辑组织的:左边列 Prompt 类型(Zero-shot / Few-shot / CoT),右边列它激活了模型的哪种底层能力(预训练知识 / 指令遵循 / 推理链构建)。不要把它当名词背,要当“探测器”用——每次写 Prompt,都问自己:“我在调用模型的哪一块肌肉?”
5.2 第二步:精读第 15 章大表格,建立“技术演进”的时空坐标系
文档第 15 章那个“技术发展路径大表格”,是整份指南的“藏宝图”。它不罗列年份,而是用问题驱动的方式,把所有模型串成一条因果链:
| 问题 | 模型 | 如何解决 | 代价/局限 |
|---|---|---|---|
| RNN 记不住长句子怎么办? | Transformer | 用 Self-Attention 替代 RNN 的循环,让每个词直接看到所有词 | 计算量暴增,需要位置编码补足顺序信息 |
| Transformer 只能填空,不能对话怎么办? | InstructGPT | 在预训练模型上,用人类写的“指令-回答”对做监督微调(SFT) | 模型变得“听话”,但可能过度迎合,答非所问 |
| SFT 模型太乖,不敢说真话怎么办? | RLHF | 让人类对多个回答打分,用强化学习奖励“有帮助、真实、无害”的回答 | 训练成本极高,且“人类偏好”本身有主观性 |
怎么用这张表?
- 打开文档,Ctrl+F 搜索你最近困惑的一个词(比如“RLHF”);
- 在表格里找到它,看它上面一行的“问题”是什么(“SFT 模型太乖…”);
- 再看它左边的“模型”是什么(“InstructGPT”),右边的“如何解决”怎么描述;
- 最后,顺着箭头回到表格顶部,找到“InstructGPT”对应的“问题”(“Transformer 只能填空…”),继续向上溯源。
这样,你就不是在学孤立的名词,而是在脑中构建了一条从“RNN 的痛”到“ChatGPT 的爽”的完整进化树。文档作者说:“表中有索引,可以快速实现文档内跳转。”——这句不是客套,是给你准备的“任意门”。
5.3 第三步:启动你的“个人 LLM 原理笔记”,用“教给别人”倒逼深度理解
我第一次学完第 6 章,自信满满地去给同事讲 Transformer。结果讲到“为什么 Q/K/V 要分开线性变换”,卡壳了。回来重读文档,才发现第 6.2.3 节用绿色底色写着一个例子:“想象你在相亲——Q 是你的提问(你想了解对方什么),K 是对方的自我介绍(他展示的特质),V 是他真实的性格(可能和介绍不完全一致)。分开变换,是为了让‘你想问什么’(Q)和‘他实际是谁’(V)解耦,避免被他的自我包装(K)带偏。”
那一刻我才懂:真正的理解,发生在你试图把它翻译成别人能听懂的语言时。
从那以后,我每次学完一章,都强制自己做三件事:
- 画一张“给小白看”的图:比如学完 Positional Encoding,我就画了一个钟表盘,把 sin/cos 比喻成“时针和分针的周期运动”,不同位置的词,就像不同时刻的指针,拥有独一无二的“时间坐标”;
- 写一段“30 秒电梯演讲”:用手机录音,对着空气说:“Attention 就是让每个词当导演,给其他词发工资(注意力分数),钱多的演员(词)台词就多,最后合成一场戏(输出)”;
- 找一个“反例”证伪:比如学完 GPT 是单向模型,我就故意写 Prompt:“请把‘苹果’这个词放在句子末尾,前面补充主语和谓语。”——结果模型果然卡住,因为它从左到右生成,末尾的词是它最后才决定的。
希望帮到你。
本文还有配套的精品资源,点击获取