论文阅读:Self-Consistency Improves Chain of Thought Reasoning in Language Models

思维链 prompt 与预训练的大型语言模型相结合,在复杂的推理任务上取得了令人鼓舞的结果。在本文中,作者提出了一种新的解码策略,即自我一致性(self-consistency),以取代思维链 prompt 中使用的 naive 贪婪解码。它首先对不同的推理路径进行抽样,而不是只采取贪婪的推理路径,然后通过对抽样的推理路径进行边际化处理,选择最一致的答案。自我一致性利用了这样一种直觉:一个复杂的推理问题通常会有多种不同的思维方式,从而引导其唯一的正确答案

有点类似于学生时代的考试,第一遍做题得出结果,在第二遍检查时,抛开先前的记忆重新再计算一次,看看两次的结果是否一致,如果不一致说明存在问题,那么就需要重点去思考题目的正确结果。

广泛的实证评估表明,在一系列流行的算术和常识推理基准上,自我一致性以惊人的幅度提高了思维链 prompt 的性能,包括 GSM8K(+17.9%)、SVAMP(+11.0%)、AQuA(+12.2%)、StrategyQA(+6.4%)和 ARC-challenge(+3.9%)。

不同推理路径上的自我一致性

人类的一个突出方面是,人们的思维方式不同。作者很自然地认为,在需要深思熟虑的任务中,很可能有几种方法来解决这个问题,这样的过程可以通过语言模型的解码器的抽样在语言模型中模拟出来。

图 1:自我一致性方法包含三个步骤:(1)使用思维链(CoT)prompt 语言模型;(2)通过从语言模型的解码器中取样来取代 CoT prompt 中的“贪婪解码”,从而产生一个多样化的推理路径集;以及(3)通过在最终答案集中选择最一致的答案来边际化出推理路径并进行汇总。

例如,如图 1 所示,一个模型可以对一个数学问题产生几个貌似合理的回答,而这些回答都得出了相同的正确答案(输出 1 和 3)。由于语言模型不是完美的推理者,模型也可能产生一个不正确的推理路径或在某个推理步骤中犯错(例如在输出 2 中),但这样的解决方案不太可能得出相同的答案。也就是说,假设正确的推理过程,即使它们是多样化的,也往往比不正确的过程在最终答案上有更大的一致性。作者利用这一直觉,提出了以下自我一致性方法。

  1. 首先,用一组人工书写的思维链示例来 prompt 语言模型。
  2. 接着,从语言模型的解码器中抽出一组候选输出,生成一组多样化的候选推理路径。自我一致性与大多数现有的采样算法兼容,包括:
    • temperature 采样。
    • top-k 采样。
    • nucleus(核)采样。
  3. 最后,通过将抽样的推理路径边际化(marginalization)来汇总答案,并在生成的答案中选择最一致的答案。

更详细地说,假设生成的答案 a i a_i ai 来自一个固定的答案集 a i ∈ A a_i \in A aiA。给定一个 prompt 和一个问题,自我一致性引入了一个额外的潜在变量 r i r_i ri,表示第 i 个输出的推理路径的 token 序列,生成推理路径 r i r_i ri 用来生成最终答案 a i a_i ai

问题:为什么需要一个固定的答案集?
回答:因为需要借助自我一致性来汇总最后的答案,相当于集成学习中多个分类器对分类结果的投票,如果答案五花八门则难以投票出结果,所以答案是一个固定的集合,这对于自我一致性的使用范围来说是一个限制。

考虑图 1 中的输出 3:前几句“She eats 3 for breakfast … So she has 9 eggs * $2 = $18.” 构成 r i r_i ri,而最后一句中的答案 18,“The answer is $18” 被解析为 a i a_i ai。在从模型的解码器中抽取多个 ( r i , a i ) (r_i, a_i) (ri,ai) 后,自我一致性通过对 a i a_i ai 进行多数投票,即

### 自洽性的概念 在计算机科学中,自洽性(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; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值