论文来源:Touvron, H., Lavril, T., Izacard, G., et al. (2023). LLaMA: Open and Efficient Foundation Language Models. Meta AI. arXiv:2302.13971
前置要求:Transformer 架构基础、大语言模型基本概念(预训练、微调、Few-shot)、Scaling Law 基本了解。
1. 引言:LLaMA 为什么重要?
1.1 大模型时代的"军备竞赛"
2020 年 GPT-3(175B 参数)的横空出世,开启了大语言模型(LLM)的"越大越好"时代。此后,Gopher(280B)、PaLM(540B)等模型不断刷新记录,但同时也带来了一个尖锐的问题:训练和部署这些庞然大物的资源门槛极高,只有少数科技巨头能够负担。
| 模型 | 参数量 | 是否开源 | 训练数据是否公开 |
|---|---|---|---|
| GPT-3 | 175B | 否 | 否(未公开细节) |
| Gopher | 280B | 否 | 否 |
| PaLM | 540B | 否 | 否 |
| OPT | 175B | 是 | 部分公开 |
| BLOOM | 176B | 是 | 部分公开 |
| LLaMA | 7B-65B | 是 | 是(全部公开) |
1.2 LLaMA 的核心命题
LLaMA 论文提出了一个简洁而深刻的观点:
与其训练一个巨大的模型,不如用更多的数据训练一个较小的模型。
这个观点基于一个关键的观察:Chinchilla scaling law(Hoffmann et al., 2022)建议训练 10B 模型用 200B tokens,但 LLaMA 的实验发现——7B 模型在训练超过 1T tokens 后,性能仍在持续提升。这意味着推理效率(而非训练效率)才是我们应该优化的目标。
最终成果令人瞩目:
- LLaMA-13B 在大多数基准上超越 GPT-3(175B),参数量仅为后者的 1/10
- LLaMA-65B 与 Chinchilla-70B 和 PaLM-540B 具有竞争力
- 所有模型仅使用公开数据训练,完全兼容开源
2. 预训练数据:全公开、高质量
2.1 数据来源与配比
LLaMA 的一个核心贡献是证明了仅用公开数据就能训练出 SOTA 级别的模型。训练数据共约 1.4T tokens,由以下来源混合而成:
| 数据集 | 采样比例 | 轮次(1.4T tokens 时) | 磁盘大小 |
|---|---|---|---|
| CommonCrawl | 67.0% | 1.10 | 3.3 TB |
| C4 | 15.0% | 1.06 | 783 GB |
| GitHub | 4.5% | 0.64 | 328 GB |
| Wikipedia | 4.5% | 2.45 | 83 GB |
| Books(Gutenberg + Books3) | 4.5% | 2.23 | 85 GB |
| ArXiv | 2.5% | 1.06 | 92 GB |
| Stack Exchange | 2.0% | 1.03 | 78 GB |
2.2 数据处理流程
类比:如果说原始互联网数据是"矿石",那 LLaMA 的数据处理流程就是一套精密的"冶炼工艺",经过多道工序将杂质去除,只留下纯度最高的"金属"。
各数据源的处理方式如下:
- CommonCrawl(67%):经过 CCNet 流水线处理——行级去重、fastText 语言识别(过滤非英文页面)、n-gram 语言模型质量过滤。还额外训练了一个线性分类器,只保留被 Wikipedia 引用过的页面
- C4(15%):使用不同的质量过滤策略(基于启发式规则:标点符号、字数、句子数等),与 CommonCrawl 互补
- GitHub(4.5%):仅保留 Apache/BSD/MIT 许可的项目,用启发式规则过滤低质量文件,正则表达式去除样板代码,文件级精确去重
- Wikipedia(4.5%):2022 年 6-8 月的 dump,覆盖 20 种拉丁/西里尔字母语言,去除超链接和格式标记
- Books(4.5%):Gutenberg 公版书 + Books3(The Pile 的子集),书籍级去重(内容重叠 90% 以上的移除)
- ArXiv(2.5%):处理 LaTeX 源文件,移除前言、参考文献和注释,内联展开用户自定义宏
- Stack Exchange(2%):保留 28 个最大网站的数据,去除 HTML 标签,按评分排序答案
2.3 分词器
使用 BPE(Byte Pair Encoding) 算法,基于 SentencePiece 实现。两个值得注意的细节:
- 数字按位拆分:每个数字被分为单独的 token(例如 “2023” 变为 “2”, “0”, “2”, “3”),这有助于模型更好地理解数值
- UTF-8 回退:对于未知的 UTF-8 字符,回退到字节级别进行分解
3. 架构改进:站在巨人肩膀上的微创新
3.1 整体架构
LLaMA 基于标准 Transformer 架构,但整合了近年来被验证有效的多项改进。这些改进并非 LLaMA 首创,但 LLaMA 的贡献在于系统性地组合和验证了它们的有效性。
LLaMA 提供了四个规模的模型:
| 参数量 | 维度 $d$ | 注意力头数 | 层数 | 学习率 | 批大小 | 训练 tokens |
|---|---|---|---|---|---|---|
| 6.7B | 4096 | 32 | 32 | $3 \times 10^{-4}$ | 4M | 1.0T |
| 13.0B | 5120 | 40 | 40 | $3 \times 10^{-4}$ | 4M | 1.0T |
| 32.5B | 6656 | 52 | 60 | $1.5 \times 10^{-4}$ | 4M | 1.4T |
| 65.2B | 8192 | 64 | 80 | $1.5 \times 10^{-4}$ | 4M | 1.4T |
3.2 Pre-normalization(源自 GPT-3)
传统做法:在 Transformer 子层的输出做 Layer Normalization。
LLaMA 的做法:在每个 Transformer 子层的输入做归一化,使用 RMSNorm。
$$ \text{RMSNorm}(x) = \frac{x}{\text{RMS}(x)} \cdot g, \quad \text{RMS}(x) = \sqrt{\frac{1}{n} \sum_{i=1}^{n} x_i^2} $$其中 $g$ 是可学习的缩放参数。
为什么更好? RMSNorm 是 LayerNorm 的简化版本——去掉了均值中心化步骤(即减去均值),只保留了方差归一化。这使得:
- 计算更快(省去了一次均值计算)
- 训练更稳定(Pre-normalization 让梯度流更顺畅)
3.3 SwiGLU 激活函数(源自 PaLM)
标准 Transformer 的前馈层(FFN)使用 ReLU 激活:
$$ \text{FFN}(x) = \text{ReLU}(xW_1 + b_1) W_2 + b_2 $$LLaMA 替换为 SwiGLU 激活函数:
$$ \text{SwiGLU}(x) = (\text{Swish}(xW_1) \odot xV) W_2 $$其中 Swish 激活函数为 $\text{Swish}(x) = x \cdot \sigma(x)$,$\sigma$ 是 Sigmoid 函数,$\odot$ 表示逐元素乘法。
直观理解:SwiGLU 相当于在 FFN 中引入了一个"门控"机制——$V$ 分支充当门控信号,决定哪些信息可以通过。GLU(Gated Linear Unit)系列激活函数在多项实验中被证明优于 ReLU 和 GELU。
维度调整:使用 SwiGLU 时,LLaMA 将 FFN 的隐藏维度设为 $\frac{2}{3} \times 4d$(而非原来的 $4d$),以保持总参数量不变。
3.4 旋转位置编码 RoPE(源自 GPT-Neo)
原始 Transformer 使用绝对位置编码(给每个位置加一个固定的或可学习的向量)。LLaMA 采用旋转位置编码(Rotary Position Embedding, RoPE),在每一层的注意力计算中注入位置信息。
RoPE 的核心思想:不是给 token 的嵌入加上位置信息,而是通过旋转来编码相对位置关系。
对于位置 $m$ 处的向量 $\mathbf{x}$,RoPE 将其视为 $\frac{d}{2}$ 个二维子空间,每个子空间旋转角度 $m\theta_i$:
$$ f(\mathbf{x}, m) = \begin{pmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \\ \vdots \end{pmatrix} \otimes \begin{pmatrix} \cos m\theta_0 \\ \cos m\theta_0 \\ \cos m\theta_1 \\ \cos m\theta_1 \\ \vdots \end{pmatrix} + \begin{pmatrix} -x_1 \\ x_0 \\ -x_3 \\ x_2 \\ \vdots \end{pmatrix} \otimes \begin{pmatrix} \sin m\theta_0 \\ \sin m\theta_0 \\ \sin m\theta_1 \\ \sin m\theta_1 \\ \vdots \end{pmatrix} $$其中 $\theta_i = 10000^{-2i/d}$。
RoPE 的优势:
- 天然编码相对位置:两个 token 之间的注意力分数只取决于它们的相对距离,不取决于绝对位置
- 长度外推:理论上可以处理比训练时更长的序列(尽管实际效果有限)
- 无需额外参数
4. 训练细节
4.1 优化器
使用 AdamW 优化器,超参数设定为:
- $\beta_1 = 0.9$,$\beta_2 = 0.95$
- 权重衰减:0.1
- 梯度裁剪:1.0
- 预热步数(Warmup):2000 步
- 学习率调度:余弦退火(Cosine Learning Rate Schedule),最终学习率衰减至最大值的 10%
学习率和批大小随模型规模调整(见上表)。
4.2 高效训练实现
LLaMA 在工程层面做了多项优化,使 65B 模型的训练效率达到了约 380 tokens/sec/GPU(2048 块 A100-80GB):
- 因果注意力的高效实现:使用
xformers库,基于 FlashAttention(Dao et al., 2022)——不存储注意力权重,不计算被因果掩码遮蔽的 key/query 分数,大幅减少内存占用 - 激活重计算优化:手动实现 Transformer 层的反向传播函数,只保存计算代价高的激活值(如线性层输出),其余在反向时重新计算
- 模型与序列并行:使用模型并行和序列并行(Korthikanti et al., 2022)进一步降低单 GPU 内存需求
- 计算与通信重叠:将激活计算与 GPU 间的
all_reduce通信尽可能重叠
训练时间估算:65B 模型在 2048 块 A100 上训练 1.4T tokens,耗时约 21 天。
5. 实验结果:以小博大
5.1 常识推理(Common Sense Reasoning)
在 8 个常识推理基准上,LLaMA 与同等规模和更大规模的模型进行了对比:
| 模型 | BoolQ | PIQA | SIQA | HellaSwag | WinoGrande | ARC-e | ARC-c | OBQA |
|---|---|---|---|---|---|---|---|---|
| GPT-3 175B | 60.5 | 81.0 | - | 78.9 | 70.2 | 68.8 | 51.4 | 57.6 |
| Chinchilla 70B | 83.7 | 81.8 | 51.3 | 80.8 | 74.9 | - | - | - |
| PaLM 540B | 88.0 | 82.3 | - | 83.4 | 81.1 | 76.6 | 53.0 | 53.4 |
| LLaMA-7B | 76.5 | 79.8 | 48.9 | 76.1 | 70.1 | 72.8 | 47.6 | 57.2 |
| LLaMA-13B | 78.1 | 80.1 | 50.4 | 79.2 | 73.0 | 74.8 | 52.7 | 56.4 |
| LLaMA-33B | 83.1 | 82.3 | 50.4 | 82.8 | 76.0 | 80.0 | 57.8 | 58.6 |
| LLaMA-65B | 85.3 | 82.8 | 52.3 | 84.2 | 77.0 | 78.9 | 56.0 | 60.2 |
关键发现:
- LLaMA-65B 在大多数基准上超越 Chinchilla-70B,仅在 BoolQ 上略逊
- LLaMA-13B(13B 参数)在多数基准上超越 GPT-3(175B 参数),参数量仅为 1/10
- 在 HellaSwag 上,LLaMA-65B(84.2%)甚至超过 PaLM-540B(83.4%)
5.2 闭卷问答(Closed-book QA)
在 Natural Questions 和 TriviaQA 上:
Natural Questions(Exact Match):
| 模型 | 0-shot | 1-shot | 5-shot | 64-shot |
|---|---|---|---|---|
| GPT-3 175B | 14.6 | 23.0 | - | 29.9 |
| Chinchilla 70B | 16.6 | - | 31.5 | 35.5 |
| PaLM 540B | 21.2 | 29.3 | - | 39.6 |
| LLaMA-13B | 20.1 | 23.4 | 28.1 | 31.9 |
| LLaMA-65B | 23.8 | 31.0 | 35.0 | 39.9 |
TriviaQA(Exact Match):
| 模型 | 0-shot | 1-shot | 5-shot | 64-shot |
|---|---|---|---|---|
| Gopher 280B | 43.5 | - | 57.0 | 57.2 |
| Chinchilla 70B | 55.4 | - | 64.1 | 64.6 |
| LLaMA-13B | 56.6 | 60.5 | 63.1 | 64.0 |
| LLaMA-65B | 68.2 | 71.6 | 72.6 | 73.0 |
LLaMA-65B 在两个基准上都取得了 SOTA。更重要的是,LLaMA-13B 在推理时可以在单块 V100 GPU 上运行,性能却与 GPT-3(175B)和 Chinchilla(70B)相当。
5.3 数学推理与代码生成
在数学和代码任务上,LLaMA 同样展现了惊人的"以小博大"能力:
GSM8k(中学数学):
| 模型 | pass@1 | +maj1@k |
|---|---|---|
| PaLM 540B | 56.5 | - |
| Minerva 540B(数学微调) | 68.5 | 78.5 |
| LLaMA-33B | 35.6 | 53.1 |
| LLaMA-65B | 50.9 | 69.7 |
在使用多数投票(maj1@k)后,LLaMA-65B 在 GSM8k 上超越了 Minerva-62B(69.7% vs 68.5%),但关键区别是:Minerva 在 38.5B 的数学数据上做了微调,而 LLaMA 从未在数学数据上微调过。注意在不使用多数投票的 pass@1 指标上,Minerva-62B 仍领先(52.4% vs 50.9%)。
HumanEval(代码生成):
| 模型 | pass@1 |
|---|---|
| PaLM 540B | 26.2 |
| PaLM 62B | 15.9 |
| LLaMA-13B | 15.8 |
| LLaMA-33B | 21.7 |
| LLaMA-65B | 23.7 |
LLaMA-13B 已经超越 LaMDA 137B(15.8% vs 14.0%),LLaMA-65B 接近 PaLM 540B 的水平(23.7% vs 26.2%)。
5.4 大规模多任务理解(MMLU)
MMLU 覆盖 57 个学科(人文、STEM、社科等),是衡量模型综合知识能力的重要基准:
| 模型 | 人文 | STEM | 社科 | 其他 | 平均 |
|---|---|---|---|---|---|
| GPT-3 175B | 40.8 | 36.7 | 50.4 | 48.8 | 43.9 |
| Chinchilla 70B | 63.6 | 54.9 | 79.3 | 73.9 | 67.5 |
| PaLM 540B | 77.0 | 55.6 | 81.0 | 69.6 | 69.3 |
| LLaMA-13B | 45.0 | 35.8 | 53.8 | 53.3 | 46.9 |
| LLaMA-65B | 61.8 | 51.7 | 72.9 | 67.4 | 63.4 |
LLaMA-65B 在 MMLU 上落后于 Chinchilla-70B 和 PaLM-540B 几个百分点。论文分析原因是训练数据中书籍和学术论文的占比偏低(ArXiv + Gutenberg + Books3 仅 177GB),而 Gopher/Chinchilla/PaLM 使用了多达 2TB 的书籍数据。
6. 指令微调:简单的一步也能有效
6.1 LLaMA-I
论文展示了一个简单的指令微调实验:按照 Flan-PaLM(Chung et al., 2022)的协议,对 LLaMA-65B 进行指令微调,得到 LLaMA-I。
结果非常有启发性:
| 模型 | MMLU(5-shot) |
|---|---|
| LLaMA-65B(无微调) | 63.4 |
| Flan-PaLM 62B | 59.6 |
| Flan-PaLM-cont 62B | 66.1 |
| Chinchilla 70B | 67.5 |
| LLaMA-I 65B | 68.9 |
仅仅简单的指令微调就让 LLaMA-65B 在 MMLU 上从 63.4% 提升到 68.9%,超过了 Chinchilla-70B 和 Flan-PaLM 系列。这暗示着基础模型的潜力可以通过少量微调大幅释放。
7. 偏见与毒性分析
7.1 RealToxicityPrompts
在 RealToxicityPrompts(约 10 万条提示)上评估模型生成内容的毒性:
| 模型 | 基础提示毒性 | 礼貌提示毒性 |
|---|---|---|
| LLaMA-7B | 0.106 | 0.081 |
| LLaMA-13B | 0.104 | 0.095 |
| LLaMA-33B | 0.107 | 0.087 |
| LLaMA-65B | 0.128 | 0.141 |
发现:模型越大,毒性越高,尤其在"礼貌提示"条件下。这与之前的研究一致,说明模型规模的增大会放大数据中的有害模式。
7.2 社会偏见(CrowS-Pairs)
在 CrowS-Pairs 上评估 9 个类别的偏见:
| 类别 | LLaMA-65B | GPT-3 175B | OPT-175B |
|---|---|---|---|
| 性别 | 70.6 | 62.6 | 65.7 |
| 宗教 | 79.0 | 73.3 | 68.6 |
| 种族/肤色 | 57.0 | 64.7 | 68.6 |
| 平均 | 66.6 | 67.2 | 69.5 |
分数越高表示偏见越严重。LLaMA-65B 在总体上略优于 GPT-3 和 OPT,但在宗教(79.0%)和年龄(70.1%)类别上偏见尤为明显。
8. 碳足迹:透明的环境成本
LLaMA 论文详细披露了训练的碳排放数据:
| 模型 | GPU 小时 | 总能耗(MWh) | 碳排放(tCO₂eq) |
|---|---|---|---|
| LLaMA-7B | 82,432 | 36 | 14 |
| LLaMA-13B | 135,168 | 59 | 23 |
| LLaMA-33B | 530,432 | 233 | 90 |
| LLaMA-65B | 1,022,362 | 449 | 173 |
| OPT-175B | 809,472 | 356 | 137 |
| BLOOM-175B | 1,082,880 | 475 | 183 |
计算方法:$\text{Wh} = \text{GPU-hours} \times 400\text{W(A100 TDP)} \times 1.1\text{(PUE)}$,碳排放按美国全国平均碳强度 $0.385 \text{ kg CO}_2\text{/kWh}$ 计算。
值得注意的是,LLaMA-65B 的碳排放(173 tCO₂eq)与 BLOOM-175B(183 tCO₂eq)相当,但性能远超后者,体现了"小模型 + 多数据"策略的效率优势。
9. 与其他生成模型的对比
9.1 LLaMA vs. GPT-3
| 维度 | GPT-3 | LLaMA |
|---|---|---|
| 参数量 | 175B | 7B-65B |
| 训练数据 | 未公开 | 1.0T-1.4T tokens(全部公开) |
| 开源 | 否 | 是 |
| 性能(MMLU) | 43.9 | 63.4(65B) |
| 推理成本 | 极高 | 13B 可在单 GPU 上运行 |
9.2 LLaMA vs. Chinchilla
| 维度 | Chinchilla | LLaMA |
|---|---|---|
| 参数量 | 70B | 65B |
| 训练 tokens | 1.4T | 1.4T |
| 开源 | 否 | 是 |
| 性能(MMLU) | 67.5 | 63.4(65B)/ 68.9(I-65B) |
| 数据来源 | 未公开 | 全部公开 |
9.3 LLaMA vs. PaLM
| 维度 | PaLM 540B | LLaMA-65B |
|---|---|---|
| 参数量 | 540B | 65.2B |
| 性能 | 多数基准领先 | 部分基准持平或超越 |
| 推理成本 | 需要大规模集群 | 可在少量 GPU 上运行 |
| 开源 | 否 | 是 |
10. LLaMA 的局限与后续发展
10.1 主要局限
- MMLU 表现:在综合知识理解上落后于 Chinchilla 和 PaLM,主要因为训练数据中书籍和学术论文占比不足
- 无指令微调版本:原版 LLaMA 未做系统性的指令微调(仅做了简单实验),限制了其作为对话助手的能力
- 幻觉问题:在 TruthfulQA 上,LLaMA-65B 的正确率仅为 57%,说明模型仍然会生成看似合理但错误的内容
- 偏见与毒性:模型越大,生成有毒内容的概率越高,且在宗教、性别等类别上存在明显偏见
- 仅限研究:原始发布限制为研究用途
10.2 后续重要影响
LLaMA 的开源引发了大语言模型领域的"寒武纪大爆发":
| 后续工作 | 核心贡献 |
|---|---|
| Alpaca | 斯坦福基于 LLaMA-7B 微调,用 52K 指令数据实现类 ChatGPT 效果 |
| Vicuna | 基于 LLaMA-13B,用 ShareGPT 对话数据微调,GPT-4 评估达 ChatGPT 90% 质量 |
| LLaMA 2 | Meta 后续发布,训练数据翻倍,支持商用,增加了 RLHF |
| Code LLaMA | 专为代码生成优化的 LLaMA 变体 |
| Mistral / Mixtral | 受 LLaMA 启发的高效开源模型 |
| 中国开源模型 | ChatGLM、Qwen、DeepSeek 等均受 LLaMA 架构影响 |
11. 专有名词表
| 中文术语 | 英文术语 | 详细解释 |
|---|---|---|
| 大语言模型 | Large Language Model (LLM) | 在海量文本上预训练的大规模 Transformer 模型,具备文本生成和理解能力 |
| 预训练 | Pre-training | 在大规模无标注文本上训练语言模型学习语言知识的过程 |
| 指令微调 | Instruction Fine-tuning | 在指令-回答对数据上微调预训练模型,使其更好地遵循人类指令 |
| Scaling Law | Scaling Law | 描述模型性能与参数量、数据量、计算量之间幂律关系的经验规律 |
| Chinchilla Scaling Law | Chinchilla Scaling Law | Hoffmann et al. 2022 提出,建议训练数据量应与参数量同步扩展以达到最优性能 |
| BPE | Byte Pair Encoding | 一种子词分词算法,通过合并高频字符对构建词表 |
| RMSNorm | Root Mean Square Normalization | LayerNorm 的简化版本,仅做方差归一化,省去均值中心化 |
| SwiGLU | Swish-Gated Linear Unit | 一种结合 Swish 激活和门控线性单元的 FFN 激活函数 |
| RoPE | Rotary Position Embedding | 旋转位置编码,通过旋转向量来编码 token 间的相对位置关系 |
| FlashAttention | FlashAttention | 一种 IO 感知的精确注意力算法,通过减少内存读写大幅提升训练速度 |
| AdamW | Adam with Weight Decay | Adam 优化器的改进版本,将权重衰减与梯度更新解耦 |
| 零样本/少样本 | Zero-shot / Few-shot | 不提供/提供少量示例,直接让模型完成任务的评估方式 |
| MMLU | Massive Multitask Language Understanding | 覆盖 57 个学科的大规模多任务语言理解基准 |
| 幻觉 | Hallucination | 模型生成看似合理但事实上错误的内容 |
12. 总结
LLaMA 的核心理念可以用一句话概括:
与其训练一个巨大的模型快速达到目标性能,不如训练一个较小的模型长时间训练——因为推理成本才是实际部署中最重要的瓶颈。
这个看似简单的洞察背后有着深刻的意义:
- 数据比参数更重要:7B 模型在 1T tokens 后性能仍在提升,远超 Chinchilla 推荐的 200B tokens
- 开源不等于性能妥协:仅用公开数据训练的 LLaMA-65B 可与使用私有数据的 PaLM-540B 竞争
- 小模型可以改变世界:LLaMA-13B 超越 GPT-3(175B),且可在单 GPU 上运行,真正实现了大语言模型的"民主化"
LLaMA 不仅是一个高性能的语言模型,更是一个催化剂——它的开源直接催生了 Alpaca、Vicuna、Mistral 等一系列开源模型,推动整个领域从"闭源军备竞赛"转向"开源协作创新",深刻改变了大语言模型的研究和应用格局。