专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
GiantPandaLLM  ·  【博客转载】Row-Major VS ... ·  昨天  
51好读  ›  专栏  ›  GiantPandaLLM

OpenAI o1 技术初探1:整体框架,利用Test-Time Scaling Law提升逻辑推理...

GiantPandaLLM  · 公众号  · 3D  · 2024-10-21 14:26

正文

请到「今天看啥」查看全文


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

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

这两种解法, 仅从训练方法上来说,都可以算成是post-training ,也就是我们通过把算力花在post-training上来提升模型的逻辑推理能力。

可是,本文的标题不是【把算力花在inference上】吗?inference在哪里呢?我们再重新端详这2种解法

  • 假设我们使用解法1或者解法2 post training好了模型,现在我们拿它做推理。模型吃一个问题,产出一系列中间结果和答案, 但是你能保证,这些中间结果和答案一定是最好的吗?

  • 而此时,如果我们能有一个可以用来评估中间步骤好坏的verifier(比如解法2中的奖励模型),那么我们是不是就能在在使用这些post-training过的模型做推理时,更好指引模型步步产出更好的结果 ?例如,我们对一个问题采样多个attempts链,从中找最好的。或者在单个attempts中找到最好的attempt,诸如此类。

  • 或者说,假设我们在post-training阶段,使用这个verifier来指导模型 自动化 产生高质量的训练数据(这是个inference步骤),基于这些数据我们再做对齐。那么或许我们就能直接信任post-training的结果了。

所以,【优化推理输出】这一部分,你可以把算力全部花在post-training上,也可以花在post-training+inference上,从o1的技术报告上看,它应该选择了后者,同时post-training选择了某种基于强化学习的方法( 其实o1在pretrain阶段应该也有变动,具体的分析我们在后文中会通过实验数据给出猜想 )。至此,我们就把问题1和问题2都回答清楚了。

在理解了这些的基础上,我们就大概知道 【框架】 长什么样,具体而言:

  1. 首先,我们需要引导模型从“只产生结果”变成“同时产生中间步骤和结果”,这个过程称为post-training,这个过程里,你既可以使用基于强化学习的技术,也可以只做sft微调。你既可以只关注模型是否遵循了格式(即只关注是否产出了中间结果,而不关注中间结果的质量),也可以同时关注格式+中间结果质量
  1. 其次,我们需要训练一个能够评估中间结果的verifier,这其实也算post-training的一部分。这个verifier既可以被用在基于强化学习的post-training中(但它不一定是唯一的价值评估模型),也可以被用在第3步的inference阶段中引导搜索。
  1. 接着,我们需要设计一种搜索方法。它能够根据verifier返回的中间结果评估分数,在推理阶段更好指引模型做步步搜索,以达到思考的每一步都能最优化。(如果在post-training阶段,你只关注格式,那么inference阶段应用这种搜索方法就能更好指引搜索结果;如果你已经关注了格式+质量,这种方法也依然能达到更上一层楼的效果)。同时注意,如果在post-training阶段我们已经使用了基于强化学习的方案,那么这种搜索方法同样也能用在模型生产“经验数据”的阶段,这样可以 在自产自消的基础上,动化筛选高质量的数据集再做对齐 (避开人类标注,不是必须,但如果做得好的话,inference可能只需要在post-training阶段使用,目的是筛选高质量数据,而不需要在post-training后再做使用了)。

有了对框架的理解,接下来我们就来看deepmind基于这个框架做的两种方案:

  • 方法一:利用PRM(Process-supervised Reward Model)指引搜索

    • post-training:只引导模型对齐格式 + 训练基于过程的verifier(PRM)
    • inference:使用PRM指引搜索
  • 方法二:通过sft直接改变模型的输出分布(Revise proposal distribution)

    • post-training:通过sft方式引导对齐格式 + 保障中间结果基本质量 + 训练基于过程的verifier(PRM),这里直接用了的方案一中的PRM。
    • inferece:使用PRM指引搜索

其中,方案一着重探讨训练PRM的一般方法和搜索过程的设计。方案二则给出sft型post training的一个例子。如果只看原始论文,我们很容易把这两种方案理解成Test/Inference scaling law的两方面。但是在我们总结出【框架】的基础上,就可以发现其实它们讲的是同一件事情,只是描述的侧重点不一样。

【注⚠️⚠️:本节内容打破了原始论文的逻辑结构,含有大量笔者的主观理解,大家选择性阅读】

二、方法一:利用PRM指引搜索

这种方法的主要目的,是通过训练一个 能够评估过程数据的奖励模型(Process-supervised Reward Model,PRM。与之相对应的是基于结果做评估的ORM,outcome-supervised Reward Model) ,来引导模型在推理阶段更好搜索出最佳答案。具体步骤如下:

  • 格式训练 :先对模型做sft,使其能够产出带有过程数据的结果

  • 训练PRM :训练一个能够评估过程的verifier,我们称其为PRM

  • 使用PRM指导搜索过程 :利用训练好的PRM,引导模型搜索出最佳答案。

我们来细看这三点。

2.1 格式训练

对于一个不做任何处理的基础模型,我们喂给它一个问题时,它一般会直接把答案吐给我们。

现在,我们希望引导模型在给出答案前,花更多的时间进行“思考”,也就是说,我们希望模型按照“思考步骤 + 回答”的这种格式,返回给我们response。

所以在这里我们需要先对模型做格式finetune。具体的方法是:

  • 自生产数据 :在prompt中添加格式例子,引导模型按我们想要的格式产出结果。例如,我们可以按照一个思考步骤(step)一行的方式要求模型(正如lets verify step by step这篇论文说的一样)。我们把这些结果添加进sft数据集

  • sft :使用这批自动化构建的sft数据集,微调模型,使其在之后回答问题时,都能按照“思考步骤+回答”的方式生成数据。

注意,这个sft过程仅仅是侧重于格式微调,并不关注思考步骤的质量 。思考步骤的质量是我们在后续过程中要考虑的事情。

2.2 训练PRM

现在,我们的模型已经能在生成结果里产出“思考步骤”数据了。我们需要训练一个能够评估这些steps的奖励模型,也就是 PRM(Process-supervised Reward Model)

有“supervised”,必然需要带有label的数据,也就是对于每个step,我们需要给它一个真值评分 。那么根据你是【超级有钱人】【有钱人】【一般有钱人】(能训得起来的都不算穷),我们有不同的构造方法。

(1)【超级有钱人】

  • 直接调用格式微调后的模型,喂它吃一波问题,产出一波“steps + 回答”的数据(数据量级庞大)

  • 让人工对steps打label(例如positive/negative/neural)。

这种方法除了昂贵和耗时,似乎没有别的缺点。

(2)【有钱人】

比起粗暴地将一堆数据打包给人工做标注,我们可不可以通过某种方式做细节筛选,只送那些我们认为有价值的数据给人工做标注呢?

  • 直接调用格式微调后的模型,喂它吃一波问题,产出一波“steps + 回答”的数据(数据量级不大)







请到「今天看啥」查看全文