深入探索Yi-9B
自推出我们的Yi-6B和Yi-34B模型以来,我们收到了开源社区的有价值的反馈。干得好!一个常见的反馈是,在Yi系列模型中,编码和数学方面有所改进。
我们很高兴推出Yi-9B及其200K变体。您可能会想,“为什么是Yi-9B?”让我们深入探讨其开发背后的原因和见解。
TL;DR: Yi-9B 模型在 Yi-6B 模型基础上进行了改进,采用了模型深度扩展和多阶段增量训练的组合。这种方法在编码和数学方面取得了显著的改进,同时保持了出色的双语能力。
📌 Yi-9B 是什么?
Yi-9B 是 Yi-6B 的扩展版本,它在编码和数学方面具有增强的性能,同时保持了强大的双语能力。Yi-9B 的特点包括:
参数大小:Yi-9B 大约有 88 亿个参数。
上下文长度:支持4096个标记的上下文长度。
训练数据:Yi-9B在0.8万亿个标记上进行了进一步训练,加上用于Yi-6B的3.1万亿个标记,数据截止日期截至2023年6月。
📌 为什么是9B?
Yi-6B和Yi-34B使用3.1T个英文和中文语料库进行了预训练。与同样大小的模型相比,Yi-6B和Yi-34B在评估中表现更好,但在编码和数学能力方面仍有改进的空间。
为了增强这些能力,我们的团队受到缩放定律的启发,该定律将模型性能与数据量和模型大小联系起来,探索了以下两种方法。
⭐️ 方法1:增加数据量
我们的团队首先尝试了增量训练 Yi-6B。然而,编码和数学技能的改进未能达到我们的预期,导致我们采用了第二种方法。
⭐️ 方法2:先增加模型大小,然后增加数据量
🔹 增加模型大小
在进一步训练 Yi-6B 之前,我们将模型扩展到 90 亿参数,并使用额外数据进行了多阶段增量训练。
🔹 增加数据量(多阶段)
第一阶段使用了0.4万亿标记(包括通用语料库和代码),数据比例与Yi-6B相同。
第二阶段使用了另外0.4万亿个标记(包括通用语料库、代码和数学数据),代码和数学数据比例增加。
🔹 优化和调优方法
我们团队没有采用常用的学习率衰减方法,而是根据《大规模批处理训练的实证模型》[2]和《不要衰减学习率,增加批量大小》[3]的论文,设置了一个固定的学习率值。我们将学习率设置为3e-5,并从4M标记开始逐渐增加批量大小。每当模型损失停止下降时,批量大小就会增加,从而使模型能够更充分地学习并更好地收敛。
✅ 扩展法
⭐️ 为什么扩展模型?
在进行模型扩展之前,我们的团队分析了模型结构和训练过程的趋势。
🔹 模型结构
在测试和分析 Yi-6B/34B 和 Llama2-70B 时,我们通过不同层计算标记嵌入的余弦相似性,以观察模型提取标记上下文特征的能力。
以下图表显示了文本“Write a quiz about bits”中每个令牌每个层的输入/输出余弦值。我们观察到:
Yi-34B和Llama2-70B有更多的层cosine值接近1,也就是说,有些层对于token上下文特征的特征提取作用不大,并且没有完全训练。
然而,Yi-6B在所有层中输入和输出余弦值的差异较大,表明每个层都已被充分训练。
图1:Yi-34B层的余弦值接近1。
图2:Llama2-70B层的余弦值接近1。
图3:Yi-6B层的余弦相似度值不接近1。
🔹 训练过程趋势
我们引入了一个指标来量化累积总体模型输入/输出的余弦距离,观察Yi-6B/34B在训练过程中的性能变化。
方程:量化累积总体模型输入/输出的余弦值
在这个方程中,
N 表示标记的数量。- L represents the number of layers.
层(输入/输出)余弦值 = 所有令牌(除了第一个令牌)余弦值的平均值。
模型(输入/输出)余弦值 = 排除第一层和最后两层之外的所有层的平均余弦值。
从下图可以看出,Yi-6B在英语、中文和编码能力的层余弦值下降趋势上呈现出逐渐趋于平缓的趋势,表明该模型已经训练得相当充分,预计如果提供更多的标记,该模型仍会产生有限的收益。(勘误:下图中的x轴标记单位是'B',而不是'TB')
图4:Yi-6B训练过程-层间余弦下降趋势逐渐趋于平缓-英语能力。
图5:Yi-6B训练过程 - 层间余弦下降趋势逐渐趋于平缓 - 中文能力。
图6:Yi-6B训练过程-层间余弦下降趋势逐渐趋于平缓-代码能力。
相比之下,Yi-34B仍然显示出下降趋势,表明在训练中使用更多的标记后,模型收敛得更好。
图7:Yi-34B的训练过程 - 层余弦的下降趋势仍然陡峭 - 英语能力。
图8:Yi-34B训练过程 - 层间余弦下降趋势仍然陡峭 - 中文能力。
图9:Yi-34B的训练过程 - 层余弦的下降趋势仍然陡峭 - 代码能力。
因此,我们预测继续训练 Yi-6B 可能无法达到预期,而是选择在继续训练之前将模型规模扩大到 9B。
⭐️ 为什么选择深度扩展?
在增加模型尺寸时,我们团队尝试了扩大深度和宽度。我们发现:
在宽度扩展后,模型的性能显著下降。
在对原始模型进行深入放大(通过选择适当的层)后,新层输入/输出余弦值越接近1.0,即放大模型的性能可以保持原始模型的性能,性能损失很小。
⭐️ 如何执行深度扩展?
与Solar的方法[4]相比,该方法复制了Mistral 7B中间的16层(8-24),我们的方法复制了Yi-6B中较晚的一组16层(12-28),创建了一个48层的Yi-9B。这些层的余弦值更接近于1.0,表明性能损失更小。
⭐️ 深度扩展效果
Yi-9B Init,包括新增的16层(28-44),展示了接近1的余弦值,表明性能损失最小。因此,Yi-9B是基于Yi-9B Init进行训练的。
图10:层余弦值比较。
我们能够得出结论,Yi-9B Init(Yi方法)在模型性能方面优于Yi-9B Init(Solar方法)。基于Yi-9B Init(Yi方法)的Yi-9B,继承并超越了Yi-6B的性能。
图11:性能比较。
📌 结果
在综合能力(Mean-All)方面,Yi-9B在类似规模的开放源代码模型中表现最佳,优于DeepSeek-Coder、DeepSeek-Math、Mistral-7B、SOLAR-10.7B和Gemma-7B。
图12:性能比较 - 总体能力。
在编码能力(Mean-Code)方面,Yi-9B 的表现仅次于 DeepSeek-Coder-7B,优于 Yi-34B、SOLAR-10.7B、Mistral-7B 和 Gemma-7B。
图13:编码性能比较
在数学能力方面(Mean-Math),Yi-9B 的表现仅次于 DeepSeek-Math-7B,优于 SOLAR-10.7B、Mistral-7B 和 Gemma-7B。
图14:数学性能比较
在常识和推理能力方面(Mean-Text),Yi-9B 的表现与 Mistral-7B、SOLAR-10.7B 和 Gemma-7B 相当。
图15:常识和推理性能比较。
同时,Yi-9B保持了出色的双语语言能力。在这里,Mean (All)得分是所有评估(除CMMLU外)的平均值。对于Mean (En-Text),我们平均了四个英语评估(ARC-c,HellaSwag,Winogrande和MMLU)。
图16:性能比较 - 详细数据
注意,我们使用了贪心解码生成方法进行内部评估。一些结果可能与原始工作中报告的结果略有不同。
参数数量:模型的名称由总参数数量(Embedding Parameters * 2 + Non-Embedding Parameters)决定,其中Non-Embedding Parameters是决定模型性能的有效参数。我们在命名模型时采用整体方法,考虑了Embedding和Non-Embedding Parameters。Yi-9B使用全部参数数量并向上取整(0.26 *2 + 8.31 = 8.83 B)。
图17:参数比较
我们诚挚邀请开源社区提供反馈、分享见解或参与关于Yi模型系列的讨论。您的贡献对我们持续改进和创新至关重要。
加入我们的Discord,并查看我们的技术报告
干杯,
来自 01.AI 的开发者关系团队
📌 相关资源
[1] Yi-9B README, https://huggingface.co/01-ai/Yi-9B
[2] 一种大批量训练的经验模型,https://arxiv.org/abs/1812.06162
[3] 不要衰减学习率,增加批量大小,https://arxiv.org/abs/1711.00489
[4] SOLAR 10.7B: 通过简单而有效的深度扩展技术,实现大规模语言模型的扩展,https://arxiv.org/abs/2312.15166