详细摘要 摘要

生成:2025-05-13 19:05

摘要详情

音频文件
Stanford CS336 Language Modeling from Scratch | Spring 2025 | 03 Architectures, Hyperparameters
摘要类型
详细摘要
LLM 提供商
openai
LLM 模型
gemini-2.5-pro-exp-03-25
已创建
2025-05-13 19:05:04

概览/核心摘要 (Executive Summary)

本讲座以“从他人经验中学习”为核心方法论,通过分析从原始Transformer到2025年各类已发布语言模型(LM)的架构变迁,深入探讨了LM架构和训练的细节。讲座重点回顾了Transformer模型的演进、当前主流架构(如Llama类架构)的共识选择以及关键超参数的设定。核心架构趋势包括:层归一化(LayerNorm)从后置(post-norm)转为前置(pre-norm)以增强训练稳定性,并进一步演化出RMSNorm以提升效率;激活函数普遍采用门控线性单元(Gated Linear Units, GLU),特别是SwiGLU,因其表现优于传统ReLU或GeLU;位置编码广泛采用旋转位置编码(RoPE),因其良好的相对位置表达和外推能力。超参数方面,讲座讨论了前馈网络维度(对于ReLU/GeLU通常为模型维度的4倍;对于GLU,为保持参数量相当,上投影维度d_ff通常调整为模型维度的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个新的密集模型发布),总结架构变化的趋势。
    • 一个显著的“趋同进化”例子是位置编码,从早期的绝对位置编码、相对位置编码、Alibi等,到现在几乎所有模型都采用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的部分效果)可能干扰残差连接提供的“恒等映射”,影响深层网络的梯度传播。
  • 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)使用。
  • 门控线性单元 (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使用。
    • 参数量调整: 为保持与非门控版本(其d_ff通常为 4 * d_model)参数量相当,采用GLU的模型的上投影维度(d_ff)通常调整为 (8/3) * d_model。这是通过将原先4倍的上投影系数乘以约2/3(准确来说是 (8/3)/4 = 2/3)来实现的,以补偿GLU引入的额外门控参数。
    • 效果: 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):
    • 已成为压倒性的共识选择,几乎所有近期的模型都使用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倍。
  • 注意力头维度 (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因允许更激进的学习率反而提升了性能。

注意力头变体 (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(分组共享)。在性能和推理效率间取得平衡。
  • 长上下文与结构化注意力:
    • 早期思想 (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, 混合注意力模式)。核心思想是借鉴实证有效的方案来构建和训练更强大的语言模型。