先做个广告:如需代注册ChatGPT或充值 GPT4.0会员(plus),请添加站长微信:gptchongzhi
传统的「检索增强生成」(RAG, Retrieval-Augmented Generation)方法,一般是:
推荐使用GPT中文版,国内可直接访问:https://ai.gpt86.top
先检索
根据问题从外部知识库或语料中检索到一批相关文档。 再生成
将检索到的文档和原问题一并送给一个大语言模型(LLM),让它基于这些文档去写答案。
然而,RAG 在一些复杂场景下会遇到检索失败或推理不充分的问题。尤其是当问题需要多步推理,或在检索到的文档里没有一次就能找到所有关键信息时,单轮检索+单轮生成容易卡壳。
CoRAG 提出的核心思路是(如上面左图):
让大语言模型分步骤地提出子查询(sub-query),去检索更细粒度的信息,得到子答案(sub-answer),再根据这些子答案来更新思路、继续提出新的查询。 如果某一步的子答案不理想,就通过拒绝采样(rejection sampling)的方式,丢弃这条检索链,重新来一条新的检索链。 最终模型会在多条可能的“查询→检索→子答案→再查询”的链条里,选出最优或较优的一条来输出结果。
数学解释
假设我们想从一个复杂的目标分布
易采样性
我们可以轻松从 中生成样本。q ( x ) 包络条件
存在一个常数 M
使得对任意x
目标分布满足p ( x ) ≤ M q ( x )
步骤:
从 中生成一个候选样本q ( x ) x^*。计算样本的接受概率: P accept ( x^ ∗ ) = p ( x^ ∗ )/ M q ( x^ ∗ ) 生成一个随机数 u (从均匀分布中采样)。u ∼ U ( 0 , 1 ) 如果 u,接受这个样本;否则拒绝并重新采样。u ≤ P accept ( x^ ∗ )
在 CoRAG 中,拒绝采样的场景和机制稍微抽象一些,但核心思想一致。具体可以这么理解:
候选链生成
CoRAG 会同时生成多个「查询-子答案链条」(检索链),每个链条是一个候选样本。计算接受概率(评估链条质量)
根据当前链条的子答案质量、预测得分(模型给出的概率)等指标,模型可以评估某条链条是否可能通向正确答案。筛选有效链条(拒绝不好的链条)
如果某条链的得分很低,或者生成的子答案不合理(比如与目标问题无关),模型会直接丢弃这条链,重新探索新的链条。选最优答案
通过拒绝那些“不可能得出正确答案”的链条,模型最终能保留较优解,避免浪费计算资源。
含义:
目标
公式拆解
P(Qi∣Q,Q<<>i,A<<>i)A
负对数似然
:用于最大化子查询的生成概率。
含义:
目标:优化子答案生成模型,使其能够根据子查询
和检索到的文档Q i D^(i) 生成合适的子答案A i 公式拆解:
CoRAG框架在评估检索链(推理)时,并非只评估每一步骤是否找到答案的可能性,而是评估整个链条最终导致模型输出“没有找到相关信息”的可能性。具体来说,其评估方式如下:
“没有找到相关信息”的对数似然值:
CoRAG 通过计算整个检索链在“假设答案是‘没有找到相关信息’”的条件下的对数似然值来评估该链的质量。 这个对数似然值是针对整个链条的,而不是针对链条中的某一步
这意味着模型推理时只会考虑整个检索过程,看最终结果是否导致它输出 “没有找到相关信息”。 对数似然值越高,意味着模型认为在该检索链下,最终答案是 “没有找到相关信息” 的可能性越高
惩罚分数:
“没有找到相关信息”的对数似然值被用作“惩罚分数”
惩罚分数是针对整个检索链计算的,而非每一步。
惩罚分数越高,检索链的质量越低;惩罚分数越低,检索链的质量越高
解码策略中的应用
在最佳N抽样(Best-of-N Sampling)中,模型会采样多条检索链,并选择惩罚分数最低的那一条链。 在树状搜索(Tree Search)中,模型会探索不同的检索链,并保留平均惩罚分数最低的状态。 这两种方法都依赖于整个检索链的惩罚分数来选择最佳的检索路径。
因此,CoRAG 推理时不是分别评估检索链每一步骤找到答案的可能性,而是通过整个链条的“没有找到相关信息”的对数似然值(或惩罚分数)来评估整个链条的质量。
那折腾半天训练的时候还要1和2两个关注于步骤的损失函数干嘛呢?
训练阶段:多任务学习
CoRAG 的训练过程是一个多任务学习框架,同时优化以下三个损失函数 : 子查询预测损失 (Lsub_query)
训练模型生成合适的子查询 。 子答案预测损失 (Lsub_answer)
训练模型从检索到的文档中提取正确的子答案 。 最终答案预测损失 (Lfinal_answer)
训练模型生成最终的正确答案。 这三个损失函数共同作用,使得模型在训练过程中不仅学习如何进行逐步检索和推理,也学习如何最终生成正确的答案 。 中间步骤的损失函数
(Lsub_query 和 Lsub_answer)至关重要,因为它们提供了中间过程的监督信号,帮助模型学习链式思维和逐步解决复杂问题的能力 。 没有中间步骤的训练,模型将无法有效地进行多跳推理
训练阶段的目标是学习能力
:训练阶段的目标是让模型学会如何进行逐步检索、推理和整合信息以解决复杂问题 。中间步骤的损失函数提供了必要的监督信号,帮助模型掌握这些能力。 推理阶段的目标是解决问题
:推理阶段的目标是使用训练好的模型来解决实际问题。我们最终关心的是模型能否给出正确的答案,而不是模型中间推理的步骤。 中间步骤的质量是最终答案质量的保证
:虽然推理阶段不直接评估中间步骤的质量,但是模型学习的中间步骤的质量会直接影响最终答案的质量 。
本文链接:https://lechangxia.cc/gpt4/2409.html
chatgpt登录入口在哪chatgpt官方入口chatgpt4.0是什么专业chatgpt4.0**chatgpt需要开通会员