LLaMA 论文精读:为什么 13B 模型能挑战 GPT-3 175B?
前言
在这个系列的前几篇文章中,我们已经分别补了几个基础模块:
第一篇讲了 Tokenizer、BPE、SentencePiece,解决了“大模型如何读文字”的问题。
第二篇讲了 LLaMA Transformer Block,拆解了 RMSNorm、Attention、RoPE、FFN、SwiGLU、Residual Connection。
第三篇讲了 训练配方与实验评价,重点分析了 Chinchilla Scaling Law、AdamW、Cosine Learning Rate Schedule、Activation Recomputation,以及 LLaMA 的 benchmark 结果。
到这里,我们终于可以回到 LLaMA 原论文本身。
这篇文章是整个系列的收束篇,目标不是孤立讲某个概念,而是把整篇论文串起来:
LLaMA 到底提出了什么?
它为什么能小而强?
它和 GPT-3、InstructGPT、Chinchilla、PaLM 有什么关系?
它对后续开源大模型和多模态大模型有什么影响?
这篇论文的标题是:
LLaMA: Open and Efficient Foundation Language Models
中文可以翻译为:
LLaMA:开放且高效的基础语言模型
这篇论文的核心贡献可以用一句话概括:
LLaMA 证明了:只使用公开数据,通过合理的数据规模、模型规模、训练配方和工程优化,也可以训练出非常强的基础语言模型。
它不是一篇“提出全新网络结构”的论文,而是一篇典型的:
强训练配方 + 强工程实现 + 强实验验证
的论文。
一、论文基本信息
1.1 论文标题
LLaMA: Open and Efficient Foundation Language Models
关键词有三个:
Open
Efficient
Foundation Language Models
逐个解释:
Open:开放。
这里主要指训练数据尽量使用公开可获得的数据,而不是依赖私有、不可访问的数据集。
Efficient:高效。
这里不只是训练高效,也包括推理高效。相比 GPT-3 175B 这种超大模型,LLaMA 更强调小模型充分训练后也能获得强性能,从而降低推理成本。
Foundation Language Models:基础语言模型。
它不是专门为某个任务训练的模型,而是一个可以迁移到很多任务上的通用语言底座。
1.2 模型规模
LLaMA 论文提出了四个模型规模:
| 模型 | 参数量 |
|---|---|
| LLaMA-7B | 约 7B |
| LLaMA-13B | 约 13B |
| LLaMA-33B | 约 33B |
| LLaMA-65B | 约 65B |
这里的 B 是 Billion,表示十亿。
所以:
7B = 70 亿参数
13B = 130 亿参数
65B = 650 亿参数
这组模型非常重要,因为它证明了 7B、13B 这种相对较小的模型,只要训练充分,也可以有很强的能力。
这对学术界和普通实验室意义很大。
因为不是每个实验室都能训练和部署 175B、540B 这种超大模型,但 7B、13B 模型明显更接近可研究、可微调、可部署的范围。
二、Abstract 精读:LLaMA 想证明什么?
摘要里最重要的几个信息是:
7B to 65B parameters
publicly available datasets
LLaMA-13B outperforms GPT-3 175B on most benchmarks
LLaMA-65B is competitive with Chinchilla-70B and PaLM-540B
翻译成中文就是:
作者提出了一组从 7B 到 65B 参数规模的基础语言模型。这些模型在万亿级 token 上训练,并且只使用公开可获得的数据。实验显示,LLaMA-13B 在多数 benchmark 上超过了 GPT-3 175B,而 LLaMA-65B 可以和 Chinchilla-70B、PaLM-540B 竞争。
这一段其实已经把论文的核心说完了。
它最想传达的不是:
我们又训练了一个大模型。
而是:
我们训练了一个更开放、更高效、更适合研究社区使用的大模型系列。
这里最关键的矛盾是:
GPT-3 很强,但参数巨大、数据不完全透明、推理成本高。
LLaMA 想证明,小一些的模型如果训练充分,也可以非常强。
所以 LLaMA 的价值不只是性能,而是它打开了一个思路:
大模型研究不一定只能走“无限堆参数”这条路,也可以走“合理规模 + 充分训练 + 高效推理”的路线。
三、Introduction 精读:为什么 LLaMA 强调“小而强”?
3.1 GPT-3 之后的一个误区
GPT-3 证明了一个非常重要的现象:
大规模 Decoder-only 语言模型经过海量文本预训练后,可以表现出 few-shot 能力。
也就是说,模型不一定需要针对每个任务单独微调。
只要在 prompt 中给几个示例,它就可以模仿示例完成任务。
这让很多人形成了一个直觉:
模型越大,能力越强。
这个直觉在一定程度上是对的,但不完整。
因为模型能力不只取决于参数量,还取决于训练数据量和训练计算量。
3.2 Chinchilla Scaling Law 的影响
在 LLaMA 之前,DeepMind 的 Chinchilla 论文提出了一个非常重要的观点:
很多大模型其实是欠训练的。
什么叫欠训练?
就是模型参数很多,但训练 token 不够。
模型就像一个容量很大的学生,但训练题目做得不够多。
它有潜力,但没有被充分训练出来。
Chinchilla 给出了一个经验规律:
D≈20N D \approx 20N D≈20N
这里每个符号都重新解释一下:
- (D):训练 token 数;
- (N):模型参数量;
- (20):经验比例,表示大约每 1 个参数对应 20 个训练 token;
- (≈\approx≈):大约等于,说明这是经验规律,不是严格数学定理。
比如:
如果模型有 70B 参数,那么建议训练 token 数大约是:
D≈20×70B=1400B=1.4T D \approx 20 \times 70B = 1400B = 1.4T D≈20×70B=1400B=1.4T
这里的 (T) 是 trillion,表示万亿。
LLaMA 明显受到这个思想影响。
它不再盲目追求最大参数量,而是更重视:
模型规模和训练 token 数是否匹配。
3.3 LLaMA 的进一步思考:推理成本也很重要
Chinchilla 主要讨论的是训练计算最优。
而 LLaMA 又进一步强调了一个问题:
实际使用时,推理成本也非常重要。
训练只发生一次,但推理会发生无数次。
如果一个模型参数很大,推理成本就会非常高。
即使训练出来效果不错,部署起来也很贵。
所以 LLaMA 的思路是:
宁愿训练阶段多花一些 token,
也希望最终得到更小、更强、更便宜的模型。
这就是为什么 LLaMA-13B 很重要。
如果一个 13B 模型能在多数任务上超过 GPT-3 175B,那么它的部署价值就非常高。
四、Approach 精读:LLaMA 是怎么训练出来的?
LLaMA 的方法部分主要包括四块:
1. Pre-training Data:预训练数据
2. Architecture:模型架构
3. Optimizer:优化器和训练超参数
4. Efficient Implementation:高效训练实现
下面逐个讲。
五、Pre-training Data:公开数据能不能训练强模型?
LLaMA 论文的一个重要卖点是:
只使用公开可获得的数据训练。
它的数据来源包括:
| 数据源 | 作用 |
|---|---|
| CommonCrawl | 大规模网页文本,提供通用语言能力 |
| C4 | 清洗后的网页文本,提高数据质量 |
| GitHub | 代码数据,提高代码与结构化文本能力 |
| Wikipedia | 百科知识、多语言知识 |
| Books | 长文本、叙事能力、逻辑表达 |
| ArXiv | 科学论文、公式、学术表达 |
| StackExchange | 问答、技术讨论、解释型文本 |
这套数据组合很关键。
CommonCrawl 提供规模。
Wikipedia 和 Books 提供高质量知识和长文本表达。
GitHub 提供代码能力。
ArXiv 提供学术、数学、公式相关文本。
StackExchange 提供问答和解释风格。
所以 LLaMA 的能力不是凭空出现的,它和数据组成密切相关。
这里要注意一点:
LLaMA 是 base model,不是 instruction model。
它的预训练数据不是专门的人类指令数据,而是大规模自然文本、代码、论文、网页、问答等混合语料。
它学到的主要是:
语言规律
世界知识
代码模式
问答模式
推理痕迹
文本结构
但它还没有经过完整的指令对齐。
六、Tokenizer:文本如何进入 LLaMA?
LLaMA 使用 BPE tokenizer,并通过 SentencePiece 实现。
这一点在前面的 tokenizer 文章里已经详细讲过,这里简单串一下。
文本进入模型前,流程是:
原始文本
↓
Tokenizer
↓
Token 序列
↓
Token ID
↓
Embedding
↓
Transformer
Embedding 公式是:
xi=E[ti] x_i = E[t_i] xi=E[ti]
逐个解释:
- (tit_iti):第 (i) 个 token 的 ID;
- (E):embedding 矩阵,是可学习参数;
- (E[ti]E[t_i]E[ti]):从 embedding 矩阵中取出第 (t_i) 行;
- (xix_ixi):第 (i) 个 token 对应的向量表示。
也就是说,模型不是直接处理文字,而是处理 token ID 对应的向量。
LLaMA tokenizer 还有两个值得注意的细节:
1. 数字会被拆成单个 digit;
2. 使用 byte fallback 处理未知字符。
七、Architecture:LLaMA 的模型结构
LLaMA 是 Decoder-only Transformer。
也就是说,它和 GPT 系列类似,使用从左到右的自回归建模方式。
训练目标是预测下一个 token。
语言模型 loss 可以写成:
LLM=−∑t=1Tlogpθ(xt∣x<t) \mathcal{L}_{LM}= -\sum_{t=1}^{T}\log p_\theta(x_t \mid x_{<t}) LLM=−t=1∑Tlogpθ(xt∣x<t)
逐项解释:
- (LLM\mathcal{L}_{LM}LLM):语言模型损失;
- (TTT):序列长度;
- (ttt):当前位置;
- (xtx_txt):第 (t) 个真实 token;
- (x<tx_{<t}x<t):第 (t) 个 token 前面的所有 token;
- (pθ(xt∣x<t)p_\theta(x_t \mid x_{<t})pθ(xt∣x<t)):模型在看到前文后预测真实 token 的概率;
- (θ\thetaθ):模型参数;
- (log\loglog):对概率取对数;
- 负号 (-):因为我们希望最大化真实 token 概率,但训练时通常最小化 loss。
直觉是:
真实 token 概率越高,loss 越小;
真实 token 概率越低,loss 越大。
LLaMA 在标准 Transformer 基础上做了几个重要结构选择:
Pre-Norm
RMSNorm
RoPE
SwiGLU
Causal Multi-Head Attention
下面把它们串起来。
7.1 一个 LLaMA Block 的整体公式
一层 LLaMA Transformer Block 可以写成两个公式。
第一个公式是 Attention 子层:
h=x+Attention(RMSNorm(x)) h= x + \text{Attention}(\text{RMSNorm}(x)) h=x+Attention(RMSNorm(x))
逐项解释:
- (xxx):当前 Transformer Block 的输入;
- (RMSNorm(x)\text{RMSNorm}(x)RMSNorm(x)):先对输入做 RMSNorm;
- (Attention(⋅)\text{Attention}(\cdot)Attention(⋅)):因果多头自注意力;
- (x+Attention(RMSNorm(x))x + \text{Attention}(\text{RMSNorm}(x))x+Attention(RMSNorm(x))):残差连接;
- (hhh):Attention 子层之后的中间结果。
第二个公式是 FFN 子层:
y=h+FFN(RMSNorm(h)) y= h + \text{FFN}(\text{RMSNorm}(h)) y=h+FFN(RMSNorm(h))
逐项解释:
- (hhh):Attention 子层输出;
- (RMSNorm(h)\text{RMSNorm}(h)RMSNorm(h)):进入 FFN 前先归一化;
- (FFN(⋅)\text{FFN}(\cdot)FFN(⋅)):前馈网络,这里是 SwiGLU FFN;
- (h+FFN(RMSNorm(h))h + \text{FFN}(\text{RMSNorm}(h))h+FFN(RMSNorm(h))):残差连接;
- (yyy):当前 Transformer Block 的输出。
一句话总结:
LLaMA Block = Pre-Norm Attention + Residual + Pre-Norm SwiGLU FFN + Residual。
7.2 RMSNorm:控制向量尺度
LLaMA 使用 RMSNorm,而不是标准 LayerNorm。
RMSNorm 公式是:
RMSNorm(xi)=γixi1d∑j=1dxj2+ϵ \text{RMSNorm}(x_i)= \gamma_i \frac{x_i} {\sqrt{\frac{1}{d}\sum_{j=1}^{d}x_j^2+\epsilon}} RMSNorm(xi)=γid1∑j=1dxj2+ϵxi
逐项解释:
- (x=[x1,x2,…,xd]x=[x_1,x_2,\dots,x_d]x=[x1,x2,…,xd]):一个 token 的 hidden vector;
- (xix_ixi):第 (i) 个维度;
- (ddd):hidden dimension;
- (∑j=1dxj2\sum_{j=1}^{d}x_j^2∑j=1dxj2):所有维度平方求和;
- (1d∑j=1dxj2\frac{1}{d}\sum_{j=1}^{d}x_j^2d1∑j=1dxj2):平方均值;
- (1d∑j=1dxj2+ϵ\sqrt{\frac{1}{d}\sum_{j=1}^{d}x_j^2+\epsilon}d1∑j=1dxj2+ϵ):均方根 RMS;
- (ϵ\epsilonϵ):防止除零的小常数;
- (γi\gamma_iγi):第 (i) 个维度的可学习缩放参数。
RMSNorm 的核心是:
不减均值,只控制向量整体尺度。
它的作用是让每一层输入更稳定,从而帮助大模型训练。
7.3 Attention:token 之间如何交流?
Attention 的核心公式是:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q,K,V)= \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) V Attention(Q,K,V)=softmax(dkQKT)V
逐项解释:
- (QQQ):Query,查询向量,表示当前 token 想找什么信息;
- (KKK):Key,键向量,表示每个 token 有什么可被匹配的特征;
- (VVV):Value,值向量,表示每个 token 真正提供的信息;
- (KTK^TKT):Key 矩阵转置;
- (QKTQK^TQKT):Query 和 Key 的点积相似度;
- (dkd_kdk):Q/K 向量维度;
- (dk\sqrt{d_k}dk):缩放因子,避免点积分数过大;
- (softmax\text{softmax}softmax):把分数变成注意力权重;
- 最后乘以 (VVV):根据注意力权重汇总信息。
直觉是:
先判断应该关注谁,
再从被关注的 token 中取信息。
由于 LLaMA 是自回归模型,所以 Attention 必须加 causal mask。
当前位置只能看自己和前面的 token,不能看未来 token。
7.4 RoPE:旋转位置编码
Transformer 本身不知道顺序,所以必须加入位置信息。
LLaMA 使用的是 RoPE,也就是 Rotary Position Embedding,旋转位置编码。
二维旋转公式是:
[x1′ x2′]=[cosθ−sinθsinθcosθ][x1 x2] \begin{bmatrix} x_1'\ x_2' \end{bmatrix}= \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} x_1\ x_2 \end{bmatrix} [x1′ x2′]=[cosθsinθ−sinθcosθ][x1 x2]
逐项解释:
- (x1,x2x_1,x_2x1,x2):旋转前二维向量的两个坐标;
- (x1′,x2′x_1',x_2'x1′,x2′):旋转后的两个坐标;
- (θ\thetaθ):旋转角度;
- (cosθ,sinθ\cos\theta,\sin\thetacosθ,sinθ):三角函数;
- 中间的矩阵:二维旋转矩阵。
RoPE 会把 Q、K 的高维向量两两分组,然后按不同频率旋转。
它的核心性质是:
(Rmqm)T(Rnkn)=qmTRn−mkn (R_m q_m)^T(R_n k_n)= q_m^T R_{n-m} k_n (Rmqm)T(Rnkn)=qmTRn−mkn
逐项解释:
- (qmq_mqm):位置 (m) 的 Query;
- (knk_nkn):位置 (n) 的 Key;
- (RmR_mRm):位置 (m) 对应的旋转矩阵;
- (RnR_nRn):位置 (n) 对应的旋转矩阵;
- (n−mn-mn−m):两个 token 的相对距离;
- 这个公式说明,Q/K 分别按绝对位置旋转后,点积中会自然体现相对位置差。
所以 RoPE 的本质是:
表面上注入绝对位置,实际在 Attention 分数里体现相对位置关系。
7.5 SwiGLU:FFN 里的门控机制
LLaMA 的 FFN 使用 SwiGLU。
公式是:
SwiGLU(x)=Wdown(SiLU(Wgatex)⊙Wupx) \text{SwiGLU}(x)= W_{\text{down}} \left( \text{SiLU}(W_{\text{gate}}x) \odot W_{\text{up}}x \right) SwiGLU(x)=Wdown(SiLU(Wgatex)⊙Wupx)
逐项解释:
- (x):输入 token 的 hidden vector;
- (WgateW_{\text{gate}}Wgate):门控矩阵,是可学习参数;
- (WgatexW_{\text{gate}}xWgatex):门控分支输出;
- (SiLU(⋅)\text{SiLU}(\cdot)SiLU(⋅)):SiLU 激活函数;
- (WupW_{\text{up}}Wup):升维矩阵,是可学习参数;
- (WupxW_{\text{up}}xWupx):候选特征;
- (⊙\odot⊙):逐元素相乘;
- (WdownW_{\text{down}}Wdown):降维矩阵,是可学习参数;
- (SwiGLU(x)\text{SwiGLU}(x)SwiGLU(x)):门控 FFN 输出。
SiLU 公式是:
SiLU(z)=z⋅σ(z) \text{SiLU}(z)=z\cdot\sigma(z) SiLU(z)=z⋅σ(z)
其中:
- (z):输入值;
- (σ(z)\sigma(z)σ(z)):sigmoid 函数;
- (z⋅σ(z)z\cdot\sigma(z)z⋅σ(z)):输入乘以一个 0 到 1 附近的平滑门控值。
SwiGLU 的直觉是:
一条路生成候选信息;
一条路生成门控值;
门控值决定哪些特征通过,哪些特征被抑制。
这比普通 ReLU FFN 更灵活。
八、Optimizer:LLaMA 如何更新参数?
LLaMA 使用 AdamW 优化器。
AdamW 的更新公式可以写成:
θt+1=θt−ηm^tv^t+ϵ−ηλθt \theta_{t+1}=\theta_t- \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}- \eta\lambda\theta_t θt+1=θt−ηv^t+ϵm^t−ηλθt
逐项解释:
- (θt\theta_tθt):第 (t) 步的参数;
- (θt+1\theta_{t+1}θt+1):更新后的参数;
- (η\etaη):学习率;
- (m^t\hat{m}_tm^t):偏差修正后的一阶动量;
- (v^t\hat{v}_tv^t):偏差修正后的二阶动量;
- (ϵ\epsilonϵ):防止除零的小常数;
- (λ\lambdaλ):weight decay 系数;
- (−ηm^tv^t+ϵ-\eta\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}−ηv^t+ϵm^t):Adam 根据梯度做的更新;
- (−ηλθt-\eta\lambda\theta_t−ηλθt):单独的权重衰减项。
AdamW 的核心思想是:
Adam 负责优化 loss,weight decay 单独负责控制参数规模。
这比把 L2 正则直接混进 Adam 梯度里更合理。
九、Learning Rate Schedule:为什么用 Cosine?
LLaMA 使用 cosine learning rate schedule。
Warmup 后的余弦学习率公式可以写成:
ηt=ηmin+12(ηmax−ηmin)(1+cos(πp)) \eta_t= \eta_{\min} + \frac{1}{2} (\eta_{\max}-\eta_{\min}) \left( 1+\cos(\pi p) \right) ηt=ηmin+21(ηmax−ηmin)(1+cos(πp))
其中:
p=t−TwarmupTtotal−Twarmup p= \frac{t-T_{\text{warmup}}} {T_{\text{total}}-T_{\text{warmup}}} p=Ttotal−Twarmupt−Twarmup
逐项解释:
- (ηt\eta_tηt):第 (t) 步学习率;
- (ηmax\eta_{\max}ηmax):最大学习率;
- (ηmin\eta_{\min}ηmin):最小学习率;
- (ttt):当前训练步数;
- (TwarmupT_{\text{warmup}}Twarmup):warmup 步数;
- (TtotalT_{\text{total}}Ttotal):总训练步数;
- (ppp):warmup 之后的训练进度,范围从 0 到 1;
- (cos(πp)\cos(\pi p)cos(πp)):余弦衰减项。
训练过程可以理解成:
刚开始:warmup,小步试探;
中期:较大学习率,快速学习;
后期:cosine decay,小步收敛。
这有助于大模型长期稳定训练。
十、Efficient Implementation:大模型训练的工程现实
LLaMA 的强大不仅来自结构和数据,也来自工程优化。
主要包括:
Efficient causal attention
Activation recomputation
Model parallelism
Sequence parallelism
Communication overlap
逐个解释。
10.1 Efficient Causal Attention
标准 Attention 会产生 (n×nn \times nn×n) 的注意力矩阵。
如果序列长度是 (n),那么 attention score matrix 大小是:
n×n n \times n n×n
其中:
- (n):序列长度;
- (n×nn \times nn×n):每个 token 和每个 token 都计算一次注意力分数。
但 causal attention 中,未来 token 是不能看的。
所以矩阵上三角部分最终会被 mask 掉。
高效实现的思想是:
不要计算无效位置;
不要完整存储 attention weights。
这样可以减少显存占用和计算时间。
10.2 Activation Recomputation
Activation 是前向传播中的中间结果。
训练时反向传播需要这些中间结果,但全部保存会非常占显存。
Activation Recomputation 的思路是:
前向传播时少存一些 activation;
反向传播需要时重新计算。
本质是:
用计算换显存。
这对大模型和长序列模型非常重要。
尤其在 VLM 和视觉 RAG 中,图像 token、文本 token、页面 token 叠加后,序列长度会变得很长,activation 显存问题会更严重。
10.3 Model Parallelism 和 Sequence Parallelism
Model Parallelism:模型并行。
把模型参数拆到多张 GPU 上。
比如:
GPU 1 放前几层;
GPU 2 放中间几层;
GPU 3 放后几层。
或者把一层中的大矩阵拆开。
Sequence Parallelism:序列并行。
把序列维度拆到多张 GPU 上。
它解决的是:
序列太长,单卡处理完整序列太贵。
Communication Overlap:通信计算重叠。
多 GPU 训练时,GPU 之间需要交换数据。
如果 GPU 一直等待通信完成,就会浪费算力。
所以工程上会尽量让通信和计算同时发生。
一句话:
大模型训练不是只靠公式,还靠工程系统把显存、计算和通信都安排好。
十一、Main Results:LLaMA 如何证明自己强?
LLaMA 的实验覆盖多个能力维度:
Common Sense Reasoning
Closed-book QA
Reading Comprehension
Mathematical Reasoning
Code Generation
MMLU
这说明 LLaMA 不是只看一个任务,而是试图证明自己具备广泛的 foundation model 能力。
11.1 Common Sense Reasoning:常识推理
常识推理测试模型是否理解日常世界规律。
比如:
冰淇淋放在太阳下会融化。
杯子掉到地上可能会碎。
人困了需要睡觉。
LLaMA 使用了 BoolQ、PIQA、SIQA、HellaSwag、WinoGrande、ARC、OpenBookQA 等 benchmark。
这些任务共同测试:
物理常识
社会常识
代词消解
科学常识
场景推理
LLaMA-13B 在很多常识推理任务上表现超过 GPT-3 175B,这也是论文最有冲击力的结果之一。
11.2 Closed-book QA:闭卷问答
闭卷问答指模型不能检索外部文档,只能依靠参数中存储的知识回答问题。
使用的 benchmark 包括:
Natural Questions
TriviaQA
常用指标是 Exact Match。
公式是:
EM=1N∑i=1N1(y^i=yi) \text{EM}= \frac{1}{N} \sum_{i=1}^{N} \mathbf{1}(\hat{y}_i = y_i) EM=N1i=1∑N1(y^i=yi)
逐项解释:
- (EM\text{EM}EM):精确匹配率;
- (N):问题总数;
- (i):第 (i) 个问题;
- (y^i\hat{y}_iy^i):模型答案;
- (y_i):标准答案;
- (1(y^i=yi)\mathbf{1}(\hat{y}_i=y_i)1(y^i=yi)):答案完全一致为 1,否则为 0。
闭卷 QA 能反映模型参数记忆的事实知识。
但它也有问题:
知识可能过时;
答案不可追溯;
容易出现幻觉。
这也是为什么专业场景更需要 RAG。
11.3 Reading Comprehension:阅读理解
阅读理解测试模型是否能根据给定文章回答问题。
LLaMA 使用 RACE benchmark。
RACE 是选择题任务,因此常用 Accuracy:
Accuracy=1N∑i=1N1(y^i=yi) \text{Accuracy}= \frac{1}{N} \sum_{i=1}^{N} \mathbf{1}(\hat{y}_i = y_i) Accuracy=N1i=1∑N1(y^i=yi)
逐项解释:
- (Accuracy\text{Accuracy}Accuracy):准确率;
- (NNN):样本数量;
- (y^i\hat{y}_iy^i):模型预测答案;
- (yiy_iyi):正确答案;
- (1(y^i=yi)\mathbf{1}(\hat{y}_i=y_i)1(y^i=yi)):预测正确为 1,否则为 0。
阅读理解和闭卷问答不同。
闭卷问答看模型参数记住了多少知识。
阅读理解看模型能不能利用给定上下文。
这对 RAG 特别重要,因为 RAG 生成阶段本质上就是阅读检索到的证据并回答问题。
11.4 Mathematical Reasoning:数学推理
LLaMA 使用了 MATH 和 GSM8K。
GSM8K 是中小学数学文字题。
MATH 更难,包含更复杂的数学题。
数学推理不只是计算,它还包括:
读题
抽取数量关系
多步推理
计算
生成答案
论文中还使用了 majority voting,多数投票。
公式是:
y^=argmaxa∑j=1k1(yj=a) \hat{y}= \arg\max_a \sum_{j=1}^{k} \mathbf{1}(y_j=a) y^=argamaxj=1∑k1(yj=a)
逐项解释:
- (y^\hat{y}y^):最终答案;
- (aaa):候选答案;
- (kkk):采样次数;
- (jjj):第 (j) 次生成;
- (yjy_jyj):第 (j) 次生成的答案;
- (1(yj=a)\mathbf{1}(y_j=a)1(yj=a)):如果第 (j) 次答案等于 (a),值为 1,否则为 0;
- (argmaxa\arg\max_aargmaxa):选择出现次数最多的答案。
多数投票说明:
大模型单次生成可能不稳定,多采样后投票可以提高正确率。
11.5 Code Generation:代码生成
LLaMA 使用 HumanEval 和 MBPP 评估代码生成。
代码任务不只看文本是否像代码,而是看代码能不能通过测试用例。
常用指标是 pass@k。
公式是:
pass@k=1N∑i=1N1(∃j∈1,…,k:pass(ci,j)=1) \text{pass@}k= \frac{1}{N} \sum_{i=1}^{N} \mathbf{1} \left( \exists j \in {1,\dots,k}: \text{pass}(c_{i,j})=1 \right) pass@k=N1i=1∑N1(∃j∈1,…,k:pass(ci,j)=1)
逐项解释:
- (pass@k\text{pass@}kpass@k):生成 (k) 个候选时的通过率;
- (NNN):题目总数;
- (iii):第 (i) 道题;
- (jjj):第 (j) 个候选代码;
- (ci,jc_{i,j}ci,j):第 (i) 道题的第 (j) 个代码候选;
- (pass(ci,j)\text{pass}(c_{i,j})pass(ci,j)):这个代码是否通过测试;
- (∃j\exists j∃j):存在至少一个候选;
- (1(⋅)\mathbf{1}(\cdot)1(⋅)):条件成立为 1,否则为 0。
LLaMA 能在代码任务上表现不错,和训练数据中的 GitHub 数据有关。
但它不是专门代码模型。
后来的 Code Llama 才是专门面向代码进一步训练的模型。
11.6 MMLU:多任务语言理解
MMLU 全称是 Massive Multitask Language Understanding。
它覆盖很多学科:
数学
物理
计算机
法律
医学
历史
哲学
经济学
社会科学
它测试的是模型综合知识和推理能力。
LLaMA 在 MMLU 上并不是完全超过 Chinchilla 和 PaLM。
这点非常重要。
它说明:
LLaMA 很强,但不是所有能力都最强;
不同 benchmark 测的是不同能力;
训练数据覆盖会影响专业知识表现。
所以我们不能只看一个总分判断模型强弱。
十二、Instruction Finetuning:LLaMA base 不是 ChatGPT
LLaMA 原论文主要讲的是 base model。
Base model 的主要训练目标是:
预测下一个 token。
它不一定稳定听指令,也不一定安全。
论文中做了一个简单的 instruction finetuning 实验,说明少量指令微调可以进一步提升模型的指令跟随能力和部分任务表现。
这里要区分三个概念:
Pretraining:大规模预训练,学语言和知识;
Instruction Finetuning:指令微调,学会按人类指令回答;
RLHF:通过人类反馈进一步对齐偏好和安全性。
LLaMA base 更接近 GPT-3 base。
而 ChatGPT、InstructGPT、Llama Chat 这类模型,则经过了指令微调或对齐过程。
所以不要把 LLaMA 原始 base model 直接等同于聊天助手。
十三、Bias、Toxicity、Misinformation:强模型不等于安全模型
LLaMA 论文也评估了模型的风险,包括:
Bias:偏见
Toxicity:毒性
Misinformation:错误信息
13.1 Bias:偏见
偏见指模型可能对性别、职业、宗教、种族等群体产生系统性倾向。
这通常来自训练数据。
如果网络文本中存在大量社会刻板印象,模型就可能学到这些模式。
13.2 Toxicity:毒性
毒性指模型可能生成攻击性、冒犯性、有害内容。
论文中使用了 RealToxicityPrompts 这类数据集进行测试。
重要结论是:
模型更强,不代表更安全。
Base model 学的是语言分布,不是安全规则。
13.3 Misinformation:错误信息与幻觉
错误信息指模型生成不真实、误导性内容。
大模型中的 hallucination,中文常叫 幻觉。
它指的是:
模型生成了看起来很流畅、很自信,但事实上错误或没有依据的内容。
这和语言模型训练目标有关。
模型训练时优化的是:
下一个 token 看起来是否合理。
而不是:
生成内容是否一定真实。
这对你的视觉 RAG / 专利理解方向非常重要。
专业场景中不能只依赖模型参数记忆,而要让模型基于证据回答。
十四、Carbon Footprint:大模型训练的成本
LLaMA 论文还讨论了训练的碳足迹。
这里涉及一个能耗估算公式:
Wh=GPU-h×GPU power consumption×PUE Wh= \text{GPU-h} \times \text{GPU power consumption} \times \text{PUE} Wh=GPU-h×GPU power consumption×PUE
逐项解释:
- (WhWhWh):瓦时,能耗单位;
- (GPU-h\text{GPU-h}GPU-h):GPU 使用小时数;
- (GPU power consumption\text{GPU power consumption}GPU power consumption):单张 GPU 功耗;
- (PUE\text{PUE}PUE):Power Usage Effectiveness,数据中心能源使用效率。
PUE 可以理解为:
GPU 本身耗电之外,数据中心制冷、供电等额外消耗的比例。
这部分提醒我们:
大模型训练不仅是算法问题,也是资源问题和工程问题。
十五、LLaMA 的局限性
读论文不能只看优点,也要看局限。
15.1 它不是 chat model
LLaMA 1 原论文主要是 base model。
它会续写、会 few-shot,但不一定稳定听指令。
15.2 它不是多模态模型
LLaMA 只能处理文本,不能直接看图。
如果要处理图像,需要接视觉编码器。
比如后来的 VLM 通常会采用:
Vision Encoder
↓
Projector / Adapter
↓
LLM
15.3 它仍然会幻觉
LLaMA 可以回答很多问题,但不保证事实正确。
尤其在专业领域,必须结合检索证据或领域微调。
15.4 它仍然有偏见和安全风险
训练数据来自互联网,偏见和有害内容不可避免。
base model 没有经过充分对齐,风险更明显。
十六、LLaMA 在大模型发展史中的位置
我们可以把前面读过的几篇论文串起来:
BERT:
Encoder-only,双向理解,适合 NLU 任务。
GPT-3:
Decoder-only,自回归生成,展示 few-shot 能力。
InstructGPT:
通过 SFT、Reward Model、PPO,让模型更会听人类指令。
LLaMA:
用公开数据、合理规模和充分训练,证明小而强的开放基础模型可行。
LLaMA 的历史意义在于:
它推动了开源大模型生态,让 7B、13B 级别模型成为研究者可以真正使用、微调和分析的对象。
它后面影响了一大批模型和项目:
Alpaca
Vicuna
LLaVA
Code Llama
Llama 2
各种基于 LLaMA 的微调模型
更重要的是,它让很多研究从“只能调用闭源 API”变成“可以基于开源权重做实验”。
十七、对 VLM / 视觉 RAG / 专利理解的启发
这篇论文虽然是语言模型论文,但对多模态研究非常关键。
17.1 LLaMA 是语言底座
很多 VLM 可以理解成:
视觉编码器负责看图;
语言模型负责理解、推理和生成;
中间模块负责把视觉特征接入语言模型。
LLaMA 这类 Decoder-only LLM 就是语言大脑。
如果不理解 LLaMA,就很难理解后面的 LLaVA、MiniGPT-4、Qwen-VL、ColPali 等模型为什么这样设计。
17.2 专业任务不能只靠模型记忆
LLaMA 的 closed-book QA 证明模型参数中确实存了一些知识。
但专利任务不能靠闭卷回答。
比如:
某个部件编号对应哪张图?
某个 claim 是否覆盖某个结构?
两份专利图是否存在相似区域?
某个说明书段落是否支持某个图中结构?
这些问题都需要证据。
所以你的视觉 RAG 方向更适合:
检索页面
↓
定位区域
↓
读取图文证据
↓
基于证据回答
17.3 实验评价要拆能力维度
LLaMA 的实验不是一个总分,而是拆成:
常识推理
闭卷问答
阅读理解
数学
代码
MMLU
安全性
真实性
你的视觉 RAG / 专利理解任务也应该拆能力:
| 能力 | 可能指标 |
|---|---|
| 页面检索 | Recall@k |
| 图文匹配 | Accuracy / Recall |
| 区域定位 | IoU |
| 问答生成 | EM / F1 |
| 证据引用 | Citation Accuracy |
| 幻觉控制 | Hallucination Rate |
| 长文档理解 | 跨页问答准确率 |
其中 Recall@k 公式是:
Recall@k=Number of relevant documents retrieved in top kTotal number of relevant documents \text{Recall@}k= \frac{ \text{Number of relevant documents retrieved in top }k }{ \text{Total number of relevant documents} } Recall@k=Total number of relevant documentsNumber of relevant documents retrieved in top k
逐项解释:
- (Recall@k\text{Recall@}kRecall@k):前 (k) 个结果中的召回率;
- (k):检索结果数量,例如 1、5、10;
- relevant documents:真正相关的文档;
- retrieved in top (k):被排在前 (k) 中的相关文档。
IoU 公式是:
IoU=∣A∩B∣∣A∪B∣ \text{IoU}= \frac{|A \cap B|}{|A \cup B|} IoU=∣A∪B∣∣A∩B∣
逐项解释:
- (IoU\text{IoU}IoU):Intersection over Union,交并比;
- (A):模型预测区域;
- (B):真实标注区域;
- (A∩BA \cap BA∩B):预测区域与真实区域的重叠部分;
- (A∪BA \cup BA∪B):预测区域与真实区域的并集。
这就是 LLaMA 实验部分对科研的启发:
不要只说模型效果好,要明确说明模型在哪些能力上好,用什么指标证明。
十八、全文总结
现在我们可以总结整篇 LLaMA 论文。
LLaMA 的核心贡献不是提出了一个全新的 Transformer,而是证明了:
使用公开数据,通过合理的数据规模、模型规模、训练配方和工程实现,可以训练出非常强的基础语言模型。
它的成功来自多个方面:
18.1 数据
公开数据
多源混合
网页 + 百科 + 书籍 + 代码 + 论文 + 问答
18.2 架构
Decoder-only Transformer
Pre-Norm
RMSNorm
RoPE
SwiGLU
Causal Attention
18.3 训练
大量 token
AdamW
Cosine Learning Rate Schedule
Warmup
Weight Decay
Gradient Clipping
18.4 工程
Efficient Causal Attention
Activation Recomputation
Model Parallelism
Sequence Parallelism
Communication Overlap
18.5 实验
13B 多数 benchmark 超过 GPT-3 175B
65B 可以竞争 Chinchilla-70B 和 PaLM-540B
但不是所有任务都领先
更多推荐
所有评论(0)