跳到主要内容从 BERT 到 DeepSeek:大模型架构演进、预训练与 RLHF 解析 | 极客日志PythonAI算法
从 BERT 到 DeepSeek:大模型架构演进、预训练与 RLHF 解析
了从 BERT 到 DeepSeek 的大模型架构演进,涵盖 Transformer 变体、RMSNorm、SwiGLU、RoPE 位置编码及 MLA、MoE 等核心技术。阐述了预训练阶段的 Scaling Law 与数据清洗,以及 SFT 指令微调与 RLHF 人类反馈强化学习(含 PPO 算法)的对齐原理。最后通过代码实战分析了推理陷阱与高频面试题,帮助读者深入理解大模型底层逻辑。
橘子海9.8K 浏览 引言
随着 ChatGPT 和 DeepSeek 的爆火,自然语言处理(NLP)进入了'大炼模型'的时代。面对当今动辄千亿参数、采用 MoE 架构和强化学习(RLHF)的 SOTA 大模型,本文基于实战经验与核心理论,深度拆解架构演进、预训练全流程与 RLHF 原理。
一、架构的分野:从 Encoder 到 Decoder-Only
在深度学习框架中,Transformer 家族走向了不同的分支:
- Only Encoder (BERT 代表):拥有双向注意力(能同时看到上下文),非常适合做'理解'任务(如情感分类、实体识别)。但由于其训练目标是'完形填空',在生成(Generation)连续长文本时效率极低。
- Only Decoder (GPT、DeepSeek 代表):采用掩码注意力(Masked Attention),严格遵守'只能看前文,不能看后文'的单向逻辑。
- 绝对优势:完美契合自回归生成(Autoregressive)的需求——像成语接龙一样,根据前置 Token 预测下一个 Token。事实证明,基于 Decoder 架构在算力和数据不断放大的情况下,能产生强大的涌现能力(Emergent Abilities)。
二、内核大换血:DeepSeek 架构深度解密
对比了传统 GPT 与最新大模型(如 DeepSeek)在内部组件上的全方位升级,这是算法岗面试的重灾区:
2.1 归一化升级:LayerNorm --> RMSNorm
传统模型使用 Add & LayerNorm,而新一代模型普遍改用 RMSNorm (Root Mean Square Layer Normalization)。
- 原理:移除了 LayerNorm 中的均值计算(Mean-centering),只计算均方根。
- 收益:在保持模型收敛效果几乎不变的前提下,减少了计算开销,提升了前向传播速度。
2.2 激活函数演进:ReLU/GELU --> SwiGLU
- SwiGLU 引入了门控机制(Gated Linear Unit),结合了 Swish 激活函数。虽然这会让该层的参数量增加,但大量实验表明,SwiGLU 能显著提升大模型的性能和收敛稳定性。
2.3 革命性的位置编码:绝对位置 --> RoPE (旋转位置编码)
RoPE (Rotary Position Embedding) 是目前 Llama 和 DeepSeek 等顶尖模型标配的位置编码技术。
- 死记硬背问题:早期的绝对位置编码(如 BERT)是给每个位置分配一个固定的 ID 向量。模型只记住了'第 1 个词'和'第 500 个词'是什么。
- 外推性极差:如果模型训练时只见过 512 个词,当你给它一个 1000 词的文本时,它完全不知道第 513 个词的位置信息该怎么处理,因为它没学过那个 ID。
- 把向量当成指针:想象每个词向量都是一个罗盘上的指针。
第 2 个词旋转 2 度;
第 1 个词旋转 1 度;
旋转代表位置:我们在处理第 n 个词时,就把它的向量旋转 n*θ 的角度。
3. 数学上的'神来之笔':相对位置的转化 模型在计算注意力时,会计算词 m 和词 n 的点积。在 RoPE 下,神奇的事情发生了:词 m 旋转了 mθ,词 n 旋转了 nθ。当它们相乘时,绝对的角度(位置)会抵消,剩下的结果只取决于 (m-n)*θ。
- 结论:虽然我们给模型输入的是绝对旋转角度,但模型最终感知到的是两个词之间的相对距离。
2.4 显存刺客的克星:MHA --> MLA (多头潜在注意力)
长对话推理中,最大的瓶颈是 KV Cache(键值缓存) 导致的显存爆炸。
- DeepSeek 的 MLA:引入低秩压缩技术,将高维的 KV 矩阵压缩为一个低维的潜在向量 (Latent Vector)。
- 工程收益:极大降低了推理显存占用,从而可以成倍地提高
Batch Size(单卡同时服务更多用户),是 DeepSeek 降低 API 成本的核心技术。
2.5 算力分配艺术:Dense FFN --> DeepSeekMoE (混合专家模型)
- MoE(混合专家模型):将庞大的网络拆分成多个'专家'。借助 Router(路由) 动态激活最合适的几个专家(如只激活 8/64)。
- DeepSeek 的独创:
- 细粒度 (Fine-Grained):大专家拆碎,路由组合更灵活。
共享专家 (Shared Experts):剥离出永远激活的专家处理标点、基础语法等'通用知识',让其他专家专心钻研复杂知识,彻底避免了'专家坍塌'。
三、大模型的'血肉':预训练与 GPT 的演进
在进入微调之前,模型必须先经历漫长的预训练(Pre-training)阶段,这就好比让一个婴儿在图书馆里阅读千万本书籍。
3.1 缩放定律 (Scaling Law):大力出奇迹的物理学
OpenAI 在研发 GPT 系列时发现了一个残酷但有效的真理:Scaling Law。
- 核心规律:模型的 Loss(错误率)与计算量(Compute)、数据集大小(Data Size)、**参数量(Parameters)**呈极其稳定的幂律关系。
- 启示:只要这三个要素按比例放大,模型的智力就会无上限地提升。这也是为什么从 GPT-1 到 GPT-3,参数量从 1.17 亿飙升到了 1750 亿。
3.2 模型的数据口粮:数据清洗与 Tokenization
大模型无法直接吃进原始文本,必须经过严格的预处理:
- 数据清洗与去重:从 Common Crawl 等网页抓取的数据包含大量垃圾信息。必须经过启发式过滤、MinHash 去重,以保证数据的纯净度
- Tokenization(分词):
- 现代大模型普遍采用 BPE (Byte Pair Encoding) 或 WordPiece 算法。
- 它不是按词汇表死板切分,而是基于统计频率,将常用词(如 "apple")保留为一个 Token,生僻词切分为词根词缀。这不仅压缩了上下文长度,还完美解决了 **OOV(未登录词)**问题。
3.3 核心任务:Next Token Prediction 与涌现能力
在整个预训练阶段,大模型只做一道题:猜下一个词(Next Token Prediction)。
- 自监督学习:不需要人工打标签。给模型看'床前明月',让它预测'光';预测错了就通过交叉熵损失(Cross Entropy Loss)计算梯度并反向传播更新参数。
- 涌现能力 (Emergent Abilities):当模型阅读了数万亿个 Token 后,奇迹发生了。为了极高的准确率预测下一个词,模型'被迫'学会了语法、逻辑、甚至世界知识。这被称为 In-Context Learning(上下文学习)能力的涌现。
四、注入灵魂:大模型的微调与价值观对齐
经历完预训练的模型,虽然博学,但只是一个'无情的文档续写机'。为了让它变成像 ChatGPT 一样的智能助手,必须进行 SFT 和 RLHF。
4.1 阶段二:SFT (指令微调 / Supervised Fine-Tuning)
- 操作:构造数万条高质量的人工问答数据,手把手教模型。
- 目的:通过监督学习,让模型学会'问答的格式'和'遵循指令(Instruction Following)'。
4.2 阶段三:RLHF (人类反馈强化学习) —— 对齐价值观
如果模型给出了两个都符合语法逻辑的答案,如何判断哪个更礼貌、更安全?这就需要 RLHF 出场。
第一步:训练 Reward Model(奖励模型) 给模型同一个 Prompt,生成 A 和 B 两个回答。人类标注员进行排序(Selected vs Rejected)。用这些偏好数据训练一个 Reward Model 替人类打分。
这是最难懂的部分。如果 SFT 是'老师教学生',那么 PPO (Proximal Policy Optimization) 就是'教练训狗'。
1. 核心公式拆解
:这是奖励分。如果整句话说得好,R 就是正的高分;说得差,R 就是负分。
:梯度的方向。这代表'如果我想让这个词出现的概率变大,模型参数
:代表模型在当前状态 s 下,生成词 a 的概率(取对数是为了计算方便)。
2. 直观逻辑:奖优罚劣
- 情况 A(高分回答):当 R 是正数时,公式就是在增加这些 Token 出现的概率。
- 情况 B(低分回答):当 R 是负数时,公式就是在降低这些 Token 出现的概率。
- 总结:模型通过不断地试错,拿高分的路径被不断强化,拿低分的路径被抑制。
3. '训狗'类比与 KL 散度约束
- PPO 的'近端'意义:训练时,你不能为了让狗学会新动作,就把它打得连主人的脸都忘了。决定了每次模型更新的幅度不会太大
KL 散度约束:这就是那根'牵引绳'。它限制了模型更新的幅度。如果新模型
改变太大(KL 散度过高),系统就会强行拉回来。这保证了模型在学习'礼貌'的同时,不会把预训练学到的'知识'给丢了。
Policy Gradient(策略梯度):狗做对了给骨头(
五、代码实战:模型推理的底层陷阱
理论必须落地于代码。在深度学习实战中,加载模型进行推理时,有两个致命陷阱:
model = AutoModelForSequenceClassification.from_pretrained('./best_model')
model.eval()
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predictions = torch.argmax(logits, dim=-1)
- 为什么要
model.eval()? 如果不加这一行,Dropout 层会继续随机丢弃神经元,BatchNorm 会继续计算当前单一数据的均值方差,导致同样的输入每次预测出的概率都会微小跳动,结果极不稳定。
- 为什么要
torch.no_grad()? 在推理阶段,我们不需要反向传播更新参数。告诉 PyTorch 停止构建计算图,可以瞬间节省 50% 以上的显存,并大幅提升推理速度。
六、高频面试题总结 (FAQ)
Q1:为什么 Transformer 推理时很吃显存?
答: 因为它是自回归生成的,需要保存历史上下文中所有 Token 的 Key 和 Value 矩阵(即 KV Cache),避免重复计算。随着文本长度增加,KV Cache 显存占用呈线性增长。DeepSeek 采用 MLA 机制,将 KV 矩阵压缩为 Latent Vector(浅向量),大幅缓解了这一问题。
Q2:简单解释一下 DeepSeek 的 MoE 是如何防止专家坍塌的?
答: 传统 MoE 在训练时,Router 可能会将所有 Token 倾向性地分配给少数几个'碰巧前期学得好'的专家。DeepSeekMoE 一方面采用了更**细粒度(Fine-Grained)**的切分扩大选择面,另一方面设置了'共享专家(Shared Experts)'专门处理标点、语法等高频共性知识,让细粒度专家被迫在特定专业领域进行竞争,从而有效防止了坍塌。
Q3:简述大模型 Pre-training 和 SFT 阶段的区别?
答: Pre-training 是利用海量无标注数据做 Next Token Prediction,目的是让模型掌握人类语言的规律和世界知识,此时模型是发散的;SFT 是利用高质量人工编写的 Prompt-Response 对进行微调,目的是规范模型的输出格式,让它从'续写机器'变成'听从指令的问答助手'。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online