赞
踩
按我原本的计划,我是依次写这些文章:解读mamba2、解读open-television、我司7方面review微调gemma2,再接下来是TTT、nature审稿微调、序列并行、Flash Attention3..
然TTT还没写完,7.23日,Meta突然发布了llama3.1..
其实,llama3 刚出来时,其长度只有8K对于包括我司在内的大模型开发者是个小小的缺憾,而此次Meta发布llama3.1的意义在于
如此,便有了本文:解读下llama3.1的paper (结果一看92页,好在昨天我司上线了基于大模型的翻译系统,那先翻译一下 快速看下大概 然后慢慢抠,顺带说一句,其实正文就70页,但致谢和参考文献占了不少篇幅),且会尽可能全面细致,毕竟绝大多数的文章只会阐述本文第一部分的内容,一般都不会涉及本文第二部分、第三部分所分别对应的其视觉、语音的架构与原理
更多,见我司官网首页的「大模型项目开发线上营 第二期」
7月23日,Meta推出了llama3.1,其405B的版本可以与GPT4正面干(可能是目前唯一一个可以与GPT4全方位分庭抗礼的开源模型),而其8B和70B版本都均超越同等尺寸的其他开源模型
为了更好的理解llama3.1,我们先来回顾下我之前介绍过的llama3(来自此文一文速览Llama 3:从Llama 3的模型架构到如何把长度扩展到100万的第一部分)
和Llama 2一样,Llama 3 继续采用相对标准的decoder-only transformer架构,但做了如下几个关键的改进
- Llama 3 使用具有 128K tokens的tokenizer
相当于,一方面,分词器由 SentencePiece 换为了 Tiktoken,与 GPT4 保持一致,可以更有效地对语言进行编码
二方面,Token词表从LLAMA 2的32K拓展到了128K
基准测试显示,Tiktoken提高了token效率,与 Llama 2 相比,生成的token最多减少了 15%「正由于llama3具有更大的词表,比llama2的tokenizer具有更大的文本压缩率,所以你会看到在此文《从提升大模型数据质量的三大要素(含审稿GPT第4.6版、第4.8版、第5版)到Reviewer2的实现》中,我司七月审稿项目组发现,在统计同样的paper-review数据集时,llama3统计到的token数更少」- 为了提高推理效率,Llama 3在 8B 和 70B 都采用了分组查询注意力(GQA),根据相关实验可以观察到,尽管与 Llama 2 7B 相比,模型的参数多了 1B,但改进的分词器效率和 GQA 有助于保持与 Llama 2 7B 相同的推理效率 值得指出的是,上一个版本的llama 2的34B和70B才用到了GQA「详见LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙的第3.2节LLaMA2之分组查询注意力——Grouped-Query Attention」
- 在 8,192 个token的序列上训练模型,且通过掩码操作以确保自注意力不会跨越文档边界
本次的llama3.1 无论哪个尺寸,都和llama3一样,都选择的标准的仅解码器的Transformer模型架构,并进行了细微的改动,而不是混合专家模型
此外
至于别的层面,则沿用Llama一代以来的惯用结构:比如RMSNorm、SwiGLU、RoPE、Pre-Norm(关于这些细节,详见此文:LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙),对此,张俊林老师还特意画了一个图以示说明
而对于Llama 3 405B 使用了一个具有 126 层、16,384 的token表示维度和 128 个注意力头的架构,且他们为了支持 405B 规模模型的大规模生产推理,将模型从 16 位 (BF16) 量化为 8 位 (FP8) 数字,且在多达16K的H100 GPU上进行训练
在预训练的最后阶段,Meta对长序列进行训练,以支持最长可达128K token的上下文窗口
一开始不对长序列进行训练,因为自注意力层中的计算量随着序列长度的平方增长。 后面逐步增加支持的上下文长度,进行预训练,直到模型成功适应增加的上下文长度
且通过测量以下两个方面来评估成功适应:
在Llama 3 405B的预训练中,通过六个阶段逐步增加上下文长度,从最初的8K上下文窗口开始,最终达到128K上下文窗口,在这整个长上下文预训练阶段中,总计使用了大约800B的训练token
在后期训练中,通过在预训练模型的基础上进行几轮对齐来生成最终的聊天模型。每轮都涉及监督微调 (SFT)、拒绝抽样 (RS) 和直接偏好优化DPO(DPO详见:RLHF的替代之DPO原理解析:从RLHF、Claude的RAILF到DPO、Zephyr)
首先,在预训练检查点的基础上训练一个涵盖不同能力的奖励模型RM,训练目标与Llama 2相同,只是去掉了损失中的边际项,因为观察到在数据扩展后的改进效果逐渐减弱(We train a reward model (RM) covering different capabilities on top of the pre-trained checkpoint. The training objective is the same as Llama 2 except that we remove the margin term in the loss, as we observe diminishing improvements after data scaling)
下表则统计了用于训练奖励模型的偏好数据
有了奖励模型,便可以评价一个<prompt、response>的质量了,比如可以使用奖励模型对人类注释prompt进行拒绝采样(Rejection Sampling)
具体而言,对于一个人工prompt,让模型生成若干个回答,然后采样其中的K个response(通常在 10 到 30 之间),然后让RM针对这多个response逐一进行质量上的打分,最终把得分最高的response保留下来(作为之后SFT数据的一部分,此举也符合 Bai 等人2022的研究),其它的则丢弃
接下来
举个数据合成的例子,为了涵盖更广泛的编程语言,比如为了丰富SFT数据集中PHP代码的数量,可以通过llama 3把数据集中已有的Python代码翻译成PHP代码
最终,如下图所示,便是用于 Llama 3 对齐的内部收集的 SFT 数据。 每个 SFT 示例由一个上下文(即除最后一轮外的所有对话轮次)和一个最终response组成
Meta进一步使用直接偏好优化DPO 对得到的SFT模型进行训练「DPO本质上是个二分类,就是从人工标注的<Prompt,Good Response,Bad Response>三元数据里学习,调整模型参数鼓励模型输出Good Response,不输出Bad Response」,以实现人类偏好的对齐
在具体训练中,主要使用最近批次的偏好数据,这些数据是使用前几轮对齐中表现最好的模型收集的。 因此,这样的训练数据更符合每轮优化中策略模型的分布
此外,它们还探索了诸如PPO(Schulman等,2017)等在线算法,但发现DPO在大规模模型上所需的计算量更少,并且表现更好,特别是在像IFEval(Zhou等,2023)这样的指令跟随基准上
对于Llama 3,我们使用的学习率为1e-5,并将 βhyper-parameter设置为0.1。此外,对DPO应用了以下算法修改:
为了扩展最大模型的训练,Meta使用4D并行性——四种不同类型的并行方法的组合——来分割模型「这种方法有效地将计算分配到多个GPU上,并确保每个GPU的模型参数、优化器状态、梯度和激活能够适应其高带宽内存(HBM)」
其对4D并行性的实现如下图所示
GPU按[TP, CP, PP, DP]的顺序划分为并行组,其中DP代表FSDP
它结合了
更多细节,请参见:大模型并行训练指南:通俗理解Megatron-DeepSpeed之模型并行与数据并行
据llama3.1 paper第54页所示,他们还进行了一系列实验,通过一个由两个主要阶段组成的组合方法,将视觉识别能力融入Llama 3(不过,论文中说这个多模态的llama3 还在开发中,后面才会发布,所以本文更多侧重对其架构、原理的讲解)
首先,通过在大量图像-文本对上引入和训练一组交叉注意力层,将预训练的图像编码器(Xu等,2023)和预训练的语言模型组合起来(Alayrac等,2022)
这导致了下图所示的模型(涉及五个阶段的训练:1 语言模型预训练,2 多模态编码器预训练,3 视觉适配器训练,4 模型微调,5 语音适配器训练)
其次,引入了时间聚合层和额外的视频交叉注意力层,这些层在大量的视频-文本对上运行,以学习模型识别和处理视频中的时间信息
基础模型开发的组合方法有几个优点:
图像编码器和适配器是在图像-文本对上训练的,通过一个复杂的数据处理管道构建这个数据集,该管道包括四个主要阶段:
对于视频预训练,使用了一个大型的视频-文本对数据集,且通过多阶段过程来策划我们的数据集
数据集包含平均时长为21秒的视频,中位时长为16秒,超过 99%的视频时长不到一分钟。 空间分辨率在320p和4K视频之间显著变化,其中超过 70%的视频短边大于720像素。 视频具有不同的纵横比,几乎所有视频的纵横比都在 1:2和 2:1之间,中位数为 1:1
视觉识别模型由三个主要组件组成: (1)图像编码器, (2)图像适配器,和 (3)视频适配器
图像编码器是一个标准的视觉变换器(ViT;Dosovitskiy等人2020),训练用于对齐图像和文本(Xu等人,2023),具体而言
14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 | 14*14 |
14*14 | ||||||||||||
14*14 | ||||||||||||
14*14 | ||||||||||||
... |
在图像编码器生成的视觉token表示和语言模型生成的语言token表示之间引入了交叉注意层(Alayrac等,2022,即We introduce cross-attention layers between the visual token representations produced by the image encoder and the token representations produced by the language model)
而交叉注意层在核心语言模型中的每第4个自注意层之后应用(The cross-attention layers are applied after every fourth self-attention layer in the core language)。 与语言模型本身一样,交叉注意层使用广义查询注意(GQA)以提高效率
交叉注意层为模型引入了大量额外的可训练参数:对于Llama 3 405B,交叉注意层有 ≈100B参数,且在两个阶段对图像适配器进行预训练:
模型最多可以输入64帧(从完整视频中均匀采样),每帧都由图像编码器处理。通过两个组件对视频中的时间结构进行建模——添加视频聚合器和交叉注意层:
最后,值得一提的是,在将视觉识别组件添加到Llama 3之后,模型包含自注意层、交叉注意层——包含图像交叉注意层和视频交叉注意层,和一个ViT图像编码器。 为了训练较小的8B和70B参数模型的适配器,发现数据和张量并行的组合是最有效的
在这些规模下,模型或流水线并行并不会提高效率,因为模型参数的聚集会主导计算。 然而,在训练405B参数模型的适配器时,确实还使用了流水线并行(除了数据和张量并行),不过在405B这种规模下训练除了上文「1.3节 模型并行」中概述的挑战外,还引入了三个新的挑战:模型异质性、数据异质性和数值不稳定性
首先,依次看下图像、视频层面的SFT数据
对于图像,利用不同数据集的混合进行监督微调
至于视频层面的数据,类似于图像适配器,使用带有预先注释的学术数据集,并将其转换为适当的文本指令和目标响应。 目标被转换为开放式响应或多项选择题选项,以更适合的方式呈现。 我们要求人工为视频注释问题及相应的答案。 要求注释者专注于那些无法通过单帧图像回答的问题,以引导注释者提出需要时间理解的问题
接下来,看下图像和视频的监督微调SFT方法
对于图像SFT
从预训练的图像适配器初始化,但将预训练语言模型的权重与指令调优语言模型的权重进行热交换。 语言模型的权重保持冻结状态以维持仅文本的性能,即,只更新视觉编码器和图像适配器的权重
我们微调模型的方法类似于Wortsman等人(2022年)的做法
对于视频SFT,使用预训练权重初始化视频聚合器和交叉注意力层
模型中的其余参数、图像权重和LLM,都是从相应模型的微调阶段初始化的。 类似于视频预训练,我们随后仅在视频SFT数据上微调视频参数。 在这个阶段,将视频长度增加到64帧,并使用32的聚合因子来获得两个有效帧。 块的分辨率也增加了,以与相应的图像超参数保持一致
为了构建用于奖励建模和直接偏好优化的多模态成对偏好数据集,Meta的研究着们做了如下动作
有了偏好数据,那么接下来便可以进行奖励建模了
比如在视觉SFT模型和语言RM的基础上训练一个视觉奖励模型(RM),其中
他们观察到,冻结语言RM部分通常会导致更好的准确性,特别是在需要RM根据其知识或语言质量进行判断的任务上
且采用与语言RM相同的训练目标,但在批次平均的奖励对数平方上添加了一个加权正则化项,以防止奖励分数漂移
如上面说过的,在训练视觉RM时,类似语言偏好数据,也是创建两个或三个具有明确排名的对(edited > chosen > rejected),此外,我们还通过扰乱与图像信息相关的单词或短语(例如数字或视觉文本)来合成增强负面响应,从而鼓励视觉RM基于实际图像内容进行判断
类似于语言模型,使用第上面描述的偏好数据,通过直接偏好优化(DPO;Rafailov等人(2023))进一步训练视觉适配器
为了应对后训练轮次中的分布偏移,只保留最近的人类偏好注释批次,同时丢弃足够偏离策略的批次(例如,如果基础预训练模型发生变化)「To combat the distribution shift during post-training rounds, we only keep recent batches of human preference annotations while dropping batches that are sufficiently off-policy (e.g., if the base pre-trained model is change」
可以发现,与始终冻结参考模型相比,每k步以指数移动平均(EMA)方式更新参考模型有助于模型从数据中学习更多,从而在人类评估中表现更好。 总体而言,我们观察到视觉DPO模型在每次微调迭代的人类评估中始终表现优于其SFT起点
最终,加上了视觉能力的llama3,其在图像理解层面的性能在与相关模型PK时,得到的结果如下
为了将语音能力整合到Llama 3中,可以类似于我们用于视觉识别的方法(当然,截止到24年7月下旬,和视觉llama3.1一样,语言llama3.1 也暂未发布)
在输入端,结合了编码器和适配器来处理语音信号。利用系统提示(文本形式)来启用Llama 3在语音理解中的不同操作模式。 如果没有提供系统提示,模型将作为通用的口语对话模型,能够有效地以与Llama 3文本版本一致的方式响应用户的语音
且对话历史被引入作为提示前缀,以改善多轮对话体验。 我们还尝试了启用Llama 3用于自动语音识别(ASR)和自动语音翻译(AST)的系统提示
最终,Llama 3的语音接口支持多达34种语言,且还允许文本和语音的交替输入,使模型能够解决高级音频理解任务
最后,他们还尝试了一种语音生成方法,在这种方法中,实现了一个流式文本到语音(TTS)系统,该系统在语言模型解码过程中实时生成语音波形
具体实现时,基于专有的TTS系统设计了Llama 3的语音生成器,并且没有对语言模型进行语音生成的微调。 相反,我们通过在推理时利用Llama 3的嵌入来专注于提高语音合成的延迟、准确性和自然性(Instead, we focus on improving speech synthesis latency, accuracy, and naturalness by leveraging Llama 3 embeddings at inference time)
在具体展开之前,我们先来回顾下包含视觉、语音能力的llama3的整体训练架构,如之前所述,其包含五个阶段的训练:1 语言模型预训练,2 多模态编码器预训练,3 视觉适配器训练,4 模型微调,5 语音适配器训练
其中,语音的架构如下图所示
训练数据可以分为两类。 预训练数据包括大量未标注的语音,用于以自监督的方式初始化语音编码器。 监督微调数据包括语音识别、语音翻译和口语对话数据;这些数据用于在与大型语言模型集成时解锁特定能力
在输入端,语音模块由两个连续的模块组成:语音编码器和适配器
对于语音编码器
语音编码器是一个具有10亿参数的Conformer(Gulati等,2020)模型。 模型的输入由80维的梅尔频谱图特征组成,这些特征首先由一个步幅为4的堆叠层处理,然后通过线性投影将帧长度减少到40毫秒
处理后的特征由一个包含24个Conformer层的编码器处理。 每个Conformer层具有1536的潜在维度,由两个4096维度的Macron-net风格前馈网络、一个核大小为7的卷积模块和一个具有24个注意力头的旋转注意力模块(Su等,2024)组成
对于语音适配器
语音适配器包含大约1亿个参数。 它由一个卷积层、一个旋转Transformer层和一个线性层组成。 卷积层的核大小为3,步幅为2,旨在将语音帧长度减少到80毫秒。 这使得模型能够为语言模型提供更粗粒度的特征
Transformer层具有3072的潜在维度和一个4096维度的前馈网络,在卷积下采样后进一步处理带有上下文的语音信息。 最后,线性层将输出维度映射到与语言模型嵌入层匹配
语音模块的训练分为两个阶段进行
第一阶段,语音预训练,利用未标注的数据训练一个语音编码器,该编码器在不同语言和声学条件下表现出强大的泛化能力
在第二阶段,监督微调,适配器和预训练的编码器与语言模型集成,并与其共同训练,而LLM保持冻结状态。 这使得模型能够响应语音输入。 这个阶段使用与语音理解能力相对应的标注数据
多语言ASR和AST建模通常会导致语言混淆/干扰,从而导致性能下降
对于语音预训练
使用自监督的BEST-RQ算法(Chiu等,2022)来预训练语音编码器,对输入的梅尔频谱图应用长度为32帧、概率为2.5%的掩码
如果语音话语超过60秒,会随机裁剪6000帧,对应60秒的语音。 我们通过堆叠4个连续帧来量化梅尔频谱图特征,将320维向量投影到16维空间,并在包含8,192个向量的码书中执行基于余弦相似度度量的最近邻搜索。 为了稳定预训练,使用了16个不同的码书。 投影矩阵和码书是随机初始化的,并且在模型训练过程中不会更新。 为了提高效率,多重软最大损失仅在被掩盖的帧上使用。 编码器训练了500K步,全球批量大小为2,048个话语
对于监督微调
在监督微调阶段,预训练的语音编码器和随机初始化的适配器与Llama 3进一步联合优化。 在此过
程中,语言模型保持不变。 训练数据是ASR、AST和口语对话数据的混合,其中
语音生成数据集主要包括用于训练文本规范化(TN)模型和韵律模型(PM)的数据。 两种训练数据都增加了Llama 3嵌入的附加输入特征,以提供上下文信息。
据llama3.1的技术报告所说,语音生成的两个关键组件中使用了Llama 3 8B嵌入:文本规范化和韵律建模
TN模块通过上下文转换书面文本为口语形式,确保语义正确性。 PM模块通过使用这些嵌入预测韵律特征,增强自然性和表现力。 它们共同实现了准确且自然的语音生成
为了支持实时处理,韵律模型采用了一种前瞻机制,该机制考虑了固定数量的未来音素和可变数量的未来token。这确保了在处理传入文本时的一致前瞻,这对于低延迟语音合成应用至关重要
对于训练
Meta开发了一种利用因果掩蔽的动态对齐策略,以促进语音合成中的流式处理。 该策略结合了固定数量的未来音素和可变数量的未来标记的前瞻机制,与文本规范化过程中的分块过程一致。对于每个音素,标记前瞻包括由块大小定义的最大标记数,从而导致 Llama 嵌入的前瞻是可变的,但音素的前瞻是固定的
Llama 3 嵌入来自 Llama 3 8B 模型,在训练韵律模型期间保持冻结状态。输入的音素速率特征包括语言和说话者/风格可控性元素。 模型训练在批量大小为 1,024 个话语的情况下进行,每个话语的最大长度为 500 个音素。 我们使用 AdamW 优化器,学习率为 9 × 10−4,在 100 万次更新中进行训练,前 3,000 次更新进行学习率预热,随后采用余弦调度
对于推理
在推理过程中,采用相同的前瞻机制和因果掩码策略,以确保训练和实时处理之间的一致性。 PM 以流式方式处理传入文本,逐个音素更新音素速率特征,逐块更新标记速率特征。 新的块输入仅在该块的第一个音素当前时更新,保持训练期间的对齐和前瞻。
为了预测韵律目标,我们采用了一种延迟模式方法(Kharitonov 等,2021),这增强了模型捕捉和再现长距离韵律依赖的能力。 这种方法有助于合成语音的自然性和表现力,确保低延迟和高质量输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。