零一万物最近发的技术报告,随便记录一些我关注的信息。
技术报告地址:https://arxiv.org/pdf/2403.04652.pdf
Pretraining
- 模型:6B 和 34B
- 数据量:3.1T,从 10T tokens 中清洗得到
- 词表长度:64000,双语
- 上下文长度:200K
- 原始模型在 4K 上下文训练
- 通过在长度上采样得到的 5B 数据上 continual pretraining 拓展得到,做法类似于符尧的同期工作
- 按照 RoPE ABF 的做法调整 RoPE 的 base frequency 提升外推能力
- 观察到使用 1-2B tokens 就能让 4K 训练的模型在 200K 上下文 loss 降得足够低,因此长文本能力不是靠继续训练获得的,而是预训练阶段就已经获得了,通过很小开销的微调就能把上下文长度调整到很长
- 预训练数据的清洗 pipeline 如下:
- 预训练数据类型占比:
Finetuning
- SFT 数据量不到 10K
- 全人工逐条样本校验、精炼
- 比起 FLAN 和 UltraChat 等两大管饱的做法,Yi 团队更倾向于 LIMA 和 DEITA 这种细致筛选小数据集的做法
- 在几个评测集上可以看到相比于 UltraChat,Yi 的 SFT 数据集有更优秀的 scaling 曲线
- 数据构造方案:
- prompt:类似于 WizardLM,按 prompt 分布进行筛选。用渐进式的进化算法来迭代 prompt 的复杂度。
- response:类似于 LIMA 格式,按照“总-分-总”形式进行组织,“分”的部分使用 bullet point 分点介绍。
- CoT 数据格式:使用 “退一步提示法”(Step-Back) 方式,核心思路是在进行推理之前,先对问题进行抽象,提一个更高一级的问题,通过回答这个更抽象的问题,获得解答原始问题所需要的知识和信息
-
贴一下 Step-Back 原论文中的图例帮助理解:
-
多样性和混合方案:
- 构建了一套自定义的标签体系(参考 InsTag),按照样本的标签分布进行采样来保证多样性和样本平衡
- 数据集混合方案通过 grid search 得到,按照 {1, 1/2, 1/4/, 1/8, 1/16, 1/32, 1/64} 进行 search
-
对话格式采用 ChatML 格式
-
长文本 QA 数据构造:
- 随机拼接多个文档成一个序列后进行段落采样
- 让 chat 模型根据采样段落来构造 QA-pairs
- 一个细节是在给出 answer 前,要求模型背诵原文。这样的数据格式有助于提升模型的 retrieval 表现,并有效抑制幻觉的发生(鼓励模型在接收到一个问题时,使用输入信息,而不是内部知识来进行回答)
Safty
安全性对齐方面涵盖了:
- 环境不和谐
- 迷信
- 宗教敏感性
- 歧视
- 药物滥用
- 非法活动
- 仇恨言论
- 违反道德
- 侵犯隐私
- 自残
- 色轻内容
- 心理健康问题
- 网络安全危险
Depth Upscaling
- 对6B 模型进行 depth up-scaling,得到 Yi-9B
- 方法来自于 SOLAR 10.7B
- 将原来的 32 层扩展到 48 层
- 通过评估每一层输入和输出之间的余弦相似度,来寻找适合用来进行复制的层,把余弦相似度接近 1 的层进行复制
- 这样扩展得到的 9B 模型只需要很轻量的二阶段训练(0.4T 文本+代码,0.4T 文本+代码+数学)就能得到很不错的性能