论文来源: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-3175B否(未公开细节)
Gopher280B
PaLM540B
OPT175B部分公开
BLOOM176B部分公开
LLaMA7B-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 时)磁盘大小
CommonCrawl67.0%1.103.3 TB
C415.0%1.06783 GB
GitHub4.5%0.64328 GB
Wikipedia4.5%2.4583 GB
Books(Gutenberg + Books3)4.5%2.2385 GB
ArXiv2.5%1.0692 GB
Stack Exchange2.0%1.0378 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.7B40963232$3 \times 10^{-4}$4M1.0T
13.0B51204040$3 \times 10^{-4}$4M1.0T
32.5B66565260$1.5 \times 10^{-4}$4M1.4T
65.2B81926480$1.5 \times 10^{-4}$4M1.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 与同等规模和更大规模的模型进行了对比:

模型BoolQPIQASIQAHellaSwagWinoGrandeARC-eARC-cOBQA
GPT-3 175B60.581.0-78.970.268.851.457.6
Chinchilla 70B83.781.851.380.874.9---
PaLM 540B88.082.3-83.481.176.653.053.4
LLaMA-7B76.579.848.976.170.172.847.657.2
LLaMA-13B78.180.150.479.273.074.852.756.4
LLaMA-33B83.182.350.482.876.080.057.858.6
LLaMA-65B85.382.852.384.277.078.956.060.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-shot1-shot5-shot64-shot
GPT-3 175B14.623.0-29.9
Chinchilla 70B16.6-31.535.5
PaLM 540B21.229.3-39.6
LLaMA-13B20.123.428.131.9
LLaMA-65B23.831.035.039.9

TriviaQA(Exact Match)

模型0-shot1-shot5-shot64-shot
Gopher 280B43.5-57.057.2
Chinchilla 70B55.4-64.164.6
LLaMA-13B56.660.563.164.0
LLaMA-65B68.271.672.673.0

LLaMA-65B 在两个基准上都取得了 SOTA。更重要的是,LLaMA-13B 在推理时可以在单块 V100 GPU 上运行,性能却与 GPT-3(175B)和 Chinchilla(70B)相当。

5.3 数学推理与代码生成

在数学和代码任务上,LLaMA 同样展现了惊人的"以小博大"能力:

GSM8k(中学数学)

模型pass@1+maj1@k
PaLM 540B56.5-
Minerva 540B(数学微调)68.578.5
LLaMA-33B35.653.1
LLaMA-65B50.969.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 540B26.2
PaLM 62B15.9
LLaMA-13B15.8
LLaMA-33B21.7
LLaMA-65B23.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 175B40.836.750.448.843.9
Chinchilla 70B63.654.979.373.967.5
PaLM 540B77.055.681.069.669.3
LLaMA-13B45.035.853.853.346.9
LLaMA-65B61.851.772.967.463.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 62B59.6
Flan-PaLM-cont 62B66.1
Chinchilla 70B67.5
LLaMA-I 65B68.9

仅仅简单的指令微调就让 LLaMA-65B 在 MMLU 上从 63.4% 提升到 68.9%,超过了 Chinchilla-70B 和 Flan-PaLM 系列。这暗示着基础模型的潜力可以通过少量微调大幅释放


7. 偏见与毒性分析

7.1 RealToxicityPrompts

在 RealToxicityPrompts(约 10 万条提示)上评估模型生成内容的毒性:

模型基础提示毒性礼貌提示毒性
LLaMA-7B0.1060.081
LLaMA-13B0.1040.095
LLaMA-33B0.1070.087
LLaMA-65B0.1280.141

发现:模型越大,毒性越高,尤其在"礼貌提示"条件下。这与之前的研究一致,说明模型规模的增大会放大数据中的有害模式。

7.2 社会偏见(CrowS-Pairs)

在 CrowS-Pairs 上评估 9 个类别的偏见:

类别LLaMA-65BGPT-3 175BOPT-175B
性别70.662.665.7
宗教79.073.368.6
种族/肤色57.064.768.6
平均66.667.269.5

分数越高表示偏见越严重。LLaMA-65B 在总体上略优于 GPT-3 和 OPT,但在宗教(79.0%)和年龄(70.1%)类别上偏见尤为明显。


8. 碳足迹:透明的环境成本

LLaMA 论文详细披露了训练的碳排放数据:

模型GPU 小时总能耗(MWh)碳排放(tCO₂eq)
LLaMA-7B82,4323614
LLaMA-13B135,1685923
LLaMA-33B530,43223390
LLaMA-65B1,022,362449173
OPT-175B809,472356137
BLOOM-175B1,082,880475183

计算方法:$\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-3LLaMA
参数量175B7B-65B
训练数据未公开1.0T-1.4T tokens(全部公开)
开源
性能(MMLU)43.963.4(65B)
推理成本极高13B 可在单 GPU 上运行

9.2 LLaMA vs. Chinchilla

维度ChinchillaLLaMA
参数量70B65B
训练 tokens1.4T1.4T
开源
性能(MMLU)67.563.4(65B)/ 68.9(I-65B)
数据来源未公开全部公开

9.3 LLaMA vs. PaLM

维度PaLM 540BLLaMA-65B
参数量540B65.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 2Meta 后续发布,训练数据翻倍,支持商用,增加了 RLHF
Code LLaMA专为代码生成优化的 LLaMA 变体
Mistral / Mixtral受 LLaMA 启发的高效开源模型
中国开源模型ChatGLM、Qwen、DeepSeek 等均受 LLaMA 架构影响

11. 专有名词表

中文术语英文术语详细解释
大语言模型Large Language Model (LLM)在海量文本上预训练的大规模 Transformer 模型,具备文本生成和理解能力
预训练Pre-training在大规模无标注文本上训练语言模型学习语言知识的过程
指令微调Instruction Fine-tuning在指令-回答对数据上微调预训练模型,使其更好地遵循人类指令
Scaling LawScaling Law描述模型性能与参数量、数据量、计算量之间幂律关系的经验规律
Chinchilla Scaling LawChinchilla Scaling LawHoffmann et al. 2022 提出,建议训练数据量应与参数量同步扩展以达到最优性能
BPEByte Pair Encoding一种子词分词算法,通过合并高频字符对构建词表
RMSNormRoot Mean Square NormalizationLayerNorm 的简化版本,仅做方差归一化,省去均值中心化
SwiGLUSwish-Gated Linear Unit一种结合 Swish 激活和门控线性单元的 FFN 激活函数
RoPERotary Position Embedding旋转位置编码,通过旋转向量来编码 token 间的相对位置关系
FlashAttentionFlashAttention一种 IO 感知的精确注意力算法,通过减少内存读写大幅提升训练速度
AdamWAdam with Weight DecayAdam 优化器的改进版本,将权重衰减与梯度更新解耦
零样本/少样本Zero-shot / Few-shot不提供/提供少量示例,直接让模型完成任务的评估方式
MMLUMassive Multitask Language Understanding覆盖 57 个学科的大规模多任务语言理解基准
幻觉Hallucination模型生成看似合理但事实上错误的内容

12. 总结

LLaMA 的核心理念可以用一句话概括:

与其训练一个巨大的模型快速达到目标性能,不如训练一个较小的模型长时间训练——因为推理成本才是实际部署中最重要的瓶颈。

这个看似简单的洞察背后有着深刻的意义:

  1. 数据比参数更重要:7B 模型在 1T tokens 后性能仍在提升,远超 Chinchilla 推荐的 200B tokens
  2. 开源不等于性能妥协:仅用公开数据训练的 LLaMA-65B 可与使用私有数据的 PaLM-540B 竞争
  3. 小模型可以改变世界:LLaMA-13B 超越 GPT-3(175B),且可在单 GPU 上运行,真正实现了大语言模型的"民主化"

LLaMA 不仅是一个高性能的语言模型,更是一个催化剂——它的开源直接催生了 Alpaca、Vicuna、Mistral 等一系列开源模型,推动整个领域从"闭源军备竞赛"转向"开源协作创新",深刻改变了大语言模型的研究和应用格局。