【大模型思维链】RAP-MCTS算法详解

在这里插入图片描述

基于论文第3.3节、附录A及算法1,以下是对RAP-MCTS伪代码的逐行技术解析与系统性分析:


一、算法框架与输入参数

1.1 输入参数体系(基于第3.3节与算法1)

参数数学符号功能定义工程对应
初始状态s0s_0s0推理起点(如Blocksworld初始积木配置)问题输入
状态转移pθp_\thetapθ世界模型(LLM改造)p(st+1∣st,at,c′)p(s_{t+1}|s_t, a_t, c')p(st+1st,at,c)
奖励函数rθr_\thetarθ四维度评估(第3.2节)r(st,at)r(s_t, a_t)r(st,at)
动作生成器pφp_\varphipφ智能体LLM策略p(a∣st,c)p(a|s_t, c)p(ast,c)
分支因子ddd每节点扩展的动作数控制树宽度
深度限制LLL最大推理步数防止无限搜索
迭代次数NNNMCTS模拟次数计算预算
探索权重wwwUCT公式中平衡探索/利用ccc in UCT1

1.2 初始化数据结构(第1-2行)

A: S → A(s)# 动作记忆:记录每个状态s的候选动作集合 c: S×A → S # 子节点映射:状态-动作对 → 下一状态 r: S×A → R # 奖励映射:状态-动作对的即时奖励 Q: S×A → R # 动作价值函数:长期累积回报估计 N: S → N # 访问计数器:状态被访问次数

关键设计:与标准MCTS不同,RAP显式维护动作记忆 A(s)A(s)A(s) 和子节点映射 c(s,a)c(s,a)c(s,a),这是因为LLM动作空间巨大且随机,无法像围棋那样枚举所有合法动作(附录A:“对于开放域问题,无法枚举所有可能行动”)。


二、主循环:四阶段详解(第3-23行)

2.1 选择阶段(Selection,第5-10行)

while N(s_t)>0:# 树策略:沿已访问节点下行 N(s_t) ← N(s_t)+1# 更新访问计数 a_t ← argmax[UCT公式]# 公式(1)实现 r_t = r(s_t, a_t)# 获取即时奖励(用于后续反向传播) s_{t+1} ← c(s_t, a_t)# 通过子节点映射转移状态 t ← t +1

UCT公式实现(第7行对应公式1):
at=arg⁡max⁡a∈A(st)[Q(st,a)+wln⁡N(st)N(c(st,a))]a_t = \arg\max_{a \in A(s_t)} \left[ Q(s_t, a) + w\sqrt{\frac{\ln N(s_t)}{N(c(s_t, a))}} \right]at​=arga∈A(st​)max​[Q(st​,a)+wN(c(st​,a))lnN(st​)​​]

工程细节(附录A补充):

  • 未探索动作处理:若存在 a∈A(st)a \in A(s_t)a∈A(st​) 满足 N(c(st,a))=0N(c(s_t,a))=0N(c(st​,a))=0(即未访问),算法使用轻量级局部奖励(如仅 r3r_3r3​ 自我评估)估算初始Q值,而非标准UCT的无穷大探索 bonus
  • 终止检查:若 sts_tst​ 为终止状态(满足目标或失败),跳过扩展直接进入反向传播

2.2 扩展阶段(Expansion,第11-15行)

while $s_t$ 非终止状态 ∧ t ≤ L:# 限制搜索深度for i ← 1 to d:# 生成d个候选动作 $a^{(i)}_t ~ p_φ(a|s_t)$ # 从智能体LLM采样动作 $s^{(i)}_{t+1}~ p_θ(s_t, a^{(i)}_t)$ # 世界模型预测下一状态 $r^{(i)}_t ~ r_θ(s_t, a^{(i)}_t)$ # 计算四维度奖励# 更新记忆结构 $A(s_t) ← {a^{(i)}_t}_{i=1}^d$ $c(s_t, a^{(i)}_t) ← s^{(i)}_{t+1}$ $r(s_t, a_t) ← r^{(i)}_t$ 

与标准MCTS的关键差异:

  • 动作空间截断:标准MCTS通常枚举所有合法动作(如围棋19×19=361个落子点),而RAP通过采样固定数量d(如d=5)来应对开放域的无限动作空间(附录A:“通过从LLM中采样固定数量的潜在行动来缩减行动空间”)
  • 世界模型调用:每次扩展需调用LLM两次(一次生成动作,一次预测状态),计算成本显著高于传统MCTS的确定性状态转移

2.3 模拟阶段(Simulation/Rollout,第16-18行)

a_{t+1} ← argmax_{a ∈ A(s_t)} r(s_t, a_t)# 选择局部最优动作 r_t ← r(s_t, a_t)# 记录奖励 s_{t+1} ← c(s_t, a_t)# 状态转移 t ← t +1

策略选择(第3.3节):

  • 默认策略(Default Policy):采用贪婪策略(greedy rollout),即选择当前奖励最高的动作,而非随机策略
  • 轻量级奖励:为效率考虑,模拟阶段使用简化版奖励函数(如仅使用 r1r_1r1​ 和 r3r_3r3​,舍弃需多次采样的 r2r_2r2​ 状态置信度)

深度限制:模拟持续直至到达终止状态或深度 LLL,形成完整轨迹 (s0,a0,r0,...,sT)(s_0, a_0, r_0, ..., s_T)(s0​,a0​,r0​,...,sT​)

2.4 反向传播(Backpropagation,第20-22行)

for t' ← t downto 0:# 从叶节点回溯至根节点 根据 {r_{t'}, r_{t'+1},..., r_t} 更新 Q(s_{t'}, a_{t'})

Q值更新规则(第3.3节):

  • 累积回报计算:Rt′=∑k=t′tγk−t′rkR_{t'} = \sum_{k=t'}^{t} \gamma^{k-t'} r_kRt′​=∑k=t′t​γk−t′rk​(论文未明确折扣因子 γ\gammaγ,但通常取1或0.9)
  • 增量平均更新:
    Q(st′,at′)←Q(st′,at′)+Rt′−Q(st′,at′)N(st′,at′)Q(s_{t'}, a_{t'}) \leftarrow Q(s_{t'}, a_{t'}) + \frac{R_{t'} - Q(s_{t'}, a_{t'})}{N(s_{t'}, a_{t'})}Q(st′​,at′​)←Q(st′​,at′​)+N(st′​,at′​)Rt′​−Q(st′​,at′​)​

关键机制:即时奖励 rtr_trt​(包含四维度信号)通过反向传播影响祖先节点的Q值,使得早期错误动作(低 r3r_3r3​ 自我评估)在后续迭代中被UCT公式惩罚,实现错误回溯(backtracking of errors)。


三、算法终止与输出(第23行后)

算法终止后,从构建的树中选择最终轨迹(第3.3节):

  1. 最大Q值路径:从根节点开始,迭代选择 arg⁡max⁡aQ(s,a)\arg\max_a Q(s,a)argmaxa​Q(s,a) 直至叶节点
  2. 最高奖励路径:选择在所有迭代中获得最高累积奖励 RRR 的路径
  3. 最多访问路径:选择被访问次数最多的叶节点对应路径(最稳健策略)

RAP聚合(第3.4节):对于数学推理等仅需最终答案的任务,可运行多次MCTS(不同随机种子),对多条轨迹的答案进行多数投票(majority voting)。


四、与标准MCTS的系统性差异(基于附录A)

特征标准MCTS(如AlphaGo)RAP-MCTS工程影响
动作空间有限、可枚举无限、开放域,采样d个动作需设计好的动作生成器 pφp_\varphipφ
状态转移确定性或学习得到的模型LLM作为世界模型 pθp_\thetapθ转移概率非平稳,依赖提示词
奖励结构通常仅终局奖励每步四维度奖励 r1r_1r1-r4r_4r4可中间剪枝,但计算成本高
模拟策略随机或基于策略网络贪婪选择(基于轻量级奖励)减少rollout方差,但可能错过好路径
探索机制标准UCTUCT + 未探索节点局部奖励估计适应有限迭代预算(N=10/20)

五、计算复杂度分析

单次迭代成本:

  • 选择阶段:O(d⋅L)O(d \cdot L)O(d⋅L) 次查表(假设树已部分构建)
  • 扩展阶段:2d2d2d 次LLM调用(动作生成 + 状态预测)+ ddd 次奖励计算(r2r_2r2​ 需多次采样,成本最高)
  • 模拟阶段:O(L)O(L)O(L) 次轻量级奖励计算
  • 反向传播:O(L)O(L)O(L) 次Q值更新

总成本:O(N⋅d⋅(CLLM+Creward))O(N \cdot d \cdot (C_{\text{LLM}} + C_{\text{reward}}))O(N⋅d⋅(CLLM​+Creward​)),其中 CLLMC_{\text{LLM}}CLLM​ 为单次LLM推理成本。第4节实验使用 N=10N=10N=10 或 202020,ddd 通常为3-5,这使得RAP比CoT慢5-100倍(ToT论文附录B.3类似分析)。


六、算法局限性(基于第6节)

  1. 世界模型误差累积:若 pθp_\thetapθ​ 在第 ttt 步预测错误状态,后续所有 QQQ 值估计将基于错误前提(第6节:“未来工作可通过微调改进世界模型”)
  2. 奖励校准敏感性:若 r3r_3r3​(自我评估)过度自信,算法可能过早剪枝正确路径
  3. 深度限制 LLL 的设定:对于需要长程推理的问题(如>6步的Blocksworld),固定 LLL 可能导致无法找到解(第5.1节补充实验显示6步以上成功率下降)

Read more

【Java】从树形结构到二叉树:一篇搞懂数据结构里的“家族树”

【Java】从树形结构到二叉树:一篇搞懂数据结构里的“家族树”

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:Java.数据结构 【前言】 你有没有想过,电脑里的文件分类、通讯录的层级关系,其实都藏着“树”的影子?树形结构是数据结构里最像“现实家族关系”的存在,而二叉树更是其中的“明星选手”——它规则清晰、操作灵活,是很多复杂数据处理的基础。这篇文章会从树形结构的概念入手,一步步拆解二叉树的类型、性质、存储和操作,帮你把这些抽象的结构变成能上手用的知识~ 文章目录: * 一、树形结构 * 1.树形结构的概念 * 2.树的表示形式 * 二、二叉树 * 1.概念 * 2.二叉树类型 * 2.1 满二叉树 * 2.2 完全二叉树 * 3.

By Ne0inhk
数据结构:kmp算法,Trie树,以及并查集的干货详解---小白也能看懂

数据结构:kmp算法,Trie树,以及并查集的干货详解---小白也能看懂

🎬 博主名称:个人主页 🔥 个人专栏: 《算法通关》,《Java讲解》 ⛺️心简单,世界就简单 序言 昨晚数据结构写了一半,做图太累了,文章写的比较慢,这篇应该就是第二篇,后面还有一篇,太困了,真不行了 今天讲一下 kmp算法,Trie, 并查集 目录 序言 KMP算法 原理 next数组 匹配过程 Trie树 并查集 KMP算法 这里说一下kmp的大致情况 用于处理字符串匹配问题,他也是十分的抽象                给一个S[]主串(比较长的那个),P[]为模板串,kmp我们一般用下标1来开始遍历 接下来我们需要去思考的是 1,暴力去怎么做 2,怎么去优化 下面是暴力的模板代码 大概意思就是,每当我们匹配到不一样的部位,我们的P就要从头开始再跟刚刚s的起点+1位置重新匹配,        这样就会造成串的长度很长时候,就会超时,所以我们就要从这个过程中找性质了

By Ne0inhk
优选算法的时序之窗:滑动窗口专题(一)

优选算法的时序之窗:滑动窗口专题(一)

专栏:算法的魔法世界 个人主页:手握风云 目录 一、滑动窗口 二、例题讲解 2.1. 长度最小的子数组 2.2. 无重复字符的最长子串 2.3. 水果成篮 2.4. 将 x 减到 0 的最小操作 一、滑动窗口         滑动窗口算法又叫“同向双指针算法”,核心在于维护一个窗口,这个窗口的左右边界可以根据需要动态调整。窗口的大小通常取决于当前窗口内的元素是否满足某种条件。通过移动窗口的左右边界,可以在一次遍历中找到满足条件的子数组或子串。 二、例题讲解 2.1. 长度最小的子数组        题目要求找出长度最小的子数组,并且子数组的和大于等于目标值。暴力枚举策略,就是找出所有和大于等于目标值的子数组,我们需要找出子数组的左右区间,还要遍历一遍子数组求和,那么时间复杂度为 。        接下来对暴力枚举进行优化。题目中给出了条件,数组里的元素都是正整数。我们可以定义两个指针left和right,

By Ne0inhk
初探算法的魅力——【暴力枚举】

初探算法的魅力——【暴力枚举】

点击下面查看作者专栏🔥🔥C语言专栏🔥🔥🌊🌊编程百度🌊🌊🌠🌠如何获取自己的代码仓库🌠🌠 🌐索引与导读 * 暴力枚举(BF)的概念 * 暴力枚举的算法步骤 * 例题讲解 * 经典案例讲解一:百鸡问题 * 题目解析 * 思路方案 * 经典案例讲解二:盛最多水的容器 * 暴力枚举算法 * 最优解 * 经典案例讲解三:两数之和 * 经典案例讲解四:2025 * 💻 代码实现 * 希望读者多多三连 * 给小编一些动力 * 蟹蟹啦! 暴力枚举(BF)的概念 暴力枚举也称为穷举法,是计算机算法中最基础、最直观,但也是最费劲的一种解题思路 像我们平时没有最优解的算法题,往往都可以通过暴力枚举去算出最终结果 * 核心思想 不靠巧妙的技巧,而是利用计算机强大的计算能力,把所有可能的情况列举出来,一个一个去验证,直到找到正确答案 暴力枚举的算法步骤 * 列举 :确定解空间的范围,列出所有可能的解候选者 * 检验 :对每一个候选者进行判断,看它是否满足题目

By Ne0inhk