引言
在传统的大语言模型推理中,模型给出一次性答案(One-Shot Answer)后就结束。然而,对于多步推理或复杂逻辑,模型常因内在的幻觉或知识缺陷而产出错误。为此,人们提出自检(Self-Check)与自反(Self-Reflect)的方法,让模型在输出初稿后再次审视自己的思维链和答案,找到可能的错误并进行修正。这一过程类似于人类在解题后的“复查”、或在写作后的“审稿”环节,可大幅提升大语言模型在复杂任务上的可靠度和可解释性。
基本概念与动机
-
自检(Self-Check)
- 当模型完成初次回答后,再次让模型检查其回答及推理过程;
- 如果发现逻辑矛盾、计算错误等,就在新一轮输出中改正;
- 目标:在保持快速生成的前提下,获得额外纠错机会。
-
自反(Self-Reflect)
- 让模型充当“批评者/审阅者”角色,深度审视自己的推理步骤与结论;
- 可能在逻辑结构上作再次组织或调整;
- 常见提示示例:“请你像一名审稿人一样,阅读并指出现有答案的错误或改进点”。
-
动机
- 减少大语言模型“一次性”回答可能带来的错误;
- 利用大语言模型在大段上下文中“阅读自身输出、并进一步推理”的能力,通过迭代来提高准确度。
自检与自反的多阶段推理框架
1. 定义与符号
为更好地刻画自检与自反的过程,引入如下符号:
- Q Q Q:问题或输入(可以是自然语言问题、指令等);
- Y ( t ) Y^{(t)} Y(t):模型在第 t t t阶段的输出,常含有思维链 C ( t ) C^{(t)} C(t) 和答案 A ( t ) A^{(t)} A(t)。
Y ( t ) = ( C ( t ) , A ( t ) ) Y^{(t)} = (C^{(t)}, A^{(t)}) Y(t)=(C(t),A(t)) - Θ \Theta Θ:大语言模型的参数(在应用时通常固定)。
在自检与自反流程中,模型不止生成一次输出,而是可以进行多轮迭代 ( t = 1 , 2 , … , T ) (t = 1, 2, \dots, T) (t=1,2,…,T)。
2. 自检(Self-Check)过程
最简单的自检通常只进行一次后验检查:
-
初次回答:
Y ( 1 ) = arg max Y P Θ ( Y ∣ Q ) . Y^{(1)} = \arg \max_{Y} P_\Theta\bigl(Y \mid Q\bigr). Y(1)=argYmaxPΘ(Y∣Q).
这一步就是模型常规地回答问题。 -
检查与修正:
将 Q Q Q 与 Y ( 1 ) Y^{(1)} Y(1) 及提示文本(例如“请检查前述回答,若有错误请修正”)一起输入模型,让其生成第二个答案:
Y ( 2 ) = arg max