在 AI 领域,大模型的发展正以前所未有的速度推进技术的边界。
北京时间 4 月 19 日凌晨,Meta 在官网上官宣了 Llama-3,作为继 Llama-1、Llama-2 和 Code-Llama 之后的第三代模型,Llama-3 在多个基准测试中实现了全面领先,性能优于业界同类最先进的模型。
纵观 Llama 系列模型,从版本 1 到 3,展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。这些模型不仅在技术上不断刷新纪录,更在商业和学术界产生了深远的影响。因此,对 Llama 模型不同版本之间的系统对比,不仅可以揭示技术进步的具体细节,也能帮助我们理解这些高级模型如何解决现实世界的复杂问题。
1. Llama 进化史
本节将对每个版本的 Llama 模型进行简要介绍,包括它们发布的时间和主要特点。
1.1 Llama-1 系列
Llama-1 [1] 是 Meta 在 2023 年 2 月发布的大语言模型,是当时性能非常出色的开源模型之一,有 7B、13B、30B 和 65B 四个参数量版本。Llama-1 各个参数量版本都在超过 1T token 的语料上进行了预训练,其中,最大的 65B 参数的模型在 2,048 张 A100 80G GPU 上训练了近 21 天,并在大多数基准测试中超越了具有 175B 参数的 GPT-3。
由于模型开源且性能优异,Llama 迅速成为了开源社区中最受欢迎的大模型之一,以 Llama 为核心的生态圈也由此崛起。我们将在第 6 节对这一生态进行详细介绍。与此同时,众多研究者将其作为基座模型,进行了继续预训练或者微调,衍生出了众多变体模型(见下图),极大地推动了大模型领域的研究进展。
![Llama-1 变体模型示意图]
唯一美中不足的是,因为开源协议问题,Llama-1 不可免费商用。
1.2 Llama-2 系列
时隔 5 个月,Meta 在 2023 年 7 月发布了免费可商用版本 Llama-2 [2],有 7B、13B、34B 和 70B 四个参数量版本,除了 34B 模型外,其他均已开源。
![Llama-2 参数量版本对比]
相比于 Llama-1,Llama-2 将预训练的语料扩充到了 2T token,同时将模型的上下文长度从 2,048 翻倍到了 4,096,并引入了分组查询注意力机制(grouped-query attention, GQA)等技术。
有了更强大的基座模型 Llama-2,Meta 通过进一步的有监督微调(Supervised Fine-Tuning, SFT)、基于人类反馈的强化学习(Reinforcement Learning with Human Feedback, RLHF)等技术对模型进行迭代优化,并发布了面向对话应用的微调系列模型 Llama-2 Chat。
通过'预训练 - 有监督微调 - 基于人类反馈的强化学习'这一训练流程,Llama-2 Chat 不仅在众多基准测试中取得了更好的模型性能,同时在应用中也更加安全。
随后,得益于 Llama-2 的优异性能,Meta 在 2023 年 8 月发布了专注于代码生成的 Code-Llama,共有 7B、13B、34B 和 70B 四个参数量版本。
![Code-Llama 架构示意]
1.3 Llama-3
2024 年 4 月,Meta 正式发布了开源大模型 Llama 3,包括 8B 和 70B 两个参数量版本。除此之外,Meta 还透露,400B 的 Llama-3 还在训练中。
![Llama-3 版本信息]
相比 Llama-2,Llama-3 支持 8K 长文本,并采用了一个编码效率更高的 tokenizer,词表大小为 128K。在预训练数据方面,Llama-3 使用了超过 15T token 的语料,这比 Llama 2 的 7 倍还多。
Llama-3 在性能上取得了巨大飞跃,并在相同规模的大模型中取得了最优异的性能。
另外,推理、代码生成和指令跟随等能力得到了极大的改进,使 Llama 3 更加可控。
2. 模型架构
本节将详细描述 Llama 的模型架构,包括神经网络的大小、层数、注意力机制等。
目前,主流的大语言模型都采用了 Transformer[3] 架构,它是一个基于多层自注意力(Self-attention)的神经网络模型。
原始的 Transformer 由编码器(Encoder)和解码器(Decoder)两个部分构成,同时,这两个部分也可以独立使用。
例如基于编码器的 BERT [4] 模型和基于解码器的 GPT [5] 模型。
Llama 模型与 GPT 类似,也是采用了基于解码器的架构。在原始 Transformer 解码器的基础上,Llama 进行了如下改动:
- 为了增强训练稳定性,采用前置的 RMSNorm [6] 作为层归一化方法。
- 为了提高模型性能,采用 SwiGLU [7] 作为激活函数。
- 为了更好地建模长序列数据,采用 RoPE [8] 作为位置编码。
- 为了平衡效率和性能,部分模型采用了分组查询注意力机制(Grouped-Query Attention, GQA)[9]。


