@kuririrn: Studying to grasp the recent trends in scratch development of LLMs Stanford CS336 Lang. Modeling from Scratch | Spring …

X AI KOLs Following 新闻

摘要

本课程笔记总结了从原始Transformer到现代LLM的架构演变,重点介绍了预归一化、RMS归一化、RoPE等趋同演化,并提供了超参数选择建议。

Studying to grasp the recent trends in scratch development of LLMs Stanford CS336 Lang. Modeling from Scratch | Spring 2025 | Lec. 3: Architectures, Hyperparameters
查看原文
查看缓存全文

缓存时间: 2026/07/16 22:18

Studying to grasp the recent trends in scratch development of LLMs Stanford CS336 Lang. Modeling from Scratch | Spring 2025 | Lec. 3: Architectures, Hyperparameters


TL;DR: 本课程深入解析了从原始Transformer到现代LLM的架构演变,重点介绍了预归一化、RMS归一化、旋转位置嵌入(RoPE)等趋同演化,并提供了超参数选择的数据驱动建议。

课程概览与背景

你可能注意到了,我在讲课上没那么有创意(不像Percy那样)。所以你会看到PowerPoint幻灯片,而不是可执行的Python幻灯片,但你也能在网站上找到PDF文件。我把这堂课命名为“你不想知道的LM架构与训练的一切”,因为我们打算深入一些大多数其他课程不会告诉你的细节——比如“我的超参数应该是什么”这类问题,还有一些次要的行政事务。另外,如果你在做作业,我们正在更新作业(主要是小错误),确保你在进行过程中拉取作业的更新。

我们从哪里出发:快速回顾Transformer

我们首先快速回顾一下Transformer,然后给出标准Transformer的两种变体。一种可能来自标准Transformer(就像你在224n课程中看到的那样),另一种则是你实际上会在作业中实现的、现代共识的Transformer变体。接着,我们会从更数据驱动的视角来理解Transformer架构:人们已经训练了很多LLM,你可以去阅读所有这些论文,试图理解哪些发生了变化、哪些是共通的。经过这种近乎“演化”的分析,我们试图找出让Transformer真正工作的重要元素。最好的学习方式是动手实践,但这节课的主题是从他人的经验中学习。

架构变化:从原始Transformer到现代共识

预归一化 vs 后归一化

原始Transformer论文使用了后归一化:在多头注意力和前馈网络之后分别加层归一化,然后回到残差流。很早以前人们就意识到,将层归一化移到每个子组件之前(预归一化)在很多方面表现更好。基本上所有现代LM都使用预归一化。一个例外是OPT 350M——他们搞砸了,训练时就被遗弃了,这算是我在架构调查中发现的一个有趣现象。

论据是:预归一化更稳定。如果你想用后归一化,就需要仔细的学习率预热才能稳定训练。Salazar等人2020年的早期工作显示,使用后归一化(蓝色曲线)会出现更多损失尖峰;而预归一化梯度大小保持不变,整体梯度范数更小。今天,预归一化和其他层归一化技巧被用作训练大型神经网络时的稳定性辅助手段。

双归一化(一个较新的变体)

今年224N有人问:“为什么必须把层归一化放在前面?为什么不能放在前馈网络之后?”当然可以。最近有人干脆在块的前后都加了层归一化。Grok和GMA 2都采用这种方法:在前和后都做层归一化。有些只在注意力或前馈之后做层归一化。这其实是一个有趣的变化,预归一化在很长一段时间内占主导地位,但现在有所改变。有人评估过这种方法,认为它在训练更大模型时更稳定、更友好。

为什么层归一化放在残差中不好?

一个直观论证是:残差连接提供了从网络顶部到底部的恒等映射,这使得梯度传播非常容易。而把层归一化放在中间可能会干扰这种梯度行为。回到前面的图,这就是你预期会看到的情况。

RMS归一化:共识变化之一

在原始Transformer中人们使用层归一化(LayerNorm):减去经验均值,除以标准差,然后缩放和平移。很多模型使用层归一化效果不错。但许多模型现在已经转向RMS归一化——放弃均值调整,也不加偏置项(β)。LLaMA家族、PaLM、Chinchilla、T5都转向了RMS归一化。原因有两个:一是没有显著差异(用RMS归一化训练的模型和用层归一化的一样好),二是它更快,效果同样好

快在哪里?如果不减均值,运算更少;如果不加β偏置项,就需要从内存加载更少的参数到计算单元。有人可能会想:224N中你告诉我只有矩阵乘法才对运行时间重要,这又不是矩阵乘法,我为什么要在乎?有一篇很好的论文(Ivan等人2023年,标题大概是“Memory Movement Is All You Need”)对Transformer的所有组件进行了剖析:张量收缩(矩阵乘法)占了Transformer中FLOPs的99.88%,而归一化操作只占0.17%的FLOPs,却占了运行时间的约25%。一个重要原因是内存移动。所以现在架构设计不能只考虑FLOPs,还要仔细考虑内存访问。

位置嵌入的趋同演化

我在整理了一个小表格,记录了从2017年原始Transformer到2025年最新模型的做法。你会发现某些架构变化被探索,例如位置嵌入这一列:人们用过绝对位置、相对位置、RoPE、ALiBi等,但大约从2023年开始,每个人都只用RoPE(旋转位置嵌入)。神经架构几乎趋同演化。你的作业中要求实现的就是RoPE。

其他细节:激活函数与偏置

前馈层现在使用了所谓的SwiGLU(在作业中称为“swiggloo”)。线性层现在不再使用偏置项。这也是现代LLM的常见做法。

超参数选择

在确定了架构之后,仍需要选择超参数,比如隐藏层维度、MLP内部投影层维度、注意力头数、词汇表大小等。你不能随意挑选,而应该以相当智能的方式选择。这些内容将涵盖在后续部分。

总结

我们看到了从原始Transformer到LLaMA风格底部的趋同演化——预归一化、RMS归一化、RoPE、SwiGLU、无偏置。但人们仍然会做各种额外的事情(比如双归一化、并行/串行层)。理解这些变化背后的动机(稳定性、内存移动、性能)是本节课的核心。


Source: @kuririrn - Studying to grasp the recent trends in scratch development of LLMs Stanford CS336

相似文章

逐步 LLM 工程项目 (2026 版)

X AI KOLs

一个基于项目的路线图,通过构建从分词器到服务栈的关键组件来学习 LLM 工程,包括硬件基础和后训练技术。