精读笔记 · LLaMA: Open and Efficient Foundation Language Models
论文基本信息
| 项目 | 内容 |
|---|---|
| 标题 | LLaMA: Open and Efficient Foundation Language Models |
| 作者 | Hugo Touvron, Thibaut Lavril, Gautier Izacard 等(共 14 人) |
| 机构 | Meta AI(Facebook 母公司旗下 AI 研究院) |
| 发表时间 | 2023 年 2 月(arXiv: 2302.13971) |
| 模型规模 | 7B / 13B / 32.5B / 65B 参数 |
| 核心贡献 | 仅用公开数据训练出可与 GPT-3、PaLM、Chinchilla 媲美的开源基础模型 |
阅读地图
本文共 5 个核心部分,建议按以下顺序精读:
Abstract(摘要)
↓ 核心主张 + 关键数字
Introduction(引言)
↓ 研究动机:为什么"更小模型+更多数据"更好?
Section 2: Approach(方法)← 本文技术核心,逐段精读
├── 2.1 训练数据(全公开数据集)
├── 2.2 分词器(BPE / SentencePiece)
└── 2.3 架构改动(三大核心改进)
├── Pre-normalization + RMSNorm
├── SwiGLU 激活函数
└── RoPE 旋转位置编码
├── 2.4 优化器
└── 2.5 训练效率
Section 3: 主要实验结果
└── 与 GPT-3 / PaLM / Chinchilla 的对比
核心思想一句话:与其花同样算力训练一个更大的模型,不如用更多数据把一个小模型训透——训出来的模型推理更便宜、部署更容易,性能却同样顶尖。
Abstract(摘要)
原文关键句
"We introduce LLaMA, a collection of foundation language models ranging from 7B to 65B parameters. We train our models on trillions of tokens, and show that it is possible to train state-of-the-art models using publicly available datasets exclusively, without resorting to proprietary and inaccessible datasets."
"LLaMA-13B outperforms GPT-3 (175B) on most benchmarks, and LLaMA-65B is competitive with the best models, Chinchilla-70B and PaLM-540B."
翻译
我们提出 LLaMA——一组参数规模从 70 亿到 650 亿的基础语言模型。我们在数万亿 token 上训练这些模型,并证明:仅使用公开可获取的数据集,无需任何专有或不可公开的数据集,也能训练出当时最先进的模型。
其中,参数量仅 130 亿的 LLaMA-13B 在大多数基准测试上超越了参数量 1750 亿的 GPT-3;而 LLaMA-65B 则能与当时最强的 Chinchilla-70B 和 PaLM-540B 相媲美。
新手讲解
什么是"基础语言模型"(Foundation Language Model)?
就是那种在海量文本上预训练完成、尚未针对特定任务调整的通用模型。可以把它想象成一个"读完了整个互联网的人",什么都懂一点,但还没有专门学过某一职业。GPT-3、PaLM 都是同类产品。
"数万亿 token"是多少?
Token 是语言模型处理文本的最小单位,大致上一个英文单词 ≈ 1.3 个 token。"数万亿 token"约等于数百万本书的文本量。
这段摘要最厉害的地方在哪里?
两点:
1. 全公开数据:GPT-3(OpenAI)、PaLM(Google)、Chinchilla(DeepMind)训练时都用了大量内部私有数据,旁人无法复现。LLaMA 只用公开数据,意味着任何人都可以重新训练、审计、改进它。
2. 小模型胜过大模型:13B 参数的 LLaMA 打败了 175B 参数的 GPT-3,参数量只有对方 1/13。这直接颠覆了"模型越大越好"的直觉。
Introduction(引言)
原文关键句 1
"The objective of the scaling laws from Hoffmann et al. (2022) is to determine how to best scale the dataset and model sizes for a particular training compute budget."
"…the best performances are not achieved by the largest models, but by smaller models trained on more data."
翻译
Hoffmann 等人(2022)提出的"规模法则"(即 Chinchilla 论文)的目标,是确定在给定训练算力预算下,如何最佳地匹配数据集与模型规模。其结论是:最佳性能并非来自最大的模型,而是来自用更多数据训练的较小模型。
新手讲解:什么是 Chinchilla 法则?
背景:在 LLaMA 之前,大家普遍认为"模型参数越多越好",所以各家公司拼命堆参数(GPT-3 是 175B,PaLM 是 540B)。
Chinchilla 论文(Hoffmann et al., 2022)的发现:对一个固定的算力预算,最优策略是:模型参数量和训练 token 数保持大致 1:20 的比例。比如,如果你打算训练一个 70B 参数的模型,那么最优的训练数据量约是 1.4T(1.4 万亿)token。
类比:这就像备考——与其花同样的钱买一本超厚的教材(大模型),不如买一本适中的教材反复刷很多遍(小模型 + 大量数据)。刷遍数越多,掌握得越牢。
原文关键句 2
"However, Hoffmann et al. (2022) only consider the compute budget for training, not the inference budget. In the context of serving a language model to hundreds of millions of users, the inference cost largely dominates."
"…a 7B model continues to improve even after 1T tokens."
翻译
然而,Hoffmann 等人只考虑了训练时的算力预算,没有考虑推理时的算力预算。在为数亿用户提供服务的场景下,推理成本才是主导因素。LLaMA 的作者发现,即使训练 token 数超过了 Chinchilla 建议的最优值,7B 参数的模型在训练到 1 万亿 token 时仍然持续提升。
新手讲解:训练成本 vs 推理成本
- 训练:只做一次(或少数几次),算力主要花在这里。
- 推理:每次用户发出一个问题,模型就要运行一次。如果有 1 亿用户每天问 10 个问题,推理要运行 10 亿次。
所以,训练一个稍微小一点的模型,让它在部署时每次推理更快更省电,才是真正划算的做法。LLaMA 的核心贡献之一就是:把模型训得比 Chinchilla 推荐的"最优训练效率点"更远,换来的是一个在推理时更高效的模型。
原文关键句 3
"Unlike Chinchilla, PaLM, or GPT-3, we only use publicly available data, making our work compatible with open-sourcing."
翻译
与 Chinchilla、PaLM 或 GPT-3 不同,我们只使用公开可获取的数据,这使得我们的工作与开源相兼容。
新手讲解:为什么"全公开数据"对开源社区意义重大?
想象一道菜的食谱:GPT-3 告诉你"这道菜很好吃",但原料是保密供应商提供的(专有数据),你在家根本买不到。LLaMA 则把每一种原料的来源都列得清清楚楚,都是超市里有卖的(公开数据集)。这意味着:
- 可复现:学术界可以独立验证实验结果
- 可改进:任何人都可以在同样基础上迭代
- 可审计:可以检查训练数据是否包含有问题的内容
- 真正开源:模型权重公开 + 数据来源公开 = 完全透明
Section 2: Approach(方法)
2.1 Pre-training Data(训练数据)
原文关键句
"Our training dataset is a mixture of several sources... We only use publicly available data compatible with open sourcing."
数据集组成(论文表 1)
| 数据集 | 占比 | 原始大小 |
|---|---|---|
| English CommonCrawl | 67.0% | 3.3 TB |
| C4 | 15.0% | 783 GB |
| GitHub | 4.5% | 328 GB |
| Wikipedia | 4.5% | 83 GB(20 种语言) |
| Books(Gutenberg + Books3) | 4.5% | 85 GB |
| ArXiv | 2.5% | 92 GB |
| Stack Exchange | 2.0% | 78 GB |
| 合计(分词后) | 100% | 约 1.4T token |
翻译与新手讲解
CommonCrawl(通用网络爬取数据):就是对整个互联网进行爬取后形成的大规模文本集合。质量参差不齐,论文对其进行了严格的去重、语言识别(用 fastText 过滤出英文)和质量过滤(用 n-gram 语言模型排除低质量文本)。
C4:一个已经经过质量筛选的网页文本数据集,是 CommonCrawl 的清洁版本。
GitHub 代码:只保留 Apache、BSD、MIT 开源许可证的代码,并用正则表达式去除了样板代码(如许可证声明)。这解释了为什么 LLaMA 在代码任务上有一定能力。
Wikipedia:覆盖 20 种语言,去除了 MediaWiki 标签,保留超链接但删除了模板和引用格式。
ArXiv 学术论文:处理了 LaTeX 源码,删除了参考文献和注释。这给模型注入了科学推理能力。
Stack Exchange:著名的问答网站(包含 Stack Overflow 编程问答),按回答质量评分排序,帮助模型学习问答格式。
关键事实:大多数数据只使用一遍(一个 epoch),但 Wikipedia 和 Books 使用了约两遍,因为这些数据质量更高。
2.2 Tokenizer(分词器)
原文关键句
"We tokenize the data with the byte-pair encoding (BPE) algorithm, using the implementation from SentencePiece... We split all numbers into individual digits, and fallback to bytes to decompose unknown UTF-8 characters."
翻译
我们使用字节对编码(BPE)算法对数据进行分词,具体采用 SentencePiece 的实现。所有数字被拆分为单独的数字字符;对于无法识别的 UTF-8 字符,则退化到字节级别处理。
新手讲解:什么是 BPE 分词?
BPE(Byte-Pair Encoding,字节对编码) 是一种把文本切成"词片段"(subword)的算法。
- 常见单词(如 "the"、"running")通常作为一个整体 token
- 罕见词汇(如 "LLaMA")会被切成更小的片段(如 "L"、"La"、"MA")
- 数字拆成单独数字:"1234" → "1"、"2"、"3"、"4",这样模型能更好地学习数字运算规律
类比:就像汉字的偏旁部首系统——不认识"懵"这个字,但知道"忄"是心字旁、"孟"是读音部分,就能大致猜出含义和读音。BPE 让模型对没见过的词也能"拆字理解"。
2.3 Architecture(架构)
LLaMA 的整体架构基于 2017 年的原始 Transformer("Attention Is All You Need"),但做了三处关键改动。
改动一:Pre-normalization + RMSNorm
原文关键句
"Inspired by GPT-3, we normalize the input of each transformer sub-layer, instead of normalizing the output. We use the RMSNorm normalizing function, introduced by Zhang and Sennrich (2019)."
翻译
受 GPT-3 启发,我们对每个 Transformer 子层的输入进行归一化,而非对输出进行归一化。归一化函数使用 Zhang 和 Sennrich(2019)提出的 RMSNorm。
新手讲解
原始 Transformer 怎么做的?
在每个子层(注意力层 / 前馈层)计算之后,对输出做 Layer Normalization(层归一化)。
LLaMA 改成了什么?
把归一化放在子层计算之前(Pre-Norm),即先归一化输入,再做计算。
为什么要归一化?
训练深层神经网络时,信号在层间传递容易爆炸或消失(数值太大或太小)。归一化就像每层楼之间装了一个"信号调节器",保持数值稳定,让训练更顺畅。
RMSNorm vs Layer Norm,有什么区别?
| 方法 | 计算公式 | 特点 |
|---|---|---|
| Layer Norm | 计算均值 + 方差,再缩放平移 | 更全面但计算量稍大 |
| RMSNorm | 只计算均方根(Root Mean Square),再缩放 | 省去均值计算,速度更快 |
直觉类比:
- Layer Norm = 先量出身高平均值,再算每个人偏差多少
- RMSNorm = 直接算所有人身高的"方均根",跳过均值步骤,省了一步但效果几乎一样好
好处:训练更稳定,且 RMSNorm 比 Layer Norm 计算稍快,在大规模训练中积少成多节省显著。
改动二:SwiGLU 激活函数
原文关键句
"We replace the ReLU non-linearity by the SwiGLU activation function, introduced by Shazeer (2020) to improve the performance. We use a dimension of 2/3 × 4d instead of 4d as in PaLM."
翻译
我们将前馈网络中的 ReLU 非线性激活函数替换为 Shazeer(2020)提出的 SwiGLU 激活函数,以提升性能。前馈网络的隐藏层维度使用 ⅔ × 4d,而非 PaLM 中的 4d。
新手讲解
激活函数是什么?
神经网络每层的输出只是一堆线性计算(加减乘除),想处理复杂非线性关系(比如语言的上下文关系),就需要在层与层之间加"非线性函数"——这就是激活函数。
ReLU(Rectified Linear Unit)是什么?
最简单的激活函数:f(x) = max(0, x),即负数变零、正数保持。像一个单向阀门,负信号全截断。
SwiGLU 是什么?
SwiGLU = Swish 函数 + GLU(门控线性单元)的组合:
- Swish:f(x) = x × sigmoid(x),比 ReLU 更平滑,负数区域有小的梯度保留
- GLU(Gated Linear Unit):用一个"门"来控制信息流量,类似于 LSTM 里的门机制
SwiGLU 的优点:
1. 比 ReLU 更平滑,梯度不会骤然为零,训练更稳定
2. 门控机制让模型能学习"哪些信息值得通过",表达能力更强
3. 实验证明在 Transformer 里比 ReLU 效果更好(论文 "GLU Variants Improve Transformers")
类比:
- ReLU = 粗暴的保安,凡是负分的全部踢走
- SwiGLU = 有鉴别力的编辑,不仅不完全踢走"负分内容",还配了一道智能门,让重要信息更顺畅地通过
维度从 4d 改成 ⅔×4d 是怎么回事?
SwiGLU 内部实际上有三个矩阵乘法(而标准 FFN 只有两个),如果还用 4d,计算量会增加 50%。改成 ⅔×4d 是为了保持总计算量与原始 Transformer FFN 大致相当。
改动三:Rotary Positional Embedding(RoPE,旋转位置编码)
原文关键句
"We remove the absolute positional embeddings, and instead, add rotary positional embeddings (RoPE), introduced by Su et al. (2021), at each layer of the network."
翻译
我们去除了绝对位置嵌入,转而在网络的每一层加入 RoPE(旋转位置编码),这一方法由 Su 等人(2021)提出。
新手讲解
Transformer 为什么需要位置编码?
注意力机制(Attention)天然没有顺序概念——把"猫吃鱼"和"鱼吃猫"输入给它,如果不告诉它词的位置,它看到的是一样的。位置编码就是给每个词打上"我是第几个词"的标签。
原始 Transformer 的位置编码(绝对位置编码)
把位置信息(一个固定的向量)直接加到词的嵌入向量上。问题:
1. 序列长度超过训练时见过的最大长度时,泛化能力差
2. 位置信息和词义信息混在一起,不够优雅
RoPE(Rotary Position Embedding)是什么?
核心思想:不直接把位置向量加进去,而是在做注意力计算(Q×K)时,用"旋转"的方式把相对位置信息编码进去。
具体地,给定位置 m 的查询向量 q 和位置 n 的键向量 k,RoPE 对它们分别做一个角度为 mθ 和 nθ 的旋转。这样,q 和 k 的点积 <q_m, k_n> 自然包含了相对位置差 (m-n) 的信息——模型只需要关心"这两个词相差几个位置",而不是它们的绝对位置。
类比:
- 绝对位置编码 = 给每个座位贴上"1号、2号、3号…"的号码牌
- RoPE = 不贴号码牌,而是给每把椅子装上一个会旋转的指针,指针之间的夹角就代表它们之间的相对距离
RoPE 的优点:
1. 长度外推:相对位置编码天然支持推理时处理比训练时更长的序列
2. 每层都有:LLaMA 在每个注意力层都加 RoPE,而非只在最开始加一次,位置信息贯穿全网络
3. 无需额外参数:旋转矩阵是固定计算得出的,不需要额外学习参数
2.4 Optimizer(优化器)
原文关键句
"Our models are trained using the AdamW optimizer, with… β₁ = 0.9, β₂ = 0.95. We use a cosine learning rate schedule… with a final learning rate equal to 10% of the maximal learning rate, and a weight decay of 0.1 and gradient clipping of 1.0, with 2,000 warmup steps."
翻译
我们使用 AdamW 优化器训练模型,参数为 β₁=0.9、β₂=0.95。学习率使用余弦衰减调度,最终学习率为最大值的 10%;权重衰减为 0.1,梯度裁剪为 1.0,预热步数为 2000 步。
新手讲解
AdamW 是目前训练大型语言模型最常用的优化算法,可以理解为"带动量+自适应学习率+权重衰减"的组合拳。
各超参数直觉解释:
- β₁=0.9:用过去 90% 的梯度"记忆"来平滑当前更新,防止抖动
- β₂=0.95:控制梯度平方的记忆衰减,用来自适应调整每个参数的学习率
- 余弦学习率衰减:学习率从最大值开始,按照余弦曲线缓慢降低到最大值的 10%——像从山顶走到山脚,先快后慢,最后稳定收敛
- 梯度裁剪(1.0):如果梯度超过 1,就截断到 1,防止"梯度爆炸"(训练突然崩溃)
- 2000 步预热:训练开始时学习率从 0 慢慢升到最大值,避免初始不稳定
2.5 Efficient Implementation(训练效率)
原文关键句
"We use an efficient implementation of the causal multi-head attention to reduce memory usage and runtime… not storing the attention weights and not computing the key/query scores that are masked due to the causal nature of the language model."
"We trained our largest 65B-parameter model on 2,048 A100-80GB GPUs… roughly 380 tokens/sec/GPU… roughly 21 days to train."
翻译
我们使用了因果多头注意力的高效实现(来自 xformers 库),减少了内存占用和运行时间。关键优化点:不存储注意力权重矩阵,不计算因语言模型的因果(单向)特性而被遮蔽的 key/query 分数。
65B 最大规模模型在 2048 块 A100 80GB GPU 上训练,吞吐量约 380 token/秒/GPU,训练 1.4T token 耗时约 21 天。
新手讲解
为什么注意力计算需要优化?
标准自注意力的计算复杂度是 O(n²)——序列长度翻倍,内存和计算量变成原来 4 倍。对于长文本,这非常耗内存。
关键优化 1:不存储注意力权重(Flash Attention 思路)
传统实现会把完整的 n×n 注意力矩阵存到 GPU 显存,然后再拿来算梯度。新方法:分块计算,用完即丢,大幅减少显存峰值占用。
关键优化 2:激活重计算(Gradient Checkpointing)
不把所有中间激活值都保存(那会占用大量显存),而是在反向传播时按需重新计算。相当于"用计算换内存"——稍微慢一点,但能训练更大的模型。
关键优化 3:模型并行 + 序列并行
把模型切开分布在多张 GPU 上,同时让 GPU 之间的通信与计算重叠(pipeline)——GPU 算着的同时,数据已经在传输了,不用傻等。
训练规模直觉:2048 块 A100 GPU × 21 天,能量消耗约 2638 MWh,碳排放约 1015 tCO₂eq(论文附录数据)。
模型规格总览
| 参数量 | 隐藏维度 d | 注意力头数 | 层数 | 最大学习率 | 批大小 | 训练 Token 数 |
|---|---|---|---|---|---|---|
| 6.7B | 4096 | 32 | 32 | 3.0×10⁻⁴ | 4M | 1.0T |
| 13.0B | 5120 | 40 | 40 | 3.0×10⁻⁴ | 4M | 1.0T |
| 32.5B | 6656 | 52 | 60 | 1.5×10⁻⁴ | 4M | 1.4T |
| 65.2B | 8192 | 64 | 80 | 1.5×10⁻⁴ | 4M | 1.4T |
Section 3: Main Results(主要实验结果)
3.1 Common Sense Reasoning(常识推理)
原文关键句
"LLaMA-65B outperforms Chinchilla-70B on almost all reported benchmarks. LLaMA-65B is also competitive everywhere except on BoolQ and WinoGrande compared with PaLM-540B."
"LLaMA-13B model also outperforms GPT-3 on most of these benchmarks despite being 10× smaller."
翻译
LLaMA-65B 在几乎所有基准测试上超越了 Chinchilla-70B。与 PaLM-540B 相比,除 BoolQ 和 WinoGrande 外,LLaMA-65B 在其他地方也具有竞争力。LLaMA-13B 尽管参数量只有 GPT-3 的 1/10,但在大多数常识推理基准上同样超过了 GPT-3。
评测基准说明(新手向)
| 基准 | 考察内容 | 例子 |
|---|---|---|
| BoolQ | 是/否判断题,基于段落 | "根据这段话,鲸鱼是鱼吗?" |
| PIQA | 物理常识推理 | "如何把黄油抹在面包上?" |
| SIQA | 社会常识推理 | "他为朋友搬家,说明他怎样?" |
| HellaSwag | 选择最合理的句子续写 | 给出开头,选 4 个结尾中最合理的 |
| WinoGrande | 代词消解(指代消歧) | "杯子打碎了桌子,因为它太重了。"("它"指谁?) |
| ARC | 小学科学选择题 | 实际学科知识 |
| OpenBookQA | 基于开放书本的推理 |
代表性数字(零样本,zero-shot):
- LLaMA-13B 在 HellaSwag:79.2% vs GPT-3 的 78.9%
- LLaMA-65B 在 WinoGrande:77.0% vs Chinchilla-70B 的 74.9%
3.2 Closed-book Question Answering(闭卷问答)
原文关键句与数据
Natural Questions(精确匹配率):
- LLaMA-13B 零样本:20.1% vs GPT-3 的 14.6%
- LLaMA-65B 64-shot:39.9% vs PaLM-540B 的 39.6%
TriviaQA(精确匹配率,过滤后开发集):
- LLaMA-13B 零样本:56.6% vs Gopher-280B 的 43.5%
- LLaMA-65B 零样本:68.2%(当时最优水平)
新手讲解
"闭卷"是什么意思?
模型看不到任何参考材料,完全靠"记忆"(即训练时学到的知识)回答问题。就像闭卷考试——不能翻书,只能靠脑子。
Natural Questions 是谷歌发布的数据集,问题来自真实用户搜索。TriviaQA 是知识竞赛题型数据集。
"精确匹配率"(Exact Match):答案必须和标准答案完全一致才算对,这是一个非常严格的评测标准。
关键结论:LLaMA-13B 在 Natural Questions 上以 20.1% 大幅超越 GPT-3 的 14.6%,领先了近 6 个百分点——这对于如此严格的评测来说是相当大的差距。而且,LLaMA-13B 在推理时可以跑在单张 V100 GPU 上,GPT-3 则需要大量 GPU 才能服务。
3.3 Reading Comprehension(阅读理解)
数据(RACE 基准)
- LLaMA-13B on RACE-high:47.2%(与 GPT-3 持平)
- LLaMA-65B on RACE-middle:67.9%;RACE-high:51.6%
- 对比 PaLM-540B:RACE-middle 68.1%,RACE-high 49.1%
新手讲解
RACE 是来自中国英语考试(高中/初中阅读理解题)的数据集。这里 LLaMA-65B 在 RACE-high(高中难度)上以 51.6% 超过 PaLM-540B 的 49.1%,尽管参数量差 8 倍。
3.4 Mathematical Reasoning(数学推理)
原文关键句
"LLaMA-65B also achieves 69.7% on GSM8k with majority voting (k=100), outperforming Minerva-62B's 68.5%."
数据
GSM8k(小学数学应用题):
- LLaMA-65B 零样本:50.9%,接近 Minerva-62B 的 52.4%(Minerva 专门用数学数据微调过)
- LLaMA-65B + 多数投票(100次采样):69.7%,超过 Minerva 的 68.5%
MATH(LaTeX 格式竞赛数学题):
- LLaMA-65B + 多数投票:20.5%,低于 Minerva-62B 的 43.4%
新手讲解
"多数投票"(Majority Voting)是什么技巧?
对同一道题让模型生成 100 个答案,选出出现次数最多的那个。这是一种简单但有效的"集成"技巧——模型偶尔犯错,但如果大多数结果是对的,投票就能纠错。
为什么 LLaMA 在数学上不如 Minerva?
Minerva 是 Google 专门用数学内容微调的模型,而 LLaMA 是通用模型。即便如此,LLaMA-65B 用多数投票后已经在 GSM8k 上超越了 Minerva——说明通用模型经过充分训练具备相当的数学推理潜力。
3.5 Code Generation(代码生成)
数据
HumanEval(pass@1,温度 0.1):
- LLaMA-13B:15.8%(接近 PaLM-62B 的 15.9%)
- LLaMA-65B:23.7%(接近但略低于 PaLM-540B 的 26.2%)
MBPP(pass@1,3-shot):
- LLaMA-13B:22.0%(远超 LaMDA-137B 的 14.8%)
- LLaMA-65B:37.7%(超过 PaLM-540B 的 36.8%)
新手讲解
HumanEval 是 OpenAI 发布的代码生成评测集,包含 164 道编程题,要求模型根据函数描述写出完整代码,并通过测试用例。pass@1 表示一次生成就通过的比率。
LLaMA 的代码能力来自哪里?
训练数据中包含 GitHub 代码(4.5%,328 GB),没有专门的代码微调。作者指出,如果在代码特定数据上微调,效果会进一步提升。
3.6 Massive Multitask Language Understanding(MMLU,大规模多任务语言理解)
原文关键句
"LLaMA-65B is behind Chinchilla-70B and PaLM-540B. We believe that this is explained by the limited amount of books and academic papers in our pre-training data, compared to Chinchilla and PaLM."
数据(5-shot 评测)
| 模型 | MMLU 准确率 |
|---|---|
| LLaMA-7B | 35.1% |
| LLaMA-13B | 46.9% |
| LLaMA-33B | 57.8% |
| LLaMA-65B | 63.4% |
| Chinchilla-70B | 67.5% |
| PaLM-540B | 69.3% |
翻译与新手讲解
MMLU 包含 57 个学科(从数学、物理到法律、历史),每道题 4 选 1,5-shot 评测(给 5 个示例后作答)。这是衡量模型"书本知识"最全面的基准之一。
为什么 LLaMA 在 MMLU 上落后?
作者坦诚地解释:LLaMA 训练数据中书籍和学术论文合计只有 177 GB,而 Chinchilla、PaLM 据估计使用了高达 2 TB 的书籍数据。MMLU 大量考察教科书级别的专业知识,书少则答题弱,这是合理的解释。
启示:开源数据并非万能,某些高质量知识(学术专著等)较难大规模公开获取,这是 LLaMA 与专有数据训练的模型之间的主要差距所在。
架构改动汇总对比
| 改动 | 原始 Transformer | LLaMA 改动 | 好处 |
|---|---|---|---|
| 归一化位置 | Post-Norm(层后归一化) | Pre-Norm(层前归一化) | 训练更稳定,深层网络梯度更健康 |
| 归一化函数 | Layer Normalization | RMSNorm | 去掉均值计算,速度稍快,效果相当 |
| 前馈激活函数 | ReLU | SwiGLU | 更平滑梯度 + 门控机制,表达能力更强 |
| 位置编码 | 绝对位置嵌入(输入层一次) | RoPE(每个注意力层) | 相对位置信息,更好外推到长序列 |
核心主张精华总结
主张一:"更多数据训练更小的模型"也能顶尖
LLaMA 的根本思路是:训练预算(算力)的主要目标应该是推理效率,而非训练效率。
Chinchilla 告诉我们每个参数的最优 token 数约为 20:1。但 LLaMA 走得更远——在最优点之后继续训练(7B 模型训练了 1T token,是 Chinchilla 建议最优值的约 3-4 倍),虽然边际收益递减,但最终得到的模型在推理时更省资源,而每次推理的成本在大规模部署中才是真正的大头。
一个数字足以说明问题:LLaMA-13B 打败 GPT-3-175B,参数量是后者的 7%,而部署时所需的 GPU 显存只是后者的零头,可以跑在单张消费级显卡上。
主张二:全公开数据的历史意义
在 LLaMA 之前,顶尖语言模型都是"黑箱":
- 训练数据保密(无法复现)
- 模型权重保密(无法研究内部机制)
- 只能通过 API 访问(无法本地部署)
LLaMA 第一次打破了这一局面:
1. 训练数据 100% 公开:每个数据集都有公开来源,可独立下载
2. 模型权重向学术界开放:研究者可以直接在其上做实验、微调、分析
3. 催生了整个开源大模型生态:Alpaca、Vicuna、LLaMA-2、Mistral 等一系列重要模型都以 LLaMA 为起点
作者自己说得最清楚:"Unlike Chinchilla, PaLM, or GPT-3, we only use publicly available data, making our work compatible with open-sourcing."(与 Chinchilla、PaLM、GPT-3 不同,我们只用公开数据,使我们的工作与开源兼容。)
主张三:架构改进的工程哲学
LLaMA 的三个架构改动(RMSNorm、SwiGLU、RoPE)都不是 LLaMA 原创的——它们分别来自独立发表的论文。LLaMA 的贡献是系统性地将这些改进组合在一起,并在大规模训练中验证了它们的有效性。这体现了一种"积累式创新"的工程哲学:不必每个零件都是你发明的,重要的是你把最好的零件组装成了最好的机器。
结论与社区影响
原文关键句
"In this work, we have presented a series of language models that are released openly and compete with state-of-the-art foundation models. LLaMA-13B outperforms GPT-3 while being more than 10× smaller, and LLaMA-65B is competitive with Chinchilla-70B and PaLM-540B."
"We believe that releasing these models to the research community will accelerate the development of large language models."
"We also observed that a very small amount of finetuning improves performance on MMLU and further improves ability to follow instructions."
翻译
本文提出了一系列公开发布的语言模型,可与当时最先进的基础模型竞争。LLaMA-13B 在超越 GPT-3 的同时,参数量缩小了 10 倍以上;LLaMA-65B 则可与 Chinchilla-70B 和 PaLM-540B 相媲美。
我们相信,向研究社区开放这些模型将加速大语言模型的发展。
我们还发现,少量的指令微调(instruction finetuning)即可显著提升 MMLU 性能,并进一步提升遵循指令的能力。
新手讲解:指令微调(Instruction Finetuning)
预训练模型的目标是"预测下一个词",它本质上是一个强大的续写机器,但不一定擅长"遵照人类指令回答问题"。
指令微调:用少量高质量的"指令-回答"对话数据,对预训练模型做进一步训练,让它学会"理解并执行人类指令"。这正是后来 Alpaca(斯坦福基于 LLaMA 微调)、ChatGPT(GPT-3 + RLHF 微调)等系列的技术路径。
LLaMA 论文仅在结尾简短提到了这一点,但这个提示开启了之后整整一年的开源指令微调热潮。
关于偏见、毒性与伦理
论文附录对模型的偏见和毒性进行了评测(使用 RealToxicityPrompts 等基准)。核心结论是:
- LLaMA 与同规模其他语言模型的毒性水平相当
- 如同所有在互联网数据上训练的模型,存在刻板印象和偏见
- 作者强调,开放发布的目的之一是让社区共同研究并改进这些问题
(此部分为评测附录,不影响主要技术贡献,这里仅点到为止。)
延伸阅读建议
读完 LLaMA 后,建议按以下顺序拓展:
- Chinchilla 论文(Hoffmann et al., 2022, "Training Compute-Optimal Large Language Models")——理解"规模法则"的数学基础
- RoPE 原论文(Su et al., 2021, "RoFormer: Enhanced Transformer with Rotary Position Embedding")——深入理解旋转位置编码
- FlashAttention(Dao et al., 2022)——理解 LLaMA 训练效率优化的底层机制
- Alpaca(Taori et al., 2023, Stanford)——LLaMA 做指令微调的第一个重要工作
- LLaMA 2(Touvron et al., 2023)——Meta 的升级版,更大数据、更长上下文、RLHF 对齐
本文精读笔记撰写时参考了 arXiv 版本原文(2302.13971),所有数字均来自论文原文。