OpenAI新推出的Deep Research功能,属实有些惊艳,也验证了去年的一些观点,之后的大模型工作流会出现一些大相径庭的形态,有敏捷型的例如语音端到端的实时对话,也会有异步长流程的复杂任务,去做例如课题研究,信息收集,实行设计,假设验证等等。
而Deep Research的效果雷同O1的长思考是非常长的行为链,OpenAI也直接表明Deep Research是使用和O1相同的RL训练得到的。但这里比O1更难的就是数据集的设计,训练过程动态行为数据的引入和RL目的的选择。
这一章我们分别介绍从两个不同角度使用RL优化Agent行为链路的方案,其中PaSa更雷同Deep Research的链式行为链使用RL直接优化行为路径,而ARMAP则是使用RL优化Verifier引导行为链的生成。
Bytedance-PaSa
PaSa是字节推出的自动搜索相关论文(引用论文)的Agent,通过RL优化Policy模型,优化论文搜索和论文筛选行为,实现更全面,精准的论文搜索,充分考虑到论文搜索场景的长尾性,query的复杂性,以及论文引用的关联性等特点。
其实论文引用收集这个目的也可以用于综述类论文写作任务,因为写作类的开放任务很难使用基于规则的RL目的进行优化,但是如果假设模型的写作本领已经足够应对常见的任意写作任务,那是否收集足够的论据和论文就是综述类论文写作的一个间接衡量目的了。
数据集
对于智能体的行为优化,比力核心的部分就是数据集的构建,毕竟O1可以依赖更多有标准答案的Math和Coding数据集,而Agent优化必要依赖和实际天下交互获得的实时数据。这里论文开源了
- AutoScholarQuery训练数据:训练验证测试的划分分别为33511/1000/1000
- RealScholarQuery Benchmark: 包含50个标注的高质量
数据格式如下,包含用户的搜索query,搜索时间,以及和Query相关的论文标题列表
其中AutoScholarQuery的构建方式是搜集了2023,2024年的ICLR,ICML,N二UIPS,ACL,CVPR的论文,每篇论文都会使用Related work部分的内容,使用以下Prompt让GPT4-o生成研究员可能使用哪些Query来收集这些相关论文。这样Query和Related Work部分的论文就构成了以上的样本,时间用了比力宽松的论文发布时间。作者人工抽检了100条样本,整体query和论文的相似度在90%+。
平均每个题目对应的论文数目的统计如下,平均1个题目对应两篇以上论文,p90在5~6篇。
但这样构建的数据集有两个题目:
- paper list只是Query能搜索到的论文的一个子集,毕竟研究员写相关论文时往往只会列一些核心论文
- 缺少搜索路径,数据中并未包含研究员收集这些论文的过程,因此整个搜索行为链都要依赖RL进行路径搜索。
而RealScholarQuery测试Benchmark是筛选了真实研究员的50条详细的搜索Query,人工使用多种手段进行信息搜索,包括PaSa自身,Google, google Scholar, ChatGPT(搜索模式),GPT4o Query改写等等,把全部途径收集到的论文使用人工标注得到的高质量,高覆盖的数据集,因为标注本钱过高,所以只有50条,整体paper量级明显更高如下
Agent训练
如上图所示,论文设计了两个智能体进行配合
- Crawler:负责检索论文通过特殊token控制智能体的三种行为
- 【Search】生成检索Query进行论文搜索,把搜索到的论文插入Paper Queue
- 【Expand】且从已经搜索到的论文中提取引用论文,并把这些论文都插入到Paper Queue
- 【Stop】重新回到用户Query和当前Paper Queue中最新的论文
- Selector:针对Paper Queue中的每篇论文,判断和用户提问是否相关,丢弃无关的,保留相关的。
整体上Crawler负责提拔召回,Selector负责提拔准确。考虑这里Crawler必要启发式检索的所以使用RL训练,而Selector更多是descriminate的任务直接用Prompt或者监督微调就可以。所以下面我们重点说下Crawler RL训练的细节,整个训练的核心目的就是更高效率,在尽可能少的检索行为下搜索到最全面的论文。
首先是Crawler的两个行为,搜索和引用论文定位,它们的实现分别通过以下Prompt实现
奖励函数的定义
奖励函数的公式如下:
\[r(s_t, a_t) = \alpha \times \sum_{i=1}^{n_t} \mathbb{I}(q, p_i, t) - c(a_t) \]
其中:
- s_t是当前的状态(包括当前的LLM上下文和论文队列)。
- a_t是Crawler在当前状态下实行的动作。
- \(\alpha\)是一个奖励系数,用于调整奖励的幅度。
- n_t是实举措作a_t后添加到论文队列中的新论文数目。
- \(\mathbb{I}(q, p_i, t)\)是一个指示函数,用于判断论文$ p_i$是否与用户查询 q相关。
- c(a_t)是实举措作a_t的本钱。
其中\(\mathbb{I}(q, p_i, t)\)判断用户Query和论文是否相关,论文考虑到以上训练集中每个Query标注的论文,只是真实答案的子集,因此增补了Selector==1的论文。而搜索本钱的选择,C(search)=0.1, C(expand)=0.1, C(stop)=0。
奖励的盘算过程
- 实举措作:Crawler在当前状态下实行一个动作a_t,例如,实行搜索或扩展引用。
- 更新论文队列:实举措作后,Crawler会将新找到的论文添加到论文队列中。
- 盘算奖励:对于每个新添加的论文p_i,Selector+数据集标注共同检查它是否与用户查询相关。如果相关,则增加奖励;否则,不增加奖励。
- 减去动作本钱:最终奖励是相关论文的奖励总和减去实举措作的本钱。
多Session训练过程
明确了奖励函数另有1个问起必要办理就是整个搜索过程的长轨迹和长轨迹带来的稀疏奖励题目。因此论文选择了分Session来进行奖励函数的盘算,而Session的划分,就是使用以上的Stop Token,包括两种行为链
- Search Session:用户查询q → 生成搜索词 → 调用搜索工具 → 结果加入队列 → [Stop]。
- Expand Session:处理队列中的论文p → 提取子章节引用 → 新论文加入队列 → [Stop]。
而每个Session励函数的盘算会同时考虑这些新论文的实时价值(session内奖励),也就是r(s_t,a_t),也会考虑这些新找到的论文,对后面找到更多论文带来增量价值(跨session奖励)的影响,而这部分跨Session的影响,是通过将来状态的期望来进行估计的。例如Expand行为发现了5篇新的论文,那跨session的奖励,就是这5篇论文在将来Session中价值的折现。
\[V_{\phi}(s) \approx \mathbb{E}_{\pi_{\theta}} \left[ \sum_{k=0}^{\infty} \gamma^k r(s_t, a_t) \mid s_0 = s \right]\]
其中:
- \(\gamma\)是折扣因子,表示将来奖励的重要性。
- \(r(s_t, a_t)\)是在状态s_t下接纳动作a_t后得到的即时奖励。
那详细每个session的奖励函数,就是分别包括了该session直接获得的论文带来的实时奖励,以及该论文内部引用论文在将来session带来的预期奖励,并增加了KL散度来避免策略函数偏离过大。
\[\hat{R}_t = \sum_{k=0}^{t_{i+1}-1-t} \gamma_0^k \left[ r(s_{t+k}, a_{t+k}) + \gamma_1 \sum_{j=1}^{n_{t+k}} \hat{V}_\phi(S_{q+p_j}) - \beta \cdot \log \frac{\pi_\theta(a_t|s_t)}{\pi_{\text{sf}t}(a_t|s_t)} \right]\]
奖励函数对应的就是上风函数,如果奖励函数凌驾该状态的平均价值,则意味着策略函数应该进行该动作例如Search或者Expand,反之不应该。这样策略函数(LLM)就可以依赖以下的上风函数提供的信号,来优化大模型生成行为链的过程了。
\[\hat{A}(s_t, a_t) = \hat{R}_t - V_{\phi}(s_t)\]
PPO训练过程中为了稳固,论文选择了先冻结策略函数训练价值函数,再同时开放训练,并且在PPO之前也采用了SFT进行Imitation Learning。其他细节我们就不详细介绍了,感爱好的同学可以直接去看论文。
MIT-IBM:ARMAP
ARMAP是面向购物场景的多模态Web Agent,论文的出发点是在多步Agent的场景中评估比生成要简单,所以论文使用RL对Agent的多步行为链的Reward模型进行优化,并使用该Reward模型来引导Agent的行为链路选择。Take away主要是论文给出了自动构建Agent对比行为链样原来训练reward模型的方案。
如上图所示,论文选择了Offline Training的方案,也就是离线构建成功和失败的大模型行为链路,然后使用RL进行优化训练,整个样本构建的流程可以分成以下3个步骤: 生成任务指令,大模型基于指令生成行为链路,构建正负行为链的样本对。样本构建流程之后就是Reward模型训练,以及基于Reward模型的Agent行为链路搜索生成。详细细节如下
这里以Science World数据集举例,它是一个假造环境,环境中智能体可移动,可观测环境并改变环境状态。这个任务里生成Agent初始任务指令的Prompt如下,输入包括fewshot,对环境状态(state)的描述,和Agent可操作行为的描述,让模型生成Agent必要完成的任务指令,例如“你要寻找个活人跟他say hello之类”
 - SCIWORLD_GEN = """You are a helpful assistant to do some scientific experiment in an environment.
- In the environment, there are several rooms: kitchen, foundry, workshop, bathroom, outside, living room, bedroom, greenhouse, art studio, hallway
- The available actions are:
- open OBJ: open a container
- close OBJ: close a container
- activate OBJ: activate a device
- deactivate OBJ: deactivate a device
- connect OBJ to OBJ: connect electrical components
- disconnect OBJ: disconnect electrical components
- use OBJ [on OBJ]: use a device/item
- look around: describe the current room
- examine OBJ: describe an object in detail
- look at OBJ: describe a container's contents
- read OBJ: read a note or book
- move OBJ to OBJ: move an object to a container
- pick up OBJ: move an object to the inventory
- pour OBJ into OBJ: pour a liquid into a container
- mix OBJ: chemically mix a container
- teleport to LOC: teleport to a specific room
- focus on OBJ: signal intent on a task object
- wait: task no action for 10 steps
- wait1: task no action for a step
- You will be given a dialogue between you (assistant) and a human user. You need to generate the task description after understanding the dialogue given to you.
- In order to help you better generate the task description, I will give you an example below.
- In this example, a human user gives a Task Description at first.
- Then you work as an assistant and talk with user to finish the task step by step using the available actions above.
- Thought and Action are your reasoning and the actions you take at each step. Observation is provided by the human user; it is an observation of the surrounding environment after you have executed the action.
- In the end, you need to restore the Task Description based on the whole dialogue.
- Here is the example:
- 此处省略大段Example
- Here is the task you need to do:
- [placeholder]
- You should generate the Task Description following the format like examples below and generate it based on the dialogue above without any other words.
- Examples:
- Your task is to boil ice cream. For compounds without a boiling point, combusting the substance is also acceptable. First, focus on the substance. Then, take actions that will cause it to change its state of matter.
- Your task is to use chemistry to create violet paint. When you are done, focus on the violet paint.
- Your task is to find a(n) living thing. First, focus on the thing. Then, move it to the red box in the bathroom.
- Task Description:
- """
复制代码 基于以上生成的任务指令,会在使用Prompt让模型来生成多样的行为链路,这一步是借助当前模型本领对Agent行为路径进行探索。并且还引入了对完整行为链的反思本领,对已生成的行为链进行二次的优化。Prompt太长这里就不展示,不过和以上Instruction Gen的Prompt主体相同,都是给出状态,可用行为,让模型生成下一步的Action。
针对以上生成的多样的行为链路,论文会使用prompt把精确的行为链路作为上文,让模型给出和精确链路相似的错误链路,这样就能构建对比样本对,帮助Reward模型学习定位关键的错误节点。以下是论文给出的一个正负样本对比
基于以上的正负样本对对VILA模型进行强化学习,RL的丧失函数就是让模型能明显区分以上精确的行为链路和错误的行为链路,也就是cross-entropy Loss。(原来我以为都构建关键错误步骤了,难道不是训练PRM?让模型识别关键错误步骤,这样可以在生成阶段识别错误步骤,结果是整体行为质量判断)
基于Reward模型就可以进行推理搜索,这里论文实行了Best-of-N,Reflection和MCTS,这三种广度,深度,和树形搜索策略,感觉之前在Inference Scaling的实行上,基本上MCTS在多数场景下效果都是最好的,在这里也不例外。
其实这一步是为数不多感觉故意思的点,就是可以根据不同目的调整Reward目的的设计,例如加入步数Penalty,雷同当前对长思考COT长度的Penalty,引导Agent在更少的步数里面完成整个任务,或者在webshop任务里面加入代价奖励,引导模型在购物搜索时寻找代价更低的产品。
这其实是后面Agent RL设计的一个很故意思的方案,就是针对不同场景的Agent诉求,在已有任务目的的基础上,加入更多约束项,例如金融里面在保证收益的基础上要控制回撤,控制调仓频率等等。
想看更全的大模型论文·微调预训练数据·开源框架·AIGC应用 >> DecryPrompt
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |