Advertisement

[论文笔记]Baichuan 2: Open Large-scale Language Models

阅读量:

[论文笔记]Baichuan 2: Open Large-scale Language Models

[

dikw

](https://www.zhihu.com/people/YongDeng0101)

dikw

这是对Baichuan 2技术的一篇学习笔记——发布于知乎平台

贝壳 高级工程师

目录

收起

Abstract

Introduction

Pre-training

数据

数据源

数据清洗

基础架构:

分词器(Tokenizer):

位置编码 :

激活函数和归一化

优化器

NormHead

Max-z loss

Scaling Laws

Infrastructure

Alignment对齐阶段

1 监督微调

2 奖励模型:

3 PPO:

4 训练细节:

评估与总结

Abstract

在处理复杂自然语言任务方面,大型语言模型(LLMs)表现出了显著的能力。然而,在大多数情况下,高效的LLMs往往专注于英语或仅限于开源领域。本报告详细阐述了Baichuan 2系列模型,该系列包括70亿和130亿参数版本。通过从零开始训练的方式构建了规模宏大的训练数据集——总计2.6万亿tokens。在多项公开基准测试中(如MMLU、CMMLU、GSM8K及HumanEval),该模型的表现均不低于其他开源同类模型,并且在医学与法律等垂直领域的应用中取得了卓越的效果。我们提供了完整的预训练模型版本,并旨在促进研究者深入了解该系列模型的训练机制。

Introduction

突显了大型language model的重要性和进展, 尤其是开源与multilingual processing领域的challenges and opportunities. Baichuan 2作为一个new的multilingual model, 力图克服这些问题, 并为community带来valuable resources.

  1. 大型语言模型的进展 :近年来,大型语言模型(LLMs)的领域取得了显著的进展。模型的规模从数百万参数(如ELMo和GPT-1)增长到数十亿甚至数万亿参数(如GPT-3、PaLM和Switch Transformers)。这种规模的增长显著提高了语言模型的能力,使其能够更具人性化地流利地执行各种自然语言任务。特别是OpenAI的ChatGPT展示了这些模型在各种领域生成类似人类的文本的能力。
  2. 开源与封闭的模型 :尽管LLMs取得了令人兴奋的突破和应用,但大多数领先的LLMs(如GPT-4、PaLM-2和Claude)仍然是闭源的。这限制了开发者和研究者对完整模型参数的访问,使得社区难以深入研究或微调这些系统。与此相反,完全开源的LLMs(如LLaMA、OPT、Bloom、MPT和Falcon)为研究者提供了自由访问模型的机会,从而加速了该领域的研究和进展。
  3. 中文模型的缺失 :大多数开源的大型语言模型主要集中在英语上。例如,LLaMA的主要数据来源是Common Crawl,它包含了LLaMA的预训练数据的67%,但被过滤为仅包含英文内容。其他开源LLMs(如MPT和Falcon)也主要关注英语,并且在其他语言上的能力有限。
  4. Baichuan 2的介绍 :本技术报告介绍了Baichuan 2,一系列大型多语言语言模型。Baichuan 2有两个独立的模型:Baichuan 2-7B(70亿参数)和Baichuan 2-13B(130亿参数)。这两个模型都在2.6万亿tokens上进行了训练。Baichuan 2在各种基准测试上都取得了显著的进步,并且在医学和法律领域也表现出色。
  5. 开放资源 :为了促进研究合作和持续改进,作者还发布了Baichuan 2在从2000亿tokens到完整的2.6万亿tokens的各个训练阶段的checkpoints。这些中间结果的发布旨在为社区提供更深入了解Baichuan 2的训练。

Pre-training

数据

在为Baichuan 2模型开展预训练任务的过程中,对其数据来源及处理流程的关注程度具有重要意义.保证数据全面性与高质量成为构建高效大型语言模型的基础保障.

数据源

在数据获取过程中旨在实现数据的完整性与代表性。数据主要源自多个渠道包括网络资源学术文献以及代码库等从而形成一个包容的知识网络

数据清洗

  • 数据频率 :关注数据频率与质量的平衡问题。该系统的数据处理能力受限于聚类算法与去重机制。为此,开发了一套高效的大规模去重与聚类系统。该系统能够快速处理海量数据(如数万亿条记录),完成高效的聚类任务并实现数据清洗功能。
  • 基于聚类 :根据聚类结果对单个文档进行分类标记(高、中、低频),这有助于优化数据的质量和多样性。模型结构则主要由特征提取模块、聚类分析组件以及降噪处理部分组成。

基础架构

该模型架构采用了当前主流的Transformer架构设计。然而,在实现过程中,作者对原有设计做出了相应的改进以提升性能和稳定性。

分词器(Tokenizer)

  • 分词器设计需综合考虑两项核心要素:一是通过高压缩率实现快速推理速度;二是维持适当规模的词汇库以保证每个词嵌入的有效训练。
  • 在计算效率与模型性能之间寻求最佳平衡点时发现,Baichuan 2 的词汇表规模较前一版本扩大了约93%(从64,000增至125,696)。
  • 相较于其他模型,Baichuan 2 的分词器参数配置详尽列出了各项指标,其中值得注意的是,较低的文本压缩率更能满足实际需求。
  • Baichuan 2采用SentencePiece (Kudo and Richardson, 2018)中的byte-pair encoding (BPE) (Shibata et al., 1999)作为分词基础。其特点在于无需对输入文本施加任何规范化处理,也无需像其前身Baichuan 1那样添加虚拟前缀;特别地,该系统会将单个数字拆分为独立单元以便更高效地编码数值型数据;此外为了适应包含额外空格的代码数据,Baichuan 2 在分词机制中加入了专门识别仅空格的情况;同时字符覆盖率设定为接近极限值(0.9999),超出范围则会回退至标准UTF-8编码。

Tokenzier对比

位置编码 :

基于其7B版本的架构设计,Baichuan 2整合了Rotary Positional Embedding技术(Rotary Positional Embedding, RoPE)。相比之下,在其13B版本中,则采用了ALiBi算法(此算法由Press团队于2021年提出)。这不仅标志着该模型在Positional Encoding领域的重要进展,在实验结果中发现ALiBi显著提升了模型的外推能力。

  • 开源框架的选择:大多数主流开源框架采用RoPE机制进行位置编码,并经过优化设计的注意力机制。其中一种高效的计算方法称为Flash Attention(一种基于乘法运算的设计),这种机制特别适合于采用RoPE的原因是其计算过程无需依赖attention_mask这一额外信息,在实际应用中能够显著提升计算效率。
    • 初期实验:在初始阶段的实验结果表明,在不同大小的数据集上进行比较时,在保持其他参数不变的前提下(如学习率设置、模型深度等),选择不同的位置编码方案对模型性能的影响并不明显。

为了进一步推进基于偏置和基于乘法的注意力机制的研究工作,在实验平台Baichuan 2-7B模型中采用了RoPE位置编码方案,在Baichuan 2-13B模型中则采用了自适应线性插值注意力(ALiBi)机制,并保持与Baichuan 1模型的一致性

激活函数和归一化

  • 激活函数 :Baichuan 2使用了SwiGLU(Shazeer, 2020)作为其激活函数。SwiGLU是GLU(Dauphin et al., 2017)的一个变种,它通过一个开关激活机制展现了更好的结果。不同于传统Transformer的前馈层只有两个矩阵,SwiGLU包含三个参数矩阵。因此,模型将隐藏层的大小从原来的4倍减少到8/3倍,并且进行了适当的调整。
  • 注意力层 :Baichuan 2采用了由xFormers2实现的内存高效注意力(Rabe和Staats, 2021)。通过利用xFormers的优化注意力和偏置能力,模型能够有效地整合ALiBi的基于偏置的位置编码,同时减少了内存开销。这为Baichuan 2的大规模训练带来了性能和效率上的好处。
  • 归一化
    • Baichuan 2在Transformer块的输入上应用了层归一化Layer Normalization,这种方法对于warmup更为稳健。
    • 此外,模型使用RMSNorm实现,该实现仅计算输入特征的方差以提高效率。

优化器

  • 超参数: * 超参数设置中采用了AdamW优化器。
    • 采用了一个权重衰减系数为... 的策略来防止过拟合。
    • 模型的学习率经历了2,000步的线性缩放预热阶段后逐步提升至最高学习率。
    • 模型主要采用了\text{BFloat16}混合精度进行训练。与\text{浮点型} 32\text{ Float32})相比,在动态范围方面表现更为优异;然而,在某些数值敏感的操作(如位置编码)中可能会出现精度不足的问题。因此,在这些操作区域我们采用了全精度计算以保证准确性。

训练参数

NormHead

为了稳定训练并提高模型性能,对output embeddings进行归一化。

洞察:

output embedings存在不稳定性问题。在模型训练过程中,稀有标记嵌入的模长减小导致了对模型稳定性的干扰

研究表明,在KNN检索任务中语义信息主要来源于嵌入空间中的余弦相似度编码而非L2距离这一特性具有一定的局限性为此我们需要深入分析现有方法的工作原理现有方法通常采用点积运算来生成logits值这一过程结合了L2范数与余弦相似度两种指标为了进一步验证这一假设我们在附录部分补充设计了一个消融实验该实验结果表明当去除NormHead设计时模型训练过程会出现显著稳定性问题从而为后续优化方案提供了重要参考

有无NormalHead训练对比

Max-z loss

洞察:

在使用deepspeed进行训练时会明显出现logits出现非常大的情况

Scaling Laws

探讨了缩放定律对大型模型性能预测的重要性,并详细阐述了这些定律如何指导模型训练以达到预期的目标

这些缩放定律揭示了模型误差如何受训练数据量、模型规模或两者函数关系的影响。为了推导出适应不同规模的模型设计原则,作者首先通过训练系列较小规模的模型来探索这些缩放关系。该研究团队基于Henighan等人的研究成果开发了一种数学框架,该框架量化分析了训练过程中的浮点运算量与目标损失之间的关系。通过验证实验数据的一致性,在测试集上达到了接近完美的一致性。

基于给定的数据集,在规模越大时(即参数数量越多),损失值会更低(即损失函数值减小)。令人意外的是,在处理至600B规模时,三个不同规模的模型实现了同步收敛。

Infrastructure

对deepspeed做了改造,优化训练。这里略过。

Alignment对齐阶段

Baichuan 2 的对齐机制主要包含两个关键组件:监督微调技术(SFT)以及基于人类反馈的强化学习方法(RLHF)。

1 监督微调

在监督性微调过程中, 我们采用人类标注员对来自多种不同来源的数据中提取的关键提示进行标记. 每个提示均按照与Claude (2023)相类似的指导原则, 被系统明确地标记为具有帮助性或非有害. 为了确保数据质量和可靠性, 在这一过程中我们采用了交叉验证方法——通过权威的人类标注员评估特定众包小组注释样本批次的质量, 并剔除低质量的数据. SFT阶段总共使用了10万条SFT数据.

2 奖励模型

我们构建了一个多层次分类系统来涵盖所有的提示,并将其划分为6个主要类别、30个小类以及超过200个三级细分。从用户体验的角度出发,我们的目标是确保该分类系统能够涵盖各类用户的全部需求.在奖励模型训练的过程中,则要求每个类别的提示应具备充分的多样性.

细节:

RM模型在不同差距的pair数据上面的准确率

洞察:

RM 通过采用 百川 两个不同规模及阶段( SFT 和 PPO) 的模组来生成功能多样的应答以加强其多样度 。 在 RM 训练环节中 , 只采用了 百川 系列第二代模组所产生的应答 。 其他开源模集及专用模组所产生的应答并未提升奖励模组的有效度 。 这也进一步凸显了 百川 系列在另一维度上的高度一致性与稳定性 。 这表明偏好模件必须来源于 SFT 或 PPO 自身直接生成功能模块的内容 。 这突显出一致分布的数据对 Model 准确度的关键作用

3 PPO

在获得奖励模型之后,我们利用PPO算法来训练我们的语言模型。完成该过程后,我们采用了四个关键组件:生成器(负责生成响应)、基准(用于计算具有固定参数的KL惩罚)、奖励计算器(为整个响应提供总体奖励)和评估器(用于评估每个令牌的值)。

4 训练细节

在RLHF训练过程中,在进行前20个训练步骤时,在所有模型中,则采用了梯度裁剪幅度为**$(此处应插入具体数值或符号)(此处应插入具体数值或符号)**被采用

PPO迭代流程

评估与总结

观察到在相同规模的tokens上训练完毕后,在ceval和cmmlu分数上差距并不显著。这表明百川2的主要提升归因于数据质量的提升,并非模型结构上的优化效果显著。这与'物以类聚、人以群分'的道理是一致的。

发布于 2023-09-11 16:57・IP 属地北京

全部评论 (0)

还没有任何评论哟~