详细摘要 摘要
生成:2025-05-13 17:12摘要详情
- 音频文件
- Stanford CS336 Language Modeling from Scratch | Spring 2025 | 03 Architectures, Hyperparameters
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-pro-exp-03-25
- 已创建
- 2025-05-13 17:12:29
摘要内容
概览/核心摘要 (Executive Summary)
本讲座深入探讨了语言模型(LM)架构和训练的细节,重点回顾了Transformer模型的演进、当前主流架构(如Llama类架构)的共识选择以及关键超参数的设定。讲座强调从已有的大量LM训练实践中学习,分析了从原始Transformer到2025年各种模型的架构变迁。核心架构趋势包括:层归一化(LayerNorm)从后置(post-norm)转为前置(pre-norm)以增强训练稳定性,并进一步演化出RMSNorm以提升效率;激活函数普遍采用门控线性单元(Gated Linear Units, GLU),特别是SwiGLU,因其表现优于传统ReLU或GeLU;位置编码广泛采用旋转位置编码(RoPE),因其良好的相对位置表达和外推能力。超参数方面,讲座讨论了前馈网络维度(通常为模型维度的4倍,GLU下为8/3倍)、注意力头维度与模型维度的关系(通常保持总维度不变)、模型深度与宽度的“宽高比”(约128隐藏维度/层)以及词汇表大小(趋向于100k-250k,尤其对多语言模型)。此外,还讨论了权重衰减(Weight Decay)在预训练中的作用(并非防止过拟合,而是与学习率调度结合改善训练动态),以及最新的模型稳定性技巧(如Z-loss、QK Norm)和注意力机制变体(如MQA/GQA、结构化稀疏注意力)以支持更长上下文和提升推理效率。
Transformer架构回顾与演进
讲座首先回顾了原始Transformer架构,并指出现代实现(如课程中要求学生实现的版本)已包含多项改进,形成了“现代共识变体”。
- 原始Transformer组件:
- 位置嵌入(Position Embeddings)
- 多头注意力(Multi-head Attention)
- 层归一化(LayerNorms)在后(Post-norm)
- 残差连接(Residual Stream)
- MLP(多层感知机)
- Softmax输出层
- 课程实现的现代Transformer变体:
- 层归一化前置 (Prenorm): LayerNorm移至每个子模块(注意力、MLP)之前。
- 旋转位置编码 (RoPE): 用于位置信息的编码。
- SwiGLU激活函数: 用于前馈网络层。
- 线性层无偏置项: 多数现代实现已移除偏置项。
- 架构演进的观察:
- 讲者通过分析从2017年(原始Transformer)到2025年的大量已发表模型(提及过去一年约有19个新的密集模型发布),总结架构变化的趋势。
- 一个显著的“趋同进化”例子是位置编码,从早期的绝对位置编码、相对位置编码等,到现在几乎所有模型都采用RoPE。
架构变体详解
讲座详细讨论了构成Transformer的各个组件的不同变体及其演进。
层归一化 (Layer Normalization) 与 RMSNorm
- Prenorm vs. Postnorm:
- Postnorm (原始Transformer):
Sublayer(x) + x之后进行LayerNorm。- 问题:训练不稳定,需要仔细的学习率预热(warm-up)。
- Prenorm (现代主流):
x + Sublayer(LayerNorm(x))。- 优势:训练更稳定,可以移除warm-up,梯度传播更佳(保持梯度大小相对恒定,避免梯度爆炸)。
- 几乎所有现代LM均采用Prenorm。一个例外是
OKT 350M模型,讲者推测其可能是一个失误。
- "Double Norm" (近期创新): 如Grok和Gemma 2模型,在模块前后均使用LayerNorm。Olmo 2则仅在模块后使用。
- 讲者解释,将LayerNorm置于残差流内部(如Postnorm的部分效果)可能干扰残差连接提供的“恒等映射”,影响深层网络的梯度传播。
- Postnorm (原始Transformer):
- LayerNorm vs. RMSNorm:
- LayerNorm: 标准化时减去均值、除以标准差,并有可学习的缩放(gamma)和偏移(beta)参数。
- RMSNorm (Root Mean Square Norm): 移除了均值减法和beta偏移项。
- 优势:运算更快(操作更少),参数更少(无需加载beta),性能与LayerNorm相当。
- 尽管归一化操作的浮点运算(FLOPs)占比极小(约0.17%),但其运行时占比可达25%,主要因为内存移动开销。RMSNorm通过简化操作减少了内存移动。
- 引用Nangia et al. (2020) 的实验表明,RMSNorm不仅速度更快(3.68步/秒 vs 3.5步/秒),最终损失也更低。
- 共识:绝大多数模型(Llama系列, PaLM, Chinchilla, T5)已转向RMSNorm。Cohere的Command R和R+是少数仍使用LayerNorm的例子。
- 偏置项 (Bias Terms):
- 大多数现代Transformer的线性层(尤其FFN中)不使用偏置项。
- 原因:
- 性能相当。
- 提升优化稳定性:经验观察表明,移除偏置项有助于稳定大型神经网络的训练。
激活函数 (Activations)
- 传统激活函数:
- ReLU:
max(0, x)。用于早期模型。 - GeLU (Gaussian Error Linear Unit):
x * CDF(Gaussian)。比ReLU平滑,GPT系列(1, 2, 3, J)使用。
- ReLU:
- 门控线性单元 (Gated Linear Units - GLU):
- 已成为现代模型的主流选择,如SwiGLU, GeGLU。Google的PaLM, T5等模型推动了其应用。
- SwiGLU:
(XW_1) * Swish(XW_gate),其中Swish(x) =x * sigmoid(x)。这是目前非常流行的选择(Llama系列, PaLM, Olmo)。 - GeGLU:
(XW_1) * GeLU(XW_gate)。T5 v1.1, Gemma 2, Gemma 3使用。 - 参数量调整: 为保持与非门控版本参数量相当,门控模型的FFN隐藏层大小(
d_ff)通常会是原始非门控版本的2/3。 - 效果: Noam Shazeer及Narang et al. (2020) 的研究表明GLU变体性能更优。
- 并非绝对必要: 一些高性能模型未使用GLU,如GPT-3 (GeLU), Nemotron 340B (squared ReLU), Falcon 2 11B (ReLU)。
串行层 vs. 并行层 (Serial vs. Parallel Layers)
- 串行层 (Serial Layers - 标准方式): 输入先经过注意力模块,其输出再经过MLP模块。
- 并行层 (Parallel Layers): 注意力模块和MLP模块并行处理输入,然后将它们的输出相加。
- 开创者:GPT-J,PaLM大规模使用。
- 潜在优势:更好的并行性,可能提升GPU利用率和系统效率(通过融合内核)。
- 近期趋势:大多数新模型回归串行层。例外包括Cohere Command R/R+, Falcon Q 11B。
- 讲者观点:并行层理论上更高效,串行层可能更具表达能力。
位置编码 (Position Embeddings)
- 早期方法:
- 正弦/余弦编码 (Sinusoidal): 原始Transformer。
- 绝对位置编码 (Absolute): 可学习的向量(GPT系列, OPT)。
- 相对位置编码 (Relative): 在注意力计算中加入相对位置向量(T5, Gopher)。
- 旋转位置编码 (RoPE - Rotary Position Embeddings):
- 已成为压倒性的共识选择,几乎所有近期的19个新模型都使用RoPE。
- 核心思想:通过旋转操作编码相对位置,使得词向量的内积仅依赖于它们的相对位置差。
> "如果我有一个嵌入f(x_i),其中x是词,i是位置,那么我应该能够将f(x_i)和f(y_j)的内积写成某个不同函数g,该函数是两个词和它们位置差的函数。" - 实现方式:将高维向量切分为2D块,对每个块应用旋转。旋转角度由位置决定,不同块有不同的旋转“速度”(theta值,非学习参数,类似傅里叶频率),以捕捉不同距离的依赖关系。
- 应用位置:直接作用于注意力层中的查询(Query)和键(Key)向量,而不是在输入嵌入层添加。
- 优势:良好的相对位置表达,有助于上下文长度外推。
超参数选择 (Hyperparameters)
讲座讨论了在训练语言模型时需要选择的关键超参数,并指出许多参数已有行业共识或经验法则。
- 前馈网络维度 (Feedforward Size - d_ff):
- 对于ReLU/GeLU激活:普遍选择
d_ff = 4 * d_model。 - 对于GLU激活(如SwiGLU):为保持参数量近似,通常选择
d_ff = (8/3) * d_model ≈ 2.66 * d_model。许多模型(Llama, T5 v1.1)遵循此规则。 - 例外:T5 11B模型使用了极端的
d_ff = 64 * d_model(1024 hidden dim, 65k d_ff)。Gemma 2使用8倍。 - Kaplan et al. 的研究表明,
d_ff / d_model在1到10之间损失变化不大,4是一个合理的选择。 - T5的后续版本T5 v1.1改用了更标准的2.66倍。
- 对于ReLU/GeLU激活:普遍选择
- 注意力头维度 (Head Dimensions):
- 标准做法:
d_model = num_heads * d_head。即模型隐藏维度在多个头之间分配,增加头数时,每个头的维度相应减小,总维度不变。 - 几乎所有主流模型(GPT-3, T5, LaMDA, PaLM, Llama 2)遵循此规则,比率为1。
- T5是例外,比率为16。
- 理论上,过多头数可能导致每头维度过低,影响表达能力,但实践中似乎问题不大。
- 标准做法:
- 宽高比 (Aspect Ratio - d_model / num_layers):
- 控制模型的宽度(
d_model)与深度(num_layers)。 - 经验选择:大约 128个隐藏维度/每层 (如GPT-3, Llama系列)。
- Kaplan et al. 的研究显示,在不同模型规模下,
d_model / num_layers约为100时性能最佳,且此比例相对稳定。 - 系统并行策略(如流水线并行、张量并行)会受宽高比影响,网络条件也可能反过来影响此选择。
- Levine et al. (Google) 研究指出,对于预训练损失,参数总量更关键;但对于下游任务微调后的准确率,相同FLOPs下更深的模型可能更好(此结论后续研究不多)。
- 控制模型的宽度(
- 词汇表大小 (Vocabulary Size):
- 趋势向上。
- 早期/单语模型:约30k-50k (如GPTs, 早期Llamas)。
- 现代多语言/生产系统:100k - 250k (如GPT-4 tokenizer约100k, Cohere Command R词汇表更大)。
- 原因:支持多语言、表情符号等;大模型能更好地利用大词汇表;对低资源语言更友好(每个词所需token数更少,降低推理成本)。
- Dropout与正则化:
- Dropout: 在预训练大型语言模型时已不再流行。预训练通常只进行一轮(epoch),模型不太可能过拟合训练数据。
- 权重衰减 (Weight Decay): 仍然普遍使用。
- 目的:并非为了防止过拟合(实验表明有无权重衰减,训练/验证损失差距无显著变化)。
- 实际作用:与学习率调度(如cosine decay)发生复杂交互。在训练后期,随着学习率降低,有权重衰减的模型能更快地优化,最终获得更好的训练损失。
模型训练稳定性技巧 (Stability Tricks)
随着模型规模增大和训练时间延长,训练稳定性问题日益突出。
- 问题来源: Softmax操作是主要的不稳定因素(指数运算可能导致数值问题,除法可能遇到除零)。Transformer中有两处Softmax:输出层和自注意力内部。
- Z-loss (针对输出Softmax):
- 目标:使Softmax的归一化项Z接近1(即log(Z)接近0)。
- 方法:在损失函数中加入辅助项
alpha * log^2(Z_i)。 - 应用:PaLM率先使用,后续Baichuan 2, DCLM, Olmo 2等模型采纳。
- QK Norm (针对注意力内部Softmax):
- 方法:在计算Query和Key的点积之前,对Query和Key向量进行LayerNorm。
- 作用:限制输入到Softmax的值的大小,从而控制Softmax的不良行为。
- 起源:最初来自视觉/多模态模型社区 (DeiT III, Chameleon, Idefics)。
- 应用:Gemma 2, DCLM, Olmo 2等文本模型采纳。
- 讲者强调:> "LayerNorms在提升稳定性方面非常有效 (shockingly effective)。"
- Soft Capping Logits (针对注意力内部Softmax):
- 方法:将注意力logit通过
tanh(logits / C) * C进行软裁剪,其中C是预设的上限值。 - 作用:限制logit的最大值。
- 应用:Gemma 2, Olmo 2。
- Nvidia的一项研究发现,Soft Capping可能损害性能,而QK Norm因允许更激进的学习率反而提升了性能。
- 方法:将注意力logit通过
注意力头变体 (Attention Head Variations)
主要为了提升推理效率和支持更长上下文。
- MQA (Multi-Query Attention) 和 GQA (Grouped-Query Attention):
- 背景:标准多头注意力(MHA)在推理时,KV缓存的内存访问模式导致算术强度(arithmetic intensity, 计算量/内存访问量)较低,尤其受
N/D项(序列长度/维度)影响。 - MQA: 多个Query头共享单个Key头和Value头。显著减少KV缓存大小和内存移动,大幅提升推理时的算术强度。
- GQA: MQA和MHA的折中。多个Query头,Key/Value头的数量少于Query头但多于1(分组共享)。在性能和推理效率间取得平衡。
- 背景:标准多头注意力(MHA)在推理时,KV缓存的内存访问模式导致算术强度(arithmetic intensity, 计算量/内存访问量)较低,尤其受
- 长上下文与结构化注意力:
- 早期思想 (OpenAI 2019): 稀疏注意力模式,如局部窗口注意力结合跨步或全局注意力。
- 滑动窗口注意力 (Sliding Window Attention): 每个token只关注其邻近的一小块窗口。有效感受野随层数增加而扩大。
- 近期进展 (Llama 4, Gemma, Cohere Command R): 混合注意力块。
- 例如,周期性地插入一个使用全量自注意力但没有位置编码的Transformer块,而其他块则使用带RoPE的滑动窗口注意力。
- 这种设计的好处:
- 全量注意力不频繁,控制系统开销。
- 全量注意力块无位置编码,有助于模型对超长距离依赖进行长度外推,而RoPE处理局部上下文。
核心观点总结
讲座系统梳理了现代语言模型在架构和超参数选择上的演进与共识。关键的架构组件如层归一化(Prenorm, RMSNorm)、激活函数(SwiGLU等GLU变体)、位置编码(RoPE)已形成主流方案。超参数设定也存在普遍遵循的经验法则,如FFN扩展比例、宽高比等。近期发展重点关注训练稳定性(Z-loss, QK Norm)和针对长上下文及推理效率的注意力机制创新(MQA/GQA, 混合注意力模式)。核心思想是借鉴社区的集体经验,通过实证有效的方案来构建和训练更强大的语言模型。