AI多模态模型架构之LLM主干(3):Llama系列

探索AI的无限可能,微信关注“AIGCmagic”公众号,让AIGC科技点亮生活

本文作者:AIGCmagic社区   刘一手

前言

AI多模态大模型发展至今,每年都有非常优秀的工作产出,按照当前模型设计思路,多模态大模型的架构主要包括以下几个部分:

  1. 模态编码器(Modality Encoder, ME):负责将不同模态的输入编码成特征。常见的编码器包括图像的NFNet-F6、ViT、CLIP ViT等,音频的Whisper、CLAP等,视频编码器等。

  2. 输入投影器(Input Projector):负责将其他模态的特征投影到文本特征空间,并与文本特征一起输入给语言模型。常用的投影器包括线性投影器、MLP、交叉注意力等。

  3. 语言模型骨架(LLM Backbone):利用预训练的语言模型,负责处理各种模态的特征,进行语义理解、推理和决策。常用的语言模型包括ChatGLM、Qwen、LLaMA等。

  4. 输出投影器(Output Projector):负责将语言模型输出的信号转换成其他模态的特征,以供后续模态生成器使用。常用的投影器包括Tiny Transformer、MLP等。

  5. 模态生成器(Modality Generator, MG):负责生成其他模态的输出。常用的生成器包括图像的Stable Diffusion、视频的Zeroscope、音频的AudioLDM等。


在当今人工智能时代,大模型无疑是最引人注目的焦点之一。它们以其强大的自然语言处理能力和广泛的应用场景,正在逐渐改变我们的工作和生活方式。

本文一手会详细解读AI多模态架构中的语言模型骨架(LLM Backbone),并从ChatGLM系列、Qwen系列、Llama系列三个代表性工作,总结当前主流的工作方案!持续更新,欢迎关注!

  • 本文目录
  • Llama-1
    • 开放和高效的基石语言模型
    • 训练数据和去重处理
    • 模型架构与GPT对比
    • 训练细节
  • Llama-2
    • 开放性、数据量增加、微调Chat Model
    • 训练数据和监督微调
    • 模型架构优化:GQA
  • Llama-3
    • 目标与性能
    • 模型架构更新
    • 训练数据与缩放定律
    • 指令微调
  • 总结

一、Llama-1

1.1 开放和高效的基石语言模型

首先来讲一下Meta开发Llamal的动机是什么?

从论文题目“Open and Efficient Foundation Language Models”可以看出,该模型强调了开放和高效两个特点。首先,它使用了完全公开的数据,不包含Meta的客户数据,性能上与GPT-3相媲美,对研究社区开放,但不可用于商业用途。

从下图可以观察到,之前的Scaling Law主要依据计算代价来评估模型效率。例如,观察左侧图表中的训练损失曲线,黄色代表10B模型,红色代表50B模型。随着训练时间的增加,即计算成本的持续增加,两者的损失均持续下降。初期,小模型的损失下降较快,但随着训练的深入,小模型的性能逐渐饱和,下降速度减缓,而大模型的下降速度则超过了小模型。当我们设定一个期望损失时,可以发现大模型的训练成本低于小模型。以往的Scaling Law均以训练计算花费为评估标准,因此认为在达到预定模型性能时,训练大模型更为经济。然而,Meta的观点与此不同,他们认为应更重视推理计算代价,因为训练仅发生一次,而推理则需频繁进行。根据传统Scaling Law的建议,对于10B模型,应使用2000亿token进行训练,但Meta发现,即使是7B模型,使用1万亿token后,性能仍能持续提升。这正是Meta所认为的效率。在后续的Llama系列中,Meta始终认为加训练数据比扩大模型参数更为有效

1.2 训练数据和去重处理

接下来看一下Llama-1训练使用的数据。Llama-1全部采用了公开渠道可以获取的数据,使用了2017至2020年的CommonCrawl数据,以及来自书籍和维基百科的文本,并且进行了去重,去掉了非英文数据,用线性模型对文本质量进行了分类。这个线性模型将Wikipedia引用的网页作为正例,其他的网页作为负例来训练这个线性模型。来自书和维基百科的文本训练用了两个epoch,其他的文本只用了一个epoch,总共1.4T个Token。训练时的上下文长度为2048,用了2048个A100的GPU,训练花费了21天。

1.3 模型架构与GPT对比

Llama-1的模型架构与GPT一样,采用了Transformer的Decoder架构,并进行了以下修改:

第一,与GPT-3相同,将Normalization从每个子层的输出位置移至输入位置。

第二,将LayerNorm改为RMSNorm。

第三,采用旋转位置编码。

第四,采用SiLU激活函数。

1.4 训练细节

下面重点讨论RMSNorm和SiLU激活函数。

RMSNorm是在LayerNorm的基础上进行了改进。其动机在于:进行Normalization时,对特征进行平移不会改变特征的分布,因此可以省略与平移相关的步骤。这包括LearnNorm中对输入特征减去均值的操作,以及标准化后进行线性变换时的偏差参数。其公式为x除以根号下x平方的均值,再乘以一个可学习的参数,分母中还包含一个防止除零的小epsilon。查看代码实现,初始化函数中定义了可学习的参数weight,对应公式中的gamma,以及一个极小的epsilon。在forward函数中,对特征进行平方处理,称之为方差,求其均值,随后特征乘以方差的平方根,最终返回时再次乘以weight,即公式中的gamma。

接下来,我们探讨SiLU激活函数,其公式为x乘以sigmoid x。在接近临界值时,其图形更为平滑。当远离临界值时,函数曲线与silu函数相似。实验表明,SiLU激活函数通常能提高模型精度,但由于需要计算指数函数,其计算成本较高。

SiLU激活函数虽然在提高模型精度方面表现出色,但其高计算成本可能限制了其在资源受限环境中的应用。此外,虽然文中提到SELU在接近临界值时表现平滑,但并未详细解释这种平滑性对模型性能的具体影响。在实际应用中,是否所有类型的模型都能从SiLU的平滑性中受益,或者这种特性是否在特定类型的数据或任务中更为有效,这些问题需要进一步的研究和验证。同时,考虑到计算成本,是否存在其他激活函数能够在不牺牲太多精度的情况下提供更高效的计算,这也是一个值得探讨的问题。


二、Llama-2

2.1 开放性、数据量增加、微调Chat Model

Llama2模型,其标题为“Open Foundation and Fine-tuned Chat Models”。Llama2模型的三个关键特点包括:

首先,它具有更高的开放性,允许商业使用

其次,训练数据量显著增加,体现了Meta公司关于增加数据量比增加模型参数更为有效的理念;

最后,通过微调训练Chat Model,以对标ChatGPT。

2.2 训练数据和监督微调

Llama2的训练数据比Llama1多出40%,达到2万亿个token。其上下文长度从2048翻倍至4096,共发布了7B、13B和70B三个不同大小的版本。监督微调过程中使用了10万条数据,这些数据包括人类提出的问题及其回答。此外,还收集了100万条人类偏好数据,用于对同一问题下模型的多个回答进行人工排序,以供强化学习使用。70B模型在训练中消耗了172万GPU小时。

来看一下Llama2的训练流程。首先,是在处理好的无标注文本数据上进行自回归预训练。然后,进行监督微调训练。接下来,通过人类偏好数据训练两个模型,一个是安全奖励模型,一个是有用奖励模型。之后,再利用强化学习对模型进行训练,最终得到了Llama2 chat模型。强化学习的内容我们将在后续专门讲解,此处若理解困难亦无妨。

通过下面这张图我们可以看到,即使使用了2万亿的Token进行训练,不同大小的模型都还有进一步提升的空间。看来数据量还可以更大,后面在训练Llama2,Meta确实也这么做了。

2.3 模型架构优化:GQA

在模型架构中引入了GQA,即Group Query Attention,这是对MultiHead Attention的一种优化,旨在减少模型参数量及KV cache的大小。后续将详细讨论KV cache。观察下图,左侧为熟悉的MultiHead Attention,每个Token的特征生成相同数量的Q、K、V头,例如均为8个头。Token 1的Q将与自身及其他Token的K进行注意力计算。再看右侧图,每个Token仍生成8个Q,但仅生成一个Value和一个K。所有Q均与其他Token及自身唯一的K进行相似度计算,此为MultiQuery Attention。

中间图展示的是Lama2采用的Group Query Attention,即分组注意力,它是MultiHead Attention与MultiQuery Attention的折中方案。该方法将Query分组,例如每两组对应一个K和Value。接下来探讨其实现细节。

上图是原始的MultiHeadAttention,假设原始的Token维度为512,则WQ、WK、WV线性层的权重矩阵都为512x512。生成的Q、K、V也都是512维,分为8个头,每个头的维度就是64。然后Q和K一一对应。接着我们看,如果每两个Query一组的话,那么对于V和K向量,对应的WK和WV只需要512x256维度就可以了,这里节省了模型的参数量。这样,K有8个头,Q也有8个头,但K和V只有4个头。实现时,为了利用矩阵乘法,还是将K和V的头部都复制一份,这样Q、K、V的头就又一一对应了。后面的逻辑就和MultiHeadAttention一致了。

下面代码中定义了 wk,其输出维度为 head 的个数乘以 head 的维度。而 wk 和 wv 的输出维度为 num_key_value_heads 乘以 head 的维度。接着,有一个名为 repeat_kv 的函数,其作用是对 kv 的 head 进行复制。最后,在 forward 函数中,首先对 kv 矩阵进行复制,随后执行标准的 multi-head attention 代码。

另外需要注意的是,GQA在Llama2中仅应用于最大的模型Llama70B。在模型的配置文件中可以看到,num_attention_heads为64,num_key_value_heads为8,即8个Query共用1个Key和Value。


三、Llama-3

3.1 目标与性能

Llma3已经发布了8B和70B的模型,但尚未完成训练。因此,目前还没有详细的技术报告。在此,我们先解读一下Llma发布Llma3的官方文章。Llma3的目标是开发一个能够与最佳商业大模型相媲美的开源大模型。Llma3仍在训练中,后续将陆续发布400B的模型,并推出多语言和多模态模型。

Llama3的性能远远高于Llama2,Llama3 8B的模型性能已经远高于Llama2 70B的模型。Llama3 70B的性能在5项测评中有3项高于GPT4。

提问思考

  1. Llama3与Llama2相比,在哪些方面有显著的性能提升?

参考回答:Llama3在多个模型大小上均显示出性能的显著提升,特别是在8B模型上超越了Llama2的70B模型,在70B模型上也有多项测评超越了GPT4。

  1. Llama3的发布对开源社区有何影响?

参考回答:Llama3的发布为开源社区带来了性能优于GPT4的模型,这不仅提升了开源社区的技术水平,也可能促进更多高质量的大模型开发。

3.2 模型架构更新

看一下Llma3的模型架构。它的字典大小从32,000个Token扩充了4倍,达到了128,000个Token,这大大提高了推理效率。例如,原来一个中文被编码为多个Token,现在只需要编码成一个Token。原来需要多次推理才能输出一个汉字,现在只需要推理一次就可以输出一个汉字。因为字典增大,embedding层和分类头层增加,所以最小的模型参数也从7B变为了8B。另一个改变是,Llma2只有70B采用了GQA,但是Llma3所有的模型,包括8B模型都使用了分组注意力机制。训练时,序列长度从4096扩充到了8192

提问思考

  1. Llma3模型架构的主要改进有哪些?
  • 参考回答:主要改进包括字典大小的扩充、中文编码的优化、模型参数的增加、所有模型采用分组注意力机制以及训练序列长度的增加。
  1. 字典大小的扩充如何影响模型的推理效率?
  • 参考回答:字典大小的扩充使得原来需要编码为多个Token的中文现在只需编码为一个Token,从而减少了推理次数,提高了推理效率。

3.3 训练数据与缩放定律

训练数据部分采用了庞大的15T token数据,全部来源于公开数据,数据量是Llama2的7倍,其中代码数据量增加了4倍。研究表明,代码数据能有效提升模型的逻辑推理能力。此外,训练数据中包含5%的高质量非英语数据,覆盖30多种语言。所有数据均经过清洗,并利用Llama2生成的数据辅助训练文本质量分类器。需要注意的是,这里训练的是数据清洗阶段的文本质量分类器,并非直接使用Llama2生成的数据来训练Llama3。在微调阶段,除了使用开源数据集外,还人工标注了1000万样本。8B模型的知识截止日期为2023年3月,70B模型的知识截止日期为2023年12月。

提问思考

  1. 为什么代码数据能有效提升模型的逻辑推理能力?
  • 参考回答:代码数据通常包含清晰的逻辑结构和算法流程,这些内容可以帮助模型学习和理解复杂的逻辑关系,从而提升其逻辑推理能力。
  1. 训练数据中包含的非英语数据有何重要性?
  • 参考回答:非英语数据可以帮助模型理解和处理多语言环境下的信息,增强模型的跨语言理解和应用能力,使其更加全面和高效。

在训练技能方面,Meta已经达到了炉火纯青的水平,他们制定了一系列的缩放定律。通过小模型的表现,可以在大模型训练前预测大模型的表现。之前我们提到这是OpenAI的独家技术,现在Meta也已掌握。此外,Meta强调增加数据量比增加模型参数更为有效。即使是8B的模型,使用15万亿的Token进行训练,性能仍未饱和,仍有提升空间。Meta还展示了其硬件实力,Lama3在两个由24000多个GPU组成的集群上进行训练,使用的是H100 GPU。有效训练时间超过95%,比Lama2提高了三倍。我们来看这张表,对比了Lama1 65B、Lama2 70B、Lama3 70B在训练时使用的GPU小时数、GPU型号以及训练用的Token数。

提问思考

  1. Meta是如何通过小模型预测大模型的表现的?
  • 参考回答:Meta通过制定缩放定律,利用小模型的表现数据来预测大模型在训练前的表现,这是一种通过已知数据推断未知数据的方法。
  1. Meta为何认为增加数据量比增加模型参数更有效?
  • 参考回答:Meta通过实践发现,即使是参数较少的8B模型,当使用大量的数据(如15万亿Token)进行训练时,其性能并未达到饱和,表明数据量的增加可以更有效地提升模型性能。
  1. Lama3的训练效率相比Lama2有何提升?
  • 参考回答:Lama3的有效训练时间超过95%,相比Lama2提高了三倍,这表明在硬件配置和训练效率上有了显著的提升。

3.4 指令微调

最后,我们来看一下Llama3的指令微调。在Llama2时期,微调后的模型被称为Llama2Chat,而现在的Llama3微调后则称为Llama3 Instruct。这表明,大型模型不仅限于聊天应用,更多地被用于指令跟随,在智能应用中执行各种任务。Llama3的指令微调采用了SFT、拒绝采样、PPO和DPO等技术。

提问思考

  1. Llama2和Llama3微调后的主要区别是什么?

参考回答:Llama2微调后主要用于聊天应用,称为Llama2Chat;而Llama3微调后用于指令跟随和执行多种智能任务,称为Llama3Instruct。

  1. Llama3指令微调采用了哪些技术?

参考回答:Llama3指令微调采用了SFT、拒绝采样、PPO和DPO等技术。


四、总结

4.1 技术细节

  • 训练数据和去重处理:Llama-1使用2017至2020年的CommonCrawl数据,书籍和维基百科文本,进行去重和质量分类。
  • 模型架构:Llama系列模型采用Transformer Decoder架构,进行了多项优化,如Normalization位置调整、RMSNorm、旋转位置编码和SiLU激活函数。
  • 训练细节:特别强调了RMSNorm和SiLU激活函数的重要性和实现细节。
  • 模型架构优化:Llama-2引入了GQA,优化了MultiHead Attention,减少了模型参数量和KV cache大小。
  • 训练数据与缩放定律:Llama-3使用了15T token的公开数据,包括代码数据和多语言数据,强调了增加数据量的重要性。

4.2 性能和影响

  • 性能提升:Llama-3的性能在多项测评中超越了Llama-2和GPT-4。
  • 开源社区影响:Llama系列的开源特性对研究社区具有积极影响,推动了AI技术的发展和应用。

4.3 指令微调

  • Llama3指令微调:采用了SFT、拒绝采样、PPO和DPO等技术,使模型能够更好地执行指令跟随任务。

4.4 结论

Llama系列模型展示了AI多模态大模型在开放性、数据量、模型架构和指令微调等方面的持续进步和创新。通过不断的优化和扩展,这些模型在提高性能的同时,也为AI技术的未来发展奠定了坚实的基础。


 推荐阅读:

《AIGCmagic星球》,五大AIGC方向正式上线!让我们在AIGC时代携手同行!限量活动
《三年面试五年模拟》版本更新白皮书,迎接AIGC时代
AIGC |「多模态模型」系列之OneChart:端到端图表理解信息提取模型
AI多模态模型架构之模态编码器:图像编码、音频编码、视频编码
AI多模态模型架构之输入投影器:LP、MLP和Cross-Attention

AI多模态模型架构之LLM主干(1):ChatGLM系列

AI多模态模型架构之LLM主干(2):Qwen系列

AI多模态教程:从0到1搭建VisualGLM图文大模型案例

智谱推出创新AI模型GLM-4-9B:国家队开源生态的新里程碑

技术交流:

加入「AIGCmagic社区」群聊,一起交流讨论,涉及 「AI视频、AI绘画、Sora技术拆解、数字人、多模态、大模型、传统深度学习、自动驾驶」等多个不同方向,可私信或添加微信号:【lzz9527288】,备注不同方向邀请入群!!

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值