Self-Consistency算法步骤
-
生成多样化的推理路径:
给定一个语言模型 M M M,输入一个提示 prompt \text{prompt} prompt 和问题 question \text{question} question。从语言模型的解码器中采样 m m m 个候选输出,生成多样化的推理路径 r i r_i ri 和对应的答案 a i a_i ai:P ( r i , a i ∣ prompt , question ) = P ( r i ∣ prompt , question ) ⋅ P ( a i ∣ r i , prompt , question ) P(r_i, a_i | \text{prompt}, \text{question}) = P(r_i | \text{prompt}, \text{question}) \cdot P(a_i | r_i, \text{prompt}, \text{question}) P(ri,ai∣prompt,question)=P(ri∣prompt,question)⋅P(ai∣ri,prompt,question)
其中, r i r_i ri 表示第 i i i 条推理路径, a i a_i ai 表示对应的答案。
-
计算最终答案的概率:
对每个生成的答案 a ∈ A a \in A a∈A (答案集合)进行边际化,将所有与答案 a a a 对应的推理路径的概率进行加总,以获得答案 a a a 的一致性得分:
P ( a ∣ prompt , question ) = ∑ i = 1 m P ( r i , a i ∣ prompt , question ) ⋅ δ ( a i = a ) P(a | \text{prompt}, \text{question}) = \sum_{i=1}^{m} P(r_i, a_i | \text{prompt}, \text{question}) \cdot \delta(a_i = a) P(a∣prompt,question)=i=1∑mP(ri,ai∣prompt,question)⋅δ(ai=a)这里, δ ( a i = a ) \delta(a_i = a) δ(ai=a) 是一个指示函数,当 a i = a a_i = a ai=a 时取值为 1,否则为 0。
-
选择最一致的答案:
根据边际化后的概率选择一致性最高的答案作为最终输出:
a ∗ = arg max a ∈ A P ( a ∣ prompt , question ) a^* = \arg\max_{a \in A} P(a | \text{prompt}, \text{question}) a∗=arga∈AmaxP(a∣prompt,question)
采样策略与计算细节
-
采样:
采样可以通过多种策略实现,例如温度采样(Temperature Sampling)、Top-K采样或Nucleus采样(Top-P采样)。采样参数(如温度 T T T、Top-K中的 k k k 或Top-P中的 p p p)可以根据任务需求进行调整。 -
概率计算:
每条推理路径 r i r_i ri 和答案 a i a_i ai 的联合概率可以表示为:P ( r i , a i ∣ prompt , question ) = ∏ k = 1 K P ( t k ∣ prompt , question , t 1 , … , t k − 1 ) P(r_i, a_i | \text{prompt}, \text{question}) = \prod_{k=1}^{K} P(t_k | \text{prompt}, \text{question}, t_1, \ldots, t_{k-1}) P(ri,ai∣prompt,question)=k=1∏KP(tk∣prompt,question,t1,…,tk−1)
其中, t k t_k tk 是 r i r_i ri 和 a i a_i ai 的第 k k k 个生成的token,总长度为 K K K。
-
答案聚合:
在实际中可以通过多数表决(Majority Voting)或加权投票的方式进行答案聚合。例如,多数表决直接选择出现频率最高的答案:
a ∗ = arg max a ∈ A ∑ i = 1 m δ ( a i = a ) a^* = \arg\max_{a \in A} \sum_{i=1}^{m} \delta(a_i = a) a∗=arga∈Amaxi=1∑mδ(ai=a)
加权投票
加权投票是一种改进的答案聚合方式,不仅仅考虑答案出现的频率,还结合生成答案时的概率分布进行权重计算。
-
加权投票公式:
每个答案 a a a 的加权得分 W ( a ) W(a) W(a) 定义为:W ( a ) = ∑ i = 1 m P ( r i , a i ∣ prompt , question ) ⋅ δ ( a i = a ) W(a) = \sum_{i=1}^m P(r_i, a_i | \text{prompt}, \text{question}) \cdot \delta(a_i = a) W(a)=i=1∑mP(ri,ai∣prompt,question)⋅δ(ai=a)
其中:
- W ( a ) W(a) W(a):答案 a a a 的加权得分;
- δ ( a i = a ) \delta(a_i = a) δ(ai=a):指示函数,当 a i = a a_i = a ai=a 时取值为 1;
- P ( r i , a i ∣ prompt , question ) P(r_i, a_i | \text{prompt}, \text{question}) P(ri,ai∣prompt,question):推理路径 r i r_i ri 和答案 a i a_i ai 的联合概率。
-
选择答案:
选择加权得分最大的答案作为最终答案:a ∗ = arg max a ∈ A W ( a ) a^* = \arg\max_{a \in A} W(a) a∗=arga∈AmaxW(a)
-
概率计算:
联合概率 P ( r i , a i ∣ prompt , question ) P(r_i, a_i | \text{prompt}, \text{question}) P(ri,ai∣prompt,question) 可以通过以下两种方式计算:-
未归一化概率:
P ( r i , a i ∣ prompt , question ) = ∏ k = 1 K P ( t k ∣ prompt , question , t 1 , … , t k − 1 ) P(r_i, a_i | \text{prompt}, \text{question}) = \prod_{k=1}^{K} P(t_k | \text{prompt}, \text{question}, t_1, \ldots, t_{k-1}) P(ri,ai∣prompt,question)=k=1∏KP(tk∣prompt,question,t1,…,tk−1)
其中, t k t_k tk 是 r i r_i ri 和 a i a_i ai 的第 k k k 个生成的token,总长度为 K K K。 -
归一化概率:
P ( r i , a i ∣ prompt , question ) = exp ( 1 K ∑ k = 1 K log P ( t k ∣ prompt , question , t 1 , … , t k − 1 ) ) P(r_i, a_i | \text{prompt}, \text{question}) = \exp\left(\frac{1}{K} \sum_{k=1}^K \log P(t_k | \text{prompt}, \text{question}, t_1, \ldots, t_{k-1})\right) P(ri,ai∣prompt,question)=exp(K1k=1∑KlogP(tk∣prompt,question,t1,…,tk−1))
-
-
实际例子:
假设有以下3条推理路径及对应答案:推理路径 r i r_i ri 答案 a i a_i ai 概率 P ( r i , a i ) P(r_i, a_i) P(ri,ai) r 1 r_1 r1 a = 18 a = 18 a=18 0.4 r 2 r_2 r2 a = 18 a = 18 a=18 0.35 r 3 r_3 r3 a = 26 a = 26 a=26 0.25 - 对 ( a = 18 ): W ( 18 ) = 0.4 + 0.35 = 0.75 W(18) = 0.4 + 0.35 = 0.75 W(18)=0.4+0.35=0.75
- 对 ( a = 26 ): W ( 26 ) = 0.25 W(26) = 0.25 W(26)=0.25
最终选择答案 ( a = 18 )。
答案聚合方法比较
- 多数表决:简单统计答案出现的频率,选择频率最高的答案。
- 加权投票:结合生成概率,对每个答案进行加权处理,选择权重最高的答案。
该算法的核心思想是通过多样化推理路径的生成和答案聚合提高推理的鲁棒性和准确性。它特别适用于复杂推理任务,能够显著提高语言模型在数学、常识推理等任务中的表现。