44-LLaMA系列演进
LLaMA 1/2/3 架构演进
LLaMA 1 (2023)
- 参数量:7B、13B、33B、65B
- 训练数据:约1T tokens,主要基于C4等公开语料
- 上下文窗口:2048 tokens
- 架构基础:基于Transformer Decoder,借鉴了GPT架构思想
LLaMA 2 (2023)
相比较于LLaMA 1,LLaMA 2在以下方面进行了改进:
- 数据量和质量:使用了比LLaMA 1多40%的数据进行预训练,包含更多高质量和多样性数据
- 上下文长度:上下文长度翻倍,达到4096 tokens,有助于模型理解更长文本和更复杂逻辑
- 模型架构优化:在34B和70B参数模型中使用了分组查询注意力(Grouped-Query Attention,GQA)技术,提高推理速度和内存效率
- 微调对齐:使用监督微调(SFT)和人类反馈强化学习(RLHF)对对话模型进行微调,在有用性和安全性方面都有显著提升
LLaMA 3 (2024)
- 参数量:8B、70B,后续推出400B
- 上下文窗口:扩展到8k/128k tokens
- 词汇表扩展:从32k扩展到128k,支持多语言更好
- 训练数据:训练token数提升10倍以上,数据质量进一步优化
- 性能提升:在多个基准评测上显著超越前代,接近GPT-3.5水平
LLaMA 关键技术
RMSNorm(Root Mean Square Layer Normalization)
相比LayerNorm,RMSNorm只对方差进行归一化,省去了均值计算,计算更简单高效:
RMSNorm(x)=RMS(x)x⋅w,RMS(x)=n1∑i=1nxi2
优势:
SwiGLU激活函数
SwiGLU是GLU的变体,在LLaMA中替代了传统的ReLU/GELU:
SwiGLU(x,W,V,b,c)=Swish(xW+b)⊗(xV+c)
其中 1,1 是sigmoid函数。
优势:
- 相比ReLU,梯度更不容易消失
- 模型深度可以更深
- 在大模型中表现更稳定
RoPE旋转位置编码
旋转位置编码(Rotary Position Embedding)通过对Query和Key施加旋转矩阵来注入位置信息:
qm=RΘ,mWqx,kn=RΘ,nWkx
其中 1 是针对位置m的旋转矩阵。
优势:
- 可以外推到比训练更长的上下文
- 相对位置编码更自然
- 支持长度外推
LLaMA 训练数据与策略
-
数据预处理:
- 去重处理:减少重复数据对模型的负面影响
- 过滤低质量内容:基于规则和模型打分过滤
- 多语言混合:LLaMA 2/3增加了非英语数据比例
-
训练优化:
开源生态
基于LLaMA的衍生项目
- Alpaca:斯坦福基于LLaMA进行指令微调的模型,使用52K指令数据
- Vicuna:基于ShareGPT对话数据微调,对话能力显著提升
- Chinese-LLaMA/Alpaca:针对中文进行扩展词表和继续预训练,提升中文理解能力
- Llama.cpp:纯C++实现,支持在CPU端高效推理,推动了端侧部署
- LLaMA Factory:提供了完整的LLaMA微调工具链,支持全量微调、LoRA、QLoRA等多种方式
面试常见问题
Q: LLaMA 2相比LLaMA 1主要改进了什么?
A:主要改进在四个方面:
- 训练数据量增加40%,数据质量更高
- 上下文窗口从2048增加到4096
- 34B/70B模型使用GQA技术提升推理效率
- 增加了SFT和RLHF对齐步骤,得到llama2-chat模型,对话体验更好
Q: LLaMA为什么使用RMSNorm而不是LayerNorm?
A:RMSNorm相比LayerNorm省去了均值计算,只做方差归一化,计算更简单,速度更快,内存占用更少,在大模型训练中更稳定高效。
Q: 什么是GQA,为什么要使用GQA?
A:分组查询注意力(Grouped-Query Attention)是MQA(多查询注意力)的推广,将多个查询头分组共享同一个Key/Value头。相比全MHA,GQA可以减少推理时的显存占用和IO开销,提升推理速度,同时基本不损失模型性能。
Q: 如何在LLaMA基础上做中文适配?
A:通常分三步:
- 扩展词表:使用中文语料训练新的tokenizer,合并中英文词表
- 继续预训练:在大规模中文语料上继续预训练,学习中文表达
- 指令微调:在中文指令对话数据上微调,获得对话能力
Q: LLaMA的激活函数是什么?和ReLU有什么区别?
A:LLaMA使用SwiGLU激活函数,相比ReLU,它保留了更多梯度信息,不容易出现梯度消失,能够支持更深的网络,在大模型中表现更稳定。