背景
传统的语言模型很难纠正自己的错误,尤其是 “内在自我纠正”,即模型在没有外部反馈的情况下进行自我纠正,很少成功。为了解决这个问题,SCoRe 利用自生成数据进行强化学习,训练模型连续纠正自己的答案。
传统方法需要多个模型和外部导师才能使模型纠错,而 SCoRe 则旨在通过单个模型实现自我纠错。SCoRe 解决了这一问题,它基于模型自身生成的数据提供在线强化学习,使模型学会更有效地自我纠错。SCoRe 的设计目的是让模型更有效地学习自我纠正。
建议方法
SCoRe 的创新之处在于,模型通过使用自我生成的数据进行多次试验,学会如何识别和纠正错误。
- 首先对基础模型进行初始化,第一阶段保持第一反应的准确性,并加强第二反应的修改。
- 然后,在第二阶段,模型学会有效地自我修正,并通过奖励奖金进一步促进修正。
这种两阶段方法可确保模型即使在测试过程中也能准确纠正自身的错误。
例如,对于数学或编程问题,即使初始解不正确,SCoRe 也能检测出模型本身的错误,并在下一次尝试中得出更准确的解。这一过程只需要纠正错误,同时保留正确的部分,SCoRe 通过强化学习学会了这一自我纠正过程,最终在纠正后显著提高了准确性。
这种方法大大提高了自我校正能力,尤其是在没有外部反馈的环境中,与传统方法相比,精度提高了 15.6%。
试验
本文的实验测试了与其他方法相比,通过强化学习进行自我纠正(SCoRe)的效果如何。实验主要针对两个不同的任务进行:解决数学问题和生成程序代码。
对于数学问题,首先使用 MATH 数据集评估基础模型的性能。然后,应用 SCoRe 对第一次和第二次回答进行比较,以确定模型是否能够自我修正。结果表明,SCoRe 将第一次回答的准确率从 60.0% 提高到了 64.4%,证实了自我纠正可以提高准确率。特别是,将错误的第一次回答更正为正确答案的比例增加了,错误更正的次数减少了。
在生成程序代码时,我们还使用 HumanEval 评估标准检查了 SCoRe 能否在编码任务中进行自我修正。在这项任务中,当第一个解决方案不正确时,SCoRe 成功地在第二次尝试中将准确率提高了 12.2%。这证实了程序纠错能力的显著提高,尤其是在保留部分程序的情况下纠错的能力。
此外,SCoRe 还能有效利用计算资源,以较少的试验次数获得优异的结果。这表明,与传统方法相比,该模型可以有效地学习自我修正,并以更少的计算资源获得更高的精度。
因此,事实证明 SCoRe 在学习具有自我修正能力的模型方面非常有效。
结论
本文的结论是,通过强化学习进行自我纠错(SCoRe)是大规模语言模型(LLM)具备自我纠错能力的有效方法。
此外,SCoRe 不仅能纠正错误,还能避免不必要的修改,同时保持正确的解决方案。这样,模型就有能力在适当的时候进行修改,提高准确性,而不是过于保守。未来的研究有望设计出更多的方法来提高多重自我纠正和进一步强化学习的效果。
图表说明
本图显示了一项评估语言模型自我修正能力的实验结果。具体来说,它比较了模型在数学问题测试中的表现。
左图显示了基础模型、STaR、SFT 和 SCoRe 四种不同方法的正确答案百分比(准确率);基础模型是原始模型,而其他模型是尝试使用不同学习方法改进的模型。蓝色柱形图表示直接解决问题时正确答案的百分比,绿色柱形图表示自我纠正后正确答案的百分比。红色文字表示自我修正对模型的改进程度,其中 SCoRe 的改进程度最高(+4.4%),表明 SCoRe 的正确答案百分比高于其他方法。
右图比较了并行采样和带自校正功能的顺序采样随着样本数增加在一致性(自一致性)方面的表现。纵轴表示一致性百分比,横轴表示样本数。绿线表示带自校正的顺序采样,蓝线表示平行采样。从图中可以看出,随着样本数量的增加,顺序采样的一致性更高。
结果表明,语言模型的自我修正能力在数学问题求解和大规模数据处理中非常有效。
该图展示了如何训练两种不同的机器学习模型。
左侧显示的是 “标准训练程序”。在这里,基本模型接收 "提示 (x) "作为输入,并生成 “响应 (y)”。根据生成的响应计算损失,并利用损失信息改进模型。
右侧显示的是 “SCoRe 训练法”。在这种方法中,模型首先生成一个响应 (y₁),作为第一次试验,然后利用 "可选外部输入 § "进行自我修正,生成一个改进的响应 (y₂)。在此基础上,计算损失,改进模型。通过这一过程,模型可对初始响应进行自我修正,以获得更好的结果。
SCoRe 的方法旨在通过自我纠正提高回答的准确性,使培训比标准方法更有效。
本表比较了不同机型在自我校正能力方面的表现。特别值得注意的是
首先,"Accuracy@t1 "和 "Accuracy@t2 "表示模型在第一次和第二次尝试中的准确性。例如,基础模型第一次尝试的正确率为 52.6%,但第二次尝试的正确率下降到 41.4%。这表明与第一次响应相比没有任何改进。
然后,"Δ(t1, t2) "显示了从第一次尝试到第二次尝试的准确度变化,数值越大,表示改进越大。基础模型的准确率为-11.2%,第二次尝试的准确率有所下降。
此外,"Δi→c(t1, t2) "表示第一次做错而第二次做对的题目所占的百分比,该值越高,说明自我纠错越成功。例如,Pair-SFT D_SFT 为 5.4%,表明自我纠错有一定的成功率。
另一方面,"Δc→i(t1, t2) "表示第一次答对而第二次答错的题目的百分比。结果越低越理想。基础模型为 15.8%,表明第二次的准确率大幅下降。
通过这个表格,我们有必要了解自我纠错的难点以及每种方法的改进和挑战。希望能从多角度比较各种方法的模型性能,从而开发出有效的自我纠错模型。
该图显示了不同方法造成的编辑距离百分比直方图。编辑距离百分比是衡量模型自我修正程度的指标;越接近零,变化越小。
左上角显示的 "基本模型 "数字表明,原始模型经过了相对较多的修改。总体而言,可以看出修改的范围很广。
右上角的 "STaR D⁺"表示很少修改和变动。模型往往很少进行自我修正。
左下角的 "SFT D "数字表明,修正是轻微的,在许多情况下是最小的。
右下角的 "SCoRe "图显示已经进行了调节。这可能表明自我纠正是有效的。
图中 "b "和 "c "显示了不同数据集上编辑距离的百分比。b "显示的是 STaR 的结果,"c "显示的是 Pair-SFT 方法的结果。
总之,通过这些图表可以直观地比较不同模型的不同自我修正能力。通过掌握每种方法的特点,可以找出模型需要改进的地方。
该图显示了对模型在不同条件下自我修正能力的评估结果。纵轴表示修正后的正确率,横轴表示历时的进展。橙色线表示在固定数据上的训练结果,蓝色线和浅蓝色 X 分别表示在固定数据和自动生成的验证数据上的结果。
最初,在训练数据中,正确率会随着时间的推移而增加。另一方面,在固定的验证数据中,可以观察到性能的提高,而在自动生成的验证数据中,正确率则不太稳定,性能提高不大。
从图中可以看出,对于固定数据,自我修正能力随着训练的进行而提高,而对于自动生成的数据,这种效果则不太明显。这表明,数据类型不同,模型的自我修正能力也不同。
图的左侧显示了准确度随训练进度的变化。第一阶段 "和 "多转弯基线 "比较了每次试验的准确性。在左侧图表中,蓝线表示在 “第一阶段”,准确率随着训练的进行而提高。绿线代表 “多转弯 RL 基线”,它也显示了准确率的提高,但不如第一阶段那么稳定。特别是在 “第 2 转”,可以看出阶段 I 的结果更好。
右图显示了不同答案被提出的频率。它比较了 “第一阶段”、"第二阶段 "和 “多轮 RL 基线”,其中蓝线和绿线所示的第一阶段和第二阶段在保持频率的同时有逐渐降低的趋势。这表明随着训练的进行,模型给出相同答案的频率比以前降低了,显示了学习带来的进步。而绿色的 "多轮 RL 基线 "则显示出类似的下降趋势,但最终趋于低于阶段 II。
这些结果表明,多阶段训练方法能有效提高自我纠正能力,特别是第一阶段和第二阶段的结合。
该图展示了一种名为 SCoRe 的自动修正学习方法,它通过两阶段强化学习(RL)过程为模型提供修正能力。
- 第一阶段(第一阶段)涉及基础模型的初始化。这一阶段的重点是保持第一次尝试(FIRST ATTEMPT)的输出接近基础模型,作为使模型能够纠正错误的第一步。这样做的目的是在保持模型原有性能的同时,最大限度地提高下一次尝试(第二次尝试)的回报。
- 第二阶段(第二阶段)使用多轮强化学习进行进一步优化。该阶段的目标是在第一次和下一次尝试中获得最大奖励,尤其是在下一次尝试中利用 “塑造”(shaping)奖励来促进自我修正的进展。这可以作为一种指导,帮助模型得出更好的答案。
这种循序渐进的方法旨在使模型能够有效地进行自我修正。
文中的图表显示了不同方法下模型自校正性能的比较。首先,本文介绍了四种不同的模型训练方法和五种显示每种方法自校正性能的指数。
准确度@t1 和准确度@t2 分别表示第一次和第二次尝试时的准确度。
2. delta(t1, t2) 是衡量第二次尝试准确性提高程度的指标。
3. Δi→c(t1,t2)表示第一次出错与第二次正确的比例。
4. Δc→i(t1,t2)表示第一次正确而第二次错误的比例。
结果表明,"SCoRe "方法的自校正性能最高。具体来说,它在准确度@t1 和准确度@t2 两方面的性能都高于其他方法,尤其是在 Delta(t1,t2)方面,提高了 4.4%。这明显高于其他方法,意味着修正能力的提高。Δi→c 的值也是最高的,为 5.8%,这也表明在这方面具有出色的自校正能力。另一方面,Δc→i 的值较低,仅为 1.4%,表明错误覆盖的比例较低。
总体而言,该图表表明,与其他方法相比,"SCoRe "是一种具有卓越自我纠错能力的模型。
该表显示了几个模型在特定任务中的表现。评估标准包括第一次和第二次尝试的准确度(精确度)以及改进率。
MBPP-R 显示了每个模型在特定代码生成任务中达到的准确率。在这里,SCoRe 的性能最高,达到 60.6%。
2. Acc.@t1 和 Acc.@t2 分别代表第一次(t1)和第二次(t2)尝试的准确率;SCoRe 第二次尝试的准确率为 64.6%,优于其他模型。
Δ(t1, t2) 是第一次试验到第二次试验的改进率。同样,SCoRe 的改进率最高,为 12.2%。
4. Δi→c(t1,t2)表示第一次回答错误的问题第二次回答正确的百分比;SCoRe 比其他方法提高了 15.2%。
Δc→i(t1, t2) 是第一次回答正确而第二次回答错误的问题的百分比。与其他模型相比,这里的 SCoRe 相对较低,仅为 3.0%,表明答案的恶化程度较低。
从表中可以看出,SCoRe 的整体表现优于其他方法。它的自我修正能力特别强,在第一次试验后就能明显改善结果。
该图说明了机器学习模型如何利用训练数据来提高其准确性。顶部的图例表明,模型是在两种不同的条件下(γ=0.8 和 γ=0.0)用不同的参数 γ 进行训练的。这个 γ 可以看作是标准强化学习设置中的折扣系数。
图中横轴显示的是 “训练分数”,表示使用的训练数据占训练数据总量的比例。换句话说,它显示了数据是如何以 0.0 到 1.0 的步长使用的。
纵轴为 “训练精度”,表示模型的训练精度。线的类型也很重要:虚线和实线分别标记为 "第 1 次试验 "和 “第 2 次试验”。这两条线分别表示每种 γ 设置下第一次和第二次试验的精度。
γ=0.8的蓝线显示第一次和第二次尝试的准确率相对较高,随着训练的进行,准确率也在提高。另一方面,γ=0.0 的黄线显示的准确率略低。
这样就可以比较折扣系数对训练精确度的影响,同时还可以考虑有效的参数设置。
该图显示了机器学习模型在 "试验 "次数上达到的准确度(准确率)。纵轴表示准确率,横轴表示试验次数。具体来说,比较了三种不同方法的性能。
首先,绿线显示的是一种名为 SCoRe 的新方法。随着试验次数的增加,这种方法仍能保持较高的准确度,与其他方法相比,其性能一致性更为突出。
接下来,蓝线代表的是 Pair-SFT。这种方法的精度不如 SCoRe 高,但相对稳定。
黄线表示基础模型。可以看出,这种方法的准确率相当低,而且试验与试验之间的差异很大。
从图中可以看出,与其他方法相比,SCoRe 的精度更高,结果更稳定。尤其值得注意的是,即使试验次数增加,这一趋势仍在继续。这表明 SCoRe 具有出色的自我修正能力,体现了其作为一种新学习方法的有效性。
本图显示了两种不同底层模型(Gemini 1.5 Flash 和 Gemini 1.0 Pro)的超参数设置。超参数是在调整模型训练时从外部设置的参数。
左边的表格提供了有关双子座 1.5 型闪光灯的信息。亚当 "被用作优化算法。学习率为 “5e-6”,训练步数为 3000 步。批量大小为 512,采样期间的温度设置为 1.0。此外,α 值为 10,β1 为 0.01,β2 为 0.1。
右表显示的是双子座 1.0 Pro 模型的设置。优化算法、采样温度、α 和 β1 与左边的模型相同,但学习率设置为 “1e-5”,学习步数减少为 1500 步。批次大小也设置为较小的 128 批次。只有 β2 不同,为 0.25。
这些设置对模型的性能有重大影响,必须适合每个模型的目的。
这幅图展示了 Python 编程中的几项任务。首先,有一个名为 `similar_elements` 的函数,它可以找到两个元组中的共同元素,并将它们作为一个元组返回。该函数使用 `set` 来查找共同元素,同时消除列表中的重复元素。
然后是函数 `is_not_prime`。该函数用于确定给定整数是否不是质数。它使用一个直到平方根的循环,检查该整数是否能被从 2 到该数平方根的整数整除。如果能被其中一个整数整除,则返回 `True`,表示该整数不是质数。否则,返回 `假`。
它们以多个测试用例为例进行说明,用于确保每个函数都能按预期运行。这为在不同的编程任务中使用 Python 的编码技能提供了一个范例。
本图显示了 Python 代码。代码将两个单词作为输入,并判断第二个单词或其任意旋转是否是第一个单词的子串。
具体来说,它使用 for 循环生成第二个单词的每个旋转版本,并检查它是否包含在第一个单词中。如果包含,则返回 True,否则返回 False。
这段代码的重点是 "旋转 "操作,它是通过剪切并连接 b[i:] + b[:i] 处的字符串来实现的。然后判断 a.find(rotated_b) 是否为-1。这个条件表达式表示旋转后的字符串是否包含在第一个字符串中。
此图显示了一段 Python 代码。它表示一个计算给定数字的偶数位和奇数位并以元组形式返回的函数。
代码结构简述如下。首先,它获取一个数字的绝对值,将其转换为字符串,并提取每个数字。然后,将数字转换成整数,并确定数字是偶数还是奇数。如果是偶数,系统会增加 `even_count` ;如果是奇数,系统会增加 `odd_count` 。
最后,它以元组形式返回偶数和奇数,以便从数字的角度理解给定数字的组成。这段代码可用于分析数字和进行统计。
本图展示了一个关于矩阵的数学问题的求解过程。在问题中,给出了矩阵 A,并显示了使用两个不同向量计算矩阵的结果。然后,用户需要找到矩阵 A对一个新向量的作用。
首先,第一个答案试图用标量 a 和 b 将向量表示为两个已知向量的线性组合。然而,第一个答案出现了计算错误,得到了不正确的结果。
在第二次求解中,同样的技术被用来将这个向量再次转化为 a 和 b 来构建方程组。在这个过程中,方程得到了正确的求解,并找到了各自的(a)和(b)值。然后利用这些结果进行矩阵计算,得出正确的最终答案。
本图直观地说明了在矩阵计算中使用线性组合法解题的流程,并清楚地描述了错误的尝试和纠正错误的过程。
本图是一个示例,用于说明一种名为 SCoRe 的自校正算法。
第一个例题是一个数学表达式的化简问题。在第一次尝试中,没有得到正确答案。特别是在计算分数时,除法和乘法步骤不正确。在随后 SCoRe 的第二次尝试中,计算错误得到了纠正,并得到了正确答案。通过这一过程,说明了模型是如何发现错误部分并得出正确结论的。
在下面的示例中,提出了一个关于多项式方程根的问题。在第一次尝试中,利用公式计算了数值,但在求最小绝对值的部分出现了错误;在 SCoRe 的第二次尝试中,修改了计算方法,通过对根进行逻辑评估,成功地求出了正确的最小值。
这些例子展示了 SCoRe 如何通过自我纠正来提高解决问题的能力。它能自己检测出公式和逻辑中的错误,以便直观地了解算法在生成更好答案方面的有效性。
此图显示了模型如何推导出一个数学问题的解。问题是找出 ǫ((x+5)(x+2)/(x+1)\) 的最小值。在第一次尝试中,模型展开了这个方程,并试图进行部分简化,但却得出了错误的结论。通过转换等式,错误的最小值是 6。这涉及推导中的错误计算,并没有得出正确的值。这显示了模型尝试自我修正并找到解决方案的过程。这个例子表明,即使最初的答案不正确,也会尝试重新思考并加以修正。
本图展示了一个使用 SCoRe 方法解决问题的示例。这里讨论的是寻找公式 (x + 5)(x + 2)/(x + 1) 的最小值的问题。
首先,将分母和分子分开考虑,然后简单地改变这个公式。公式 (x + 5)(x + 2)/(x + 1) 被展开成 (x^2 + 7x + 10)/(x + 1),然后再进一步分为 (x^2 + x) + (6x + 6) + 4 部分。在此分解的基础上,简化为 (x + 1)(x + 6) + 4/(x + 1) 的形式。最后,方程变为 x + 6 + 4/(x + 1)。
接下来,根据 x 大于 0 的条件。由此得出 x + 1 大于 1,而 4/(x + 1) 小于 4,所以得出 (x + 5)(x + 2)/(x + 1) 大于 x + 6。
因此可以看出,当 x 为正数时,该方程的最小值大于 6。因此,x + 6 + 4/(x + 1) 的最小值是 6。
注:
论文地址:https://arxiv.org/pdf/2409.12917.pdf
源码地址:https://github.com/zhaoolee/garss