尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

diy-llm 第4章:语言模型架构和训练的技术细节

diy-llm 第4章:语言模型架构和训练的技术细节 第四章语言模型架构和训练的技术细节本章核心不是重新学一遍 Transformer而是理解标准 Transformer 的组件是什么、现代 LLM 为什么要改这些组件、超参数如何选择以及大模型训练时如何保证稳定性。目录4.1 快速回顾标准 Transformer 架构4.1.1 位置编码正余弦位置编码4.1.2 多头注意力机制4.1.3 LayerNorm 与残差连接4.1.4 前馈网络与激活函数4.2 Transformer 的现代变体4.2.1 归一化4.2.2 前馈网络4.2.3 激活函数4.2.4 位置编码4.2.5 注意力机制变体4.3 超参数考量与设计原则4.4 模型稳定性4.5 本章总结整章知识链路4.1 快速回顾标准 Transformer 架构Transformer 最早由 2017 年的Attention Is All You Need提出。核心变化是用Self-Attention取代 RNN/CNN使序列能够并行计算同时更直接地建模长距离依赖。一个 Transformer Block 可以抽象成Input │ ├── Positional Encoding │ ▼ Multi-Head Attention │ ▼ Residual LayerNorm │ ▼ Feed Forward Network │ ▼ Residual LayerNorm │ ▼ Output因此标准 Transformer 的四个核心组件是Position Attention Residual / Norm FFN4.1.1 位置编码正余弦位置编码Self-Attention 本身没有序列顺序概念。例如我 爱 你 和 你 爱 我如果没有 Position Encoding对 Attention 来说只是相同 Token 的重新排列。因此需要Token Embedding Position Encoding ↓ Transformer Input原始 Transformer 使用固定的正余弦位置编码PE(pos, 2i) sin(pos / 10000^(2i/d_model)) PE(pos, 2i1) cos(pos / 10000^(2i/d_model))不同维度对应不同频率低维、高频 ↓ 更擅长区分附近位置 高维、低频 ↓ 覆盖更长距离它的优势是不增加可训练参数数值稳定不同位置拥有唯一模式能一定程度表达相对位置关系核心理解Attention 负责理解“谁和谁有关”Position Encoding 负责告诉模型“谁在谁前面、距离多远”。4.1.2 多头注意力机制Attention 的本质可以理解为根据相关程度对其他 Token 的信息做加权求和。首先从输入得到X ├── Wq → QQuery ├── Wk → KKey └── Wv → VValue核心公式Attention(Q,K,V) softmax(QKᵀ / √d_k)V可以直观理解为QKᵀ ↓ “我要关注谁” Softmax ↓ “每个人应该给多少权重” × V ↓ “把相关信息取回来”为什么除以√d_k因为维度增大后Q、K 点积的方差会越来越大Softmax 更容易进入饱和区域从而导致梯度变小。缩放后可以控制数值范围提高训练稳定性。为什么需要 Multi-Head单头 Attention 只能学习一组关系多头则将表示空间拆成多个子空间Head 1 Head 2 Head 3 Head 4 │ ▼ 不同 Attention Pattern │ ▼ Concat │ ▼ Linear Projection不同 Head 有机会学习不同关系例如局部语法 长距离依赖 语义关联 指代关系虽然具体 Head 学到了什么通常不可直接确定。核心理解Multi-Head Attention 的价值不是简单把 Attention 做很多次而是让模型同时从多个表示子空间理解 Token 之间的关系。4.1.3 LayerNorm 与残差连接LayerNormLayerNorm 用来控制神经网络内部激活值的分布。基本过程Input ↓ 减 Mean ↓ 除 Standard Deviation ↓ γ × x β其中γ可学习缩放参数β可学习偏置参数核心作用控制激活分布 ↓ 减少数值漂移 ↓ 稳定梯度 ↓ 帮助深层网络训练Residual ConnectionResidual Connectionx ─────────────────┐ │ │ ▼ │ SubLayer(x) │ │ │ └────── x ◀──────┘即y x F(x)它给信息和梯度提供了一条直接通路。如果某一层没有学到有价值的东西F(x) ≈ 0 那么 y ≈ x因此网络至少可以保留原输入而不会因为层数越来越深不断破坏已有信息。原始 TransformerPost-Norm原始结构SubLayer ↓ Residual ↓ LayerNorm即LayerNorm(x F(x))核心理解Residual → 解决深层网络的信息和梯度传播 LayerNorm → 解决数值分布和训练稳定性二者共同让深层 Transformer 成为可能。4.1.4 前馈网络与激活函数Attention 完成 Token 之间的信息交换之后FFN 对每个 Token 单独进行非线性加工。原始 Transformerd_model ↓ Linear ↓ d_ff ↓ ReLU ↓ Linear ↓ d_model经典配置512 ↓ 2048 ↓ 512即d_ff ≈ 4 × d_modelAttention 和 FFN 的角色可以这样区分Attention → Token 与 Token 之间交换信息 FFN → 每个 Token 内部加工信息ReLUReLU(x) max(0, x)它计算简单、效率高并通过非线性让多层网络不至于退化成一个线性变换。一个合格的激活函数通常需要非线性基本可微计算成本低4.2 Transformer 的现代变体2017 年之后 Transformer 并没有发生“推倒重来”式的革命而是在各个组件上不断进行改造。整体演化Component原始 Transformer现代 LLMNormalizationPost-LayerNormPre-Norm / RMSNorm / Double NormFFNLinear BiasNo BiasActivationReLUGELU / SwiGLU / GeGLUPositionSin/CosRoPEAttentionMHAMQA / GQA / Sparse / MLA 等BlockAttention → FFN主流仍以串行为主这反映出一个重要趋势现代 LLM 的架构创新本质是在模型能力、训练稳定性、显存占用和硬件效率之间寻找更好的平衡。4.2.1 归一化归一化主要发生了两个方向的变化放在哪里 怎么算Post-Norm → Pre-Norm原始 TransformerPost-Norm x ↓ SubLayer ↓ x ↓ LayerNorm现代 TransformerPre-Norm x ↓ LayerNorm ↓ SubLayer ↓ xPre-Norm 最大价值是保持 Residual Stream 干净。这样梯度可以沿着 Residual Path 更直接地从顶层传播到底层。因此Pre-Norm ↓ 梯度传播更稳定 ↓ 更适合深层 Transformer这也是现代大型 Transformer 广泛采用 Pre-Norm 的重要原因。LayerNorm → RMSNormLayerNorm减 Mean 除 Standard Deviation Scale BiasRMSNorm不减 Mean 只做 RMS Scaling也就是把贡献有限的步骤删掉。这样可以减少计算减少 Memory Access减少参数获得近似甚至相当的模型性能这里和第三章的Arithmetic Intensity可以直接联系起来LayerNorm FLOPs不多 但Memory Access很多 ↓ 容易成为 Memory-Bound 操作所以 RMSNorm 属于典型的模型架构 GPU 系统协同优化。Double Norm近期一些模型进一步采用Norm ↓ Attention / FFN ↓ Norm ↓ Residual也就是子层前后都进行归一化。典型思路依然没有变化尽量控制进入 Residual Stream 的数值提升超深网络的稳定性。归一化演进总结Post-Norm ↓ Pre-Norm ↓ RMSNorm ↓ Pre Post / Double Norm核心目标始终是Training Stability System Efficiency4.2.2 前馈网络原始 TransformerWx b ↓ ReLU ↓ Wx b现代模型大量采用Wx ↓ Activation ↓ Wx即移除 Bias。原因包括参数更少 Memory Access 更少 实现更简单 训练可能更加稳定Bias 的计算量虽然小但需要读取额外参数而且属于算术强度较低的操作。因此和 RMSNorm 类似如果一个操作带来的模型收益非常有限却持续增加内存访问和稳定性风险那就把它删掉。4.2.3 激活函数激活函数大致经历ReLU ↓ GELU ↓ GLU ↓ GeGLU / SwiGLUReLUReLU(x) max(0,x)优点简单快梯度计算便宜缺点是 0 点不平滑。GELUGELU 可以看作更加平滑的 ReLU。GPT-1、GPT-2、GPT-3 等模型曾广泛使用。优势更加平滑 梯度性质较好缺点计算比 ReLU 复杂GLU门控机制GLU 引入一个非常重要的思想让模型自己决定哪些信息通过。可以理解为┌── Content ─────┐ Input ──────────┤ × ─→ Output └── Gate ────────┘Gate 会根据当前输入动态产生不同权重。因此传统 Activation → 固定函数处理数据 GLU → 输入决定哪些信息应该通过GeGLU 与 SwiGLUGLU 家族中GLU ↓ GeGLU ↓ SwiGLUSwiGLU 已成为很多现代 LLM 的常见配置例如 LLaMA、PaLM 等。现代典型 FFNInput ├──────────→ Linear ────────────┐ │ × └→ Linear → SiLU / Swish ──────┘ ↓ Linear ↓ Output核心理解现代 FFN 不再只是“升维 → 激活 → 降维”而越来越像一个带动态 Gate 的信息过滤器。4.2.4 位置编码位置编码的主要发展路线Absolute Position ↓ Relative Position ↓ RoPE正余弦绝对位置编码原始 TransformerToken Embedding Position Embedding ↓ Input优点无参数简单可计算任意位置但核心问题是它首先编码的是“我在第几个位置”。RoPERotary Position EmbeddingRoPE 更关注两个 Token 相隔多远。它不是简单把位置向量加到 Input而是在 Attention 中直接旋转 Q、K。Q(positionm) ↓ Rotate(m) K(positionn) ↓ Rotate(n) ↓ Q · Kᵀ ↓ 包含 m-n其关键数学关系是R(m)R(n)ᵀ R(m-n)因此最终 QK 点积能够自然包含Relative Position m - n高维 RoPE高维向量可以拆成多个二维向量[x1, x2] [x3, x4] [x5, x6] ...每一对维度分别进行不同频率的旋转。于是高频旋转 → 捕捉近距离变化 低频旋转 → 捕捉远距离信息这和 Sin/Cos Position Encoding 的多频率思想其实高度一致。区别是Sin/Cos → 在 Transformer 输入前加入位置 RoPE → 直接把位置作用到 Q/K 的 Attention 计算中核心理解RoPE 的本质是利用旋转矩阵把“相对距离”编码进 QK 内积。4.2.5 注意力机制变体这是现代 LLM 架构优化中最重要的部分之一。核心问题来自Autoregressive Generation生成 Token 时Token 1 ↓ Token 2 ↓ Token 3 ↓ Token 4 ...无法像训练一样把未来 Token 全部并行计算。KV Cache历史 Token 已经计算过 K、VToken 1 → K1 V1 Token 2 → K2 V2 Token 3 → K3 V3生成 Token 4 时没有必要再重复计算 K1、K2、K3。于是历史 K/V ↓ KV Cache ↓ 直接读取KV Cache用 Memory 换 Compute。MHA标准 Multi-Head AttentionHead1 → Q1 K1 V1 Head2 → Q2 K2 V2 Head3 → Q3 K3 V3 Head4 → Q4 K4 V4问题Head 越多 ↓ K/V 越多 ↓ KV Cache 越大MQAMulti-Query AttentionQ1 ─┐ Q2 ─┤ Q3 ─┼──── Shared K / V Q4 ─┘即Q 独立 K/V 共享优势KV Cache ↓↓↓ Memory Bandwidth ↓ Inference Speed ↑代价是可能牺牲部分表达能力。GQAGrouped Query Attention 是 MHA 与 MQA 的折中Q1 ─┐ Q2 ─┴→ K1 V1 Q3 ─┐ Q4 ─┴→ K2 V2因此MHA │ │ 能力强 / KV大 │ ▼ GQA │ │ 折中 │ ▼ MQA KV越来越小GQA 特别适合 LLM 推理。原因不仅是显存降低更重要的是第三章讲过的Arithmetic Intensity自回归推理时大量读取 KV CacheMemory Access ↑ Compute 相对较少 ↓ Memory-Bound减少 K/VMemory Traffic ↓ ↓ Arithmetic Intensity ↑ ↓ GPU Utilization ↑因此GQA 本质上同时优化了 KV Cache 和显存带宽瓶颈。Sparse / Sliding Window Attention完整 Attention当前 Token ↓ 关注所有历史 Token序列越长成本越高。Sliding Window当前 Token ↓ 只看附近 N 个 Token于是 Attention 成本明显降低。但完全局部 Attention 又可能失去长程能力因此现代方案越来越倾向Local ↓ Local ↓ Local ↓ Global ↓ Local ↓ Local ↓ Local ↓ Global即局部 Attention 负责效率全局 Attention 负责长距离依赖。4.3 超参数考量与设计原则确定 Transformer 的组件之后还要决定每个组件到底应该多大本章强调一个重要事实现代 LLM 的超参数并不是完全随机搜索而是已经形成了大量经验规律。4.3.1 FFN 大小对于普通 ReLU / GELU FFNd_ff ≈ 4 × d_model例如d_model 4096 d_ff ≈ 16384对于 GLUd_ff ≈ 8/3 × d_model ≈ 2.67 × d_model原因是 GLU 多了一条 Gate 分支因此为了保持类似参数规模需要适当减少 hidden dimension。但这个比例不是铁律。T5 曾经使用过非常极端的 FFN 扩张比例也说明超参数更多是经验最优区间而不是严格数学定律。4.3.2 Attention Heads 与模型维度通常d_model ≈ num_heads × head_dim典型思路是保持 head_dim 相对稳定 模型变大时增加 num_heads如果 head dimension 过小单个 Attention Head ↓ 表达空间过低 ↓ 可能出现低秩问题因此 Head 数量并不是越多越好。4.3.3 模型 Width vs Depth扩大模型有两条路径Width ↑ 或者 Depth ↑从模型表达能力角度两者都可以增加参数量。但从系统角度Wide Model ↓ 大矩阵 ↓ Tensor Parallel 更自然 Deep Model ↓ 更多 Layer ↓ Pipeline ParallelPipeline Parallel 会带来Pipeline Bubble Scheduling Complexity因此真实世界中的模型设计不是纯数学问题而是Model Quality GPU Parallelism Network Communication共同决定。核心理解模型的 Width / Depth实际上也是分布式系统设计问题。4.3.4 Vocabulary Size早期单语言模型30K ~ 50K现代多语言模型往往100K ~ 250K更大的词表可以让一个词 / 字符串 ↓ 更少 Token尤其对于低资源语言Token 数量 ↓ ↓ Sequence Length ↓ ↓ Inference Cost ↓所以 Vocabulary Size 并不只是 NLP 问题也直接影响Inference Cost4.3.5 Dropout 与 Weight Decay传统深度学习中Dropout Weight Decay主要用于防止过拟合。但 LLM Pretraining 非常特殊Data 数量巨大 通常只训练很少 Epoch因此很难出现传统意义上的过拟合。现代趋势Dropout ↓ 越来越少使用 Weight Decay ↓ 仍然普遍存在有意思的是Weight Decay 在 LLM 中未必主要作为 Regularization。它更像Weight Decay Learning Rate Schedule ↓ 改变 Optimization Dynamics ↓ 帮助训练末期得到更低 Loss核心理解现代 LLM 中 Weight Decay 已经不仅是“防过拟合工具”也可以理解为优化过程的一部分。4.4 模型稳定性模型越大Parameters ↑ Training Time ↑ GPU 数量 ↑一次训练失败的成本也越来越高。因此“模型能不能稳定训练几个月”本身就是核心架构问题。典型现象Loss 看起来正常 但是 Gradient Norm │ ─────┼──────────── ╱╲ ╱╲ ╱╲ Gradient Spike最终可能演变成Gradient Explosion ↓ NaN ↓ Training CrashTransformer 中尤其容易产生数值问题的模块是Softmax因为其中存在exp() division而 Transformer 有两个非常关键的 SoftmaxAttention Softmax Output Softmax4.4.1 z-loss稳定输出 Softmax输出层Logits ↓ Softmax ↓ Probability如果 logits 数值越来越极端exp(logit)就容易变得过大。z-loss 会额外约束 Softmax 的归一化因子Z Σ exp(logit_i)目标是不要让 Z 变得极端于是总 Loss 可以理解成Cross Entropy z-loss penalty核心思想不要直接等 Softmax 爆掉而是约束它内部的归一化器。4.4.2 QK Norm稳定 Attention SoftmaxAttentionQKᵀ ─── √d_k ↓ Softmax如果 Q、K 本身数值越来越大QKᵀ ↓ 巨大 Logits ↓ Softmax Saturation一种解决方式Q ↓ Norm │ ├────→ QKᵀ → Softmax │ K ↓ Norm即Softmax 输入太大那就在进入 Softmax 之前控制 Q、K。相比事后修复 Softmax这是更靠前的稳定性控制方式。4.4.3 Logit Soft Capping第三种方式更加直接Attention Logits ↓ tanh ↓ [-cap, cap] ↓ Softmax例如cap 30那么1000 ↓ ≈ 30 -1000 ↓ ≈ -30不是 Hard Clipmin(max(x))而是通过 tanh 平滑压缩因此称为Soft Capping不过本章也指出目前这一方法并不总是比 QK Norm 更好因此还没有成为绝对主流。4.5 本章总结这一章其实回答了四个关于transformer的连续问题。第一层Transformer 是什么Transformer │ ├── Position Encoding │ ├── Attention │ ├── Residual Norm │ └── FFN这是 2017 年建立的基本骨架。第二层现代 Transformer 改了什么Original Transformer │ ├── Post-LN │ ↓ │ Pre-Norm / RMSNorm │ ├── ReLU │ ↓ │ SwiGLU / GeGLU │ ├── Sin/Cos Position │ ↓ │ RoPE │ └── MHA ↓ MQA / GQA ↓ Sparse / Hybrid Attention目标始终围绕Model Quality Training Stability Memory Efficiency Compute Efficiency第三层这些组件应该多大进入Hyperparameter Design需要考虑d_model d_ff num_heads head_dim num_layers vocab_size width / depth这些不是互相独立的。例如Width / Depth ↓ 决定矩阵和Layer形状 ↓ 决定 Tensor / Pipeline Parallel ↓ 影响GPU通信 ↓ 影响实际训练效率第四层怎么保证模型训得完模型越来越大之后架构正确 ≠ 训练一定稳定还需要RMSNorm Pre-Norm QK Norm z-loss Soft Capping Weight Decay ...不断控制Activation Gradient Logits Softmax的数值范围。整章知识链路如果把 4.14.5 全部串起来可以形成下面这张图LANGUAGE MODEL │ ▼ ┌───────────────────┐ │ 4.1 Transformer │ │ 基础骨架 │ └─────────┬─────────┘ │ ┌───────────────┼────────────────┐ │ │ │ ▼ ▼ ▼ Position Attention FFN / Norm │ │ │ │ │ │ Sin/Cos Encoding MHA ReLU LN │ │ │ └───────────────┼────────────────┘ │ ▼ ┌───────────────────┐ │ 4.2 Modern LLM │ │ 架构组件升级 │ └─────────┬─────────┘ │ ┌──────────────────┼──────────────────┐ │ │ │ ▼ ▼ ▼ RMSNorm RoPE SwiGLU │ │ │ │ ▼ │ │ Relative Position │ │ │ └──────────────────┬──────────────────┘ │ ▼ Attention │ ┌─────────┼─────────┐ ▼ ▼ ▼ MHA GQA MQA │ ▼ Sparse / Sliding Window │ ▼ KV Cache优化 │ ▼ Memory / Bandwidth ↓ │ ▼ ┌───────────────────┐ │ 4.3 Hyperparameter│ │ Design │ └─────────┬─────────┘ │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ d_model d_ff Heads │ │ ├──── Width / Depth ────────────────┤ │ │ └──── Vocabulary / Regularization ──┘ │ ▼ Model Size / Compute │ ▼ Distributed Training约束 │ ▼ ┌───────────────────┐ │ 4.4 Stability │ │ 稳定训练 │ └─────────┬─────────┘ │ Softmax 是重点风险 │ ┌───────────┼───────────┐ ▼ ▼ ▼ z-loss QK Norm Soft Capping │ │ │ └───────────┼───────────┘ ▼ 控制 Logits / Gradient │ ▼ Stable Training │ ▼ MODERN LLM第三章与第四章的联系第三章学习的是Tensor ↓ Memory Compute ↓ GPU Performance第四章则是在此基础上回答“既然 Memory 和 Compute 都有限 Transformer 应该怎么设计”于是很多现代架构变化都可以重新放回第三章的框架理解技术本质RMSNorm减少低算术强度操作和 Memory AccessNo Bias减少参数和数据搬运GQA / MQA减少 KV Cache 和 Memory BandwidthSliding Window减少 Attention Compute / MemoryRoPE高效引入相对位置SwiGLU用更多有效 Compute 换更强表达能力KV CacheMemory 换 ComputeQK Norm增加少量计算换训练稳定性因此可以形成一个更大的知识链Chapter 3 Hardware Constraint │ ▼ Memory Compute │ ▼ Chapter 4 Architecture Design │ ▼ Transformer Components │ ├── Attention ├── FFN ├── Position └── Norm │ ▼ Modern Optimization │ ├── Quality ├── Efficiency ├── Memory └── Stability │ ▼ Modern LLM最值得记住的一句话现代 LLM 并不是一个完全不同于 Transformer 的新模型而是在 Transformer 骨架上围绕“表达能力、显存、算力、推理效率和训练稳定性”不断做工程化取舍的结果。因此学习现代模型时不需要死记LLaMA用了什么 Qwen用了什么 Gemma用了什么更值得追问的是这个改动解决了什么问题↓Model QualityMemoryComputeBandwidthTraining Stability如果能用这五个维度分析一个新架构就已经开始真正建立LLM Architecture Systems Thinking了。后续训练细节和结果进行中~
返回列表