Llama 3.1 技术研究报告-6
6 推理
我们研究了两种主要技术,以使 Llama 3 405B 模型的推理⾼效:(1) 流⽔线并⾏和 (2) FP8 量化。我们已经公开发布了我们的 FP8 量化实现。
6.1 流⽔线并⾏
当使⽤ BF16 数字表⽰模型参数时,Llama 3 405B 不适合在装有 8 个 Nvidia H100 GPU 的单台机器的 GPU 内存中。为了解决这个问题,我们使⽤ BF16 精度在两台机器上的 16 个 GPU 上并⾏化模型推理。在每台机器内,⾼ NVLink 带宽使得可以使⽤张量并⾏(Shoeybi 等⼈,2019)。然⽽,跨节点的连接带宽较低且延迟较⾼,因此我们使⽤流⽔线并⾏(Huang 等⼈,2019)。
在使⽤流⽔线并⾏进⾏训练时,⽓泡是主要的效率问题(⻅第 3.3 节)。然⽽,在推理过程中它们不是问题,因为推理不涉及需要流⽔线刷新的反向传递。因此,我们使⽤微批处理来提⾼流⽔线并⾏推理的吞吐量。
我们评估了在推理⼯作负载中使⽤两个微批处理,在推理的关键值缓存预填充阶段和解码阶段,输⼊令牌为 4,096,输出令牌为 256 的效果。我们发现微批处理提⾼了相同本地批量⼤⼩的推理吞吐量;⻅图 24。这些改进来⾃于微批处理使得这两个阶段的微批处理能够并⾏执⾏。由于微批处理引起的额外同步点也增加了延迟,但总体上,微批处理仍然导致更好的吞吐量-延迟权衡。
6.2 FP8 量化
我们利⽤ H100 GPU 的原⽣ FP8 ⽀持进⾏低精度推理。为了启⽤低精度推理,我们对模型内的⼤多数矩阵乘法应⽤了 FP8 量化。特别是,我们量化了模型中前馈⽹络层中的⼤部分参数和激活,这些占推理计算时间的⼤约 50%。我们没有量化模型的⾃注意⼒层的参数。我们利⽤动态缩放因⼦以获得更好的准确性(Xiao 等⼈,2024b),优化我们的 CUDA 内核 15 以减少计算⽐例的开销。我们发现 Llama 3 405B 的质量对某些类型的量化敏感,并进⾏了⼀些额外的更改以提⾼模型输出质量:
- 类似于 Zhang 等⼈(2021),我们不在第⼀层和最后⼀层 Transformer 层中进⾏量化。
- ⾼困惑度的令牌(如⽇期)可能导致⼤的激活值。反过来,这可能导致 FP8 中的⾼动态缩放因⼦和⼤量下溢,导致解码错误。为了解决这个问题,我们将动态缩放因⼦上界限制为 1200。
- 我们使⽤⾏量化,为参数和激活矩阵计算跨⾏的缩放因⼦(⻅图 25)。我们发现这⽐张量量化⽅法更有效。
量化误差的影响。标准基准测试通常表明,即使没有这些缓解措施,FP8 推理也与 BF16 推理相当。然⽽,我们发现这样的基准测试并没有充分反映 FP8 量化的影响。当缩放因⼦没有上界限制时,模型偶尔会产⽣损坏的响应,尽管基准测试性能很强。我们发现,依靠基准测试来衡量量化引起的分布变化,不如分析使⽤ FP8 和 BF16 ⽣成的 100,000 个响应的奖励模型分数的分布更好。图 26 显⽰了我们量化⽅法的奖励分布结果。图中的结果表明,我们对 FP8 量化的⽅法对模型的响应影响⾮常有限。
效率的实验评估。图 27 描述了在预填充和解码阶段使⽤ Llama 3 405B 进⾏ FP8 推理的吞吐量-延迟权衡,使⽤ 4,096 个输⼊令牌和 256 个输出令牌。该图⽐较了第 6.1 节中描述的两台机器 BF16 推理⽅法的效率。结果表明,使⽤ FP8 推理在预填充阶段的吞吐量提⾼了最多 50%,在解码期间的吞吐量-延迟权衡显著更好。
7 视觉实验
我们进⾏了⼀系列实验,通过⼀种由两个主要阶段组成的组合⽅法将视觉识别能⼒整合到 Llama 3 中。⾸先,我们通过在⼤量的图像-⽂本对上引⼊和训练⼀组交叉注意⼒层(Alayrac 等⼈,2022),将预训练的图像编码器(Xu 等⼈,2023)和预训练的语⾔模型组合起来。这导致形成了图 28 所⽰的模型。其次,我们引⼊了时间聚合层和额外的视频交叉注意⼒层,它们在⼤量的视频-⽂本对上操作,以学习模型识别和处理视频中的时间信息。
采⽤组合⽅法进⾏基础模型开发有⼏个优点:
(1) 它使我们能够并⾏开发视觉和语⾔建模能⼒;
(2) 它避免了视觉数据标记、来⾃不同模态的标记背景困惑度差异以及模态间竞争所带来的联合预训练的复
杂性;
(3) 它保证了模型在仅⽂本任务上的性能不会因引⼊视觉识别能⼒⽽受到影响,
(4) 交叉注意⼒架构确保我们不需要在⽇益增⻓的⼤型语⾔模型(特别是每个变换器层中的前馈⽹络)中通过全分辨率图像来消耗计算资源,使推理过程更加⾼效。我们注意到我们的多模态模型仍在开发中,尚未准备好发布。
在第 7.6 和 7.7 节中呈现我们的实验结果之前,我们描述了⽤于训练视觉识别能⼒的数据处理、视觉组件的模型架构、这些组件训练的扩展⽅式,以及我们的预训练和后处理⽅案。
7.1 数据
我们分别描述了我们的图像数据和视频数据。
7.1.1 图像数据
我们的图像编码器和适配器在图像-⽂本对上进⾏训练。我们通过⼀个复杂的数据处理流程构建这个数据集,该流程包括四个主要阶段:(1) 质量过滤,(2) 感知去重,(3) 重新采样,以及 (4) 光学字符识别。我们还应⽤了⼀系列安全措施。
-
质量过滤。我们实施了质量过滤器,通过诸如 Radford 等⼈(2021)产⽣的低对⻬分数等启发式⽅法,移除⾮英语字幕和低质量字幕。具体来说,我们移除了所有低于某个 CLIP 分数的图像-⽂本对。
-
感知去重。对⼤规模训练数据集进⾏去重有助于提⾼模型性能,因为它减少了在冗余数据上的训练计算(Esser 等⼈,2024;Lee 等⼈,2021;Abbas 等⼈,2023)和记忆(Carlini 等⼈,2023;Somepalli
等⼈,2023)。因此,出于效率和隐私原因,我们对训练数据进⾏了去重。为此,我们使⽤内部版本的最先进的 SSCD 复制检测模型(Pizzi 等⼈,2022)来⼤规模去重图像。对于所有图像,我们⾸先使⽤ SSCD 模型计算⼀个 512 维的表⽰。我们使⽤这些嵌⼊,在数据集中的所有图像中为每张图像执⾏最近邻(NN)搜索,使⽤余弦相似性度量。我们将相似度超过某个阈值的⽰例定义为重复项。我们使⽤连通分量算法对这些重复项进⾏分组,并在每个连通分量中仅保留⼀个图像-⽂本对。我们通过以下⽅式提⾼去重流程的效率:
(1) 使⽤ k-means 聚类对数据进⾏预聚类;
(2) 使⽤ FAISS(Johnson 等⼈,2019)进⾏ NN 搜索和聚类。 -
重新采样。我们通过类似于 Xu 等⼈(2023);Mahajan 等⼈(2018);Mikolov 等⼈(2013)的重新采样,确保图像-⽂本对的多样性。⾸先,我们通过解析⾼质量的⽂本来源构建⼀个 n-gram词汇表。接下来,我们计算数据集中每个词汇 n-gram 的频率。然后我们按以下⽅式重新采样数据:如果标题中的任何 n-gram在词汇表中出现次数少于 T 次,我们保留相应的图像-⽂本对。否则,我们独⽴地以概率 pT/fi 采样标题中的每个 n-gram ni,其中 fi 表⽰ n-gram ni 的频率;如果任何 n-gram 被采样,我们保留图像-⽂本对。这种重新采样有助于提⾼在低频类别和细粒度识别任务上的性能。
-
光学字符识别。我们通过提取图像中写⼊的⽂本并将其与字幕连接起来,进⼀步提⾼我们的图像-⽂本数据。使⽤专有的光学字符识别(OCR)流程提取书⾯⽂本。我们观察到,将 OCR 数据添加到训练数据中极⼤地改善了需要 OCR 功能的任务,例如⽂档理解。
转录⽂档。为了提⾼我们的模型在⽂档理解任务上的性能,我们将⽂档⻚⾯呈现为图像,并将其与相应的⽂本配对。⽂档⽂本可以直接从源获取,也可以通过⽂档解析流程获取。
安全。我们主要关注确保图像识别的预训练数据集不包含不安全的内容,例如性虐待材料(CSAM)(Thiel,2023)。我们使⽤感知哈希⽅法,如 PhotoDNA(Farid,2021)以及内部专有分类器,扫描我们所有训练图像中的 CSAM。我们还使⽤专有的媒体⻛险检索流程来识别和删除我们认为是 NSFW 的图像-⽂本对,例如,因为它们包含性或暴⼒内容。我们认为,最⼩化这类材料在训练数据集中的流⾏度可以提⾼最终模型的安全性,⽽不影响其有⽤性。最后,我们对训练集中的所有图像进⾏⾯部模糊处理。我们使⽤⼈类⽣成的提⽰对模型进⾏测试,这些提⽰引⽤了附加的图像。
退⽕数据。我们通过使⽤ n-gram 对图像-字幕对进⾏重新采样,创建了⼀个约 3.5 亿个⽰例的退⽕数据集。由于 n-gram 重新采样偏爱更丰富的⽂本描述,这选择了⼀个更⾼质量的数据⼦集。我们⽤以下五个额外来源的约 1.5 亿个⽰例增强了结果数据:
-
视觉定位。我们将⽂本中的名词短语链接到图像中的边界框或掩模。定位信息(边界框和掩模)以两种⽅式在图像-⽂本对中指定。
(1) 我们在图像上叠加带有标记的框或掩模,并使⽤⽂本中的标记作为参考,类似于标记集(Yang 等⼈,2023a)。
(2) 我们直接将标准化的(xmin,ymin,xmax,ymax)坐标插⼊⽂本中,⽤特殊标记分隔。 -
屏幕截图解析。我们从 HTML 代码渲染屏幕截图,并让模型预测⽣成屏幕截图中特定元素的代码,类似于 Lee 等⼈(2023)。感兴趣的元素通过屏幕截图中的边界框指⽰。
-
问题-答案对。我们包括问题-答案对,使我们能够使⽤在模型微调中⽆法使⽤的⼤量问题-回答数据。
-
合成字幕。我们包括带有由模型的早期版本⽣成的合成字幕的图像。与原始字幕相⽐,我们发现合成字幕⽐原始字幕提供了更全⾯的图像描述。
-
合成⽣成的结构化图像。我们还包括了各种领域的合成⽣成图像,如图表、表格、流程图、数学⽅程式和⽂本数据。这些图像伴随着结构化表⽰,如相应的 markdown 或 LaTeX 符号。除了提⾼模型对这些领域的识别能⼒外,我们发现这些数据对于通过⽂本模型⽣成问题-答案对进⾏微调也很有⽤。
7.1.2 视频数据
对于视频预训练,我们使⽤了⼤量的视频-⽂本对数据集。我们的数据集是通过多阶段流程筛选和整理的。我们使⽤基于规则的启发式⽅法过滤和清理相关⽂本,例如确保最低⻓度和修正⼤写。然后,我们运⾏语⾔识别模型以过滤掉⾮英语⽂本。我们运⾏ OCR 检测模型以过滤掉有过多叠加⽂本的视频。
为确保视频-⽂本对之间的合理对⻬,我们使⽤ CLIP(Radford 等⼈,2021)⻛格的图像-⽂本和视频-⽂本对⽐模型。我们⾸先使⽤视频中的单个帧计算图像-⽂本相似性,并筛选出低相似度对,然后进⼀步筛选出视频-⽂本对⻬度低的对。我们的⼀些数据包含静态或低运动视频;我们使⽤基于运动得分的过滤(Girdhar 等⼈,2023)过滤掉这类数据。我们不对视频的视觉质量应⽤任何过滤器,如审美分数或分辨率过滤。
我们的数据集包含平均时⻓为 21 秒的视频,中位数时⻓为 16 秒,超过 99% 的视频在⼀分钟内。空间分辨率在 320p 和 4K 视频之间有显著变化,超过 70% 的视频短边⼤于 720 像素。视频具有不同的纵横⽐,⼏乎所有视频的纵横⽐都在 1:2 到 2:1 之间,中位数为 1:1。
7.2 模型架构
我们的视觉识别模型由三个主要部分组成:(1) 图像编码器,(2) 图像适配器,以及 (3) 视频适配器。
图像编码器。我们的图像编码器是⼀个标准的视觉变换器(ViT; Dosovitskiy 等⼈(2020)),它被训练⽤于对⻬图像和⽂本(Xu 等⼈,2023)。我们使⽤图像编码器的 ViT-H/14 变体,它有 630M 参数,这些参数是在 25 亿图像-⽂本对上训练了五个周期。图像编码器是在 224 × 224 分辨率的图像上预训练的;图像被分割成 16 × 16 的等⼤⼩块(即,块⼤⼩为 14x14 像素)。正如先前的⼯作(如 ViP-Llava,Cai 等⼈,2024)所展⽰的,我们观察到通过对⽐⽂本对⻬⽬标训练的图像编码器⽆法保留细粒度的定位信息。为了缓解这个问题,我们采⽤多层特征提取,除了最后⼀层特征外,还提供第 4、8、16、24 和 31 层的特征。此外,我们在交叉注意⼒层的预训练之前进⼀步插⼊了 8 个⻔控⾃注意⼒层(总共 40 个变换器块),以学习对⻬特定特征。因此,图像编码器最终总共有 850M 参数和额外的层。有了多层特征,图像编码器为每个产⽣的 16 × 16 = 256 块⽣成了⼀个 7680 维的表⽰。在后续训练阶段,我们不冻结图像编码器的参数,因为我们发现这可以提⾼性能,特别是在⽂本识别等领域。
图像适配器。我们在图像编码器产⽣的视觉标记表⽰和语⾔模型产⽣的标记表⽰之间引⼊了交叉注意⼒层(Alayrac 等⼈,2022)。交叉注意⼒层在核⼼语⾔模型的每四个⾃注意⼒层之后应⽤。像语⾔模型本⾝⼀样,交叉注意⼒层使⽤⼴义查询注意⼒(GQA)以提⾼效率。交叉注意⼒层向模型引⼊了⼤量的额外可训练参数:对于 Llama 3 405B,交叉注意⼒层有⼤约 100B 参数。我们分两个阶段预训练我们的图像适配器:(1) 初始预训练,然后是 (2) 退⽕:
- 初始预训练。我们在上述描述的⼤约 60亿图像-⽂本对的数据集上预训练我们的图像适配器。出于计算效率的原因,我们将所有图像调整⼤⼩以适应⾄多四个 336 × 336像素的⽡⽚内,我们将⽡⽚排列以⽀持不同的纵横⽐,例如 672 × 672、672 × 336 和 1344 × 336。
- 退⽕。我们继续在上述描述的⼤约 5 亿图像的退⽕数据集上训练图像适配器。在退⽕过程中,我们提⾼每个⽡⽚的图像分辨率,以提⾼需要更⾼分辨率图像的任务的性能,例如信息图表理解。
视频适配器。我们的模型接受多达 64 帧(从完整视频中均匀采样),每帧都由图像编码器处理。我们通过两个组件对视频中的时间结构进⾏建模:(i) 编码后的视频帧由时间聚合器聚合,将 32 连续帧合并为⼀个,(ii) 在每四个图像交叉注意⼒层之前添加额外的视频交叉注意⼒层。时间聚合器实现为感知器重采样器(Jaegle 等⼈,2021; Alayrac 等⼈,2022)。我们使⽤每个视频 16 帧(聚合为 1 帧)进⾏预训练,但在监督微调期间将输⼊帧的数量增加到 64。对于 Llama 3 7B 和 70B,视频聚合器和交叉注意⼒层分别有 0.6B 和 4.6B 参数。
7.3 模型扩展
在将视觉识别组件添加到 Llama 3 后,模型包含⾃注意⼒层、交叉注意⼒层和⼀个 ViT 图像编码器。
为了训练较⼩的 8B 和 70B 参数模型的适配器,我们发现数据和张量并⾏的组合是最⾼效的。在这些规模上,模型或流⽔线并⾏不会增加效率,因为模型参数的聚合将主导计算。然⽽,在训练 405B 参数模型的适配器时,我们确实使⽤流⽔线并⾏(除了数据和张量并⾏)。在这个规模上的训练引⼊了除了第 3.3 节中概述的之外的三个新挑战:模型异构性、数据异构性和数值不稳定性。
模型异构性。模型计算是异构的,因为⼀些标记⽐其他标记执⾏更多的计算。特别是,图像标记由图像编码器和交叉注意⼒层处理,⽽⽂本标记仅由语⾔⻣⼲处理。这种异构性导致流⽔线并⾏调度中的瓶颈。我们通过确保每个流⽔线阶段包含五层来解决这个问题:即语⾔⻣⼲中的四个⾃注意⼒层和⼀个交叉注意⼒层。(回想⼀下,我们在每四个⾃注意⼒层之后引⼊⼀个交叉注意⼒层。)此外,我们在所有流⽔线阶段复制图像编码器。因为我们在成对的图像-⽂本数据上训练,这使我们能够在计算的图像和⽂本部分之间进⾏负载平衡。
数据异构性。数据是异构的,因为平均⽽⾔,图像⽐相关⽂本有更多的标记:⼀张图像有 2,308 个标记,⽽相关⽂本平均只有 192 个标记。因此,交叉注意⼒层的计算需要⽐⾃注意⼒层更多的时间和内存。我们通过在图像编码器中引⼊序列并⾏来解决这个问题,以便每个 GPU ⼤致处理相同数量的标记。由于平均⽂本⼤⼩相对较短,我们还使⽤了更⼤的微批⼤⼩(8 ⽽不是 1)。
数值不稳定性。在将图像编码器添加到模型后,我们发现在 bf16 中执⾏梯度累积导致了数值不稳定性。这最有可能的解释是,图像标记通过所有交叉注意⼒层引⼊到语⾔⻣⼲中。这意味着图像标记的表⽰中的数值偏差对整体计算有巨⼤的影响,因为错误是累积的。我们通过在 FP32 中执⾏梯度累积来解决这个问题。
7.4 预训练
图像。我们从预训练的⽂本模型和视觉编码器权重开始初始化。视觉编码器未冻结,⽽⽂本模型权重如上所述保持冻结。⾸先,我们使⽤每个图像调整⼤⼩以适应四个 336 × 336 像素⽡⽚的 60 亿图像-⽂本对来训练模型。我们使⽤全局批量⼤⼩为 16,384,并使⽤余弦学习率计划,初始学习率为 10 × 10^−4和权重衰减为 0.01。初始学习率是基于⼩规模实验确定的。然⽽,这些发现并没有很好地推⼴到⾮常⻓的训练计划,在训练期间损失值停滞不前时,我们⼏次降低了学习率。在基础预训练之后,我们进⼀步提⾼图像分辨率,并继续在同⼀数据集上训练相同的权重。优化器通过预热重新初始化为学习率 2 × 10^−5,并再次遵循余弦计划。
视频。对于视频预训练,我们从上述描述的图像预训练和退⽕权重开始。我们添加了架构中描述的视频聚合器和交叉注意⼒层,随机初始化。我们冻结了模型中的所有参数,除了视频特定的参数(聚合器和视频交叉注意⼒),并在视频预训练数据上训练它们。我们使⽤与图像退⽕阶段相同的训练超参数,学习率有⼩的差异。我们从完整视频中均匀采样 16 帧,并使⽤四个区块表⽰每⼀帧,每个区块⼤⼩为 448 × 448 像素。我们在视频聚合器中使⽤ 16 的聚合因⼦,因此获得⼀个有效帧,⽂本标记将与之交叉注意。我们使⽤全局批量⼤⼩为 4,096,序列⻓度为 190 个标记,在训练期间使⽤学习率 10^−4。
7.5 后训练
在本节中,我们描述了我们视觉适配器的后训练配⽅。预训练后,我们在⾼度策划的多模态对话数据上微调模型,以启⽤聊天功能。我们进⼀步实施直接偏好优化(DPO)以提升⼈类评估性能,并采⽤拒绝采样以提⾼多模态推理能⼒。最后,我们增加了⼀个质量调整阶段,我们继续在⾮常⼩的⼀组⾼质量对话数据上微调模型,这在保留基准测试性能的同时进⼀步增强了⼈类评估。以下是每个步骤的更多细节。
7.5.1 监督微调数据
我们分别描述了⽤于图像和视频能⼒的监督微调(SFT)数据。
图像。我们利⽤不同数据集的混合进⾏监督微调。
- 学术数据集。我们使⽤模板或通过 LLM 重写,将⾼度筛选的现有学术数据集转换为问答对。LLM 重写的⽬的是通过不同的指令增强数据,并提⾼答案的语⾔质量。
- ⼈类注释。我们通过⼈类注释者收集多模态对话数据,涵盖⼴泛的任务(开放式问答、字幕、实际⽤例等)和领域(例如,⾃然图像和结构化图像)。注释者被提供图像,并被要求编写对话。为确保多样性,我们在不同集群中均匀地聚类⼤规模数据集和采样图像。此外,我们通过 k最近邻扩展种⼦,为⼀些特定领域获取额外的图像。注释者还被提供了现有模型的中间检查点,以促进模型在循环中的注释⻛格,使模型⽣成可以作为注释者提供额外⼈⼯编辑的起点。这是⼀个迭代过程,其中模型检查点将定期更新为在最新数据上训练的更好执⾏版本的模型。这增加了⼈类注释的体积和效率,同时也提⾼了它们的质量。
- 合成数据。我们探索使⽤图像的⽂本表⽰和⽂本输⼊ LLM ⽣成合成多模态数据的不同⽅法。⾼层思路是利⽤⽂本输⼊ LLM 的推理能⼒,在⽂本领域⽣成问答对,并将⽂本表⽰替换为其相应的图像,以产⽣合成多模态数据。⽰例包括将问答数据集中的⽂本呈现为图像,或将表格数据呈现为表格和图表的合成图像。此外,我们使⽤现有图像的字幕和 OCR 提取来⽣成与图像相关的额外对话或问答数据。
视频。类似于图像适配器,我们使⽤具有预先存在的注释的学术数据集,并将它们转换为适当的⽂本指令和⽬标响应。⽬标被转换为开放式响应或多项选择选项,视情况⽽定。我们要求⼈类注释者⽤问题和相应的答案注释视频。注释者被要求专注于不能基于单个帧回答的问题,引导注释者朝着需要时间理解的问题。
7.5.2 监督微调配⽅
我们分别描述了⽤于图像和视频能⼒的监督微调(SFT)配⽅。
图像。我们从预训练的图像适配器开始初始化,但将预训练语⾔模型的权重与指令调整语⾔模型的权重进⾏热交换。保持语⾔模型权重冻结以维持仅⽂本性能,即,我们只更新视觉编码器和图像适配器权重。
我们微调模型的⽅法类似于 Wortsman 等⼈(2022)。⾸先,我们使⽤多个随机数据⼦集、学习率和权重衰减值进⾏超参数扫描。接下来,我们根据它们的表现对模型进⾏排名。最后,我们平均 top-K 模型的权重以获得最终模型。K 的值是通过评估平均模型并选择最⾼性能的实例来确定的。我们观察到平均模型始终⽐通过⽹格搜索找到的最佳个体模型产⽣更好的结果。此外,这种策略减少了对超参数的敏感性。
视频。对于视频 SFT,我们使⽤预训练权重初始化视频聚合器和交叉注意⼒层。模型中的其余参数,图像权重和 LLM,是从相应模型的微调阶段初始化的。类似于视频预训练,然后我们只在视频 SFT 数据上微调视频参数。在这个阶段,我们将视频⻓度增加到 64 帧,并使⽤ 32 的聚合因⼦获得两个有效帧。区块的分辨率也增加,以与相应的图像超参数⼀致。
7.5.3 偏好数据
我们为奖励建模和直接偏好优化构建了多模态成对偏好数据集。
- ⼈类注释。⼈类注释的偏好数据包括两个不同模型输出之间的⽐较,标记为“选择”和“拒绝”,并带有 7 级评分。⽤于⽣成响应的模型是从最佳近期模型池中即时采样的,每个模型具有不同的特征。我们每周更新模型池。除了偏好标签,我们还要求注释者提供可选的⼈⼯编辑,以纠正“选择”响应中的不准确性,因为视觉任务对不准确性的容忍度很低。注意,⼈⼯编辑是⼀个可选步骤,因为在实践中存在体积和质量之间的权衡。
- 合成数据。合成偏好对也可以通过使⽤仅⽂本 LLM 编辑和故意在监督微调数据集中引⼊错误来⽣成。我们将对话数据作为输⼊,并使⽤ LLM 引⼊微妙但有意义的错误(例如,更改对象、更改属性、添加计算错误等)。这些编辑后的响应⽤作负⾯的“拒绝”样本,并与“选择”原始监督微调数据配对。
- 拒绝采样。此外,为了创建更多的策略内负⾯样本,我们利⽤拒绝采样的迭代过程收集额外的偏好数据。我们在后续部分中更详细地讨论我们对拒绝采样的使⽤。在⾼层次上,拒绝采样⽤于迭代地从模型中采样⾼质量⽣成。因此,作为副产品,所有未被选择的⽣成可以⽤作负⾯拒绝样本,并⽤作额外的偏好数据对。
7.5.4 奖励建模
我们在视觉 SFT 模型和语⾔ RM 的基础上训练⼀个视觉奖励模型(RM)。视觉编码器和交叉注意⼒层从视觉 SFT 模型中初始化并在训练期间解冻,⽽⾃注意⼒层从语⾔ RM 初始化并保持冻结。我们观察到冻结语⾔ RM 部分通常可以带来更⾼的准确性,特别是在需要 RM 根据其知识或语⾔质量进⾏判断的任务上。我们采⽤与语⾔ RM 相同的训练⽬标,但增加了⼀个加权正则化项,该项作⽤在批处理中平均奖励 logits 的平⽅上,这可以防⽌奖励分数偏移。
第 7.5.3 节中的⼈类偏好注释⽤于训练视觉 RM。我们按照语⾔偏好数据(第 4.2.1 节)的相同做法,创建两个或三个具有明确排名的配对(编辑 > 选择 > 拒绝)。此外,我们还通过扰乱与图像中的信息(如数字或视觉⽂本)相关的单词或短语,来增强负⾯响应。这⿎励视觉 RM 根据实际图像内容做出判断。
7.5.5 直接偏好优化
与语⾔模型(第 4.1.4 节)类似,我们使⽤第 7.5.3 节中描述的偏好数据,进⼀步通过直接偏好优化(DPO;Rafailov 等⼈,2023)训练视觉适配器。为了对抗后训练轮次中的分布偏移,我们只保留最近的⼈类偏好注释批次,同时丢弃⾜够偏离策略的批次(例如,如果基础预训练模型发⽣了变化)。
我们发现,不是始终冻结参考模型,⽽是每 k 步以指数移动平均(EMA)的⽅式更新它,有助于模型更多地从数据中学习,从⽽在⼈类评估中获得更好的表现。总体⽽⾔,我们观察到视觉 DPO 模型在每次微调迭代的⼈类评估中,始终⽐其 SFT 起点表现得更好。
7.5.6 拒绝采样
⼤多数可⽤的问答对只包含最终答案,缺乏训练⼀个能够很好地泛化推理任务的模型所需的思维链解释。我们使⽤拒绝采样为这些⽰例⽣成缺失的解释,并增强模型的推理能⼒。
给定⼀个问题-答案对,我们通过不同的系统提⽰或温度采样微调模型,⽣成多个答案。接下来,我们通过启发式或 LLM 裁判将⽣成的答案与真实答案进⾏⽐较。最后,我们通过将正确答案重新添加到微调数据混合中来重新训练模型。我们发现保留每个问题的多个正确答案很有⽤。
为确保我们只将⾼质量的⽰例重新添加到训练中,我们实施了以下两个保护措施。⾸先,我们发现有些⽰例尽管最终答案正确,但包含错误的解释。我们观察到这种模式更频繁地出现在只有⼀⼩部分⽣成答案正确的问题上。因此,我们丢弃了答案正确概率低于某个阈值的问题的答案。其次,评估者由于语⾔或⻛格的差异⽽偏好某些答案。我们使⽤奖励模型选择 top-K 最⾼质量的答案并将它们重新添加到训练中。
7.5.7 质量调整
我们策划了⼀个⼩⽽⾼度精选的 SFT 数据集,所有样本都经过⼈类或我们最佳模型的重写和验证,以满⾜我们的最⾼标准。我们使⽤这些数据训练 DPO 模型以提⾼响应质量,将这个过程称为质量调整(QT)。我们发现,当 QT 数据集涵盖了⼴泛的任务范围并且应⽤了适当的早期停⽌时,QT 显著提⾼了⼈类评估,同时不影响通过基准测试验证的泛化能⼒。在这个阶段,我们仅基于基准选择检查点,以确保能⼒得以保留或提⾼。
相关文章:
Llama 3.1 技术研究报告-6
6 推理 我们研究了两种主要技术,以使 Llama 3 405B 模型的推理⾼效:(1) 流⽔线并⾏和 (2) FP8 量化。我们已经公开发布了我们的 FP8 量化实现。 6.1 流⽔线并⾏ 当使⽤ BF16 数字表⽰模型参数时,Llama 3 405B 不适合在装有 8 个 Nvidia H1…...
更新日志-Python OS
这么久没更新全是因为这段时间的事情很多,只能一点一点的更新代码,不过好在,也是成功更新出来啦! 更新日志(2024/9/29) 代码全文更新,将所有的绝对路径替换为相对路径,这样在各位大…...
Chrome浏览器的C++内存管理技术揭秘
Chrome浏览器作为全球最流行的网络浏览器之一,其高效的内存管理技术功不可没。本文将深入探讨Chrome浏览器在C中的内存管理技术,并介绍如何通过调整网页加载时间、优化视频播放体验和解决谷歌浏览器占用CPU过高的问题来提升浏览器性能。 (本…...
Redis --- redis事务和分布式事务锁
redis事务基本实现 Redis 可以通过 MULTI,EXEC,DISCARD 和 WATCH 等命令来实现事务(transaction)功能。 > MULTI OK > SET USER "Guide哥" QUEUED > GET USER QUEUED > EXEC 1) OK 2) "Guide哥"使用 MULTI命令后可以输入…...
SQL,将多对多的关联记录按行输出
数据库的Primary表和Secondary表有相同的结构,其中W、H、D是主键。Primary表:NameWHDPrimary item 1100500300Primary item 2100600300Primary item 3200500300Primary item 4100500300Primary item 5100600300Primary item 6200500300 Secondary表&…...
【SQL】筛选字符串与正则表达式
目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件,以限制从数据库表中检索的数据。当你执行一个查询时,WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…...
【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)
目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作: 2.exists和del操作: 3.keys和type操作: 4. expire和ttl: Jedis Java 操作 redis 的客⼾端有很多,其中最知名的是 jedi…...
【 微信机器人+ AI 搭建】
摘要: 各种大模型已经出来好久了,各类app也已经玩腻了,接下来,就在考虑,怎么让大模型,利益最大化。 本人没有显著的家世,没有富婆包养,只能自己抽点时间,研究下技术&…...
VGG16网络介绍及代码撰写详解(总结1)
可以从本人以前的文章中可以看出作者以前从事的是嵌入式控制方面相关的工作,是一个机器视觉小白,之所以开始入门机器视觉的学习只要是一个idea,想把机器视觉与控制相融合未来做一点小东西。废话不多说开始正题。 摘要:本文是介绍V…...
多个excel表数据比对操作
多个excel表数据比对操作 本文主要使用两种方法进行比对,分别使用了openpyxl第三方库和pandas第三方库进行数据比对 两种方法优缺点: openpyxy: 优点:主要是处理xlsx的文件,里面方法简单,易懂 缺点:当数据量大的时候,速度很慢,之前我一条一条数据拿出来比较,两百多条…...
golang学习笔记32——哪些是用golang实现的热门框架和工具
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
ZYNQ:开发环境搭建
资料下载 http://47.111.11.73/docs/boards/fpga/zdyz_qimxing(V2).html Vivado软件是什么? Vivado软件是Xilinx(赛灵思)公司推出的一款集成设计环境(IDE),主要用于FPGA(现场可编程门阵列&am…...
一步一步丰富生成式语言模型系统
以下是这套生成式语言模型解决任务的流程图概述: #mermaid-svg-sRHDSMUMV1utrg2F {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sRHDSMUMV1utrg2F .error-icon{fill:#552222;}#mermaid-svg-sRHDSMUMV1u…...
Python中元组的常用方法
# 在Python中,元组(tuple)是一种不可变的序列类型,用于存储多个元素。元组的特点包括: # # 不可变性:一旦创建,元组的元素不能改变。这意味着不能添加、删除或修改元组中的元素。 # 可以包含任何…...
新版本Android Studio如何新建Java code工程
新版本Android Studio主推Kotlin,很多同学以为无法新建Java工程了,其实是可以的,如果要新建Java代码的Android工程,在New Project的时候需要选择Empty Views Activity,如图所示,gradle也建议选为build.grad…...
2024年世界职业院校技能大赛:全面升级的国际化职业技能竞赛
近日,中华人民共和国教育部发布了《2024年世界职业院校技能大赛实施方案》,宣布从2024年起将全国职业院校技能大赛升级为世界职业院校技能大赛。这一重大决策不仅标志着我国职业教育竞赛平台的全面国际化,更彰显了中国在全球职业教育领域的引领作用和战略眼光,具体内…...
前端vue相关常见面试题,包含MVVM、双向绑定原理、性能优化、vue2和vue3性能对比等
vue面试题 MVVM 概念 model view viewModel 本质上是mvc(程序分层开发思想) 将viewModel的状态和行为抽象化,viewmodel将视图ui和业务逻辑分开,去除model的数据,同时处理view中需要展示的内容和业务逻辑 view视图层 …...
生信初学者教程(十二):数据汇总
文章目录 介绍加载R包导入数据汇总表格输出结果总结介绍 在本教程中,汇总了三个肝细胞癌(HCC)的转录组数据集,分别是LIRI-JP,LIHC-US/TCGA-LIHC和GSE14520,以及一个HCC的单细胞数据集GSE149614的临床表型信息。这些数据集为科研人员提供了丰富的基因表达数据和相关的临床…...
常用大语言模型简单介绍
LLaMA(Large Language Model Meta AI)和 Qwen是两个不同的大语言模型,它们在开发背景、设计目标和使用场景等方面有所不同。 1. LLaMA: 开发背景: LLaMA 是由Facebook开发的大语言模型,主要针对学术研究和开源领域。它的设计初衷…...
云计算Openstack
OpenStack是一个开源的云计算管理平台项目,由美国国家航空航天局(NASA)和Rackspace公司合作研发并发起,以Apache许可证授权。该项目旨在为公共及私有云的建设与管理提供软件支持,通过一系列相互协作的组件实现云计算服…...
ClickHouse复杂查询单表亿级数据案例(可导出Excel)
通过本篇博客,读者可以了解到如何在 ClickHouse 中高效地创建和管理大规模销售数据。随机数据生成和复杂查询的示例展示了 ClickHouse 的强大性能和灵活性。掌握这些技能后,用户能够更好地进行数据分析和决策支持,提升业务洞察能力。 表结构…...
ST-GCN模型实现花样滑冰动作分类
加入深度实战社区:www.zzgcz.com,免费学习所有深度学习实战项目。 1. 项目简介 本项目实现了A042-ST-GCN模型,用于对花样滑冰动作进行分类。花样滑冰作为一项融合了舞蹈与竞技的运动,其复杂的动作结构和多变的运动轨迹使得动作识别成为一个具…...
计算机网络基础--认识协议
目录 前言 一、IP地址与端口 二、网络协议 1.网络体系结构框架 2.网络字节序 前言 提示:这里可以添加本文要记录的大概内容: 计算机网络涉及非常广泛,这篇文章主要对计算机网络有个认识 提示:以下是本篇文章正文内容&#x…...
基本控制结构2
顺序结构 程序按照语句的书写次序顺序执行。 选择结构 判断选择结构又称条件分支结构,是一种基本的程序结构类型。 在程序设计中,当需要进行选择、判断和处理的时候,就要用到条件分支结构。 条件分支结构的语句一般包括if语句、if–else…...
php 平滑重启 kill -SIGUSR2 <PID> pgrep命令查看进程号
有时候我们使用nginx 大家都知道平滑重启命令: /web/nginx/sbin/nginx -s reload 但大家对php-fpm 重启 可能就是简单暴力的kill 直接搞起了 下面介绍一个sh 文件名保存为start_php.sh 来对php-fpm 进行平滑重启 #!/bin/bash# 检查 PHP-FPM 是否运行 if ! pgrep php-…...
实时美颜功能技术揭秘:视频美颜SDK与API的技术剖析
当下,用户希望在视频直播中呈现出最佳状态,这推动了视频美颜SDK和API的迅速发展。本文将深入剖析这项技术的核心原理、应用场景以及未来趋势。 一、实时美颜技术的基本原理 在实现这些效果的过程中,视频美颜SDK通常会使用以下几种技术&…...
word2vector训练代码详解
目录 1.代码实现 2.知识点 1.代码实现 #导包 import math import torch from torch import nn import dltools #加载PTB数据集 ,需要把PTB数据集的文件夹放在代码上一级目录的data文件中,不用解压 #批次大小、窗口大小、噪声词大小 batch_size, ma…...
Python的风格应该是怎样的?除语法外,有哪些规范?
写代码不那么pythonic风格的,多多少少都会让人有点难受。 什么是pythonic呢?简而言之,这是一种写代码时遵守的规范,主打简洁、清晰、可读性高,符合PEP 8(Python代码样式指南)约定的模式。 Pyth…...
net core mvc 数据绑定 《1》
其它的绑定 跟net mvc 一样 》》MVC core 、framework 一样 1 模型绑定数组类型 2 模型绑定集合类型 3 模型绑定复杂的集合类型 4 模型绑定源 》》》》 模型绑定 使用输入数据的原生请求集合是可以工作的【request[],Querystring,request.from[]】, 但是从可读…...
python为姓名注音实战案例
有如下数据,需要对名字注音。 数据样例:👇 一、实现过程 前提条件:由于会用到pypinyin库,所以一定得提前安装。 pip install pypinyin1、详细代码: from pypinyin import pinyin, Style# 输入数据 names…...
简单做网站用什么软件/谷歌seo优化排名
4.1~4.2节 R1.数据报,交换机基于链路层,路由器基于网络层。 R2.维护、更新转发状态信息。虚电路建立,数据传送,虚电路拆除。 R3. 转发是指将分组从一个输入链路接口转移到合适的输出链路端口的路由本地动作。 路由选择是指网络范围…...
wordpress sdk/百度快照网站
下面是我最近完成的一个音乐播放器,是仿照网易云音乐的排版做的,在做这个之前,感觉难以下手,但一步一步地经过3天的奋战,终于实现了音乐播放器的基本功能,如:动态生成播放列表、进度条的点击与拖…...
怎么做彩票网站的代理/新闻媒体发布平台
要开始我是非常新的自举,但我想要做一些类似于这个例子:text over background image但在一个引导框架内。我曾尝试在导航栏下面的容器内创建一个div,但似乎在背后的文字背后放置了白色背景......您可以在此处看到我的代码:JSFiddl…...
企业seo的措施有哪些/众志seo
程序员是最容易创业的,或者说是创业成本最低的职业。只要有一台电脑和投入自己的时间,就可以写出畅销天下的软件,这是每个程序员的梦想。更何况世界首富常年以来就是程序员出身的比尔盖茨,这也刺激了更多的程序员走上创业之路。 …...
html代码规范/aso优化平台
目录1.对调数问题..............................................................................................-1 -2.数平方和运算问题...................................................................................-1 -3.打印5阶幻方........................…...
用国外服务器做赌博网站/厦门网络推广外包
析 构 方 法 封装,有一个叫构造函数 和构造函数对应的还有一种方法叫做析构。 class ren //一个类 是 人类 { public $mingzi ;//成员变量 punction__destruct() //析构方法 { } } 析构方法,有什么做用??什么时…...