这是用户在 2024-3-19 20:43 为 https://huggingface.co/blog/lorinma/yi-9b-divedeep 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?


深入探索Yi-9B

 社区博客文章
 发布日期:2024年3月18日
specify theme context for images


自推出我们的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在训练过程中的性能变化。

cos=1L2l=2L1cosl=1L2l=2L1(1N1i=2Nl,i) \overline{\cos }=\frac{1}{L-2} \sum_{l=2}^{L-1} \overline{\cos }_l=\frac{1}{L-2} \sum_{l=2}^{L-1}\left(\frac{1}{N-1} \sum_{i=2}^N \cos _{l, i}\right)


方程:量化累积总体模型输入/输出的余弦值

 在这个方程中,


  • 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