<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>论文 - 南极滑稽的博客</title>
	<atom:link href="https://blog.nanjihuaji.top/category/%e8%ae%ba%e6%96%87/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.nanjihuaji.top</link>
	<description>一个学术垃圾的博客</description>
	<lastBuildDate>Tue, 17 Mar 2026 10:34:03 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.nanjihuaji.top/wp-content/uploads/2024/08/cropped-Cache_45925d60c206ddd8-150x150.jpg</url>
	<title>论文 - 南极滑稽的博客</title>
	<link>https://blog.nanjihuaji.top</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Speculative Decoding及其原理（一）</title>
		<link>https://blog.nanjihuaji.top/2026/03/17/speculative-decoding%e5%8f%8a%e5%85%b6%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/</link>
					<comments>https://blog.nanjihuaji.top/2026/03/17/speculative-decoding%e5%8f%8a%e5%85%b6%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Tue, 17 Mar 2026 10:31:28 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=508</guid>

					<description><![CDATA[<p>背景 自回归的大语言模型在各种自然语言处理任务上表现优秀，但是，他们需要大量的计算资源消耗。 大规模的自回归模 [&#8230;]</p>
<p>The post <a href="https://blog.nanjihuaji.top/2026/03/17/speculative-decoding%e5%8f%8a%e5%85%b6%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/">Speculative Decoding及其原理（一）</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">背景</h1>



<p>自回归的大语言模型在各种自然语言处理任务上表现优秀，但是，他们需要大量的计算资源消耗。</p>



<p>大规模的自回归模型在解码时，如果要解码K个token，就需要串行K次，因为自回归模型是由前面的分布决定后面的分布的。除了这些大规模的自回归模型之外，还有更高效的、小型的模型（比如同系列的参数比较多的模型，和参数比较少的模型），这些模型可以更快地完成解码</p>



<p>Leviathan等人观察到，大型模型进行推理<strong>通常不是在算术运算上受到瓶颈，而是在内存带宽和通信上</strong>，因此可能会有<strong>额外的计算资源可用</strong>（大部分时间GPU都在干等）。这些额外的计算资源可以用来运行更高效的模型用于解码，从而在<strong>不损失生成质量的前提下实现对大语言模型的加速。</strong></p>



<p>这种思想与分支预测比较类似——分支预测通过猜测哪一个指令电路会被执行，并且先一步执行这个电路，如果预测成功，可以节省相当的时间，如果预测失败，则退回预测之前的状态。Speculative Decoding（SD）的思想也是这样，利用GPU的空闲时间（其实也可以是CPU的空闲时间）运行一个更高效的小型模型（这个模型可能会犯错误，就像分支预测器一样）去猜测可能的解码结果是什么。如果猜对了，就省了计算资源，否则，也不会比原来更差——因为这个更高效的模型本身就是<strong>跑在被浪费的计算资源</strong>上的。</p>



<h1 class="wp-block-heading">方法</h1>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="292" src="https://blog.nanjihuaji.top/wp-content/uploads/2026/01/图片-1024x292.png" alt="" class="wp-image-591" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2026/01/图片-1024x292.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2026/01/图片-300x86.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2026/01/图片-768x219.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2026/01/图片.png 1160w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>SD利用一个规模较小的模型作为草稿，预测大模型的输出token，随后，大模型对输出token进行验证，从而达到减少大模型forward，节省并充分利用算力。</p>



<h2 class="wp-block-heading">形式化表述</h2>



<p>约定：</p>



<ul class="wp-block-list">
<li>$M_p$: <strong>Target Model（大模型）</strong>，我们要加速的模型。其概率分布为 $p(x|x_{ \lt t})$。</li>



<li>$M_q$: <strong>Draft Model（小模型）</strong>，计算速度快但精度较低的模型。其概率分布为 $q(x|x_{ \lt t})$。</li>



<li>$x_{ \lt t}$: 当前已生成的上下文序列。</li>



<li>$K$: 每次投机生成的步数（Lookahead steps），即小模型一次生成多少个草稿 token。</li>
</ul>



<p>SD通过让小模型串行生成多个token（但很快），随后让大模型并行进行验证（但很慢），在保证输出分布与$p(x|x_{ \lt t})$相同的情况下有着更快的生成速度。<br>为了理解SD，我们需要先了解拒绝采样原理。<br></p>



<h3 class="wp-block-heading">拒绝采样原理</h3>



<p>给定目标分布$p(x)$，我们希望从$p(x)$中取样$x \sim p(x)$，但是，$p(x)$由于计算成本过高等特点，难以直接采样，因此，我们改为从提议分布$q(x)$中采样，只要存在$M>0$，使得对于任意的$x$，都有：</p>



<p>$$ Mq(x) \ge p(x) $$</p>



<p>即，$q(x)$在扩大若干倍后可以完全在$p(x)$的上方，我们就可以利用$q(x)$去辅助$p(x)$采样。事实上，在SD场景下，我们一般设$M=1$。</p>



<p>我们需要证明，$\forall x_i \sim q(x)$，我们遵循以下步骤：</p>



<ol class="wp-block-list">
<li>从 $U(0, 1)$ 中采样随机数 $u$</li>



<li>计算接受概率 $\alpha = \frac{p(x_i)}{Mq(x_i)}$</li>



<li>若 $ u \le \alpha$，接受$x_i$</li>



<li>否则，考虑修正分布 $\max(0, p(x) - q(x))$，我们从其中采样$x_i \sim (p(x) - q(x))$</li>
</ol>



<p>这样得到的$x_i$满足 $x_i \sim p(x_i)$。</p>



<p>需要注意的是，这种表述不是标准的拒绝采样，我们称之为<strong>不退回的拒绝采样</strong>，对于标准的拒绝采样，它会在第4步退出，转而从原分布中重新采样，而我们则从修正分布$\max(0, p(x) - q(x))$中采样，因为如果$x_i$被拒绝，说明样本落在$q(x)>p(x)$的区域，我们必须要从这一部分采样弥补，这与从原分布中采样是等价的。</p>



<p>我们现在对这一命题给出证明。</p>



<p>设最终输出的样本为 $X$，$X$要么源自直接被接受的$q(x)$中采样的样本，这表明：</p>



<p>$$ P_1(x) = q(x) \min (1, \frac{p(x)}{q(x)}) $$</p>



<p>，要么源自从修正分布中采样的样本，此时，拒绝发生的总概率为 $P_{rej} = 1 - \sum_x \min(q(x), p(x))$，这表示采样点恰好落在 $q(x)$ 和 $p(x)$ 之间。此时，修正分布为</p>



<p>$$ p'(x) = \frac{\max(0, p(x) - q(x))}{\sum_x \max(0, p(x) - q(x)} $$</p>



<p>这一步可能稍微有些难理解，如果接受，那么$x_i$一定在目标分布$p(x)$中，否则，它必定在$p(x)$和$q(x)$之间，这个空隙就是</p>



<p>$$ \text{Gap}(x) = p(x) - \min(p(x), q(x)) $$</p>



<p>而 $p(x) - \min(p(x), q(x))=\max(0, p(x) - q(x)$，这表明：</p>



<p>$$ \text{Gap}(x) = \max(0, p(x) - q(x))) $$</p>



<p>由于此时是在采样为 $x$ 的时候被拒绝，根据条件概率公式：</p>



<p>$$ P(x|\text{拒绝}) = \frac{P(x; \text{拒绝})}{P(\text{拒绝})} $$</p>



<p>而 $P(x; \text{拒绝})$ 是从 $p(x)$ 和 $q(x)$ 的空隙中采样得到的，因此 $P(x; \text{拒绝}) = \max(0, p(x) - q(x))$。</p>



<p>而拒绝的情况就是对所有拒绝发生时的概率求和，这表明</p>



<p>$$ P(\text{拒绝}) = \sum_x \max(0, p(x) - q(x)) $$</p>



<p>这个总和实际上就是 p 和 q 两个分布之间的 <strong>$L_1$ 距离的一半</strong>。</p>



<p>综上，我们要么从 $P_1(x)$ 中采样，要么是 $p'(x)$，从而：</p>



<p>$$ P(x) = P_1(x) P(\text{接受}) + p'(x) P(\text{拒绝}) = q(x) \min (1, \frac{p(x)}{q(x)}) P(\text{接受}) + \frac{\max(0, p(x) - q(x))}{\sum_x \max(0, p(x) - q(x))} P(\text{拒绝}) $$，</p>



<p>如果 $p(x) \ge q(x)$，</p>



<p>$$ P(x) = q(x) + (p(x) - q(x)) = p(x) $$</p>



<p>，否则</p>



<p>$$ P(x) = q(x)\frac{p(x)}{q(x)} = p(x) $$</p>



<p>。</p>



<p>这样就证明了，通过这种方式从提议分布$q(x)$中采样的$x$满足$x \sim p(x)$。</p>



<h2 class="wp-block-heading">Speculative Decoding 算法</h2>



<p>我们已经证明了拒绝采样可以保障分布一致性，这样，我们可以正式提出拒绝采样算法：</p>



<p>输入：上下文 $x_{\lt t}$，投机步数 $\gamma$，目标模型 $M_p$ ，草稿模型 $M_q$</p>



<ol class="wp-block-list">
<li>当未达到起草长度 $\gamma$，且生成 token 不是 EOS 时：</li>



<li>起草 token：
<ul class="wp-block-list">
<li>对于 $i=1,...,\gamma$：
<ul class="wp-block-list">
<li>采样 $x_{t+i-1} \sim q(x | x < t)$</li>



<li>记录该位置的概率分布 $q_i$</li>
</ul>
</li>



<li>得到草稿序列 $\tilde{x} = [x_t, x_{t+1}, ..., x_{t + \gamma - 1}]$</li>
</ul>
</li>



<li>验证起草
<ul class="wp-block-list">
<li>将 $\tilde{x}$ 送入 $M_p$ 做一次 forward，得到概率分布 $[p_1, ..., p_\gamma, p_{\gamma+1}]</li>



<li>由 $p_i$ 和 $q_i$ 做拒绝采样：
<ul class="wp-block-list">
<li>接受：加入接受序列中</li>



<li>拒绝：从修正分布中采样，停止起草</li>
</ul>
</li>



<li>结束验证</li>



<li>根据目标模型算出的分布采样额外token $x_{t+\gamma}$</li>
</ul>
</li>



<li>同步上下文并回滚KVCache</li>
</ol>



<p>这样，我们就实现了Speculative Decoding。</p>



<h1 class="wp-block-heading">效率提升</h1>



<h2 class="wp-block-heading">平均 token 生成数</h2>



<p>设每次生成的接受率 $\beta_{x \lt t}$ 代表对于前缀 $x \lt t$ 的接受率，假设这是一个独立同分布的变量，我们设 $\alpha = \mathbb{E}(\beta_{x \lt t}$ 为平均接受率。</p>



<p>那么，单次算法运行所生成的token数量 N 服从一个<strong>带上限的几何分布</strong>，其成功概率（即拒绝概率）为 1−α，上限为 γ+1，设 $N$ 为单次迭代生成的总token数。其生成的token总数的期望值为：</p>



<p>$$\mathbb{E}(N)=\frac{1-\alpha^{\gamma+1}}{1-\alpha}$$</p>



<p>证明过程如下：<br>设 $I_i$ 为第 $i$ 个位置产生token的指示随机变量，第 1 个token总是会产生：$P(I_1=1) = 1$，第 2 个token产生的条件是第 1 个被接受：$P(I_2=1) = \alpha$，第 $i$ 个token产生的条件是前 $i-1$ 个均被接受：$P(I_i=1) = \alpha^{i-1}$<br>因此，总期望为：<br>$$E(N) = \sum_{i=1}^{\gamma+1} P(I_i=1) = \sum_{i=1}^{\gamma+1} \alpha^{i-1}$$<br>上述各项构成一个首项为 1，公比为 $\alpha$，项数为 $\gamma + 1$ 的等比数列：<br>$$E(N) = 1 + \alpha + \alpha^2 + \dots + \alpha^\gamma$$<br>根据等比数列求和公式 $S_n = \frac{a_1(1-q^n)}{1-q}$：<br>$$E(N) = \frac{1 \cdot (1 - \alpha^{\gamma+1})}{1 - \alpha}$$</p>



<p>证明完毕。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="830" height="623" src="https://blog.nanjihuaji.top/wp-content/uploads/2026/03/图片.png" alt="" class="wp-image-605" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2026/03/图片.png 830w, https://blog.nanjihuaji.top/wp-content/uploads/2026/03/图片-300x225.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2026/03/图片-768x576.png 768w" sizes="(max-width: 830px) 100vw, 830px" /></figure>



<p>根据不同的 <math display="inline"><semantics id="S3.F2.5.5.m2.1b"><mi id="S3.F2.5.5.m2.1.1">γ</mi></semantics></math> 值，Speculative Decoding 预期的 token 数量与 <math display="inline"><semantics id="S3.F2.4.4.m1.1b"><mi id="S3.F2.4.4.m1.1.1">α</mi></semantics></math> 的函数关系如上图。这给出了一个简单的推论，接受率总是越高越好。</p>



<h2 class="wp-block-heading">接受率与模型差异的关系</h2>



<p>前面的事情以后再来探索吧</p><p>The post <a href="https://blog.nanjihuaji.top/2026/03/17/speculative-decoding%e5%8f%8a%e5%85%b6%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/">Speculative Decoding及其原理（一）</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2026/03/17/speculative-decoding%e5%8f%8a%e5%85%b6%e5%8e%9f%e7%90%86%ef%bc%88%e4%b8%80%ef%bc%89/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>元认知增强检索大预言模型：MetaRAG论文导读</title>
		<link>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/</link>
					<comments>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Fri, 17 Jan 2025 09:13:08 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[RAG]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=271</guid>

					<description><![CDATA[<p>居然可以用心理学概念加强RAG的性能！</p>
<p>The post <a href="https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/">元认知增强检索大预言模型：MetaRAG论文导读</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">原论文：Zhou, Y., Liu, Z., Jin, J., Nie, J. Y., & Dou, Z. (2024, May). Metacognitive retrieval-augmented large language models. In <em>Proceedings of the ACM on Web Conference 2024</em> (pp. 1453-1463).</p>
<p>他们在<a href="https://github.com/ignorejjj/MetaRAG">Github</a>上公开了MetaRAG的源代码。</p>
<h2>原文摘要</h2>
<p>检索增强生成技术（RAG）因其在生成事实内容方面的作用而成为自然语言处理的核心。虽然传统方法采用单次检索，但最近的方法已转向多跳推理任务的多次检索。但是，这些策略受<strong>预定义的推理步骤</strong>的约束，可能会导致响应生成不准确。本文介绍了<strong><em>MetaRAG</em></strong>，这是一种<strong>将RAG过程与元认知（Metacognition，对认知的认知）相结合的方法</strong>。在认知心理学中，元认知允许实体进行自我反思，并批判性地评估其认知过程。通过集成元认知，MetaRAG 使模型能够监控（monitoring）、评估（evaluating）和规划（Planning）其响应策略，从而增强其内省推理能力。通过三步元认知调节管道，该模型可以识别初始认知反应中的不足之处并加以修复。实证评估表明，MetaRAG的性能明显优于现有方法。</p>
<h2>方法简析</h2>
<h3>概要</h3>
<p>之前的各种方法虽然从各种地方改进了RAG的检索效果，但是这些方法中的检索步骤都是固定的。与此不同，我们人类可以<strong>反思并改进</strong>我们的思考方式，这种能力被称为<strong>元认知（Metacognition）</strong>。作者们认为，让RaLM(Retrieval-Augmented Language Model，i.e. 采用RAG的LLM)模拟人类的元认知能力，可以提高其在复杂任务上的表现。</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/metacognitionhuman.png" alt="" /></p>
<p>如上图，人类的元认知可以分为两个部分：<strong>知识（Knowledge）</strong>和<strong>元认知知识（Metacognitive Knowledge）</strong>，其中，知识表明我们对客观事实、方法等的认知，而元认知知识则是我们对认知过程的管理和调控，我们可以由元认知知识了解事物运行背后的逻辑，并由此找到自我提升的手段。向我们的输入会先由我们的知识部分得出一个响应，随后根据具体情况决定是否进入元认知部分进行分析，最终输出一个不错的响应。</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/metacognitionLLM.png" alt="" /></p>
<p>仿照上文中人类的知识和元认知知识，作者将他们设计的LLM分为<strong>外部知识</strong>部分和<strong>元认知知识</strong>部分，给LLM一个输入，它会先像普通的RaLM一样从外部知识库中检索，并生成一个响应，随后由根据具体情况决定是否要进入元认知知识部分进行分析，最终输出一个还不错的响应。他们称这种方法为<strong>MetaRAG</strong>。</p>
<p>具体的，他们的方法可以归结为下图：</p>
<p><img decoding="async" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/MetaRAG.png" alt="" /></p>
<p>首先，他们将MetaRAG分作<strong>认知空间(Cognition Space)</strong>以及<strong>元认知空间(Metacognition Space)</strong>，对应之前提到过的External Knowledge和Cognitive Knowledge。认知空间执行正常的RAG步骤。</p>
<p>元认知空间由<strong>Monitoring, Evaluating和Planning</strong>部分组成，其中，Monitoring部分负责评估回答质量，决定是否进入元认知空间，如果不进入，则按正常的RAG步骤输出，如果决定进入，则进入Evaluating部分，这一部分负责判断现有的内外知识是否足够解决问题，以及是由于犯了哪些错误导致回答质量不佳，随后的Planning阶段根据Evaluating阶段所得出的结论判断应该采取哪些操作提升回答的质量。</p>
<h2>细节</h2>
<h3>Monitoring部分</h3>
<p>如上文所说，Monitoring是负责评估<strong>回答的质量是否足够好</strong>的。对此，他们选择使用<strong>专家模型</strong>生成相同问题的回答，并通过对比LLM与专家模型的回答的<strong>相似度</strong>来决定答案是否足够好的。具体来说，他们将模型生成的嵌入与专家模型生成的嵌入作比较，如果相似性小于k，则认为这个答案是不好的。</p>
<p>（为什么他们不直接输出专家模型的结果呢？我也不知道，但是这个论文已经被A会接受了，或许大佬们认为这样做是没问题的？）</p>
<h3>Evaluating部分</h3>
<p>Evaluating是Monitoring认为答案不够好后进入的部分，主要聚焦于两点：</p>
<p>（a） 内部和外部知识来源都足以解决所提出的问题吗？</p>
<p>（b） QA LLM 的推理过程是否容易受到多跳 QA 中经常遇到的常见问题的影响？</p>
<p>为了解决这两个问题，他们又引入了两个概念：过程知识和陈述性知识。程序知识体现了对面对特定任务所必需的<strong>方法和策略</strong>的把握，而陈述性知识则锚定在特定事实或基于内容的信息中，涵盖与解决问题相关的<strong>事实和概念</strong>。他们在prompt中让模型充当evaluator-critic系统，认为这样做效果比让模型从问题的回答者去评估生成的答案要好。</p>
<p>在<strong>过程性知识</strong>的评估过程中，他们使用模型充当的evaluator-critic系统评估模型的内部知识，用NLI（自然语言推理）模型去衡量模型的外部知识，NLI模型可被抽象为形如 f⁢(<span style="cursor: pointer; border-bottom: 2px dotted #3399ff;" data-kimi-id="1737104029599" data-kimi-disabled="false" data-kimi-recommend="false">premise</span>,hypothesis) 的函数，在premise可以推出hypothesis时返回1，否则返回0，同时，他们也给模型做了一个prompt：</p>
<div class="MathJax_SVG_Display" style="text-align: center;"> </div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Please act as an evaluator-critic system, determine if you can provide a reliable answer to the {question} based on your own knowledge?</p>
</blockquote>



<p>判断完后，他们可以将知识上的不足分为四类，我们稍后会谈到。</p>



<p>在<strong>陈述性知识</strong>的评估过程中，他们将推理错误分为三类：不完全推理、答案冗余、歧义理解，并调用evaluator-critic系统去判断错误可能是什么，prompt如下：</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Please act as an evaluator-critic system, assess whether the {response} based on {references} for the {question} contains any {error types}?</p>
</blockquote>



<h3 class="wp-block-heading">Planning部分</h3>



<p>对错误有了认知后，就可以对症下药，尝试去解决错误了。现在填上文挖的坑，知识不足可以根据哪方面的知识来源不足被分为四类：</p>



<ul class="wp-block-list">
<li>无知识</li>



<li>仅外部有</li>



<li>仅内部有</li>



<li>内部和外部都有</li>
</ul>



<p>严格来说，最后一个不算知识不足，不过也属于可能的一种情形。无论如何，判断出来知识是哪方面不足后就可以对症下药了，对症生成prompt后，模型就可以从相应的地方继续搜索，直到问题解决或放弃为止。</p>



<p>知识不足不是模型回答错误的全部原因，另一种可能导致不准确回答的情况是内部和外部知识之间存在差异，即<strong>知识冲突</strong>，解决方案即直接放弃某个部分的知识，仅依赖单一知识来源就可以做出比较好的回答，不过他们这么做并没有考虑模型内部知识与外部知识的质量的差异，如果能考虑到评估知识库的质量，决定放弃某一个知识库可能会更好。</p>



<p>哪怕知识已经足够，模型可能还会在推理过程中犯错误，即<strong>错误推理</strong>，如果推理是用CoT等多步推理方法进行的，LLM会被要求重新检查推理过程中哪里可能出错，并对症重新进行推理。这里看起来似乎可以和ToT或者MCTS这样的方法结合一下，说不定会更好用呢？</p>



<h2 class="wp-block-heading">评估部分</h2>



<p>总体来说，</p>



<ol class="wp-block-list">
<li>MetaRAG 始终优于两个数据集的所有基线方法。与 Reflexion 相比，Reflexion 在其推理过程中还集成了自我批评机制，MetaRAG 在所有指标上都表现出了实质性的改进。这表明使用元认知策略比仅仅依靠自我批评更有益。</li>



<li>配备自我批评机制的模型与没有自我批评机制的模型相比，表现出优异的性能。</li>
</ol>



<p>他们做了一个消融实验，证明剥离元认知空间中的任何一个组件都会造成效果的极大下降。</p>



<p>他们还研究了相似性阈值k，不过这些说起来也比较繁琐，在这里就不说了。</p>



<p>这篇理论上八月就看的差不多了，不过当时一直忙着没写完，现在才有时间写完发出来，不得不说我真的是……</p>



<figure class="wp-block-image size-full"><img decoding="async" width="246" height="241" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/爆.png" alt="" class="wp-image-371"/></figure>



<p></p><p>The post <a href="https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/">元认知增强检索大预言模型：MetaRAG论文导读</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2025/01/17/%e5%85%83%e8%ae%a4%e7%9f%a5%e5%a2%9e%e5%bc%ba%e6%a3%80%e7%b4%a2%e5%a4%a7%e9%a2%84%e8%a8%80%e6%a8%a1%e5%9e%8b%ef%bc%9ametarag%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>模型对自己也有认知——它们知道自己“知道”什么(1)</title>
		<link>https://blog.nanjihuaji.top/2025/01/16/%e6%a8%a1%e5%9e%8b%e5%af%b9%e8%87%aa%e5%b7%b1%e4%b9%9f%e6%9c%89%e8%ae%a4%e7%9f%a5-%e5%ae%83%e4%bb%ac%e7%9f%a5%e9%81%93%e8%87%aa%e5%b7%b1%e7%9f%a5%e9%81%93%e4%bb%80/</link>
					<comments>https://blog.nanjihuaji.top/2025/01/16/%e6%a8%a1%e5%9e%8b%e5%af%b9%e8%87%aa%e5%b7%b1%e4%b9%9f%e6%9c%89%e8%ae%a4%e7%9f%a5-%e5%ae%83%e4%bb%ac%e7%9f%a5%e9%81%93%e8%87%aa%e5%b7%b1%e7%9f%a5%e9%81%93%e4%bb%80/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Thu, 16 Jan 2025 08:38:13 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[不确定度]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=373</guid>

					<description><![CDATA[<p>其实模型也可以评估自己的能力！</p>
<p>The post <a href="https://blog.nanjihuaji.top/2025/01/16/%e6%a8%a1%e5%9e%8b%e5%af%b9%e8%87%aa%e5%b7%b1%e4%b9%9f%e6%9c%89%e8%ae%a4%e7%9f%a5-%e5%ae%83%e4%bb%ac%e7%9f%a5%e9%81%93%e8%87%aa%e5%b7%b1%e7%9f%a5%e9%81%93%e4%bb%80/">模型对自己也有认知——它们知道自己“知道”什么(1)</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>牢骚发完了，活还是得干，干脆把干了什么活也写上，找点事做TAT</p>



<p>参考文献：Saurav Kadavath, Tom Conerly, Amanda Askell, Tom Henighan, Dawn Drain, Ethan Perez, Nicholas Schiefer, Zac Hatfield-Dodds, Nova DasSarma, Eli Tran-Johnson, et&nbsp;al.Language models (mostly) know what they know.<em>arXiv preprint arXiv:2207.05221</em>, 2022.</p>



<p>如果你关注过大模型推理，可能会对推理框架有所了解，其中比较有代表性的大概是CoT（尤其是CoT with Self-Consistency）、ToT、MCTS了，但是这些推理框架想要更深入的思考，就要消耗更多的token，也就是消耗更多的资源、时间和钱了，我们有没有办法在思考深度和token消耗数做一个权衡，让大模型在token消耗数控制在我们满意的范围内，同时取得还不错的推理准确率呢？</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="334" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-1024x334.png" alt="" class="wp-image-374" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-1024x334.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-300x98.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-768x250.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-1536x500.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-670x218.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image.png 1550w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>我们人类可以评估问题的难度，动态调整思维的深度，例如，对1+1=2，我们并不需要深入思考，但是如果是高考的导数题，我相信大多数人都要认真的思考一番，显然，对1+1=2和高考导数题有相同的思考深度是很不现实的——但有些思考框架确实是这么做的。</p>



<p>直觉上，我们可以给大模型定义一个指标，这个指标衡量了大模型对做出这个题目是否有信心。</p>



<p>Saurav K. 等人就做了这方面的工作，他们认为，大模型（大多）知道自己知道什么，为此，他们考察了两个指标——P(True)，“我回答的答案正确吗”，与P(IK)，“我知道这个问题的答案吗？”，这与上文的引入可能有点不太相关，不过让我们继续往下走。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="407" height="282" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-376" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-2.png 407w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-2-300x208.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></figure>



<p>上图中，"Fraction of Problems" 指的是模型在特定任务中正确回答问题的比例，作者从模型的回答中sample了一些答案，其中有正确的也有错误的，由于Incorrect Samples（蓝色）本身就是不对的，我们希望它们分布在P(True)较低的地方，也就是模型应该认为这个回答是不对的；同上，由于Correct Samples（绿色）本身就是对的，我们希望它们分布在P(True)较高的地方。因此，我们希望蓝色分布在图的左侧，绿色分布在图的右侧。</p>



<p>作者采取了四种方式来衡量（文中称为校准/calibration）模型知不知道自己知道什么，分别为选择题、最后一项为“None of the above”的选择题、温度调整后的RLHF、判断题，下文为其阐述。</p>



<h2 class="wp-block-heading">选择题能够让模型好的衡量他们自己</h2>



<p>他们采取了如下的格式询问模型：</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Question: Who was the first president of the United States?</p>



<p>Choices:</p>



<p>(A) Barack Obama</p>



<p>(B) George Washington</p>



<p>(C) Michael Jackson</p>



<p>Answer:</p>
</blockquote>
</blockquote>
</blockquote>



<p>其中，他们只通过选择题的序号(A)、(B)、(C)识别答案，在选择题的情境下，模型展现了良好的“自我认知”能力（得到了很好的“校准”）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="407" height="297" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-3.png" alt="" class="wp-image-377" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-3.png 407w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-3-300x219.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></figure>
</blockquote>



<p>理论上，模型作出回答的频率应该与概率一致，因此在理想情况下，频率关于概率的分布应该是一条斜率为1的过原点的射线（在这条射线上为Under Confident，在这条平面下为Over Confident），而模型在此的表现也的确与其很接近。</p>



<p>作者认为，“在选择答案选项之前，模型能够明确地看到答案选项，这一点至关重要；没有这个，我们就不会期望得到校准的回答，因为任何给定答案选项的可能释义和专业化之间存在歧义和退化”，换句话说，正是因为有了选项的存在，模型才能在不存在“歧义和退化”的情况下评估自身的回答。</p>



<p>他们还发现了另外一种情况，只要把最后一个选项改为“None of the above”，就可以大大干扰模型对自己的认知，在这种情况下，模型总是毫无根据地反感选项“None of the above”，因此会造成准确度的大大的下降。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="407" height="294" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-4.png" alt="" class="wp-image-378" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-4.png 407w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-4-300x217.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="407" height="297" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-5.png" alt="" class="wp-image-379" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-5.png 407w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-5-300x219.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></figure>



<h2 class="wp-block-heading">判断题可以让模型好的衡量它们自己</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="574" height="384" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-6.png" alt="" class="wp-image-380" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-6.png 574w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-6-300x201.png 300w" sizes="auto, (max-width: 574px) 100vw, 574px" /></figure>



<p>让模型单独判断某一个部分正不正确就可以排除选项对模型的自我认知造成的干扰（例如“None of the above”），尽管模型判断的能力也与模型的参数大小有关，但模型达到52B（黄线）后，尽管在概率很低的地方Under Confident及在概率高的地方Over Confident，但在大部分区域都很接近理想值。</p>



<p>上述让模型判断的都是人类给定的选项，如果让模型自己判断自己的答案正不正确，情况又会有所不同。简而言之，<strong>模型判断自己生成的答案更加困难，也更加接近模型的能力边界，而模型判断人类给出的选项更加简单，也更接近模型的能力舒适区。</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="407" height="275" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-8.png" alt="" class="wp-image-382" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-8.png 407w, https://blog.nanjihuaji.top/wp-content/uploads/2025/01/image-8-300x203.png 300w" sizes="auto, (max-width: 407px) 100vw, 407px" /></figure>



<h2 class="wp-block-heading">尽管RLHF会干扰模型的自我判断能力，但温度调整后干扰会消失</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="266" height="211" src="http://migrate.nanjihuaji.top/wp-content/uploads/2025/01/image-7.png" alt="" class="wp-image-381"/></figure>



<p>强化学习的微调可能会让模型的预测崩溃，呈现图中蓝色的情况，但调整以后（红色）就与理想情况非常接近。</p>



<p>（*我不太懂强化学习，因此在这部分没办法做太多的阐述）</p>



<h2 class="wp-block-heading">训练模型以预测它们是否能够正确回答问题</h2>



<p>这里似乎来到了重头戏——我们如何让模型知道自己知不知道，从而调整推理的思维深度呢？作者希望训练模型来预测它们<strong>是否知道任何给定自由形式问题的答案</strong>，这与我们开头提出的情况高度相关。</p>



<ul class="wp-block-list">
<li><strong>Value Head</strong>：将 P（IK） 训练为添加到模型中的附加值 'head' 的 logit（独立于语言建模的 logit）。这种方法的一个优点是我们可以轻松地在一般token位置探测 P（IK）。</li>



<li><strong>自然语言</strong>：训练 P（IK），让模型按字面意思回答“你凭什么信心回答这个问题？”，并输出 0%、10%、20%、&nbsp;⋯&nbsp;100% 等答案。</li>
</ul>



<p>自然语言方法效果不佳，因此作者采用了Value Head方法。</p>



<p>具体训练出的模型写不动了，留给以后再写（</p>



<p></p><p>The post <a href="https://blog.nanjihuaji.top/2025/01/16/%e6%a8%a1%e5%9e%8b%e5%af%b9%e8%87%aa%e5%b7%b1%e4%b9%9f%e6%9c%89%e8%ae%a4%e7%9f%a5-%e5%ae%83%e4%bb%ac%e7%9f%a5%e9%81%93%e8%87%aa%e5%b7%b1%e7%9f%a5%e9%81%93%e4%bb%80/">模型对自己也有认知——它们知道自己“知道”什么(1)</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2025/01/16/%e6%a8%a1%e5%9e%8b%e5%af%b9%e8%87%aa%e5%b7%b1%e4%b9%9f%e6%9c%89%e8%ae%a4%e7%9f%a5-%e5%ae%83%e4%bb%ac%e7%9f%a5%e9%81%93%e8%87%aa%e5%b7%b1%e7%9f%a5%e9%81%93%e4%bb%80/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RaLMSpec论文导读：使用推测方法加速RAG</title>
		<link>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/</link>
					<comments>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/#respond</comments>
		
		<dc:creator><![CDATA[Nanjihuaji]]></dc:creator>
		<pubDate>Thu, 01 Aug 2024 18:58:32 +0000</pubDate>
				<category><![CDATA[论文]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[RAG]]></category>
		<category><![CDATA[RAG加速]]></category>
		<guid isPermaLink="false">https://blog.nanjihuaji.top/?p=220</guid>

					<description><![CDATA[<p>居然可以将缓存的概念用在RAG上！</p>
<p>The post <a href="https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/">RaLMSpec论文导读：使用推测方法加速RAG</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>原文标题：ACCELERATING RETRIEVAL-AUGMENTED LANGUAGE MODEL SERVING WITH SPECULATION</p>



<p>Zhihao Zhang1†, Alan Zhu1, Lijie Yang1, Yihua Xu2, Lanting Li1, Hitchaya Mangpo Phothilimthana3, Zhihao Jia1‡</p>



<p>1Carnegie Mellon University, School of Computer Science<br>2 University of California, Berkeley 3 Google DeepMind<br>† zhihaoz3@andrew.cmu.edu,<br>‡ zhihao@cmu.edu</p>



<p>注：本文相当部分的内容是我根据自己的理解写的，如有错误，敬请谅解，也欢迎指正与讨论。</p>



<p>原文摘要：</p>



<p>检索增强语言模型 （RaLM） 已经证明了通过将非参数知识库与参数语言模型相结合来解决知识密集型自然语言处理 （NLP） 任务的潜力。RaLM 不是对完全参数化的模型进行微调，而是作用在低成本地适应最新数据和更好的源归因机制方面。在各种 RaLM 方法中，由于检索器和语言模型之间的交互更频繁，迭代 RaLM 提供了更好的生成质量。尽管有这些好处，但由于频繁的检索步骤，迭代 RaLM 通常会遇到高开销。为此，我们提出了 RaLMSpec，这是一个受推测启发的框架，它为迭代 RaLM 提供通用加速，同时通过推测检索和批量验证保留相同的模型输出。通过进一步结合预取、最优推测步幅调度器和异步验证，RaLMSpec 可以自动充分利用加速潜力。对于朴素迭代的RaLM服务，在4个下游QA数据集上对三种语言模型的广泛评估表明，当检索器为精确密集检索器、近似密集检索器和稀疏检索器时，RaLMSpec的加速比分别为1.75-2.39×、1.04-1.39×和1.31-1.77×与基线相比。对于 KNN-LM 服务，当检索器是精确的密集检索器和近似的密集检索器时，与baseline相比，RaLMSpec 可以实现高达 7.59× 和 2.45× 的加速比。</p>



<p></p>



<p>方法简析：</p>



<p>一般的RaLM从知识库中查找与用户输入相似度最高的文档（它们都会被转化成向量进行相似性比较），但是由于知识库中的文档数量很多，查找所需的时间长，所以迭代RaLM会因为冗长的查找流程而遇到堪忧的性能问题。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="401" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-1024x401.png" alt="" class="wp-image-222" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-1024x401.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-300x118.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-768x301.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-1536x602.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-670x262.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image.png 1672w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>对此，作者等人想到，可以<strong>推测一部分可能会用到的文献</strong>，提前存放在本地缓存中（这就是Speculative的地方），在本地缓存中查找文档与在知识库中查找文档的方法相似，但由于本地缓存的文档数远远小于知识库中的文档数，因此，查找会变得<strong>非常快速</strong>（这就是Speculative Retrieval）。</p>



<p>具体来说，RaLM有一个本地缓存，如果这个本地缓存是空的，就进行一次Initial Query，查找一些文档放入其中。随后查找的时候就只从这个缓存里面查找了。</p>



<p>但是本地缓存毕竟不是知识库（除非它有着和知识库几乎一样的文档，但是这样就没意义了），所以这样子查找会出错。作者们想到了一个法子，可以先查s个文档，然后再批量对这些文档进行验证（也就是从知识库批量对比这些文档是不是最相似的那些，这就是Batched Verification），如果发现某s个文档中的第i个文档出错了，就回滚到第i个文档，然后代之以正确的文档并将之加入到本地缓存里，随后再用新的文档生成新的prompt。这里的s被称为<strong>推测步长</strong>，而且s要取一个比较好的值，如果s太短，比如我们让s=1，那每从本地缓存里查出来一个文档，就要从知识库里查这个文档对不对，不管用不用这个方法，每查一次文档都要上一次知识库，那这岂不是白用这个方法了（笑）；如果s太长，假如s=114514，但s从第二个开始就错了，那后面的114512个文档就白查了。至于怎么取，后文有所介绍。</p>



<p>此外，检索步骤和验证步骤可以<strong>异步进行</strong>，这样效率会更高。</p>



<p>现在我们来说一说s是怎么实现的，作者们称这个方法为Optimal Speculation Stride Scheduler(OS<sup>3</sup>)，它能自动地确定最好的s。原理是这样的：</p>



<div class="wp-block-wp-mathjax-block mathjax">


考虑a代表一个检索步骤的耗时，b代表一个验证步骤的耗时, \\\gamma(X)=p(d_i=\hat{d}_i|X)代表着在上下文X中\\猜测文档d_i与正确文档\hat{d}_i相匹配的概率. \\记目标函数为\mathbb{E}(匹配文档数|X, s)\\为在上下文X中，推测步长为s时\\匹配到正确的文档的数学期望。
\\
对于同步验证，\\\mathbb{E}=1+\sum_{i=1}^{s-2}i\gamma(X)^i(1-\gamma(X))+(s-1)\gamma(X)^{(s-1)}\\=\frac{1-\gamma(X)^s}{1=\gamma(X)}\\
对于异步验证，\\\mathbb{E}=\frac{1-\gamma(X)^s}{(1-\gamma(X))[\gamma(X)^s((s-1)a+max(a,b))+(1-\gamma(X)^s)(sa+b)]}\\
只需要令s=arg\space max\space \mathbb{E}，即可求出最优的步长了。


</div>



<p>至于这个数学期望是怎么算出来的，就超出我的理解范围了（叹气）。</p>



<p>但是事情到这里还没有完，我们之前定义了三个参数，现在我们要讨论怎么估计它们了。对于a和b，可以直接依靠RaLM最近的表现来预测。但对于γ(X)，我们需要用到对数最大似然估计。作者们所用的式子是这样的：</p>



<div class="wp-block-wp-mathjax-block mathjax">


\hat{\gamma}(X)=\frac{\sum_tM(s(t),X)}{\sum_tM(s(t),X)+\sum_t\mathbb{I}(M(s(t),X) < s(t))}\\
其中，\mathbb{I}(·)是指标函数，表明若M(s(t), X) < s(t)，则其值为1，反之则为0.  \\s(t)， t \in [w] 表示第 t 个最近验证步骤中的推测步长，\\M(s(t),X)表示相应数量的匹配文档



</div>



<p>无论如何，我们已经有办法确定最优步长s了。下面就是RaLMSpec的流程：</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="368" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1024x368.png" alt="" class="wp-image-225" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1024x368.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-300x108.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-768x276.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-1536x552.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2-670x241.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-2.png 1612w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>他们先进行3个Speculative Retrieval(i.e. q0, q1, q2, 所查询到的文档为A, B, A)，随后对这些文档进行批量验证，在这里，q3所对应的A出错了（其实应该是C），所以将之修改为C，并将C存入到本地缓存中，然后重新进行LM Decoding环节。更精确的说，这段过程的伪代码是这样的：</p>



<pre class="wp-block-code"><code>1: Input: Input tokens X = {x0, x1,... , xt−1}, external corpus C, language model f(·)
2: Output: RaLM generated outputs
3: Initialize local cache Q = {}, speculation stride s, model generation stride k
4: q = encode(X), Q.insert(C.retrieve(q)) ▷ cache prefetching
5: <strong>while</strong> EOS <strong>not in</strong> X <strong>do</strong>
6: <strong>for</strong> i = 1 <strong>to</strong> s <strong>do</strong>
7: qi = encode(X),ˆdi = Q.retrieve(qi) ▷ speculative retrieval
8: Xˆi = f(X, ˆdi, k) ▷ model generation step that generates k new tokens
9: X = &#91;X, Xˆi]
10: <strong>end for</strong>
11: d1,... , ds = C.retrieve(q1,... , qs) ▷ batched verification
12: m = arg miniˆdi != di
13: <strong>if</strong> m ≤ s <strong>then</strong> ▷ do correction if needed
14: Roll X back to the m-th speculation step
15: Xˆ = f(X, di, k)
16: X = &#91;X, Xˆ]
17: <strong>end if</strong>
18: <strong>end while</strong></code></pre>



<p>大体上来说，这段代码主要是在：初始化本地缓存，并进行初始预取。在主循环中，进行推测性检索和生成新的token。每经过s次推测后，进行批量验证。如有需要，进行校正，确保生成结果的准确性。直到生成结束符 (EOS)，生成过程结束。</p>



<p></p>



<p>评估：</p>



<p>实验设置如下：</p>



<p>•<strong>LLMs</strong>: GPT2-medium, OPT-1.3B, LLaMA-2-7B. 对于KNN-LM服务，采用了16 layers, decoder-only, 247M的LLM</p>



<p>•<strong>Datasets:</strong></p>



<p>•四个 QA 数据集：Wiki-QA、Web Questions、Natural Question, Trivia-QA;</p>



<p>•外部知识库: Wikipedia Corpus;</p>



<p>•KNN-LM评估: Wikitext-003.</p>



<p>•<strong>Retrievers:</strong></p>



<p>•Exact Dense Retrievers(EDR): Dense Passage Retriever(DPR);</p>



<p>•Approximate Dense Retriever(ADR): DPR-HNSW;</p>



<p>•Sparse Retriever(SR): BM25 Retriever.</p>



<p>•<strong>Baseline:</strong></p>



<p>•Naïve Iterative RaLM: 使用RaLMSeq作为基准，在每个LLM生成4个token后执行检索;</p>



<p>•KNN-LM:对生成的每个token执行检索.</p>



<p>评估结果：</p>



<ol class="wp-block-list">
<li>RaLMSpec对EDR提升效果最显著，OS<sup>3</sup>对ADR，SR的提升作用最大</li>
</ol>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="770" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-3-1024x770.png" alt="" class="wp-image-226" style="width:593px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-1024x770.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-300x226.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-768x578.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3-670x504.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-3.png 1150w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="639" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-4-1024x639.png" alt="" class="wp-image-227" style="width:638px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-1024x639.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-300x187.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-768x479.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4-670x418.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-4.png 1411w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>2. EDR使用较大步长效果较好，但ADR则需要使用OS<sup>3</sup>。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="629" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-5-1024x629.png" alt="" class="wp-image-228" style="width:612px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-1024x629.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-300x184.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-768x472.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5-670x411.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-5.png 1334w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="587" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-6-1024x587.png" alt="" class="wp-image-229" style="width:603px;height:auto" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-1024x587.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-300x172.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-768x440.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6-670x384.png 670w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-6.png 1490w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>3. EDR相较ADR和SR表现较好，在1.70x~1.85x.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="239" src="http://migrate.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1024x239.png" alt="" class="wp-image-230" srcset="https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1024x239.png 1024w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-300x70.png 300w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-768x179.png 768w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-1536x358.png 1536w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-2048x478.png 2048w, https://blog.nanjihuaji.top/wp-content/uploads/2024/08/image-7-670x156.png 670w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure><p>The post <a href="https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/">RaLMSpec论文导读：使用推测方法加速RAG</a> first appeared on <a href="https://blog.nanjihuaji.top">南极滑稽的博客</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.nanjihuaji.top/2024/08/02/ralmspec%e8%ae%ba%e6%96%87%e5%af%bc%e8%af%bb%ef%bc%9a%e4%bd%bf%e7%94%a8speculative%e6%96%b9%e6%b3%95%e5%8a%a0%e9%80%9frag/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
