模型细节

词表从140~2000左右,留了超过2000个保留token,其中195、196分别被用来当做user token id 和 assistant token id。

base模型的拼接方式为:

chat模型的拼接方式为: system prompt + user token id + user prompt + assistant token id + model response + eos token id

数据筛选

数据多样性

  1. 从不同的来源获取数据,建立一个类目体系,可以提升对整体数据分布的把控,方便后续增减。
  2. 进行聚类和去重,可以通过LSH局部敏感或者稠密向量作为聚类特征,LSH更快一些,但向量可以更好地编码语义。但这里有个问题是需要卡阈值,去重过猛会影响多样性降低泛化能力。因此百川选择的做法是去除一部分,并对剩余的样本打分,作为预训练时采样的权重。从美团的实验来看,低阈值去重<高阈值去重<中阈值去重,应该也是因为高阈值去重会牺牲多样性。

数据质量

1.采用分类器进行过滤,baichaun并未透露具体的分类器,但是应该是类似于Bloom的做法,训练一个gpt来做分类?

2.基于启发式的规则来进行质量过滤,比如符号比例?中英文占比?….

3.找一些高质量、正价值观数据,重采样。

数据分布

这里猜测是通过语义聚类随后人工/GPT4打标签,获取数据的分类标签。

数据过滤

tokenizer

  1. 对原始数据不做任何归一化
  2. 把数字完全拆开,可以更好理解数值数据
  3. 为了代码数据,专门增加空格token
  4. 覆盖率在0.9999,只有少量fall back(一种避免OOV的方法,在碰到unknown中文时会变成utf8的byte token)

位置编码

不管是7B的RoPE还是13B的ALiBi,没有观测到显著的因为位置编码带来的性能变化。

训练

  1. 混合精度训练
  2. 对输出logit进行标准化(类似于做一个门控机制)。由于低频token在训练时模长会变短,因此使用标准化来消除一部分低频token的影响。实验结果表明会加快loss下降。
  3. 使用max-z loss拉低模型的logit,提高模型对超参的鲁棒性。
NormHead代码(1)
NormHead代码(2)
添加后会更快下降

SFT

  1. 数据质量:采用抽检的方式进行质量把控,抽一批数据检查,不合格全部退回。
  2. 数据数量:100k

scaling law

验证了多个模型的loss下降趋势,准确的预测了7B和13B最终的收敛位置。

大力出奇迹

可以看出baichuan2在baichaun1的位置时,和1的性能基本一致,大力出奇迹。

同时也可以看出模型的性能在200~500Btoken时,有过一个很强的能力涌现。

引用

  1. Baichuan2 tech report: https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注