LLM - 大模型技术报告与训练细节 By Baichuan2

目录

一.引言

二.Introduction - LLM 相关进展

1.模型参数越大,模型能力越强

2.开源模型促进 LLM 领域快速发展

3.开源模型集中在英文领域,其他语言能力有限

4.训练数据 2.6 亿 Token 遥遥领先

5.优化人类指令发布对应 Chat 模型

6.公布了训练过程中的 CKPT 促进领域研究发展

三.Pre-training - Baichuan 预训练相关

1.Pre-training Data - 更全面、更干净的数据

2.Architecture

3.Tokenizer - 更低的压缩比

4.Position Embedding - 位置 Emd 影响不大

5.Activations and Normalizations - 优化性能效率

6.Optimizations - 促使训练更加稳健

7.Scaling Laws - 基于标度率预测最终损失

8.Infrastructure - 如何提高集群 GPU 效率

四.Alignment - 人类意图对齐

1.Supervised Fine-Tuning - 监督微调奖励反馈强化

2.Reward Model - Response 差异越大 Reward 越精准

3.PPO - 优化语言生成模型

4.Training Detail - 训练参数细节

五.Safety - 模型安全性保障

1.Pre-training Stage - 严格的数据筛选

2.Alignment Stage - 红蓝对抗优化 Prompt 与 Response

六.Evaluations - 模型多维度评估

1.evaluate method - 生成与选择的评估方式

2.compare model - 开源可重现结果的对照模型

3.Overall Performance - 丰富的评估基准

4.Vertical Domain Evaluations - 垂直领域评估

5.Math and Code - 数学与代码能力

6.Multilingual - 多语言能力

7.Safety Evaluations - 更安全更可靠

8.Intermediate Checkpoints - 中间 CKPT 输出

七.Related Work - LLM 领域相关工作

八.Limitations and Ethical Considerations - 局限性与伦理考量

九.More - 更多模型相关

1.Scaling laws - 模型系统性能预估

2.NormHead - 训练更稳定

3.Training Dynamics - 动态训练与评估

4.Baichuan Harmless Evaluation Dataset - Baichuan 无害数据集

5.Details of MMLU and C-Eval - 详细评估信息

6.Examples generated by Baichuan 2-13B-Chat - 模型示例

十.总结


一.引言

本文基于 Baichaun-inc 提供的技术报告对 Baichuan2 的由来进行分析。

◆ baichuan 系列模型采用了 2.6 万亿 token 训练。

◆ LLM 基于一些自然语言指令示例在各种自然语言任务上表现出卓越的性能,减少了对广泛特征工程的需求。

◆ 最强大的 LLM 在英语以外的语言的能力上是封闭的或有限的。

二.Introduction - LLM 相关进展

1.模型参数越大,模型能力越强

大语言模型经理显著进步,模型参数从百万到数十亿甚至数万亿。ELMo(2018)、GPT1(2018) -> GPT-3(2020)、PaLM(2022) 参数规模的显著提升也促使语言模型能力的显著改进,从而实现更多类似人类的流畅性和执行各种自然语言任务的能力。随着 2022 ChatGPT 的发布,其展现了跨作者的强大语言熟练度,突出了大语言模型自动化设计自然语言生成和理解任务的潜力。

2.开源模型促进 LLM 领域快速发展

LLM 取得了令人兴奋的突破和应用。例如 GPT-4、PaLM-2 和 Claude,但是这些模型封闭,开发人员和研究人员对模型的访问有限,这使得社区很难研究与微调对应系统。模型的开发和透明可以加速对应领域的发展。LLaMA 是 Meta 开源的 70B 大模型,其完全开源使研究界受益匪浅。LLaMA 以及其他开源模型 OPT、Bloom 的完全放开,加速该领域的研究与进步,催生了新的模型例如 Alpace、Vicuna 等。

3.开源模型集中在英文领域,其他语言能力有限

大多数开源大型语言模型主要集中在英语上。例如,LLaMA 的主要数据源是 Common Crawl,它包括 67% 的 LLAMA 的预训练数据,但仅过滤到英文内容。其他开源 LLM,例如 MPT 和 Falcon 也专注于英语,并且在其他语言中能力有限。这阻碍了llm在特定语言 (如中文) 中的开发和应用。

4.训练数据 2.6 亿 Token 遥遥领先

baichuan2 具有 7 亿和 13 亿两个参数量级。模型均在 2.6 万亿 token 上训练,是迄今为止最大的,是 baichaun1 的两倍多。基于如此大量的训练数据,baichuan2 比 baichaun1 取得了显著的改进。在 MLU、CMMLU、C-Eval 等通用基座上,baichaun2 比 baichuan1 性能高近 30%。具体来说,baichuan2 被优化提高数学和代码问题的性能,在 GSM8K 和 HumanEval 评估中,baichuan2 对比 baichaun1 基本翻倍。此外,baichuan2 在医疗和法律领域也表现出强大的性能,在 MedQA 和 JEC-QA 等基准中优于其他开源模型。

5.优化人类指令发布对应 Chat 模型

此外,我们还发布了两个聊天模型,Baichuan 2-7B-Chat 和 Baichuan 2-13B-Chat,优化了遵循人类指令。这些模型擅长对话和上下文理解。我们将详细阐述提高 baichuan2 安全的方法。通过开源这些模型,我们希望使社区能够进一步提高大型语言模型的安全性,促进对负责任的 llm 开发的更多研究。

6.公布了训练过程中的 CKPT 促进领域研究发展

此外,本着研究协作和持续改进的精神,我们还在从 200 亿个 token 到完整的 2.6 万 token 的训练的不同阶段发布了 baichuan2 的检查点。我们发现,即使对于 750 亿个参数模型,在超过 2.6 万亿 个 token 的训练后,性能继续提高。通过共享这些中间结果,我们希望为社区提供对 baichuan2 的训练动态的更深入的了解。了解这些动态是揭示大型语言模型内部工作机制的关键。我们相信这些检查点的发布将为这个快速发展的领域取得进一步进展铺平道路。

三.Pre-training - Baichuan 预训练相关

1.Pre-training Data - 更全面、更干净的数据

DataSource - 更全面的数据集

在数据采集过程中,我们的目标是追求全面的数据可扩展性和代表性。我们从包括通用互联网网页、书籍、研究论文、代码库等不同来源收集数据,以构建广泛的世界知识系统。

排名 Top 10 的分别为:Technology、Business、Entertainment、Life、Health、Education、Culture、Code、Sports、Engineering。

Data Processing - 更细粒度的数据清洗

对于数据处理,我们专注于数据频率和质量。数据频率依赖于聚类和重复数据删除。我们构建了一个大规模的重复数据删除和聚类系统,支持类似 LSH 的特征和密集嵌入特征。该系统可以在小时内对万亿级数据进行集群和重复数据删除。基于聚类,单个文档,段落,句子被重复数据删除和评分。然后使用这些分数进行预训练中的数据采样。数据处理不同阶段的训练数据大小如图:

Exact deduplication - 精确的重复数据消除 - 删除 29.89%

Heuristic approach  - 启发式方法 - 删除 1.77%

Sent-wise quality filter - 句子级别质量过滤 - 删除 3.06%

Sent-wise, paragraph-wise deduplication - 句子、段落重复数据消除 - 删除 14.47%

Document-wise deduplication - 基于文档的重复数据删除 - 删除 19.13%

2.Architecture

baichun 2 的模型架构基于流行的 Transformer (Vaswani et al., 2017)。尽管如此,我们做了几个修改,我们将在下面详细介绍。

3.Tokenizer - 更低的压缩比

分词器需要平衡两个关键因素:高效推理的高压缩率和适当大小的词汇表,以确保每个词嵌入的充分训练。我们考虑了这两个方面。我们将 baichuan1 中的词汇量从 64,000 扩展到 125,696,旨在在计算效率和模型性能之间取得平衡。

我们使用来自 SentencePiece (Kudo and Richardson, 2018) 的字节对编码 (BPE) (Shibata et al., 1999) 对数据进行标记。具体来说,我们不对输入文本应用任何归一化,我们没有像 Baichuan1 那样添加一个虚拟前缀。我们将数字分成单个数字,以更好地编码数字数据。为了处理包含额外空格的代码数据,我们在标记器中添加了仅空格的标记。字符覆盖率设置为 0.9999,稀有字符回退到 UTF-8 字节。 

我们将 maximum token length 设置为 32 以考虑长中文短语。baichuan2 分词器的训练数据来自baichuan2 预训练语料库,具有更多的采样代码示例和学术论文来提高覆盖率(Taylor et al., 2022)。下表显示了 baichuan2 的分词器与其他分词器的详细比较。

4.Position Embedding - 位置 Emd 影响不大

在 baichuan1 的基础上,我们对 baichuan2-7B 采用旋转位置嵌入 (RoPE) (Su et al., 2021) 和 baichuan2-13B 的 ALiBi (Press et al., 2021)。ALiBi 是一种较新的位置编码技术,已显示出改进的外推性能。然而,大多数开源模型使用 RoPE 进行位置嵌入,并优化注意力实现,如 Flash Attention (Dao et al., 2022; Dao, 2023) 目前更适合 RoPE,因为它是基于乘法的,绕过了将 attention_mask 传递给注意力操作的需要。然而,在初步实验中,位置嵌入的选择并没有显着影响模型性能。为了进一步研究基于偏差和基于乘法的注意力,我们将 RoPE 应用 baichuan2-7B 和 ALiBi 应用于 baichuan2-13B,与 baichuan1 保持一致。

5.Activations and Normalizations - 优化性能效率

我们使用 SwiGLU (Shazeer, 2020) 激活函数,GLU 的开关激活变体 (Dauphin et al., 2017),显示出改进的结果。然而,SwiGLU 有一个“双线性”层,包含三个参数矩阵,与普通 Transformer 的前馈层有两个矩阵不同,因此我们将隐藏大小从隐藏大小减少到 8/3 个隐藏大小的 4 倍,并四舍五入为 128 的乘法。

对于 baichuan2 的注意层,我们采用了xFormers2 实现的内存高效注意(Rabe和Staats, 2021)。通过利用 xFormers 的优化注意和偏置能力,我们可以有效地结合 ALiBi 的基于偏置的位置编码,同时减少内存开销。这为 baichaun2 的大规模训练提供了性能和效率优势。

我们将层归一化 (Ba et al., 2016) 应用于 Transformer 块的输入,该块对预热计划更加稳健 (Xiong et al., 2020)。此外,我们使用 (Zhang and Sennrich, 2019) 引入的 RMSNorm 实现,它只计算输入特征的方差以提高效率。

6.Optimizations - 促使训练更加稳健

我们使用 AdamW (Loshchilov and Hutter, 2017) 优化器进行训练。β1 和 β2 分别设置为 0.9 和 0.95。我们使用 0.1 的权重衰减并将 grad 范数剪裁为 0.5。模型以 2,000 个线性缩放步骤预热,达到最大学习率,然后将余弦衰减应用于最小学习率。参数细节和学习率如下表:

整个模型使用 BFloat16 混合精度进行训练。与 Float16 相比,BFloat16 具有更好的动态范围,这使得它对训练大型语言模型至关重要的大值更加稳健。然而,BFloat16 的低精度在某些情况下会导致问题。例如,在一些公共 RoPE 和 ALbi 实现中,当整数超过 256 时,torch.arange 操作由于碰撞而失败,防止附近位置的区分。因此,我们对一些值敏感操作(例如位置嵌入)使用全精度。 

BFloat16

bfloat16 和 float16 都是 16 位浮点数格式,它们的主要区别在于精度的不同。具体来说,bfloat16格式使用 1 位表示符号,8 位表示指数,7 位表示尾数。而 float16 格式则使用1位表示符号,5 位表示指数,10 位表示尾数。这意味着 bfloat16 具有更大的表示范围,但是精度较低。float 16 则具有更高的精度,但是其表示范围相对较小。float32 则拥有 32 位,其中 1 位用于表示符号,8 位用于表示指数,23 位用于表示尾数。所以 float32 具有更高的精度,能够表示更大范围的值。

在内存空间占用方面,float32 需要4个字节-32位,而 float16 和 bfloat16 则只需要2个字节-16位。这意味着使用 float16 可以节省内存空间,对于内存受限的应用来说更为适用。

NormHead

为了稳定训练和提高模型性能,我们对输出嵌入进行归一化(也称为“头”)。在我们的实验中,NormHead 有两个优点。首先,在我们的初步实验中,我们发现头部的范数容易不稳定。在训练期间,稀有 token 嵌入的范数变小,这会干扰训练动态。NormHead 可以显着稳定动力学。其次,我们发现语义信息主要由嵌入的余弦相似度而不是 L2 距离编码。由于当前的线性分类器通过点积计算 logits,它是 L2 距离和余弦相似度的混合。NormHead 减轻了 L2 距离在计算 logits 时的干扰。

Max-z Loss

在训练期间,我们发现 LLM 的 logits 可能会变得非常大。虽然 softmax 函数与绝对 logit 值无关,因为它仅取决于它们的相对值。较大的 logits 在推理过程中会导致问题,因为重复惩罚的常见实现将标量直接应用于 logits。这样收缩非常大的 logits 可以显着改变 softmax 之后的概率,使模型对重复惩罚超参数的选择敏感。受 NormSoftmax 和 PaLM 的辅助 z-loss 的启发,我们添加了一个max-z 损失来规范化 logits:

baichuan2-7B 和 baichuan2-13B 的最终训练损失如下图所示: 

7.Scaling Laws - 基于标度率预测最终损失

神经缩放定律,其中误差随着训练集大小、模型大小或两者的幂函数而降低,在深度学习和大型语言模型中训练变得越来越昂贵时,已经实现了令人振奋的性能。在训练数十亿个参数的大型语言模型之前,我们首先训练一些小型模型并拟合缩放定律来训练更大的模型。

我们启动了从 10M 到 3B 的一系列模型大小,范围从 1/1000 到 1/10 最终模型的大小,每个模型最多训练 1万亿 个 token,使用一致的超参数和来自 baichuan2 的相同数据集。基于不同模型的最终损失,我们可以得到从训练失败到目标损失的映射。

为了拟合模型的标度律,我们采用了Henighan等人(2020)给出的公式:

其中 L∞ 是不可约损失,第一项是可约损失,它被表述为幂律缩放项。C 是训练 loss,LC 是该模型在该失败中的最终 loss。我们使用来自 SciPy4library 的 curve_fit 函数来拟合参数。最终拟合缩放曲线和预测 750 亿和 13 亿参数模型的最终损失如下图所示。我们可以看到,拟合标度律预测 baichaun2 的最终损耗精度较高:

baichuan2 的标度律。我们训练了从 1000 万到 30 亿个参数的各种模型,有1万亿个 token。通过将幂律项拟合到给定训练失败的损失中,我们预测在 2.6 万亿 token 上训练 baichuan2-7B 和 baichuan2-13B 的损失。这种拟合过程准确地预测了最终模型的损失(用两颗星标记)。 

8.Infrastructure - 如何提高集群 GPU 效率

有效地利用现有的 GPU 资源在当今训练和开发大型语言模型方面起着至关重要的作用。为此,我们为弹性训练框架和智能集群调度策略开发了一种协同设计方法。由于我们的 GPU 在多个用户和任务之间共享,因此每个任务的特定行为是不可预测的,通常会导致集群内的空闲 GPU 节点。考虑到配备 8 个 A800 GPU 的单台机器能够充分满足 baichuan7B 和 baichuan13B 模型的内存需求,我们的训练框架的主要设计标准是机器级弹性,它支持任务的资源可以根据集群状态动态修改,从而作为我们智能调度算法的基础。

为了满足机器级弹性的要求,我们的训练框架集成了张量并行性和数据并行性,其中我们在每个机器内设置张量并行性,并使用 ZeRO 共享数据并行性来跨机器进行弹性缩放。此外,我们采用了一种张量分裂技术,其中我们拆分某些计算以减少峰值内存消耗,例如具有大词汇表的交叉熵计算。这种方法使我们能够在不增加计算和通信的情况下满足内存需求,从而使系统更高效。为了进一步在不影响模型精度的情况下加速训练,我们实现了混合精度训练,我们在 BFloat16 中执行前向和后向计算,同时在 Float32 中执行优化器更新。

此外,为了有效地将我们的训练集群扩展到数千个 GPU,我们集成了以下技术以避免通信效率的下降:

◆ 拓扑感知分布式训练

在大规模集群中,网络连接经常跨越多层交换机。我们战略性地安排分布式训练的排名,以最小化跨不同交换机的频繁访问,从而减少延迟,从而提高整体训练效率。

◆ ZeRO 的混合和分层分区

通过跨 GPU 划分参数,ZeRO3 以牺牲额外的全聚集通信为代价减少了内存消耗。当扩展到数千个 GPU 时,这种方法将导致显着的通信瓶颈。为了解决这个问题,我们提出了一种混合和分层分区方案。具体来说,我们的框架首先在所有 GPU 上划分优化器状态,然后自适应地决定哪些层需要激活 ZeRO3,以及分层划分参数。

通过集成这些策略,我们的系统能够在 1024 个 NVIDIA A800 GPU 上以 1024 个 NVIDIA A800 GPU 有效地训练  baichaun2-7B 和 baichuan2-13B 模型,实现了超过 180 TFLOPS 的计算效率。

Tips:

TFLOPS是 floating point operations per second 的缩写,即每秒所执行的浮点运算次数。它被用来评估电脑的计算能力,特别是在使用到大量浮点运算的科学计算领域中。NVIDIA RTX 3060 的浮点性能大约是 12.5 TFLOPS而中国的 "天河二号" 超级计算机的 TFLOPS 性能指标达到了1000 万亿次每秒。

四.Alignment - 人类意图对齐

baichuan2 还引入了对齐过程,产生了两个聊天模型:baichuan2-7B-Chat 和 baichaun2-13B-Chat。baichuan2 的对齐过程包括两个主要组件:来自人类反馈 (RLHF) 的监督微调 (SFT) 和强化学习。

1.Supervised Fine-Tuning - 监督微调奖励反馈强化

在监督微调阶段,我们使用人类标签器来注释从不同数据源收集的提示。根据类似于 Claude 的关键原则,每个提示都被标记为有用或无害。为了验证数据质量,我们使用交叉验证——权威注释者检查特定人群工作人员组注释的样本批次的质量,拒绝任何不符合我们质量标准的批次。我们收集了超过 100k 个监督微调样本,并在它们上训练了我们的基础模型。接下来,我们通过 RLHF 方法描述了强化学习过程,以进一步提高结果。RLHF 的整个过程,包括 RM 和 RL 训练,如下图所示:

RLHF

RLHF是 Reinforcement Learning from Human Feedback,即利用强化学习算法,根据人类反馈来优化语言模型的方法。

RLHF主要包含以下三个部分:

        一个预训练的语言模型,可以生成自然语言文本或执行其他任务。

        一个从人类反馈中学习得来的奖励模型,用于评估语言模型的输出质量和符合度。

         一个用于训练语言模型的强化学习算法,可以利用奖励模型的指导来更新语言模型的参数。

RLHF的实现过程可以分为以下三个阶段:

        监督微调阶段,使用标注数据来对语言模型进行初始训练,以适应特定的任务和领域。

        奖励模型训练阶段,使用人类反馈数据来对奖励模型进行训练,以捕捉人类对语言模型输出的偏好和评价。

        RL微调阶段,使用强化学习算法来进一步训练语言模型,以最大化奖励模型的期望值。

这个过程可以重复多次,以更充分地对齐语言模型与人类价值观。

2.Reward Model - Response 差异越大 Reward 越精准

我们为所有提示设计了一个三层分类系统,由 6 个主要类别、30 个次要类别和超过 200 个三级类别组成。从用户的角度来看,我们的目标是分类系统全面涵盖所有类型的用户需求。从奖励模型训练的角度来看,每个类别内的提示应该具有足够的多样性,以确保奖励模型能够很好地泛化。

给定一个 prompt,baichuan2 不同大小的模型和阶段 (SFT, PPO) 模型生成响应以增强响应多样性。RM 训练中只使用了baichuan2 模型家族生成的 response。来自其他开源数据集和专有模型的响应并没有提高奖励模型的准确性。这也强调了 baichaun 模型系列从另一个角度的内在一致性。 用于训练奖励模型的损失函数与 InstructGPT 的损失函数一致。来自训练的奖励模型的性能与 LLAMA 2 一致,表明两个响应之间的得分差异越大,奖励模型的判别准确率越高,如下表所示:

3.PPO - 优化语言生成模型

在获得奖励模型后,我们使用 PPO 算法来训练我们的语言模型。我们采用四个模型:参与者模型(负责生成响应)、参考模型(用于计算具有固定参数的 KL 惩罚)、奖励模型(为具有固定参数的整个响应提供总体奖励)和批评模型(旨在学习每个令牌值)。

4.Training Detail - 训练参数细节

在 RLHF 训练过程中,critic 模型提前 20 个训练步骤预热。随后,critic 和 actor 模型都通过标准 PPO 算法进行更新。对于所有模型,我们使用 0.5 的梯度裁剪、5e-6 的恒定学习率和 PPO 剪辑阈值 ε = 0.1。我们设置 KL 惩罚系数 β = 0.2,在步骤上衰减到 0.005。我们为我们所有的聊天模型训练 350 次迭代,得到 baichuan2-7B-Chat 和baichuan2-13B-Chat。

五.Safety - 模型安全性保障

我们相信,模型安全改进不仅源于数据清理或对齐阶段的约束,还源于在所有训练阶段利用正知识和识别负知识。在这个概念的指导下,我们在整个 baichuan2 训练过程中增强了模型安全性。

1.Pre-training Stage - 严格的数据筛选

在预训练阶段,我们密切关注数据安全。整个预训练数据集经历了一个严格的数据过滤过程,旨在增强安全性。我们设计了一个规则和模型系统来消除暴力、色情、种族歧视、仇恨言论等有害内容。此外,我们策划了一个汉英双语数据集,其中包含来自数百个可声誉网站的数百万个网页,这些网站代表各种正值域,包括政策、法律、脆弱组、一般值、传统美德等领域。我们还提高了该数据集的采样概率。

2.Alignment Stage - 红蓝对抗优化 Prompt 与 Response

我们构建了一个由 6 种类型的攻击和 100+ 颗粒安全值类别组成的红队过程,这是一个 10 的专家注释团队,传统的互联网安全经验初始化了安全对齐 prompt。检索来自预训练数据集的相关片段以创建 response,从而产生大约 1K 注释数据进行初始化。

专家注释团队通过与初始化对齐模型的红色和蓝色对抗来引导 50 人外包注释团队,从而产生 200K 攻击提示。通过使用专门的多值监督采样方法,我们最大限度地利用攻击数据来生成不同安全级别的 response。在 RL 优化阶段,我们还考虑了安全性:

在安全强化开始时,DPO 方法有效地利用了有限数量的注释数据来提高特定漏洞问题的性能。

通过使用集成了有用和无伤害目标的奖励模型,进行了 PPO 安全强化训练。

DPO / PPO

在自然语言处理领域,DPO和PPO都是用于训练大型语言模型的优化算法。

DPO(Direct Preference Optimization)是一种新的训练方法,旨在直接优化语言模型与人类偏好的一致性。这种方法可以更精确地控制模型的行为并使其与人类偏好保持一致,但如何实现大规模、数据效率高、稳健性强、可扩展的方法仍然是一个挑战。

PPO(Proximal Policy Optimization)是一种强化学习中的近端策略优化算法,旨在训练大型语言模型时实现更高的数据效率和稳健性。与 TRPO 算法相比,PPO 算法使用了一阶优化方法,并且只使用一个神经网络来同时进行策略和值函数的估计,从而减少了模型的复杂性和训练时间。PPO算法在训练大型语言模型时具有剪切概率比率(Clip Probability Ratio)的优点,该比率可以限制模型策略的变化量,从而实现策略的平滑性和稳定性,同时保持较高的样本效率。

总之,DPO 和 PPO 都是针对大型语言模型训练的优化算法,但它们的应用场景和目的略有不同。DPO 旨在直接优化人类偏好与模型行为的一致性,而 PPO 则旨在提高数据效率和稳健性,同时保持模型的复杂性和样本效率。

六.Evaluations - 模型多维度评估

在本节中,我们报告了预训练基础模型在标准基准上的零样本或少样本结果。我们在自由形式的生成任务和多项选择任务上评估 baichuan2。

1.evaluate method - 生成与选择的评估方式

◆ 自由形式的生成

模型被赋予一些样本输入(shot),然后生成延续以获得结果,例如问答、翻译和其他任务。

◆ 多项选择

模型被赋予一个问题和多项选择,任务是选择最合适的候选者。

2.compare model - 开源可重现结果的对照模型

鉴于任务和示例的多样性,我们将开源评估框架 lm-evaluation-harness 和 OpenCompass 合并到我们的内部实现中,以便与其他模型进行公平比较。我们选择比较的模型与baichuan2 具有相似的大小,并且是开源的,可以重现结果:

◆ LLAMA

Meta 在 1 万亿个 token 上训练的语言模型。上下文长度为 2048,我们评估了 LLAMA 7B 和 LLAMA 13B。

◆ LLAMA2

LLaMA 1 的后继模型训练了 2 万亿 token 和更好的数据混合。

◆ Baichuan1

baichaun7B 在 1.2 万亿 token 上进行训练,baichuan13B 在 1.4 万亿 token 上进行训练。他们都关注英文和中文。

ChatGLM2-6B

在几个基准测试中表现出色的聊天语言模型。

MPT-7B

开源 LLM 训练了 1 万亿个英文文本和代码标记。

◆ Falcon-7B

一系列 LLM 在 1 万亿令牌上训练,并通过策划语料库增强。它是在 Apache 2.0 许可下提供的。

◆ Vicuna-13B 

通过微调 LLAMA-13B 训练的语言模型发布它们的基本模型,因此我们采用了他们在网站上报告的结果。其采用 ChatGPT 生成的对话数据集。

◆ Chinese-Alpaca-Plus-13B

通过在 ChatGPT 生成的会话数据集上微调 LLAMA13B 来训练的语言模型。

◆ XVERSE-13B

在 1.4 万亿多个 token 上训练的 13B 多语言大型语言模型。

3.Overall Performance - 丰富的评估基准

本节介绍与其他类似大小的模型相比,Baichuan 2 基础模型的整体性能。我们选择 8 个基准进行比较:

MMLU 大规模多任务语言理解由学术主题的一系列多项选择题组成。

C-Eval 是一个全面的中文评估基准,包含超过 10k 个多项选择题。

CMMLU 也是一个通用评估基准,专门用于评估 LLM 在中文和文化背景下的知识和推理能力。

AGIEval 是一个以人为中心的基准,专门用于评估人类认知和解决问题等一般能力。

Gaokao 是一个评估框架,它利用中国高中学入考试问题。

BBH 是一组具有挑战性的 BIG-Bench  任务,语言模型评估并没有优于平均人类评估者。

GSM8K 是一个专注于数学的评估基准。

HumanEval 是一个文档字符串到代码数据集,由 164 个编码问题组成,测试编程逻辑不同方面。

对于 CMMLU 和 MMLU,我们采用官方实现并采用 5-shot 进行评估。对于 BBH,我们采用 3-shot 评估。对于 C-Eval、Gaokao 和 AGIEval,我们只选择具有四个候选者的多项选择来更好地评估。对于 GSM8K,我们采用从 OpenCompass 派生的 4-shot 测试。我们还结合了 GPT-4 和 GPT-3.5-Turbo 的结果。除非另有说明,本文中的结果是使用我们的内部评估工具获得的。总体结果如下表所示。与其他类似大小的开源模型相比,baichuan2 具有明显的性能优势。特别是在数学和代码问题中,我们的模型比 baichuan1 取得了显着的改进:

4.Vertical Domain Evaluations - 垂直领域评估

我们还在垂直领域评估了 baichuan2,我们选择法律和医学领域,因为它们近年来得到了广泛的研究。在法律领域,我们报告了从中国国家司法考试中收集的 JEC-QA  的分数。它包含多项选择和多答案问题。为了与我们的评估套件兼容,我们只测试多项选择题。

在医学领域,我们报告了两个医学基准 MedQA 和 MedMCQA 的分数,以及来自 C-Eval 、MMLU 和 CMMLU 中医学相关学科的平均分数。具体来说,MedMCQA 是从美国和中国的专业医疗董事会考试中收集的,包括三个子集,即 USMLE、MCMLE 和 TWMLE,我们报告了具有五个候选者的 USMLE 和 MCMLE 的结果; MedMCQA 是从印度医疗入口考试中收集的,我们评估多项选择题并报告开发集的分数。MedMCQA 的细节包括 (1) 临床医学、C-Eval (val) 的基本医学,(2) 临床知识、解剖学、大学医学、大学生物学、营养、病毒学、医学遗传学、MMLU 的专业医学,(3) 解剖学、临床知识、大学医学、遗传学、营养、中药、CMMLU 病毒学。此外,所有这些数据集都在 5-shot 中进行了评估。

Baichuan 2-7B-Base 在中国法律领域超越了 GPT-3.5 Turbo、ChatGLM 2-6B 和 LlaMA 2-7B 等模型,仅次于 GPT-4。与 baichuan1-7B 相比,baichuan2-7B-Base 提高了近 10 个点。在医学领域,Baichuan 2-7B-Base 的表现优于 ChatGLM 2-6B 和 LlaMA 2-7B 等模型,显示出比 Baichuan 1-7B 的显着改进。同样,Baichuan 2-13B-Base 在中国法律领域超越了 GPT-4 以外的模型。在医学领域,Baichuan 2-13 Base 优于 XVERSE-13B 和 LLAMA 2-13B 等模型。与 baichuan1-13B-Base 相比,baichuan2-13B-Base 也表现出显着的改进:

5.Math and Code - 数学与代码能力

本节介绍数学和编码的性能。我们使用 GSM8K(4-shot) 和 MATH (4-shot) 来评估数学能力。MATH 包含 12,500 个更难解决的数学问题。为了评估模型的代码能力,我们报告了 HumanEval  (0-shot) 和 MBPP (3-shot) 中的分数。HumanEval 是一系列编程任务,包括模型语言理解、推理、算法和简单数学来评估模型的正确性并测量模型解决问题的能力。MBPP,它由 974 个 Python 短函数和程序文本描述的数据集组成,以及用于验证其功能正确性的测试用例。

我们使用 OpenCompass 来评估模型在数学和代码方面的能力。在数学领域,baichuan 2-7B Base 超越了 LLAMA 2-7B 等模型。在代码域中,它的性能优于相同大小的模型,例如 ChatGLM 2-6B。与 baichuan 1-7B 模型相比,baichuan 2-7B-Base 显示出显着的改进。在数学中,Baichuan 2-13B-Base 超越了所有相同大小的模型,接近 GPT-3.5 Turbo 的水平。在代码域中,Baichuan 2-13B-Base 的性能优于 LlaMA 2-13B 和 XVERSE-13B 等模型。与 baichuan 1-13B-Base 相比,baichuan 2-13B-Base 显示出显着的改进。

◆ N shot

在元学习(meta-learning)或者迁移学习(transfer learning)中,"N-shot" 是一种评估模型性能的方法。 "1-shot" 表示模型只看到一个目标类别的一个示例就需要学习和预测该类别,而 "5-shot" 表示模型看到一个目标类别的五个示例。 这两个术语常用于 "few-shot learning" 中,目标是训练模型在非常少的样本(例如,一个或几个)上进行学习。这对于现实世界的许多任务来说是至关重要的,因为我们经常需要在只有非常少的样本的情况下做出预测。 在这种背景下,"N-shot" 任务的性能通常被用来评估模型的泛化能力,即模型看到新的、以前未见过的数据时其预测准确性如何。

6.Multilingual - 多语言能力

我们使用 Flores-101 来评估多语言能力。Flores-101 涵盖了世界各地的 101 种语言。它的数据来自各种领域,例如新闻、旅游指南和书籍。我们选择联合国的官方语言(阿拉伯语 (ar)、中文 (zh)、英语 (en)、法语 (fr)、俄语 (ru) 和西班牙语 (es)),以及德语 (de) 和日语 (ja) 作为测试语言。我们对 Flores-101 中的七个子任务进行了 8-shot 测试,包括 zh-en、zh-fr、zh-es、zh-ar、zh-ru、zh-ja 和 zh-de。评估是使用 OpenCompass 进行的。

在多语言领域,Baichuan 2-7B-Base 在所有七个任务中都超过了所有相同大小的模型,并且与 Baichuan 1-7B 相比显示出显着的改进。Baichuan 2-13B-Base 在七个任务中的 4 个中优于相同大小的模型。在 zh-en 和 zh-ja 任务中,它超越了GPT 3.5 Turbo,达到了GPT-4的水平。与Baichuan 1-13B-Base 相比,Baichuan 2-13B-Base 在zh-ar、zhru 和 zh-ja 任务中取得了显著的改进。尽管 GPT-4 在多语言领域仍然占主导地位,但开源模型正在密切追赶。在 zh-en 任务中,Baichuan 2-13B-Base 略超过 GPT-4。

Tips:

8-shot 测试是指使用大型语言模型(Large Language Model, LLM)进行的一种测试方式,其中 "8-shot" 是指在模型给出预测答案之前,我们提供 8 个相关的例子或情境。这些例子将帮助模型理解所需要回答的问题或完成的任务。在机器学习领域,这种方法被称为 "few-shot learning",在该学习方法中,模型使用有限的训练样本进行学习和预测。 

7.Safety Evaluations - 更安全更可靠

上一章 Safety 描述了提高 baichuan 2 安全性的努力。然而,之前的一些工作表明,有用性和无害性是跷跷板的两面——当无害性增加时,有用性可能会导致比特减少。因此,我们在安全对齐前后评估这两个因素。下图显示了 baichuan2 安全对齐前后的有用性和无害性。我们可以看到,我们的安全对齐过程并没有损害有用性,同时显著提高了无害性:

baichaun 安全对齐前后的帮助性和无害性。x 轴表示安全对齐前的度量,y 轴表示结果。我们看到,在此过程之后,有用性在很大程度上保持不变,而无害化通过安全努力显着提高(上三角形的质量更多)。

然后我们使用 Toxigen 数据集评估我们预训练模型的安全性。与 LLAMA 2 相同,我们清理后使用的版本来自 SafeNLP 项目 ,区分 13 个少数群体的中性和仇恨类型,形成一个与原始 Toxigen 提示格式一致的 6-shot 数据集。我们的解码参数使用 temperature 0.1 和 top-p 0.9 核采样。我们使用在 Toxigen 中优化的微调 HateBert 版本进行模型评估。如下表所示,与 LLAMA 2 相比,baichuan 2-7B 和 baichuan 2-13B 模型具有一定的安全优势:

受 BeaverTails Ji 等人的启发。 我们构建了白川无害评估数据集 (BHED),涵盖了 7 种主要的偏见/歧视安全类别、侮辱/亵渎、非法/道德内容、身体健康、心理健康、金融隐私和敏感主题来评估我们聊天模型的安全性。为了确保每个类别内的全面覆盖,我们要求人工注释者生成 1400 个数据样本。这通过自我指令进一步扩展,并由人类清理以进行流畅性,导致每个类别共有 70000 个样本,每个类别 10000。我们使用这些样本来评估不同的模型,结果如下表所示。我们可以看到,Baichuan 2 在我们的安全评估中相当或优于其他聊天模型:

8.Intermediate Checkpoints - 中间 CKPT 输出

我们还将发布 7B 模型的中间检查点,从 220 亿个 token 检查点到 2640 亿个 token 检查点,这是baichuan 2-7B-Base 的最终输出。我们在几个基准上检查了它们的性能,结果下图所示。如图所示,随着训练的进行,Baichuan 2 表现出一致的改进。即使在 2.6 万亿 token 之后,似乎还有充足的空间来进一步改进。这与之前关于缩放 llm 的工作一致,表明数据大小是一个关键因素:

七.Related Work - LLM 领域相关工作

近年来,语言模型领域经历了复兴,这在很大程度上是由深度神经网络与 Transformers 的发展引发的。Kaplan 等人提出了大型模型预训练的标度律。通过系统地分析模型性能随着参数和数据大小的增加而增加,他们为当前具有数百甚至数十亿个参数的大规模模型时代提供了蓝图。

在这些缩放定律的基础上,OpenAI、Google、Meta 和 Anthropic 等组织从事计算军备竞赛以创建越来越大的 LLM。OpenAI 的 1750 亿个参数专有语言模型 GPT-3。LLM 的少样本甚至零样本能力都围绕着大多数自然语言理解任务。从代码生成到数学解决问题甚至开放世界场景。还出现了专门的科学 llm,如银河,以展示大型模型吸收技术知识的潜力。然而,单独的原始参数计数并不能确定模型能力 - Chinchilla 表明,根据 token 的数量(而不仅仅是参数)缩放模型容量可以产生更好的样本效率。在私有 llm 的发展的同时,学术和非营利努力致力于开发开源替代方案,如 Bloom 、OPT 和 Pythia。尽管一些开源大型语言模型包含多达 1750 亿个参数,但大多数仅在 500 亿个 token 或更少上进行训练。考虑到在数万亿个 token 上进行训练后,70 亿个参数模型仍然可以显着改善。在这些开源模型中,LLAMA 及其后继 LLAMA 2 代表其性能和透明度。社区快速优化那些以获得更好的推理速度和各种应用。

除了这些基础模型之外,还提出了许多聊天模型来跟踪人类指令。他们中的大多数微调基础模型以与人类对齐,例如 OpenAI。这些聊天模型在理解人类指令和解决复杂任务方面表现出显着的改进。为了进一步改进对齐,Ouyang 结合了来自人类反馈 RLHF 方法的强化学习。这包括通过在人工评分的输出上训练奖励模型来从人类偏好中学习。还提出了直接偏好优化 DPO 和 AI 反馈强化学习等其他方法来提高 RLHF 在效率和有效性方面。

八.Limitations and Ethical Considerations - 局限性与伦理考量

与其他大型语言模型一样,Baichuan 2 还面临伦理挑战。它容易出现偏差和毒性,特别是考虑到其大部分训练数据来自互联网。尽管我们尽最大努力使用 Toxigen 等基准来缓解这些问题,但风险无法消除,毒性往往会随着模型大小的增加而增加。此外,baichuan 2 模型的知识是静态的,可能过时或不正确,这给需要医学或法律等最新信息的领域带来了挑战。虽然针对中文和英文进行了优化以实现安全性,但该模型在其他语言方面存在局限性,可能无法完全捕获与非中文文化相关的偏差。也有滥用的潜力,因为该模型可用于生成有害或误导性的内容。尽管我们尝试我们尽最大努力平衡安全性和实用性,但一些安全措施可能看起来过于谨慎,影响了模型对某些任务的可用性。我们鼓励用户负责和道德地使用 baichuan 2 模型。同时,我们将在未来继续优化这些问题并发布更新版本。

九.More - 更多模型相关

1.Scaling laws - 模型系统性能预估

LLM Scaling laws(Learning Laws of Learning Machines)是指在机器学习中,以计算和学习资源(如数据,模型复杂性,计算能力等)为基础的,预测机器学习系统性能(如训练时间,模型质量等)的定量关系的理论。 这些定量关系通常呈现出一种规模关系,即随着某一种资源(如数据量)的增加,系统性能(如训练时间或模型质量)会按照某种特定的方式变化。这种规模关系是通过大量的实验和统计分析得出的,因此也被称为 "规模定律" 或 "扩展定律"。 例如,一种常见的LLM Scaling laws是 "数据规模定律",即在保持其他条件不变的情况下,随着训练数据量的增加,模型的预测性能(如准确率)通常会增加。这种规模定律在各种机器学习任务中都得到了广泛的验证。 LLM Scaling laws 对于预测和优化机器学习系统的性能具有重要的指导意义。通过研究和理解这些规模定律,我们可以更好地理解机器学习模型的工作机制,以及如何在有限的资源下最大化模型的性能。我们使用 7 个模型拟合 baichuan 2 的标度律。参数细节如下表所示:

通过不同参数的多组对照试验,我们也可以通过统计学习方法去预测不同参数尺度下模型的性能指标。

2.NormHead - 训练更稳定

通过进行词嵌入 KNN 检索任务,其中给定一个查询词,检索最近的 K 个单词。我们发现语义信息主要由嵌入的余弦相似度而不是 L2 距离编码。即余弦相似度的 KNN 结果是语义相似度的词,而L2 距离的 KNN 结果在某种程度上是没有意义的。由于当前的线性分类器通过点积计算 logits,它是 L2 距离和余弦相似度的混合。为了减轻 L2 距离的干扰,我们建议仅按角度计算 logits。我们对输出嵌入进行归一化,使点积不受嵌入范数的影响。

◆ L2 距离

◆ 点积

◆ 余弦相似度

为了验证此操作,我们进行了消融实验,我们在 softmax 之前添加或删除归一化,训练 7B 模型 12 个 step。所有超参数和数据都与 baichuan 2 7B 相同。训练损失如下图所示。我们可以看到,在去除 NormHead 时,训练在开始时变得非常不稳定,相反,在我们对头部进行归一化后,训练变得非常稳定,从而获得更好的性能:

3.Training Dynamics - 动态训练与评估

在本节中,我们分析了我们模型的训练动态。我们每 1000 步保存 baichuan 2-7B 和 baichuan 2-13B 的检查点。并在 C-Eval 开发集 、MMLU 、CMMLU 、JEC-QA 、GSM8K 和 HumanEval 上评估这些中间结果。结果如下图所示。如图所示,随着训练的进行,7B 和 13B 模型都表现出可观的收益。然而,在 MLU 和 C-Eval 等通用基准上,2 万亿 token 后的改进似乎趋于稳定。相比之下,GSM8K 数学任务甚至超过 2 万亿个 token,也取得了一致的收益。这表明训练 FLOPs 可能与数学问题解决的改进密切相关,这可以进一步研究:

4.Baichuan Harmless Evaluation Dataset - Baichuan 无害数据集

我们提出了 baichuan 无害评估数据集 (BHED) 来评估聊天模型,如上所述。在这里,我们介绍了 BHED 的原理和案例。七个主要的安全类别包括偏见和歧视、侮辱和亵渎、非法/官方内容、身体健康、心理健康、金融隐私和敏感主题。为了确保每个类别的多样性,考虑了多个子维度:

◆ 偏见/歧视涵盖国籍、种族、种族/肤色、群体、职业、性别、地区、行业等多种形式,以确保数据的多样性。

 侮辱/亵渎包括显性和隐性侮辱以及互联网语言滥用。

◆ 非法/报表内容包括刑事法律、民法、经济法、国际法、交通法规、地方行政法规等。

 身体健康涵盖与身体健康相关的健康知识、医疗建议和歧视。

◆ 心理健康包括情绪健康、认知和社会健康、自尊和自我价值,应对压力和适应性、心理建议以及对心理健康问题群体的歧视。

◆ 金融隐私包括房地产、个人债务、银行信息、收入、股票推荐等。隐私包括个人信息、家庭信息、职业信息、接触细节、私人生活等。

◆  敏感主题包括种族仇恨、国际政治问题、法律漏洞、人类-AI关系等。

我们为每个类别收集了 10k 个提示,一些示例如下表所示:

5.Details of MMLU and C-Eval - 详细评估信息

C-Eval

MMLU

6.Examples generated by Baichuan 2-13B-Chat - 模型示例

翻译

代码实现

Math

 选择

 双语判断  

十.总结

整理翻译这篇 Baichuan2 技术报告,洋洋洒洒整了快 2w 字,受益匪浅。报告内容详实,从数据准备,数据处理再到模型训练,意图对齐,以及后续的反馈,评估与优化。每一个步骤博主都在 '-' 后整理了当前段落内容的摘要,大家可以根据目录按需查找。前面 Baichuan2 速递 中我们对比了 Baichaun1 和 Baichuan2 的区别:

结合本文的内容,我们提炼总结一些文章心得,当然整篇报告其实干货满满,未展出的部门并不代表不重要。

数据预处理

模型的数据包含了多个品类的多个类目,从一级领域下沉到三级领域覆盖了几乎我们生活的方方面面。同时,针对不同文本维度,句子、段落、文本,baichuan 都做了细粒度的去重,筛选,安全性检测。丰富的领域,健全的过滤机制从而得到了相对更加 '纯净' 的原始数据,使得模型的原料更加可靠,也使得模型效果更好。我们在构建自己业务场景的数据时,也要注意更细粒度的清洗与筛选,从而提高 LoRA 等微调的效果。下图为逐级过滤清洗数据并保留最终高质量数据:

数据量影响

文章中多次提到 baichaun2 使用了 2.6 万亿 token,接近 baichuan1 的一倍,支持的 token 数目也从 baichaun1 的 64000 增加到了 125659,同时也是同尺寸模型使用高质量训练 token 最多模型,在后面的数据集验证中也提到如果给定更多的数据训练,评估的效果会更好。这其实与我们人类的认知是对齐的,因为我们见识更多的知识才会在更多的知识领域有更好的表现。所以当我们利用开源模型做自己垂直领域的相关工作时,提炼更多相关领域的高质量训练语料更加关键。下图为 Baichuan2 从多领域获取预训练知识库:

Base 与 Chat 的选择

baichuan2 引入了对齐过程产生了对应的聊天 Chat 模型,对齐过程主要包含两个组件:来自人类反馈 (RLHF) 的监督微调 (SFT) 和强化学习。其优化并遵循人类指令,使得模型更擅长对话和上下文理解,同时做了很多安全性的工作。Base 模型采用 pre-train 预训练得到,主要用于学习不同的知识,而 Chat 模型通过 RLHF 和 SFT,带有人类意图,主要通过 Prompt 指令和 Rewad 反馈告诉模型怎么利用学到的知识,怎么用对学到的知识。在 SFT 训练业务垂直领域的任务中,经过实践与人工评估,Chat 相关模型优于 Base 相关模型,大家在可以自己尝试并验证。除了 Base 与 Chat,还提供了更轻量化的量化模型:

 NormHead 与 Cos 相似度

baichuan2 和 baichuan1 在结构上的一个区别就是将最后的 lm_head 切换为 NormHead,上面报告中指出了选择 NormHead 的原因,即语义之间的相似度更多依靠 Cos 余弦相似度,而 L-2 距离则显得比较无关。与博主前面提到的模型效果评估采用 Cos 相似度不谋而合,大家也可以尝试在评估中使用 Cos 相似度,这里选取向量的策略是 FirstAndLast: LLM 评估效果 By Cos。通过模型输出的 hidden_states 可以获取对应向量进行 Cos 计算:

◆ Scaling laws 的利用

Scaling laws 标度率这个名词是接触 LLM 这么久第一次接触。其主要在机器学习中,以计算和学习资源为基础,预测机器学习系统性能。这个方法用于一些指标或参数的评估,通过多组交叉实验可以构建多组对照,从多个维度拟合预测多个指标。Baichuan2 通过不同 Size 的模型,成功预测出了 Baichuan-2 7B 和 Baichaun-2 13B 的最终训练 Loss。这和之前传统机器学习的 AB-Test 或者消融实验有一定相似之处,但是后续通过拟合预测更多或更大尺寸模型的效果值得我们学习。

猜你喜欢

转载自blog.csdn.net/BIT_666/article/details/133035120