引言

看到一则报道[1],重组后的Meta实验室在9月1号发布了一篇关于提升RAG解码效率的论文,提出的思路有点启发作用,于是把原文下载下来仔细看下。

论文标题:REFRAG: Rethinking RAG based Decoding

论文地址:https://arxiv.org/pdf/2509.01092

1. 动机

通过将外部知识检索结果与用户问题拼接后输入模型,检索增强生成(RAG)已成为提升模型回答质量的重要途径。

然而,这种机制的代价极其高昂:拼接的上下文通常包含数千甚至上万 Token,其中只有少数段落与问题密切相关,其余则是冗余信息。对于解码器而言,这意味着需要维护线性增长的 KV Cache,同时在预填充阶段进行近似二次复杂度的注意力计算,导致**首 Token 延迟(TTFT)**大幅增加,吞吐量下降。

现有的长上下文优化方法大多从稀疏注意力或高效缓存角度出发,但这些方案往往面向一般长文本任务,而未能利用 RAG 特有的“块对块低相关性”结构性特征。于是,REFRAG 的提出正是为了填补这一空白,它将 RAG 的解码过程重新设计为一个压缩、感知与扩展的动态过程,从而显著降低延迟与计算成本。

2. 框架

REFRAG 的核心思路是将检索得到的长上下文从 Token 级别提升到 Chunk 级别表示

具检索文档会被切分为固定大小的块,每个块通过轻量级编码器(如 RoBERTa)生成一个压缩后的向量表示,再通过投影层映射到解码器可理解的 Token 空间。

这样,原本需要处理数千 Token 的解码器输入被压缩为几百个 Chunk Embedding,输入规模大幅缩短,注意力计算也随之减少。

并且,REFRAG 并未牺牲自回归生成的特性,Chunk Embedding 可以插入在任意位置,与原始 Token 并存,从而保持方法的普适性。

为了避免“一刀切”压缩带来的信息损失,REFRAG 还引入了一个轻量的强化学习策略,动态决定哪些 Chunk 必须保留原文 Token,哪些可以以压缩表示替代。这一机制使得模型能够在有限算力预算下,把计算资源分配到最关键的上下文部分。

整体流程如下图所示。

下图展示了REFRAG和其它方法在以下三个指标上的加速效果:

  • TTFT (Time to First Token): 首词元生成延迟,指的是模型接收到输入指令后,生成并输出第一个词元(token,可以理解为一个单词或一个汉字)所花费的时间。这个指标衡量的是模型的“反应速度”。
  • TTIT (Time to Iterative Token): 迭代词元生成时间,指的是在生成第一个词元之后,生成每一个后续词元所花费的时间。这个指标衡量的是模型生成连续文本的“输出速度”。
  • Throughput: 吞吐量,指的是单位时间内(通常是每秒)模型能够生成的总词元数量。这个指标是衡量模型整体处理效率和性能的关键指标,综合了启动延迟和生成速度。

3. 具体方法

在 REFRAG 的方法论中,核心挑战是:如何让解码器能够“理解”由编码器生成的块级压缩表示,并在必要时动态选择哪些块需要恢复为原始 Token,从而保证生成质量。

为此,作者提出了一套 分阶段训练流程,具体流程如下:

3.1 编码器与解码器对齐:持续预训练(CPT)

REFRAG 的关键创新在于用 Chunk Embedding 替代原始 Token 嵌入。然而,解码器原本是习惯接收逐 Token 的序列表示,如果直接将压缩后的向量送入解码器,模型很难理解其中的语义。因此,需要一个 对齐过程

具体做法是设计 下段预测(Next Paragraph Prediction)

任务:给定输入 Token 的前半部分 x1:sx_{1:s}x1:s,由编码器生成 Chunk Embedding,辅助解码器预测接下来的 Token xs+1:s+ox_{s+1:s+o}xs+1:s+o

通过这种方式,解码器逐渐学会利用压缩表示来完成预测,形成对 Chunk Embedding 的依赖关系。这一步训练被称为 持续预训练(CPT),是连接编码器和解码器的桥梁。

3.2 重建任务:减少信息损失

仅仅通过下段预测进行对齐仍然不足,因为 Chunk Embedding 本身会丢失部分细节。为此,作者在 CPT 前额外引入了一个 重建任务(Reconstruction Task)

  • 输入:原始上下文 Token 块 x1:sx_{1:s}x1:s
  • 编码器:压缩为向量表示
  • 解码器:尝试从压缩向量重建原始 Token 序列

在该任务中,解码器参数被冻结,只训练编码器和投影层。这相当于让编码器学会“尽可能无损地压缩”,而投影层学会“把向量翻译回 Token 空间”。经过这一阶段,编码器与投影层能生成较为保真的压缩表示,解码器也能正确解读,从而为后续 CPT 奠定基础。

3.3 课程学习:缓解训练难度

当块大小 kkk 增大时,压缩任务变得极其困难,因为需要用一个定长向量表示 VkV^kVk 种 Token 组合(VVV 是词表大小)。直接训练模型去重建大块信息容易陷入困境。为解决这个优化难题,REFRAG 引入 课程学习策略

  • 单块重建 开始(例如只压缩 x1:kx_{1:k}x1:k 并重建它)。
  • 随着训练进行,逐步增加块数(重建 2k,3k,...2k, 3k, ...2k,3k,... 的序列)。
  • 在数据采样上,先以简单任务为主,逐步增加复杂任务的比例。

这种渐进式训练让模型逐步掌握压缩表示的规律,而不会在一开始就陷入高维空间的难题。

3.4 选择性压缩:强化学习策略

尽管压缩能带来效率提升,但并非所有上下文块都适合压缩。例如,一个包含关键定义或数值的段落,如果被过度压缩,可能严重影响模型输出的正确性。因此,REFRAG 引入了一个 强化学习(RL)策略网络,用来在推理时动态决定:

  • 哪些块保留原始 Token(高保真但开销大);
  • 哪些块替换为 Chunk Embedding(低开销但近似)。

训练方式如下:

  • 奖励信号:使用预测困惑度(Perplexity)作为负奖励,即如果某块被压缩后困惑度急剧上升,说明信息损失过大,应保留原文。
  • 策略机制:RL 策略在序列层面逐步做决策,以保证解码器的自回归特性不被破坏。
  • 输出形式:生成一个压缩掩码(mask),指导哪些块用向量替代,哪些保留 Token。

与启发式规则(如“压缩低困惑度块”)相比,RL 策略在不同任务和不同上下文规模下都能取得更优的平衡,证明了其灵活性和鲁棒性。

3.5 微调阶段(SFT)

完成 CPT 和 RL 策略学习后,REFRAG 还需要进一步在具体下游任务(如问答、对话、摘要)上进行 监督微调(SFT)。这一阶段的目标是让模型在实际应用中学会如何最优地结合压缩块与原始块,从而兼顾速度和准确性。

4. 实验

4.1 实验设置与基线

作者主要在 LLaMA-2-7B 模型上进行实验,并将其与几种典型的长上下文优化方法作对比,包括:

  • LLaMA-Full Context:原始 LLaMA 模型,完整上下文输入。
  • LLaMA-32K:扩展上下文窗口到 32K Token 的版本。
  • LLaMA-No Context:不输入上下文,只依赖提示。
  • LLaMA256:只保留最近 256 Token 上下文。
  • REPLUG:优化检索器的方法。
  • CEPE:基于 KV Cache 的压缩扩展方法。
  • REFRAG8 / REFRAG16 / REFRAG32:分别对应压缩率为 8、16、32 的 REFRAG 模型。

训练数据采用 SlimPajama 子集(包括 Books、ArXiv 等文档),用于持续预训练;验证与测试数据包括 PG19(长篇小说)、ProofPile(数学推理)等,用于检验长文本理解和生成能力。

这张表的评价指标是困惑度(Perplexity),是衡量语言模型预测下一个 token 的不确定性:

  • PPL 越小,说明模型越“不困惑”,模型能更准确地预测下一个 token,说明语言理解/生成能力更强。
  • PPL 越大,说明模型越“困惑”,模型给正确词分配的概率很低,相当于“没猜对”,性能差。

4.2 推理效率与加速效果

REFRAG 的最大亮点在于显著降低了 首 Token 延迟(TTFT)

  • 压缩率 32 的设定下,REFRAG 在 LLaMA-2-7B 上实现了 30.85× 的 TTFT 加速,吞吐率也提升了数量级。
  • 相比之下,CEPE 的加速倍数仅为 3.75×,说明 REFRAG 在利用结构性稀疏性方面更高效。
  • 更重要的是,这种大幅提速并未导致困惑度显著上升,说明压缩表示并未破坏模型的语义理解能力。

此外,REFRAG 的推理开销主要集中在预填充阶段,一旦完成压缩处理,后续 Token 的生成速度与原始 LLaMA 基本一致,这保证了系统在实际应用中的低延迟体验。

4.3 消融实验

作者进一步进行了消融实验,以验证各个组件的贡献:

  • 无重建任务:困惑度显著上升,说明重建训练对于压缩表示的保真性至关重要。
  • 无课程学习:模型难以收敛,训练过程不稳定。
  • 无强化学习策略:准确率下降,说明启发式压缩无法适应不同任务和上下文复杂度。

总结

本文提出方法优势在于它是非侵入式的,即没有对下游的语言模型进行改造,理论可适配现有的语言模型,

然而,这项工作实际上只在7B参数级规模的模型上进行实验,更大参数量的语言模型的效果未可知。

并且,此方法需要训练过程是比较多的,按照文章给出的实验环境,在8个节点上进行训练(每个节点8张H100),总共64张H100,也只有meta这样的实验室有这种实验资源。

最后,本文暂未开源,一些方法细节尚未可知。

总之,整体是一个不错的想法,在提升模型响应速度和提升上下文窗口长度上,是一个新的思路。

参考

[1] Meta超级智能实验室首篇论文:重新定义RAG: https://www.qbitai.com/2025/09/329342.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96477.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96477.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96477.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT M/V架构开发实战:QFileSystemModel介绍

目录[TOC](目录)前言一、QFileSystemModel初步介绍二、基本功能1.创建2.基本属性与方法三、示例(简单的文件浏览器)四、性能注意事项前言 本文主要介绍的是使用代码生成的情况下对控件的介绍,包括拥有的功能及能修改的样式,也会说…

视频生成迎来效率革命!字节提出视频生成稀疏注意力机制,计算量降20倍,速度升17.79倍!

论文链接:https://arxiv.org/pdf/2509.01085亮点直击BSA——一种可训练的双向动态稀疏注意力框架,该框架首次在视频扩散训练中对全注意力机制中的查询(Query)及键值对(Key-Value)进行正交稀疏化处理以加速训…

STM32HAL库_cubeMX

ADC简介STM32f103的是12位逼近型ADC代码连续非扫描模式(1个通道)1:校准ADC(这个可要可不要)2:ADC初始化3:配置ADC通道(这个函数只有一个通道时就是可要可不要)4&#xff…

【Qt】清空QDateTimeEdit

代码 ui->startDate->setSpecialValueText(" "); //这里是空格 ui->startDate->setMinimumDate(QDate(2024, 1, 1)); ui->startDate->setDate(QDate::fromString("2024-01-01", "yyyy-MM-dd"));原理 设置特殊值显示文本&#…

LiTS 2017 datasets

下载记录 论文地址:https://doi.org/10.1016/j.media.2022.102680 官方下载链接:https://competitions.codalab.org/competitions/17094 进入链接后,需要先注册才能拿到下载点击Train data下面的Mirro1,在google云盘会看到Trai…

kafka3.8集群搭建

kafka集群需要三台机器搭建,并使用内置zookeeperIP10.0.0.110.0.0.210.0.0.3安装jdk # ubuntu sudo apt install -y openjdk-8-jdk-headless # centos sudo yum install -y java-1.8.0-openjdk下载kafka wget https://archive.apache.org/dist/kafka/3.8.1/kafka_2…

从15kHz 到20MHz:为什么LTE带宽不能被子载波间隔整除?

从 15 kHz 到 20 MHz:为什么 LTE 带宽不能被子载波间隔整除? 1. 引言 在 LTE 系统中,子载波间隔被固定为 15 kHz,而系统带宽却被设计为 1.4、3、5、10、15、20 MHz 六个档位。乍一看,这些带宽似乎无法被 15 kHz 整除&a…

html css js网页制作成品——HTML+CSS娃娃店网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML

【计算机网络 | 第15篇】动态主机配置协议

文章目录为何需要DHCP?手动配置的痛点🤔DHCP的基本工作模式🥝DHCP的核心功能:IP地址的动态管理🥝租用期的特点租用期的管理机制DHCP四步工作流程:从“发现”到“绑定”🐦‍🔥中继代理…

嵌入式系统内存分段核心内容详解

一、嵌入式内存分段整体规则(按地址从低到高)嵌入式系统内存按 “功能 属性” 划分为 6 个核心段,地址从低到高依次分布,各段职责与存储对象明确,具体规则如下表:地址范围段类型(Segment&#…

开发避坑指南(45):Java Stream 求两个List的元素交集

需求 java 中如何用stream求两个List元素的交集&#xff1f; 代码实现 直接上代码 public class ListTest {public static void main(String[] args) {List<Integer> list1 new ArrayList<>();list1.add(1);list1.add(2);list1.add(3);List<Integer> list2 …

gitlab流水线与k8s集群的联通

gitlab流水线与k8s集群的连接&#xff0c;首先是通过gitlab-ci.yml文件中的命令&#xff0c;通过runner执行器实例运行对应的kubectl命令实现的。 那么runner执行器实例执行器如何执行kubectl命令&#xff0c;执行环境的配置&#xff0c;kubectl命令如何与k8s集群互认&#xff…

【Linux】常用命令速查表

Linux 常用命令速查表查看进程内存映射pmap -x <pid> # 查看进程的内存映射信息查看系统架构uname -m # 查看操作系统架构&#xff08;x86_64 / arm64 等&#xff09;磁盘与文件du -sh /home/* # 查看 /home 下每个用户目录的大小&#x…

Windows下编译SLEPc

本文记录在Windows下编译SLEPc的流程。 零、环境 操作系统Windows 11VS Code1.92.1MSYS2msys2-x86_64-20250830 一、安装依赖 1.1、依赖 首先&#xff0c;下载并安装MSYS2&#xff0c; 打开MSYS2 MINGW64控制台&#xff0c;运行以下命令安装依赖包&#xff0c; pacman -S …

运动生理实验室解决方案 人体生理实验整体解决方案

&#xff08;一&#xff09;、硬件参数 集成化折叠式无创型生理实验平台&#xff1a;1.1、 集成化设计:至少包含设备操作台、可收纳式交互实验桌、可收纳式检查床、生物信号 采集处理系统、计算机工作站集成于一体的高度集成设计&#xff1b;&#xff08;o561-6o623…

Axure RP 9 最新版安装包+安装步骤Win系统适用(附安装包)

Axure RP 9​ 是一款专业的 ​原型设计工具&#xff0c;主要用于 ​网站、APP、软件等产品的界面设计和交互原型制作。 一、准备工作 ​下载好安装包​ Axure RP 9安装包下载&#xff1a;https://pan.quark.cn/s/bc2b35011106 二、开始安装 第一步&#xff1a;双击运行安装包…

AutoMQ 亮相首尔:KafkaKRU 分享日志流处理新思路

全球 Kafka 社区都在关注 AutoMQ&#xff01;凭借在 Kafka 生态的独特创新&#xff0c;AutoMQ 深受 Kafka 用户喜爱&#xff0c;已成为众多企业和开发者的首选实时数据解决方案。昨天&#xff0c;我们非常高兴看到来自韩国的 KafkaKRU 核心社区在首尔举办第2届官方线下交流会。…

从零开始使用 axum-server 构建 HTTP/HTTPS 服务

axum-server 是 Rust 生态中为 axum 框架设计的高性能服务器实现&#xff0c;基于 hyper&#xff08;底层 HTTP 引擎&#xff09;和 tower&#xff08;服务抽象&#xff09;构建&#xff0c;支持 HTTP/1、HTTP/2 及 HTTPS。本教程将从环境准备到实战功能&#xff0c;一步步带你…

电路运行的核心-RTC

1. 时钟芯片是什么&#xff1f;时钟芯片&#xff0c;更准确的名称是实时时钟芯片&#xff0c;英文是 Real-Time Clock&#xff0c;简称 RTC。它是一个专用的集成电路&#xff0c;其核心功能是追踪时间和日历。你可以把它想象成电子设备里的一个“电子表”或“日历钟”。关键特性…

AR消防头盔:火场救援的智能“透视眼”

在浓烟弥漫、能见度几乎为零的火场中&#xff0c;消防员们依靠什么来精准掌握队友的位置和状态&#xff1f;答案是AR智能消防头盔&#xff08; www.teamhelper.cn &#xff09;。这种头盔通过多种定位技术的融合&#xff0c;为消防员提供了强大的团队协作和指挥协同能力&#x…