在关键处深入思考:序列推荐中的物品级自适应递归 Think Harder Where It Matters: Item-Level Adaptive Recursion for Sequential Recommendation
LoopRec 用权重共享递归与物品级门控,让序列推荐按需分配计算深度
前置知识
序列推荐与 SASRec
序列推荐根据用户按时间排列的交互历史 $s = [v_1, ..., v_n]$ 预测下一个感兴趣的物品。SASRec 是该领域的标志性基线:把每个物品映射为嵌入 $x_t = \phi(e_{v_t} + p_t)$,堆叠若干层带因果掩码的自注意力块逐层精炼表示,最后用最终隐状态与全量候选物品计算相似度做排序。后续的 BSARec(频域偏置)、NextItNet(因果卷积)、LRURec(线性递归)都是同一任务下不同序列编码骨干的代表。
本文的整个论点建立在这些骨干共有的一个未经验证的设计假设之上——每个物品获得完全相同的计算层数;LoopRec 正是要替换这一假设,且需在四种骨干上验证通用性。
循环 Transformer 与权重共享
循环 Transformer 指将同一个(或权重共享的)Transformer 块反复应用多次以实现更深计算,代表工作是 Universal Transformer:块参数在所有深度间共享,配合 ACT(自适应计算时间)让每个位置决定自己何时停止更新。权重共享保证了不同深度退出的输出天然位于同一特征空间,同时把参数量与最大深度解耦。
LoopRec 的递归骨架直接继承这一传统:单个共享块 $B$ 最多递归 $R$ 次。理解权重共享为何能解决跨深度表示对齐,是理解其架构设计的前提。
自适应计算与早退
自适应计算指让模型按输入难度动态分配每样本/每 token 的计算量,典型机制包括早退——在每个中间层放置分类器,置信度足够高就提前输出;以及 MoE/MoR 中的路由——由门控网络决定每个 token 走哪条计算路径。难点在于:决策通常是离散的,需要可微近似(软选择、直通估计、路径概率质量)才能用梯度训练,还要防止路由坍缩到单一模式。
LoopRec 的深度路由器是一个二值早退门控,其读出权重 $\omega_i$ 通过累积路径概率质量保持可微;负载均衡与 z-loss 两种防坍缩技巧均来自这一脉络(MoE 与 MoR)。
负载均衡正则与 router z-loss
负载均衡正则是稀疏专家模型(Switch Transformer、ST-MoE)中稳定路由的标准技巧:把每个专家/token 分组的软分配质量与硬分配频率做匹配惩罚,防止路由器把所有输入都塞进少数路径。router z-loss 则对路由 logits 的 log partition(如 softplus 值的平方)施加惩罚,抑制路由器过早变得过度自信,避免训练早期锁死不稳定的选择。
LoopRec 训练目标 $\mathcal{L} = \mathcal{L}_{rec} + \lambda_{bal}\mathcal{L}_{bal} + \lambda_z \mathcal{L}_z$ 中后两项正是这两种技巧在深度路由上的移植:$\mathcal{L}_{bal}$ 防止所有物品坍缩到同一深度,$\mathcal{L}_z$ 防止门控在隐状态成型前过硬。
全排序评测与 NDCG/MRR
与从全量物品中采样的负例做近似评测不同,全排序评测要求模型对整个物品词表打分排序,用真实下一物品在完整排名中的位置计算指标:MRR 取第一个相关物品排名倒数的均值,NDCG 按排名位置做对数折扣累加。leave-one-out 划分则是取用户最后一次交互做测试、倒数第二次做验证。Krichene & Rendle (2020) 已证明采样指标与全排序指标可能给出相反的结论。
本文所有结论(如 NDCG@20 提升 2.19%–37.02%)都建立在全排序 + leave-one-out 协议上,绝对值普遍在 0.02–0.10 量级,读懂数字的量纲和显著性检验(配对 t 检验,五种子均值)才能正确评估改进幅度。
研究动机
主流序列推荐模型——从 SASRec、BERT4Rec 到频域增强和线性递归变体——共享一个几乎从未被质疑的设计选择:用户交互历史中的每个物品都获得完全相同的计算深度,一个 $L$ 层编码器逐层处理所有位置后统一打分。本文作者用两个诊断实验证明这种一刀切与用户行为的异质性严重错配。他们在 Amazon Office 数据集上训练了一个三层 SASRec,定义物品的饱和深度 $\ell_i^\star$——在不改变最终 Top-30 推荐集的前提下,该物品的隐表示最早可以冻结的层数。结果呈现两极分化:76.14% 的物品在第 1 层后就已稳定,93.28% 在两层内稳定,但仍有 6.72% 的物品必须走满全部 3 层才收敛,且浅层饱和与深层饱和物品频繁共存于同一条序列中。第二个诊断是受限反事实搜索:冻结模型参数,允许每条测试序列最后 5 个物品各自在 1/2/3 层后退出(其余位置保持原有全深度前向),由知晓真实目标物品的 oracle 挑选使目标排名最优的深度组合。结果显示,原始固定深度分配仅在 4.6% 的测试序列中是 oracle 的首选,其余 95.4% 的序列里非均匀分配都能把目标排得更靠前,相对 HR@20 最高可提升 8.8%。均匀深度既把算力浪费在早已收敛的物品上,又让真正需要深度推理的关键少数吃不饱。
本文的目标是论文的目标是把序列推荐从固定深度计算转变为物品级自适应推理:让模型学会为交互历史中的每个物品单独决定需要多少层计算,而不是为整条序列统一设定一个深度。这一目标带有三条硬约束。第一,表示对齐:不同物品会在不同深度退出,它们的输出表示必须仍处于同一个共享特征空间,否则下游的候选打分无法比较,深度可变不能以表示不可比为代价。第二,渐进决策:一个物品需要多少计算无法在入口处一次性判定,其表示是否成熟只有在逐轮吸收周围物品上下文的过程中才逐渐显现,过早承诺要么浪费算力、要么截断尚未成型的表示,所以深度决策必须是可以在递归中逐轮修正的。第三,工程可行性:整个过程不应依赖任何辅助的深度标注,额外参数要足够少,且作为通用框架能嫁接到注意力、因果卷积、线性递归等不同骨干家族上,同时完全保持标准的下一物品预测目标(交叉熵损失 $\mathcal{L}_{rec}$)不变。LoopRec 就是在这三条约束下给出的完整方案。
与已有工作不同的是,本文的独特切入首先在于研究路径:它不急于提出新模型,而是先用两个受控诊断把直觉变成可量化的证据——饱和深度统计揭示计算需求的非均匀分布(76.14% 一层饱和 vs 6.72% 需全深度),受限 tail-5 oracle 在冻结参数的反事实搜索中证明灵活分配可在 95.4% 的序列上超越固定分配,这种先诊断后设计的闭环在推荐文献中少见。其次在方法谱系上,循环/自适应深度 Transformer 已有 Universal Transformer、ACT、Mixture-of-Depths、Mixture-of-Recursions(MoR)等工作,但它们面向语言建模,且依赖 per-step top-k 容量选择或预先分配总深度的 token-choice 路由。LoopRec 针对推荐场景重新设计了路由机制:在每次递归边界上,用当前隐状态加可学习递归索引嵌入共同条件化的共享二值门控,对每个活跃位置独立做退出/继续决策,决策可随递归逐轮更新且无容量约束;配合权重共享块解决跨深度表示对齐,使框架能直接包裹 SASRec、BSARec、NextItNet、LRURec 四种异构骨干。最后,诊断结论(稀有、最近的物品需要更深计算)与模型学到的路由模式相互印证,构成需求对齐的证据链,这一定量验证方式本身也是方法论贡献。
核心方法
LoopRec 的核心直觉是:交互历史里的物品并非生而平等——高频重复购买的日用品几乎一眼就能看懂,稀有的探索性交互才需要反复推敲,让它们走同样的计算路径既浪费又不足。技术上,LoopRec 把骨干的一个 $L$ 层块 $B(\cdot)$ 视为可复用的计算单元,最多递归应用 $R$ 次,记作 LxRy 配置(如 L2R3 表示两层块最多三次递归)。前向过程分三步。第一步初始上下文编码:对全序列做一次共享浅层编码 $H^{(1)} = B(X)$,为所有位置提供共同的上下文化状态。第二步深度路由递归:在每个递归边界 $r$,轻量门控对每个活跃位置计算路由得分 $s_i^{(r)} = g(h_i^{(r)} + \rho_r)$,其中 $\rho_r$ 是可学习的递归索引嵌入;退出概率 $q_{i,exit}^{(r)} = 1 - \sigma(s_i^{(r)})$,若 $q \geq 0.5$ 该位置停止并把当前状态冻结为最终表示,否则继续;下一轮只对继续位置重新应用共享块 $H_A^{(r+1)} = B(H_A^{(r)})$,活跃集合逐轮收缩 $A^{(1)} \supseteq A^{(2)} \supseteq \cdots$。第三步深度特定读出:每个位置用其选中深度 $d_i$ 处的状态组成最终表示 $\bar{z}_i = x_i + \omega_i h_i^{(d_i)}$,保留到输入 token 的残差连接。由于每一轮都复用同一套参数,任何深度退出的物品天然落在同一特征空间;前向虽是硬路由,但读出权重 $\omega_i$ 对路由概率保持可微,为推荐损失提供更新门控的梯度通路。
核心创新有两点。第一,把全局固定深度改写为每个物品的可学习属性。已有序列推荐器在架构确定后就锁死了每个位置的计算预算,LoopRec 则用递归边界上的二值门控让每个位置根据自己当前的上下文化状态独立决定何时退出——深度从超参数变成了数据驱动的逐位置决策,且不需要任何辅助深度标签。与 MoR 的 token-choice(预先分配总深度)或 expert-choice(每步按容量 top-k 选人)不同,LoopRec 的门控以当前隐状态加递归索引嵌入 $\rho_r$ 为条件,可以在递归过程中逐轮修正判断、不受预设容量限制,契合物品是否成熟要边看边判断的渐进性。第二,用权重共享一举解决可变深度带来的表示对齐难题:所有递归都映射过同一套参数,无论物品在第几轮退出,其输出都位于同一特征空间,可直接参与下游打分,同时带来参数效率。训练侧的两个路由正则分别针对两种失败模式:负载均衡 $\mathcal{L}_{bal} = R\sum_{r=1}^{R} P_r f_r$ 把每个位置沿实际路径的软深度质量聚合成批量平均使用量 $P_r$、与硬分配频率 $f_r$ 做乘积匹配,防止深度坍缩到单一深度;router z-loss $\mathcal{L}_z$ 惩罚门控 log partition($\text{softplus}(s_i^{(r)})^2$),防止门控过早饱和;再配合路由 warm-up(前 $W_{router}$ 个 epoch 强制全深度、关闭路由),保证递归决策在隐状态成型前不被锁死。
方法步骤详情
完整步骤如下。输入:物品嵌入 $e_{v_t} \in \mathbb{R}^d$ 与位置嵌入 $p_t$ 经 $\phi$ 变换得到 token $x_t$,堆成 $X \in \mathbb{R}^{T \times d}$。步骤一(初始上下文编码):对全序列应用共享块 $H^{(1)} = B(X)$,所有有效位置进入活跃集合 $A$,路径质量 $c_i^{(1)} = 1$。步骤二(边界门控决策):对 $r = 1, \ldots, R-1$ 的每个边界,计算 $q_{i,exit}^{(r)} = 1 - \sigma(g(h_i^{(r)} + \rho_r))$;$q \geq 0.5$ 的位置退出并记录深度 $d_i = r$,其余继续。步骤三(选择性递归):仅对继续位置重新应用共享块 $H_A^{(r+1)} = B(H_A^{(r)})$,子序列在因果掩码下保持原有时间顺序,退出位置状态冻结不再更新;活跃集合为空则提前终止,路径质量按 $c_i^{(r+1)} = c_i^{(r)}(1 - q_{i,exit}^{(r)})$ 累积。步骤四(强制退出):到达深度 $R$ 时剩余位置全部停止。步骤五(深度特定读出):$?ar{z}_i = x_i + \omega_i h_i^{(d_i)}$,其中选中深度早于 $R$ 时 $\omega_i = c_i^{(d_i)} q_{i,exit}^{(d_i)}$、等于 $R$ 时 $\omega_i = c_i^{(R)}$——这条连续概率质量通路使硬路由下的推荐损失仍能对门控概率求导。训练目标 $\mathcal{L} = \mathcal{L}_{rec} + \lambda_{bal}\mathcal{L}_{bal} + \lambda_z \mathcal{L}_z$:$\mathcal{L}_{rec}$ 是标准交叉熵下一物品损失;$\mathcal{L}_{bal}$ 基于软深度质量 $?lpha_{i,r}$ 与硬频率 $f_r$ 做配平;$\mathcal{L}_z = ?rac{1}{|R^+|}\sum_r ?rac{1}{|A^{(r)}|}\sum_{i \in A^{(r)}} ext{softplus}(s_i^{(r)})^2$($\lambda_z$ 统一取 $10^{-3}$)。最后是路由 warm-up:前 $W_{router}$ 个 epoch 所有位置强制走满 $R$ 轮、绕过门控并禁用路由正则,训练退化为固定最大深度的递归前向,之后再启用完整目标;$W_{router}$ 用验证 NDCG@20 从 $\{5, 8, 10, 12, 16\}$ 中选取。
技术新颖性
技术新颖性可从四个维度评估。其一,问题定位新颖:这是首批用受控诊断实验系统量化序列推荐中逐物品计算需求差异的工作,饱和深度 $\ell_i^\star$(冻结该物品后不改变 Top-30 推荐集的最早层数)和受限 tail-5 oracle 两个探针都是为推荐场景定制的,结论(76.14% 一层饱和、固定分配仅 4.6% 序列最优)为后续方法提供了可复用的衡量基准。其二,机制再设计:LoopRec 是 MoR 式递归在推荐领域的改造——门控以递归索引嵌入为条件、按位置独立二值决策、无 per-step top-k 容量约束,这使其能无缝包裹注意力(SASRec、BSARec)、因果卷积(NextItNet)、线性递归(LRURec)四类异构骨干,而多数自适应深度方法绑定特定 Transformer 实现。其三,训练技术组合务实:深度配平、z-loss、warm-up 三件套虽各有出处(MoE 负载均衡、router z-loss、课程式启动),但针对推荐任务的小数据、短序列、全排序特点做了适配,消融显示去掉 warm-up 平均掉 MRR@20 4.03%、同时去掉两个正则掉 5.36%。其四,分析闭环:学到的路由(稀有、最近物品更深)与冻结探针的饱和深度模式(最近四分位均值 1.76 vs 前三约 1.2)方向一致,说明模型确实学到了需求对齐的分配而非任意路由,且简单启发式规则无法完全复现其精度。
实验结果
主实验在三个 Amazon Reviews 2023 类目上展开——Software(13,444 用户 / 9,706 物品 / 227,637 交互)、Office(11,468 / 28,279 / 190,465)、Patio(14,454 / 37,179 / 229,086),用四种骨干各自的 LoopRec 版本对比固定深度 vanilla,全排序 MRR/NDCG,五种子均值加配对 t 检验。发现一:一致性正增益。48 组骨干×数据集×指标对比全部为正,44 组统计显著(p<0.05),相对提升 0.69%–49.07%。逐骨干看 NDCG@20:SASRec 提升 2.19%(Office)至 5.68%(Software);BSARec 提升 0.97%–3.48%,说明频域偏置存在时自适应深度仍有增量;LRURec 提升 1.85%–4.51%;NextItNet 增益最大,Office 上 +13.18%(NDCG@20 0.0313→0.0354),Patio 上 +37.02%(0.0192→0.0263)。发现二:数据越稀疏增益越大。Patio 是最稀疏(99.96%)、词表最大、平均序列最短(15.85)的数据集,按骨干平均的 NDCG@20 提升从 Software 3.92%、Office 4.55% 攀升到 Patio 11.14%。发现三:学到的路由可解释且与 oracle 对齐。按位置十分位统计,越靠后的分位平均选中递归轮次越深;按训练频率分桶,平均深度从单次出现物品的 2.160 单调降到 100+ 物品的 1.330,depth-1 占比从 50.3% 升至 88.6%;固定深度参照模型的饱和深度探针给出同方向证据(最近四分位均值 1.76、$\ell^\star{=}3$ 占比 30.3%;单次出现物品均值 1.873、占比 18.0%)。发现四:物品级优于序列级。序列级循环在 Patio 无增益(MRR@20 0.0390 vs vanilla 0.0399),完整 LoopRec 达 0.0416。发现五:计算节省真实但延迟收益有限。三个配置计算量降至 0.407–0.755×,单张 A6000 上 encoder 延迟仅 0.869–0.995×。启发式对比中,仅按位置或频率做规则路由也能小幅超过 vanilla,但 LoopRec 以全部四项指标最高胜出,NDCG@20 超过位置启发式 1.64%、频率启发式 1.88%。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 序列推荐(SASRec 骨干,Software) | NDCG@20(全排序,五种子均值) | 0.0998 | 0.0944(vanilla SASRec) | +5.68%* |
| 序列推荐(NextItNet 骨干,Patio) | NDCG@20 | 0.0263 | 0.0192(vanilla NextItNet) | +37.02%* |
| 序列推荐(NextItNet 骨干,Office) | NDCG@20 | 0.0354 | 0.0313(vanilla NextItNet) | +13.18%* |
| 序列推荐(LRURec 骨干,Software) | MRR@10 | 0.0620 | 0.0575(vanilla LRURec) | +7.68%* |
| 诊断:受限 tail-5 oracle(Office,三层 SASRec) | HR@20 相对提升 | +8.8%(灵活深度 oracle) | 固定深度分配 | NDCG@20 +7.1%,MRR@20 +6.5% |
| 计算效率(Office,L2R4 vs SASRec-8L) | 计算量 / encoder 延迟(归一化) | 0.407× / 0.869×(79.273ms vs 91.230ms) | 1× / 1×(固定深度 SASRec-8L) | 计算量省 59.3%,延迟省 13.1% |
局限与改进
作者明确承认的局限有三。第一,计算节省没有完整兑现为墙钟收益:encoder 延迟仅 0.869–0.995×,L2R2 配置几乎持平(47.624ms vs 47.379ms),原因是按位置动态裁剪导致不规则的批内张量形状,在 GPU 上难以高效映射;作者把稀疏感知 kernel 列为未来工作。第二,最大递归预算 $R$ 在训练前就要从离散配置集(L1R4、L2R2、L1R6、L2R3、L1R8、L2R4 等)中按验证 NDCG@20 固定下来,不能随输入难度自适应伸缩。第三,诊断实验的规模受限:饱和深度探针和 oracle 都建立在单个三层 SASRec、单个 Office 数据集上,tail-5 的受限搜索和 K=30 的 exact-set 判定都是保守估计,只覆盖最近 5 个位置。我自己的观察还有几点:三个数据集都是中小类目(用户 1.1–1.5 万、平均序列长 15.85–16.93),远小于工业界亿级用户、超长历史的服务场景,动态深度在长序列与大规模在线服务下的收益和工程复杂度未经验证;NextItNet 的巨大增益(+37.02%)部分来自其 vanilla 版本本身很弱(Patio NDCG@20 仅 0.0192),强骨干上的增益其实温和(BSARec 最低 0.97%),且 48 组中仍有 4 组不显著;所有对比都是同参数量的 LoopRec vs vanilla,与等算力的更大固定深度模型(如 8 层 SASRec)只在延迟上参照、未做精度对比;门控阈值硬编码 0.5,深度决策的校准质量没有单独分析。
独立分析的弱点
独立分析后我认为有四个值得注意的弱点。第一,延迟—计算脱节是部署的最大障碍:推荐服务通常有严格的尾延迟 SLO,最好的延迟改善只有 0.869×,换来的却是变长张量、动态调度等更复杂的工程;相比直接部署 8 层 SASRec,运维成本上升而收益存疑。改进方向是按批聚合同深度位置、投机深度执行或 INT8/稀疏 kernel 配合。第二,路由信号可能被位置和频率两个简单变量大部分解释——启发式对比中 Position/Frequency 规则已能逼近 LoopRec(NDCG@20 差距仅 1.64%/1.88%),暗示学到的门控未必捕捉了超出这两个 proxy 的语义信息;改进方向是把物品文本/多模态嵌入注入路由得分 $g(h_i^{(r)} + \rho_r)$,验证增量是否来自更深的上下文理解,并报告超越精度的多样性、覆盖率、长尾物品推荐质量等指标(自适应深度理论上应更照顾长尾物品,这一假设值得直接检验)。第三,训练管道复杂度显著上升:warm-up 长度、均衡系数、六种 LxRy 配置叠加各骨干自带搜索空间,调参负担明显重于 vanilla,且 $\lambda_z$ 固定 $10^{-3}$ 的普适性只在三个类目上验证过;改进方向是研究鲁棒默认值或让预算可学习。第四,评测协议偏学术:全排序 + leave-one-out 在大词表下绝对值都在 0.02–0.10 量级,0.69% 量级的提升在实际业务中可能被线上波动淹没;且未测试流式/增量更新场景——线上历史前缀通常已编码缓存,递归结构天然支持只对新增物品做递归,这一点论文没有利用或讨论。
未来方向
作者提出的方向有两个:开发稀疏感知 kernel 让计算节省真正转化为 GPU 墙钟收益,以及让最大递归预算 $R$ 可学习而非训练前固定。在此基础上还有几条自然延伸。其一,推广到生成式推荐与语义 ID 场景:当候选从物品 ID 变为离散语义 token、模型从判别式打分变为自回归生成时,逐 token 自适应递归是否同样有效值得检验——作者课题组引用的 LoopCTR 已把循环缩放用于 CTR 预估,说明这条线在延伸。其二,把路由信号从效率工具升级为诊断信号:既然稀有的最近物品被分配更深计算,深度分配图可以作为冷启动物品检测、用户意图漂移探测的免费副产物反馈给推荐系统。其三,与增量推理结合:线上服务中历史前缀已缓存,递归结构可只对新增物品做递归计算,配合个性化深度缓存可能放大效率收益。其四,理论侧:looped Transformer 已被证明可实现算法式计算与潜在推理,推荐中的递归深度与推断用户意图所需的多步推理之间是否存在可量化对应关系,是有趣的开放问题。其五,把诊断协议本身(饱和深度、受限 oracle)标准化为社区基准,用于度量未来自适应推荐架构的需求对齐度,使方法比较从只看端到端精度扩展到看分配质量。
复现评估
复现条件相当友好。代码已在 GitHub 开源(github.com/Elpmis117/LoopRec),数据集是公开的 Amazon Reviews 2023 三个类目,预处理协议完整写出:按时间排序、保留至少 10 次交互的用户、leave-one-out 划分、评估时裁剪 warm-start 物品、最大序列长度 50。超参数交代充分:Adam 优化器、最多 100 epoch、early stopping patience 10、batch size 1024(SASRec 系)/512(其余),$\lambda_z = 10^{-3}$ 统一固定,学习率、层数、dropout、LxRy 配置、warm-up 长度、均衡系数的搜索空间逐一列出,附录还按骨干分别说明 wrapping 方式(如 NextItNet 在原生残差卷积块上递归、固定六块 (1,2,4) 膨胀循环,LRURec 在原生块上递归)。算力门槛低:延迟测量在单张 NVIDIA A6000 上完成,这些数据集只有 19–23 万条交互,单卡数小时即可完成训练;主结果为五种子均值并做配对 t 检验,统计口径清楚。潜在难点有二:一是超参组合较多(六种 LxRy × warm-up × 均衡系数 × 骨干自带空间),完整网格搜索的算力开销不小,复现者可优先只跑 L1R4 与 L2R2;二是诊断实验(Top-30 exact-set 饱和深度、tail-5 oracle)论文只给协议描述,需要按附录 A.3 自行实现。总体属于复现难度较低的工作。
论文图表
在三层 SASRec 上统计物品饱和深度:76.1% 的物品 ℓ★=1(一层即稳定)、17.1% ℓ★=2、6.7% ℓ★=3;序列内构成的小提琴图显示许多序列同时横跨全部三种饱和深度。
这是动机的核心证据:证明同一序列内物品的计算需求高度异质,为固定深度假设的失效提供量化依据。
受限 tail-5 oracle 诊断:(a) 灵活深度分配相对固定基线在 NDCG@20/MRR@20/HR@20 上分别提升 7.1%/6.5%/8.8%;(b) 展示五条样例序列的 oracle 选中深度模式,如 Seq.1 全 1 层、Seq.2 混合 1/2/3 层。
证明深度错配确实伤害推荐质量——固定分配仅在 4.6% 的序列中最优,直接引出把深度变成逐物品变量的设计动机。
完整伪代码:初始编码后循环执行门控决策(第 4–6 行)、活跃集收缩与选择性递归(第 10–11 行)、深度 R 强制退出与读出(第 12–13 行),输出各位置表示与选中深度。
实现层面的权威参考:路径质量 $c_i$ 与读出权重 $\omega_i$ 的更新时机只有对照伪代码才能准确还原。