文章目录
对Baichuan2技术报告阅读后的笔记
Baichuan2 与其他大模型的对比如下表
预训练
预训练数据
- 预训练数据来源包括互联网网页、书籍、研究论文、代码库等,具体分布如下图:
- 数据处理:主要关注数据频率和质量。数据频率依赖于聚类和去重。构建了一个支持LSH类特征和稠密向量特征的大规模去重和聚类系统,系统可以在数小时内处理万亿级别的数据。基于聚类,单个文档、段落、句子被去重和评分,这些分数被用于预训练时的数据采样。数据处理不同阶段的训练数据的规模如下图。
模型架构
Baichuan2采用Transformer架构
Tokenizer
tokennizer需要平衡两个因素:
- 为更高效推理的高压缩率
- 为保证每个词向量得到充分训练的适当大小的词汇表
考虑这两个因素后,Baichuan2将词表大小从Baichuan1的64000扩展到了125696。
- 使用了SentencePiece包的BPE来tokenize数据
- 对于输入数据没有应用任何的归一化操作,也没有像Baichuan1一样添加dummy前缀。
- 为了更好的处理数值数据将整个数字变成单个数字
- 为了处理代码中的空格,添加了只有空白字符的token
- 字符覆盖率设为0.9999,罕见的字符则回退到UTF-8字符
- 为了处理中文长短语,将token的最大长度设为32
- tokenizer的训练数据来源于Baichuan2的预训练语料,包括了更多代码样例和学术论文。
下表显示对Baichuan2 tokenizer与其他tokenizer的对比
Positional Embeddings
Baichuan2-7B使用RoPE位置向量,Baichuan2-13B使用AliBi
Acitivations and Normalizations
- 使用SwiGLU激活函数,并调整隐藏层尺寸从4倍到 8 3 \frac{8}{3} 38,接着取整到128
- attention层的实现基于xFormers
- 使用RMSRorm来进行归一化
Optimizations
- 训练时使用AdamW, β 1 = 0.9 \beta_1=0.9 β1=0.9, β 2 \beta_2 β2=0.95;使用0.1的weight decay,将梯度裁剪到0.5;使用2000的线性warmup使学习率逐渐增加到最大,在应用cosine decay到最小学习率。模型具体参数如下表
-
整个模型训练使用BFloat16混合精度,但是因为BFloats对有些操作如位置向量存在问题,对它们使用全精度。
-
为了训练的稳定性和提升模型性能,将输出向量进行了归一化(即NormHead)
-
训练中发现LLM的logits非常大, 而大的logis会使Transformers推理时对repetition penalty参数敏感,所以应用了max-z损失来来归一化logits(下式中的z是最大的logit值):
L m a x − z = 2 e − 4 ∗ z 2 ( 1 ) \mathcal{L}_{max-z} = 2 e^{-4} * z^2 \ \qquad (1) Lmax−z=2e−4∗z2 (1) -
训练了一系列的模型来拟合模型的scaling law,结果如下图,拟合的scaling law以很高的准确率预测了haichuan2的最终损失
对齐
Baichuan 2 引入了对齐流程生成了两个chat模型:Baichuan2-7B-Chat和Baichuan2-13B-Chat
Supervised Fine-Tuning
prompt的标准与Claude一样被标记为helpful或harmless, 为了验证数据质量,使用交叉验证-由一名可信的标注员检验众包标注员的一批抽样样本,如果不符合质量标准则丢弃整批数据。
标注的SFT的样本超过了100k。
RLHF
RLHF的整个流程如下图
- 奖励模型:对所有的prompt划分了三层分类系统,包括6个主要类别,30个第二类别,超过200个第三层类别,保证每个类别里的prompt有足够的多样性。奖励模型的损失函数与 InstructGPT 一致, 奖励模型的性能结论与Lamma2有一致的结论:两个响应之间的得分差异越大,奖励模型的判别准确率越高。
- PPO:用PPO来训练模型,包括四个模型:actor模型负责生成相应,reference模型用来计算KL惩罚,reward模型对整个响应提供奖励,critic模型用来学习token维度的价值
- 训练详情:critic模型先进行了20个训练步的warmup,接着critic和actor模型由基本的PPO算法来更新。所有的模型都是用0.5的梯度裁剪, 5 e − 6 5e-6 5e−6的学习率, ϵ = 0.1 \epsilon=0.1 ϵ=0.1的PPO裁剪阈值。 KL惩罚的系数为 β = 0.2 \beta=0.2 β=0.2,并随着训练进行衰减到0.005。chat模型一共训练了350个迭代。
安全性
预训练阶段
设计了一个包含规则和模型的系统来去除到有害内容如暴力、色情、种族歧视、仇恨言论等。
构建了一个中英双语数据集包括了几百万声誉良好的网页内容,并提高了这个数据集的采样率
对齐阶段
构建了一个包括6个攻击类型和100+粒度安全值类别的红队流程
参考资料
- Baichuan 2: Open Large-scale Language Models
- https://github.com/baichuan-inc/Baichuan2/tree/main