Self-Consistency

Self-Consistency算法步骤

  1. 生成多样化的推理路径
    给定一个语言模型 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,aiprompt,question)=P(riprompt,question)P(airi,prompt,question)

    其中, r i r_i ri 表示第 i i i 条推理路径, a i a_i ai 表示对应的答案。

  2. 计算最终答案的概率
    对每个生成的答案 a ∈ A a \in A aA (答案集合)进行边际化,将所有与答案 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(aprompt,question)=i=1mP(ri,aiprompt,question)δ(ai=a)

    这里, δ ( a i = a ) \delta(a_i = a) δ(ai=a) 是一个指示函数,当 a i = a a_i = a ai=a 时取值为 1,否则为 0。

  3. 选择最一致的答案
    根据边际化后的概率选择一致性最高的答案作为最终输出:
    a ∗ = arg ⁡ max ⁡ a ∈ A P ( a ∣ prompt , question ) a^* = \arg\max_{a \in A} P(a | \text{prompt}, \text{question}) a=argaAmaxP(aprompt,question)

采样策略与计算细节

  1. 采样
    采样可以通过多种策略实现,例如温度采样(Temperature Sampling)、Top-K采样或Nucleus采样(Top-P采样)。采样参数(如温度 T T T、Top-K中的 k k k 或Top-P中的 p p p)可以根据任务需求进行调整。

  2. 概率计算
    每条推理路径 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,aiprompt,question)=k=1KP(tkprompt,question,t1,,tk1)

    其中, t k t_k tk r i r_i ri a i a_i ai 的第 k k k 个生成的token,总长度为 K K K

  3. 答案聚合
    在实际中可以通过多数表决(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=argaAmaxi=1mδ(ai=a)

加权投票

加权投票是一种改进的答案聚合方式,不仅仅考虑答案出现的频率,还结合生成答案时的概率分布进行权重计算。

  1. 加权投票公式
    每个答案 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=1mP(ri,aiprompt,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,aiprompt,question):推理路径 r i r_i ri 和答案 a i a_i ai 的联合概率。
  2. 选择答案
    选择加权得分最大的答案作为最终答案:

    a ∗ = arg ⁡ max ⁡ a ∈ A W ( a ) a^* = \arg\max_{a \in A} W(a) a=argaAmaxW(a)

  3. 概率计算
    联合概率 P ( r i , a i ∣ prompt , question ) P(r_i, a_i | \text{prompt}, \text{question}) P(ri,aiprompt,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,aiprompt,question)=k=1KP(tkprompt,question,t1,,tk1)
      其中, 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,aiprompt,question)=exp(K1k=1KlogP(tkprompt,question,t1,,tk1))

  4. 实际例子
    假设有以下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=180.4
    r 2 r_2 r2 a = 18 a = 18 a=180.35
    r 3 r_3 r3 a = 26 a = 26 a=260.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 )。

答案聚合方法比较

  • 多数表决:简单统计答案出现的频率,选择频率最高的答案。
  • 加权投票:结合生成概率,对每个答案进行加权处理,选择权重最高的答案。

该算法的核心思想是通过多样化推理路径的生成和答案聚合提高推理的鲁棒性和准确性。它特别适用于复杂推理任务,能够显著提高语言模型在数学、常识推理等任务中的表现。

### 自洽性的概念 在计算机科学中,自洽性(self-consistency)指的是系统内部各个部分之间的一致性和协调性。具体来说,在分布式系统或数据库事务处理中,这意味着数据状态在整个系统的不同组件间保持一致,不会出现矛盾的状态[^1]。 对于机器学习模型而言,自洽性可以指代预测结果与训练过程中所学规律相吻合的程度;而在算法设计领域,则可能涉及输入输出关系是否遵循预定逻辑规则等问题[^2]。 ### 实现方法 为了确保程序具有良好的自洽特性,开发者通常会采取以下措施: #### 数据验证 通过严格的输入参数校验机制防止非法数据进入系统核心流程,从而减少因错误输入引发的不一致性问题。 ```python def validate_input(data): if not isinstance(data, (int, float)): raise ValueError("Input must be a number.") ``` #### 错误恢复策略 当检测到异常情况时,应立即启动相应的补偿动作以恢复正常运行状态,比如回滚未完成的操作或者重试失败的任务等。 ```python try: perform_critical_operation() except Exception as e: rollback_changes() # Rollback any changes made during the operation. log_error(e) # Log error information for debugging purposes. finally: cleanup_resources() # Clean up resources regardless of success or failure. ``` #### 并发控制技术 采用锁机制(Lock),乐观并发控制(OCC),多版本并发控制(MVCC)等方式管理共享资源访问权限,避免多个线程/进程同时修改同一份数据而导致冲突。 ```sql BEGIN TRANSACTION; SELECT * FROM accounts WHERE account_id = ? FOR UPDATE; -- Locks row exclusively. UPDATE accounts SET balance = balance - ? WHERE account_id = ?; COMMIT; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维度世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值