百川2技术报告详细介绍了模型的研发细节,包括7B和13B两个版本,以及在2.6T数据上进行了训练。报告还提及模型在数学、代码能力以及医疗和法律任务上的显著改善,并对模型安全性能力的提升方法进行了公布。此外,还展示了Baichuan 2在公共基准测试如MMLU、CMMLU、GSM8K和人为评估中的表现,与其他开源模型相匹配或超越它们。技术报告还详细解释了Baichuan 2的训练过程,包括数据处理、模型结构优化等方面。
- 预训练 Pre-training
1.1 预训练数据 1.1.1 数据源 从各种来源收集数据,包括普通互联网网页、书籍、研究论文、代码库等。
1.1.2 数据处理 数据处理的重点,包括数据频率和质量。通过构建了一个大规模的去重和聚类系统,利用LSH-like特征和密集嵌入特征,实现了对万亿级数据的快速聚类和去重。基于聚类,文档、段落和句子被去重和评分,这些评分用于预训练的数据抽样。
1.2 模型架构 百川-2的模型架构基于主流的Transformer 1.3 分词器 Tokenizer 分词器的设计,强调了高压缩率和适当的词汇量大小对于有效推理和充分训练词嵌入的重要性。通过从Baichuan-1的64,000扩展到125,696的词汇量,旨在在计算效率和模型性能之间找到平衡。采用了来自SentencePiece的字节对编码(BPE)技术进行数据分词,特别是没有对输入文本应用任何规范化,并改善了数字和代码数据的编码方式。为了处理包含额外空白的代码数据,在分词器中添加了仅空白的tokens。并设置了字符覆盖率为0.9999和最大token长度为32,以适应长的中文短语。
1.3.1 位置向量 Positional Embeddings Baichuan-2-7B采用了Rotary Positional Embedding (RoPE)技术,而Baichuan-2-13B则采用了新的ALiBi技术,后者在外推性能上展现了改善。初步实验表明,位置嵌入的选择对模型性能的影响不大。为了推动基于偏差和乘法的注意力研究,Baichuan-2-7B上应用RoPE,而Baichuan-2-13B上应用ALiBi,与Baichuan-1保持一致。 1.4 激活函数和归一化 Activations and Normalizations
① 激活函数: SwiGLU激活函数,它是GLU的一种变体。SwiGLU包含三个参数矩阵,与传统Transformer的前馈层的两个矩阵不同,所以将隐藏层大小从原来的4倍减小到8/3 倍,并将其四舍五入到 128 的倍数。
② 注意力层: 采用了由xFormers实现的内存高效注意力机制,借助xFormers的优化注意力和偏置能力,有效地结合了ALiBi的基于偏置的位置编码,同时减少了内存开销,为Baichuan-2的大规模训练提供了性能和效率的优势。
③ 归一化: 应用层归一化(Layer Normalization)到Transformer块的输入,以增强对warm-up schedule的稳定性,同时采用RMSNorm,它仅计算输入特征的方差以提高效率。 1.5 优化器 Optimizations
① 优化器: 使用AdamW优化器进行训练,其中β1和β2分别设置为0.9和0.95。权重衰减设置为0.1,梯度规范(grad norm)剪裁到0.5。模型以2,000个线性缩放步骤进行预热,达到最大学习率,然后应用余弦衰减到最小学习率。
② 精度: 整个模型使用BFloat16混合精度进行训练,与Float16相比,BFloat16具有更好的动态范围,使其对于训练大型语言模型中的大值更为稳健。BFloat16的低精度在某些设置中会导致问题。例如,在某些公开RoPE和ALiBi实现中,当整数超过256时,torch.arange操作由于冲突而失败,阻止了附近位置的区分。因此,对于一些值敏感的操作,例如位置嵌入,使用全精度。
③ NormHead: 为了稳定训练并提高模型性能,文中介绍了NormHead技术,它对输出嵌入(也称为‘head’)进行了标准化。NormHead在实验中有两大优势。首先,初步实验发现头的范数容易不稳定,而且稀有token的嵌入范数在训练过程中会减小,干扰训练动态。NormHead能显著稳定这些动态。其次,发现语义信息主要由嵌入的余弦相似度而非L2距离编码。由于当前的线性分类器通过点积计算logits,它是L2距离和余弦相似度的混合。NormHead减轻了在计算logits时L2距离的干扰。
④ Max-z loss: 在训练过程中,发现大型语言模型(LLMs)的logits可能变得非常大。虽然softmax函数对logits的绝对值不敏感,但大的logits在推断过程中会导致问题,因为常见的重复惩罚(repetion penalty)实现(例如Hugging Face的model.generate)直接将标量(如1.1或1.2)应用于logits,从而在softmax后显著改变概率,使模型对重复惩罚超参数的选择敏感。受NormSoftmax和PaLM中的辅助z-loss的启示,文中添加了max-z loss来标准化logits,其中z是最大的logit值。这有助于稳定训练,并使推理对超参数更为稳健。
1.6 Scaling Laws 缩放定律
在训练数十亿参数的大型语言模型之前,先训练一些小型模型,并为训练更大模型拟合一个缩放律。模型大小范围从10M到3B不等,每个模型最多针对1万亿tokens进行训练,使用相同的超参数和数据集。通过不同模型的最终损失,可以从训练的浮点运算数(flops)映射到目标损失。
采用了Henighan等人(2020)提供的公式,并使用SciPy库的curve_fit函数来拟合参数。
1.7 基础设施 Infrastructure
为了高效利用现有的GPU资源,文中开发了一个弹性训练框架和智能集群调度策略。由于GPU资源在多个用户和任务间共享,每个任务的具体行为不可预测,导致集群中的GPU节点闲置。设计目标是机器级弹性,可根据集群状态动态修改任务资源。为实现这一目标,训练框架整合了张量并行和ZeRO支持的数据并行,并在每台机器内设置张量并行,在机器间采用ZeRO共享数据并行实现弹性缩放。同时,采用了张量拆分技术降低峰值内存消耗,并实施了混合精度训练以加速训练过程。为有效扩展至数千GPU,文中提出了拓扑感知分布式训练和混合、分层ZeRO参数划分方案以避免通信效率降低。通过这些策略,系统能在1,024个NVIDIA A800 GPUs上高效训练Baichuan 2-7B和Baichuan 2-13B模型,实现超过180 TFLOPS的计算效率。
2. 对齐 Alignment
2.1 有监督微调 Supervised Fine-Tuning (SFT)
2.2 奖励模型 Reward Model
在奖励模型的设计中,采用了包括6个主要类别、30个次级类别和200多个三级类别的三层分类系统,以全面覆盖所有类型的用户需求。为确保奖励模型的泛化能力,确保每个类别内的提示具有足够的多样性。
在生成响应时,通过不同大小和阶段的Baichuan 2模型来增强响应多样性,仅使用Baichuan-2模型家族生成的响应进行RM训练。来自其他开源数据集和专有模型的响应并未提高奖励模型的准确性。
损失函数的选择与InstructGPT一致。训练得到的奖励模型表现与LLaMA-2一致,表明响应之间的分数差异越大,奖励模型的区分准确性越高。
2.3 PPO
在获得奖励模型后,使用PPO (Proximal Policy Optimization) 算法来训练语言模型。采用了四个模型:actor模型(负责生成响应),reference模型(用于计算具有固定参数的KL惩罚),奖励模型(为整个响应提供总体奖励,具有固定参数),以及critic模型(旨在学习每个token的值)。
2.4 训练细节 Training Details 【注意:这里直接摘录的原文内容,更加直观】 During the RLHF training process, the critic model is warmed up with an initial 20 training steps ahead. Subsequently, both the critic and actor models are updated via the standard PPO algorithm. For all models, we use gradient clipping of 0.5, a constant learning rate of 5e-6, and a PPO clip threshold ϵ = 0.1. We set the KL penalty coefficient β = 0.2, decaying to 0.005 over steps. We train for 350 iterations for all our chat models, resulting in Baichuan 2-7B-Chat and Baichuan 2-13B-Chat.
3. 安全 Safety
3.1 预训练阶段 Pre-training Stage
在预训练阶段,文中强调了对数据安全的重视,并通过严格的数据过滤过程来提高安全性,通过制定规则和模型以消除暴力、色情、种族歧视、仇恨言论等有害内容。同时,还策划了一个包括数百万网页的中英双语数据集,来自数百个声誉良好的网站,代表了不同的积极价值领域,包括政策、法律、弱势群体、通用价值、传统美德等,并提高了该数据集的抽样概率。
3.2 对齐阶段 Alignment Stage
在对齐阶段,构建了一个包含6种攻击类型和100 细粒度安全价值类别的红队程序,通过专家标注团队初始化安全对齐提示,生成约1K的注释数据。专家标注团队指导了一个50人的外包标注团队通过红蓝对抗生成200K攻击提示。
在RL优化阶段,重视安全,采用DPO方法有效利用有限的注释数据以改善特定漏洞问题的性能。通过采用集成有助和无害目标的奖励模型,进行了PPO安全强化训练。
4 评估 Evaluations
(1)任务类型
① Free-form generation: 模型接收一些样本输入,然后生成延续以获得结果,如问答、翻译等任务。
② Multiple-choice: 在多项选择中,模型接收一个问题和多个选项,任务是选择最合适的候选项。
(2)评估框架
① lm-evaluation-harness: A framework for few-shot language model evaluation
② OpenCompass: A universal evaluation platform for foundation models
4.1 总体表现 Overall Performance
4.2 垂直领域评估 Vertical Domain Evaluations
4.3 数学与编码 Math and Code
4.4 多语言 Multilingual
4.5 安全评估 Safety Evaluations
4.6 中间保存文件 Intermediate Checkpoints