最近我的办公桌上出现了一篇论文: s1:简单的测试时间缩放。这篇论文是关于一种改进推理模型输出的技术,它非常简单,当我读到它时,我不得不笑,尝试一下,然后把它写在这里。为了理解发生了什么,我们来谈谈论文试图解决的问题。
问题
有两种人工智能模型,一种是当你问它为什么天空是蓝色时立即开始回复,另一种是在开始“大声”回复之前花点时间考虑你发送的内容。后一种模型更准确,更容易处理复杂的问题或数学问题。问题是它们速度较慢,有时会过早停止推理。
在人工智能术语中,“测试时间”是指模型运行并且您向其提问的时间。可以说,该模型正在接受“测试”。
因此,您可以更好地了解正在发生的情况,推理模型的输出如下所示:
raspberry 这个词有多少个 r?
好吧,让我们看看。问题是询问字母“r”在“raspberry”一词中出现了多少次。嗯,我需要先确保这个词拼写正确。覆盆子。覆盆子。等等,让我一个字母一个字母地分解一下。
从第一个字母开始:R。那就是“r”。接下来是 A。 S紧随其后。然后是P。P之后是B,然后是E,然后是R,另一个R,最后是Y。所以让我数一下“r”。第一个字母是R,就是这样。然后到最后,在 B 和 E 之后,连续出现两个 R。所以开头是 R,最后是两个 R。等等,但让我确保我没有遗漏任何中间内容。这些字母是R、A、S、P、B、E、R、R、Y。所以是的,第一个字母是R,然后在B和E之后,有两个R。那么总共三个R?等等,不。等一下,我再检查一下。我们把字母一一写出来:
- 右
- 一个
- S
- 磷
- 乙
- 乙
- 右
- 右
- 是
所以位置 1、7 和 8 是 R。总共有 3 个 R。但是等等,当我说“覆盆子”这个词时,有时人们可能会拼错或发音错误。就像,也许有一个常见的错误,人们认为中间只有一个 R。但根据正确的拼写,它是RASPBERRY。所以是的,E 之后有两个 R。这样总共就形成了三个 R。让我写下这个词来确认:覆盆子。 R (1)、A、S、P、B、E、R (2)、R (3)、Y。是的,三个 R。所以答案应该是3。
单词“raspberry”包含3 个字母“r”。分解一下:
- R (第一个字母)
- R (第7个字母)
- R (第 8 个字母)
因此,“r”的总数为3 。
是的,这类问题确实是人们用来作为最先进人工智能系统基准的问题。我们的行业非常愚蠢。
代币级别的输出
在引擎盖下,模型的输出看起来有点像这样:
<|Assistant|> <think> Okay, let's see. The question is asking how many times the letter "r" appears in the word "raspberry." Hmm, I need to make sure I spell the word correctly first. Raspberry. RASPBERRY. Wait, let me break it down letter by letter. [...] </think> The word "raspberry" contains **3** instances of the letter "r". Breaking it down: 1. **R** (first letter) 2. **R** (7th letter) 3. **R** (8th letter) Thus, the total number of "r"s is **3**. <|end▁of▁sentence|>
这些<think>
和</think>
标签内的所有内容都是关于该问题的“自我思考”模型。我和我的朋友认为这有助于模型获得更好的答案,因为它将问题从模型可能无法训练的复杂句子分解为它所训练的公理。除了共鸣之外,我没有任何证据证明这一点,但我认为这至少与事实无关。
无论哪种方式,这里的关键见解是,在许多情况下,模型将“太快”停止思考,并且只要多一点努力,它就可以得到正确的答案。研究人员建议采用这样的流程:
- 配置运行时以将
</think>
标记视为“停止标记”。停止标记是告诉运行时停止执行并返回到该点的输出的标记。 - 如果存在
</think>
标签,请将其从输出中删除。 - 将换行符和单词“Wait”附加到输出的末尾。
- 根据步骤 3 的输出再次运行模型。
- 重复步骤 2-4 进行几次迭代。这就是所谓的“推理努力”。
这个过程允许模型仔细检查其答案,这通常可以使其意识到推理中的错误并纠正它们。研究人员发现,这导致 MATH500 和 AIME24 基准测试的分数显着提高,其中包含竞赛级别的数学问题。
我的想法
在我看来,这确实很巧妙,因为它允许您拥有一个“推理努力”参数,您可以更改该参数来影响结果。这允许您在延迟和准确性之间进行权衡。我怀疑推理工作存在“鲍尔默峰”,更多的推理工作实际上并没有改善结果,但我还没有任何数据支持这一点。
另一个很酷的部分是,当您使用没有自定义语法支持的运行时时,您可以使用它来使推理模型支持结构化输出。让模型 yap 满足您所需的推理工作得分,然后在最终输出中,您可以手动将</think>
标记添加到推理输出的末尾,并让模型从那里继续以 JSON 格式。
我使用 Ollama 结构化输出 API 进行了一些测试,并设法让模型输出有关加拿大的更多详细信息。我的代码位于 GitHub 上的Xe/structed-reasoning中。
这是我的幼稚实现得到的输出:
{ "countryName" : "Canada" , "isoCode" : "CAN" , "capital" : "Ottawa" , "languages" : [ "English" , "French" , "Inuktitut" , "Cree" , "Ojibwe" ] , "historicalEvents" : [ { "name" : "Confederation of Canada" , "date" : "1867-07-01" , "description" : "The British North America Act establishes the Dominion of Canada, uniting three colonies into a single country." } , { "name" : "World War II Mobilization" , "date" : "1939-09-10" , "description" : "Canada declares war on Nazi Germany, contributing significantly to Allied efforts in Europe and elsewhere." } , { "name" : "Statute of Westminster" , "date" : "1931-12-11" , "description" : "This act grants Canada and other Dominions full autonomy within the British Commonwealth, solidifying its independent status." } , { "name" : "Battle of Vimy Ridge" , "date" : "1917-04-09" , "description" : "A pivotal World War I battle where Canadian forces captured a heavily fortified German position, marking a defining moment in Canadian military history." } , { "name" : "Discovery of Insulin" , "date" : "1921-05-01" , "description" : "Frederick Banting and Charles Best at the University of Toronto discover insulin, revolutionizing diabetes treatment worldwide." } ] }
这真的很酷,我将在我即将进行的研究项目中使用它。我有点希望能够在本地访问更多的 GPU,这样我就可以更快地迭代,但我无法获得 5090 ,而且它们的故障率很高,所以也许这是最好的。
原文: https://xeiaso.net/notes/2025/s1-simple-test-time-scaling/