深入了解 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 在 Yi-6B 使用的 3.1 万亿令牌的基础上,进一步训练了 0.8 万亿令牌,数据截止日期为 2023 年 6 月。

📌 为什么选择 9B?

Yi-6B 和 Yi-34B 使用 3.1T 的中英文语料库进行预训练。与同等规模的模型相比,Yi-6B 和 Yi-34B 在评估中表现出更好的性能,但在编码和数学能力方面仍有改进空间。

为了增强这些能力,我们团队受模型性能与数据量和模型大小之间联系的扩展定律的启发,探索了以下两种方法。

⭐️ 方法一:增加数据量

我们的团队首先对 Yi-6B 进行了增量训练。然而,在编码和数学技能方面的改进未能达到我们的预期,因此我们采用了第二种方法。

⭐️ 方法二:增加模型大小,然后增加数据量

🔹 增加模型大小

在进一步训练 Yi-6B 之前,我们将模型扩展到 9B 参数,然后使用额外数据进行多阶段增量训练。

🔹 增加数据量(多阶段)

  • 第一阶段使用了 0.4 万亿个令牌(包括通用语料库和代码),数据比例与 Yi-6B 相同。

  • 第二阶段又使用了 0.4 万亿个令牌(包括通用语料库、代码和数学),其中代码和数学数据的比例有所增加。

🔹 优化和调整方法

  • 我们没有采用常用的学习率衰减,而是根据《大规模批处理训练的经验模型》[2]和《不要衰减学习率,增加批处理大小》[3]设定了一个固定值。我们将学习率设置为 3e-5,并从 4M 令牌开始逐步增加批处理大小。每当模型损失停止下降时,就增加批处理大小,从而使模型学习更彻底,收敛更好。

✅ 扩展方法

⭐️ 为什么要扩展模型?

在进行模型扩展之前,我们的团队分析了模型结构和训练过程中的趋势。

🔹 模型结构

在测试和分析 Yi-6B/34B 和 Llama2-70B 时,我们计算了不同层中令牌嵌入的余弦相似度,以观察模型提取令牌上下文特征的能力。

下图显示了文本“编写一个关于位的测验”中每个令牌在每个层输入/输出的余弦值。我们观察到

  • Yi-34B 和 Llama2-70B 有更多的层余弦值接近 1,这意味着有些层对令牌上下文特征的特征提取帮助不大,并且没有完全训练。

  • 然而,Yi-6B 在所有层的输入和输出余弦值上都显示出更大的差异,这表明每个层都已充分训练。

图 1:Yi-34B 层余弦值接近 1。

图 2:Llama2-70B 层余弦值接近 1。

图 3:Yi-6B 层的余弦相似度值不接近 1。

🔹 训练过程趋势

我们引入了一个指标来量化累计的整体模型输入/输出余弦距离,观察 Yi-6B/34B 在训练过程中性能的变化。

cos=1L2l=2L1cosl=1L2l=2L1(1N1i=2Ncosl,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 表示层的数量。
  • 层(输入/输出)余弦 = 除了第一个令牌之外所有令牌余弦值的平均值。
  • 模型(输入/输出)余弦 = 排除第一层和最后两层之后,其余层余弦值的平均值。

从下图中可以看出,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:性能比较——详细数据

  • 请注意,我们内部采用了贪婪解码生成方法进行评估。一些结果可能与原始作品中报告的略有不同。

  • 参数计数:模型名称由总参数计数(嵌入参数 * 2 + 非嵌入参数)决定,其中非嵌入参数是决定模型性能的有效参数。我们在命名模型时采用整体方法,同时考虑嵌入参数和非嵌入参数。Yi-9B 使用完整的参数量并向上取整(0.26 * 2 + 8.31 = 8.83 B)。

图 17:参数比较


我们热烈邀请开源社区就 Yi 模型系列提供反馈、分享见解或参与讨论。您的贡献对我们的持续改进和创新至关重要。


加入我们的 Discord,并查看我们的 技术报告


祝好,

来自 01.AI 的 DevRel


📌 相关资源

[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

社区

注册登录 发表评论