3.2.3. DeepSeek-R1-推理模型

热点词

  • Test/Inference-Time scaling law,通过增加推理阶段的算力提升模型的推理能力

  • Post Training,通过后训练提升模型的推理能力

  • PRM/ORM:基于过程/结果的奖励模型

  • CoT:思维链

  • 强化学习、self-play(自我博弈)与MCTS(使用蒙特卡洛搜索树寻找最佳答案)

其他关键词

  • pretrain-time scaling law

post-training

  • “Post-training”这个术语通常出现在机器学习和人工智能领域,特别是在深度学习模型的训练过程中。它指的是在初始训练完成之后进行的一系列操作或步骤,目的是为了进一步改进模型的性能、适应新的数据或者任务,而不需要从头开始完整的训练过程。

  • 这些操作可能包括但不限于:
    • 微调(Fine-tuning):使用新的数据集对已训练模型进行额外的训练,以便让模型能够更好地适应特定的任务或数据分布。这通常涉及到较低的学习率,以避免大幅度改变已经训练好的模型权重。

    • 量化(Quantization):将模型中的参数从浮点数转换为低精度的整数表示形式,以此来减少模型的大小并加速推理过程,同时尽量保持模型的准确度。

    • 剪枝(Pruning):去除模型中不重要的权重或神经元,以减少计算复杂度和模型大小,使模型更高效。

    • 知识蒸馏(Knowledge Distillation):通过训练一个较小的“学生”网络来模仿一个较大的“教师”网络的行为,从而获得更小、更快但依然保持较高准确性的模型。

    • 域适应(Domain Adaptation):调整模型,使其能够在一个与训练时不同的但相关的领域内工作得更好。

Test/Inference-time Scaling Law

  • 有一个基础模型(我们称其为generator),但是这个模型的逻辑推理能力(比如解数学题的能力)较差时,我们该怎么改进它?再说的具体点,不考虑数据集相关的成本,假设我手头的gpu算力(FLOPs)是有限的,我该怎么利用它,能让我的模型最终能推理出更好的结果?

  • 一个比较直接的想法是:把算力花在它的pretain阶段,给模型注入更多数理逻辑的预训练知识。
    • 例如用更好、更多的代码数学等数据,或者扩展模型的参数规模。这个做法启发自大家都很熟悉的scaling law(更具体地说是pretrain-time scaling law)。

    • 曾经,为了提升模型的逻辑推理能力,我们把算力都花在pretrain阶段,由此诞生了pretrain scaling law

    • 现在,已经有现成的产品证明,算力如果花在post training和inference上,模型的推理能力将得到更大提升,也就是存在一个Test/Inferece scaling law

  • openai o1 把这个算力更多地用在了2个地方:
    • 用在了rlhf的训练上(post training)

    • 用在了模型的推理阶段上(Test/Inferece)

  • Test/Inferece scaling law
    • pretrain scaling law受到模型参数和训练数据的影响一样

    • Test/Inferece scaling law

  • 把算力用在inference阶段,也就是说,在不变动pretrain阶段的情况下,只通过推理等层面的优化,来提升模型最后的生成效果。
    • 这里又分成两种情况。
      • 优化推理输入:prompt(CoT)
        • 把算力花在推理阶段上可以提升模型效果
          • prompt给的越细节,你的多轮引导给的越多,模型或许就能产出更好的结果。

          • 而更多的token意味着推理阶段需要花费更多的算力,这就是我们所说的【把算力花在推理阶段上可以提升模型效果】的具体内容之一

      • 优化推理输出:revise output distribution
        • 让模型吃下一个问题后,自动化地去做CoT的过程
          • 如:希望模型在吃下一个问题后,能自主产生以下输出:attempt1 -> attempt2 -> attempt3 -> …-> attempti -> answer

          • 其中,每个attempt包含“多个中间步骤steps + 最终答案”,也就是它在模拟人类的思考过程:先做一次attempt,然后发现问题,在此基础上在做别的attempt,直到找到最终答案。

        • 方案
          • 一个直观的方法就是,如果我有: problem -> attempt1 -> … -> attempti -> answer 这种带标签的数据

          • 解法1:我直接做sft,把最正确的attempt放在输入序列最后,当作label进行训练即可

          • 解法2:我用类似rlhf的方法,先有一个奖励模型,它能对每一个思考步骤做评估,然后利用这个评估结果,指引模型步步搜索,每一步都找到最佳的思考步骤,最终能找到答案

          • 仅从训练方法上来说,都可以算成是post-training

  • 如何保证中间结果和答案一定是最好
    • 一方面,我们可以考虑优化推理阶段,即使用一个能够评估中间步骤的verifier,在推理时指引模型搜索出最佳答案。例如,我们对一个问题采样多个attempts链,从中找最好的。或者在单个attempts中找到最好的attempt

    • 另一方面,我们可以考虑在post-training阶段,使用这个verifier来指导模型自动化生产高质量的数据(这是个inference步骤),基于这些数据我们再做对齐。如果这个流程做得好,我们甚至可以直接信任post-training后模型的结果

    • 所以,【优化推理输出】这一部分,你可以把算力全部花在post-training上,也可以花在post-training+inference上,从o1的技术报告上看,它应该选择了后者,同时post-training选择了某种基于强化学习的方法

GRPO

  • GRPO(Generalized Reparameterization Optimization)是一种用于优化深度学习模型的技术,尤其是在训练过程中针对模型的参数进行优化。

  • 核心思想是在优化过程中引入新的参数化方式,通过降低某些潜在不稳定因素,帮助提高收敛速度或改善模型的训练效果。具体来说,GRPO是一种改进的优化策略,能够更好地处理大规模模型中的复杂性和非凸性问题。

  • 它是针对传统优化方法(如随机梯度下降、Adam等)的一种改进,旨在提高优化效率和稳定性,尤其是在面对高维参数空间和复杂非凸损失函数时。

1. 背景与挑战

  • 梯度消失或梯度爆炸:当模型变得非常复杂时,梯度可能会变得非常小(消失)或非常大(爆炸),使得训练过程不稳定。

  • 非凸优化问题:大规模神经网络的损失函数通常是非凸的,这使得优化过程变得困难,容易陷入局部最小值。

  • 资源消耗:训练这些大模型需要极其庞大的计算资源,因此如何更高效地进行训练显得尤为重要。

2. 核心思想

  • 通过对优化过程的“重新参数化”来改善传统优化方法的不足。重新参数化的目标是通过一种新的方式表示模型的参数,从而在优化过程中实现更高效的计算和更稳定的收敛。

  • 重新参数化(Reparameterization):
    • 是一种技巧,它通过将模型的参数分解成更容易优化的部分来改善训练。常见的重新参数化方法包括将高维参数空间映射到低维空间,或利用概率分布(如高斯分布)对模型进行建模。

    • 在GRPO中,这种技术被泛化(Generalized)到更复杂的情境中,特别是在处理大规模数据集和模型时,重新参数化帮助模型更好地捕捉重要特征,避免传统优化方法中容易出现的问题。

  • 具体来说,GRPO通过将参数的更新过程重新构造为更加稳定和有意义的形式,避免传统优化算法中的一些缺陷。
    • 重新参数化的关键:GRPO通过引入一个新的参数化形式,将优化目标转换为一个更容易优化的形式。这种新的参数化可以使得模型的优化过程更加稳定,减少不必要的波动。

    • 渐进优化:GRPO可以在优化的过程中动态调整学习率,保证在训练的大规模模型时可以更加高效地收敛。相比传统优化方法,GRPO在面对模型复杂性时通常具有更强的适应性。

    • 正则化与约束:GRPO还可以通过某些正则化技术(如L2正则化、dropout等)与目标函数进行结合,从而对模型的复杂度和训练过程进行有效控制,避免过拟合或训练不稳定。

参考