从零理解强化学习:面向流式重建、SLAM 与在线感知
面向读者:了解一点计算机视觉,但没有强化学习基础的学生。
编写与资料核查日期:2026-09-12。
本文是一份循序渐进的教程。基础概念采用标准定义;视觉场景中的例子、奖励设计和实验方案,除明确引用论文外,均为教学设计或研究建议,不代表已经验证的性能或创新性。
你学习强化学习的第一目标,应当是能判断自己的视觉问题是否包含值得学习的长期决策,而不是记住一串算法缩写。
对于流式视觉,一个值得先尝试的方向是:保留已有的几何或感知模型,让一个小策略决定什么时候计算、保留什么记忆、什么时候更新。 这能把问题限定在一个可分析的决策环节。最终是否值得使用强化学习,需要与规则、监督学习和短视决策方法比较。
阅读导航
- 第一次读,建立直觉: 第 1–4 节,然后运行第 13 节的小实验。
- 第二次读,理解算法: 第 5–8 节,重点理解 Q 值、优势函数、Actor–Critic 和 PPO。
- 准备接入自己的系统: 第 9–12 节及第 14 节实验方案。
- 准备研究选题: 第 15 节,再看阅读材料与学习计划;第 18 节用于复习和自测。
公式允许分两遍读:先读公式后面的中文解释,再检查符号。你只需要期望、条件概率、求和、导数和梯度下降的初步知识;第 3 节会补最基本的数学直觉。
1. 先从一个你熟悉的视觉问题开始
1.1 一段视频,为什么不能每帧都精细处理?
假设你有一个在线三维重建系统。相机每秒送来 30 张图像,系统需要估计相机运动、恢复几何,并维护历史记忆。
计算和存储都有限,因此不断出现选择:
- 当前帧值得成为关键帧吗?
- 缓存已满,应该删除旧帧,还是拒绝新帧?
- 当前跟踪不稳,要不要运行一次昂贵的重新定位?
- 还有一些计算预算,要现在优化地图,还是留给后面的困难片段?
这些选择往往不能只看当前帧的误差。删除一张看似冗余的旧帧,可能在几秒后的回访中导致重定位失败;多做一次优化,可能改善当前几何,也可能使输出滞后。
强化学习研究的是:如何通过交互经验,学会能取得较高累计收益的决策规则。 “累计”意味着一个动作的价值可以在以后才显现。基础概念:Spinning Up
1.2 一个贯穿全文的小故事
设一段极简视频包含三个阶段。整个过程只有一次昂贵更新的预算。
| 决策时刻 | 当前情况 | 使用唯一一次更新的效果 |
|---|---|---|
| \(t=0\) | 看见普通墙面 | 立即得到 2 分,但对后面没有额外帮助 |
| \(t=1\) | 看见有辨识度的岔路 | 立即得到 1 分,并留下关键锚点 |
| \(t=2\) | 遮挡后重新出现 | 此时不能更新;若之前留下岔路锚点,再得到 6 分 |
只追求眼前收益的策略,会在第一步花掉预算,最终得到 2 分。
考虑长期收益的策略,会先等待,在第二步更新,最终得到 \(1+6=7\) 分。
这里的分数是人为设计的教学奖励,不是某个真实数据集指标。这么小且规则完全已知的问题,可以直接枚举或规划;使用强化学习只是为了演示如何从尝试中学到同样的决策。
1.3 强化学习、监督学习和自监督学习有什么不同?
| 方法 | 训练信号 | 视觉例子 |
|---|---|---|
| 监督学习 | 给定输入对应的目标答案 | 用真值深度训练深度网络 |
| 自监督学习 | 从数据结构中构造约束 | 利用多视图重投影一致性学习深度 |
| 模仿学习 | 给定专家采取的动作 | 学习一个优秀规则或搜索器如何选择关键帧 |
| 强化学习 | 执行动作后得到的奖励与后续结果 | 学习怎样选择关键帧,使整段序列的质量和开销更合适 |
在监督分类中,你通常知道这一张图的类别。在强化学习中,你可能只知道“这串操作最后成功了”,却不知道其中每一步是否正确。这就产生了信用分配问题:最后的好坏,应当归因于哪些早期动作?
奖励也可以依赖真值深度、真值位姿或人工设计的评测函数。强化学习不等于不需要标注,也不等于不需要人设计目标。
1.4 有时间顺序,就需要强化学习吗?
不一定。分三种情况看:
- 每帧独立预测深度。 如果没有动作选择,通常直接做监督或自监督预测。
- 每帧选择大模型或小模型,但选择不影响以后,且没有共享预算或队列。 可以先做监督决策或 contextual bandit,即“上下文老虎机”:看当前信息,为这一次收益选择动作。
- 今天保留的记忆、消耗的预算或积累的延迟,会改变以后能做什么、做得怎样。 这才有明确的多步决策结构,可以考虑强化学习。
即使属于第三种情况,动态规划、模型预测控制或优秀的启发式也可能更合适。把问题写成强化学习形式,只说明它可以这样建模,尚未说明强化学习是最好的求解方法。
2. 强化学习的语言:把视觉系统翻译成决策过程
2.1 七个最常见的词
| 术语 | 符号 | 通俗解释 | 流式重建中的例子 |
|---|---|---|---|
| 智能体,agent | — | 做选择的部分 | 决定是否写入关键帧的小网络 |
| 环境,environment | — | 接受动作并产生后果的系统 | 视频回放器、重建器、缓存和计时器 |
| 状态,state | \(s_t\) | 足以决定后续分布的完整信息 | 场景状态、地图、预算、待处理队列等 |
| 观测,observation | \(o_t\) | 智能体实际上看得到的信息 | 当前图像特征、匹配统计、预算余量 |
| 动作,action | \(a_t\) | 这一步选择做什么 | 跳过写入、插入关键帧、触发优化 |
| 奖励,reward | \(r_{t+1}\) | 动作之后得到的一个标量反馈 | 精度收益减去计算成本 |
| 策略,policy | \(\pi\) | 从可用信息到动作的规则 | 各候选动作的概率分布 |
本文统一使用:在 \(t\) 时刻选 \(a_t\),随后得到 \(r_{t+1}\) 和下一状态 \(s_{t+1}\)。 有些论文把这次奖励写成 \(r_t\),只是下标约定不同。
当前可见信息 o_t ──→ 策略 π ──→ 动作 a_t
↑ │
│ ↓
下一次观测 o_(t+1) ←── 视频 + 重建器 + 记忆 + 预算
│
└──→ 奖励 r_(t+1),用于训练
环境不必是机器人模拟器。一段固定视频与一个会被动作改变内部状态的重建程序,也能组成交互环境。
2.2 MDP:为什么大家都要写这个五元组?
马尔可夫决策过程,Markov Decision Process,简称 MDP,通常写作:
其中 \(\mathcal{S}\) 是状态集合,\(\mathcal{A}\) 是动作集合,\(P(s'\mid s,a)\) 是转移概率,\(R\) 描述奖励,\(\gamma\) 是折扣因子。完整任务还需说明初始状态分布、终止规则及有限或无限时域。
马尔可夫性质表达为:
它的含义是:如果当前状态已经描述充分,就不用再额外翻查历史。 这不意味着世界没有历史,而是历史的相关影响已经体现在当前状态里。
例如,同一张当前图像,配上“还剩 10 次优化预算”和“预算已耗尽”,应该得到不同决策。如果状态没有预算,算法看到的就是“相同输入却有不同后果”。
有限时长任务还可能需要剩余时间。即将结束和刚刚开始时,同一笔预算的价值不同。
2.3 真实视觉更接近 POMDP
单张 RGB 图像不能完整告诉你三维结构、遮挡后的物体、相机真实位姿,也不能直接给出跟踪对应是否正确。因此,视觉决策常是部分可观测马尔可夫决策过程,POMDP。
要分清三层信息:
- 真实状态 \(s_t\): 理论上决定后果的信息,不一定可获取。
- 观测 \(o_t\): 当前实际可获取的图像、统计量等。
- 控制器记忆 \(z_t\): 从历史观测和动作中压缩出来的信息。
例如:
\(f_\psi\) 可以是循环神经网络、历史窗口编码器,或手工维护的统计量。不要把一个特征向量命名为 state,就当作它满足马尔可夫性质。
更严格的办法是维护 belief,即“根据历史,对真实状态的概率分布”。SLAM 中对位姿和地图的不确定性估计,可以帮助理解这种思想;但实际 SLAM 估计通常只是某种近似,不能直接当作完整 belief。
对初次实验,先用“当前廉价特征 + 缓存摘要 + 预算 + 历史统计”。只有发现遗漏历史导致明显错误,再增加复杂记忆结构。
3. 奖励和回报:算法到底在最大化什么?
3.1 奖励是一次反馈,回报是以后的总账
设一段 episode,也就是一次完整任务,共有 \(T\) 步。时刻 \(t\) 的折扣回报为:
- \(\gamma=0\):只看立即奖励。
- \(\gamma\) 接近 1:远期奖励仍然有较大权重。
- 有限回合且回报有界时,可以使用 \(\gamma=1\)。
- 无限时域问题通常用 \(\gamma<1\) 保证有界奖励的折扣和收敛,或另定义平均奖励目标。
对第 1 节的故事,取 \(\gamma=0.95\):
这里算法愿意暂时得 0 分,因为它能换来更好的后续机会。
3.2 期望:不要求每次都赢
策略的目标通常写成:
\(\theta\) 是策略参数,\(\tau\) 是一次状态、动作、奖励构成的轨迹,\(\mathbb{E}\) 表示对场景差异、动作随机性等取平均。
例如,一个动作以 80% 的概率得到 10 分,以 20% 的概率得到 0 分,期望收益是 8 分。最大化期望不等于避免每一次失败。因此,真实系统还应单独评价失败率、极端延迟和最差场景;风险约束需要明确建模。
3.3 折扣因子不能脱离真实时间理解
\(1/(1-\gamma)\) 可作为折扣权重的粗略时间尺度,以“决策步”为单位;它不是硬性的最大规划长度。
例如 \(\gamma=0.99\) 时,大约是 100 步。如果每帧决策一次,30 FPS 下约为 3.3 秒;如果每秒决策一次,则约为 100 秒。
如果你的价值主要在 20 秒后的重访才显现,只使用很短 rollout 和很快衰减的回报,学习信号可能非常弱。长程任务需要同时考虑折扣、价值估计、历史记忆和训练序列跨度。
3.4 奖励与训练损失不是一个东西
奖励定义你想要什么;损失定义怎样更新参数。
重建误差可以参与构造奖励,例如 \(r=-E\)。但 PPO 的策略损失并不是简单地把这个误差反向传播穿过整个重建过程。它利用被采样动作的概率和收益估计,调整以后采取该动作的倾向。
所以,离散选择、不可微的缓存操作或黑箱程序,也能被策略梯度方法优化。代价是:通常需要更多交互样本,梯度估计也更嘈杂。
4. Value、Q 和 Bellman:长期收益是怎样估计出来的?
4.1 状态价值与动作价值
先在完全可观测设定下理解:
- \(V^\pi(s)\):到达这个状态后,继续按策略 \(\pi\) 行动,平均能得多少分?
- \(Q^\pi(s,a)\):在这个状态先做动作 \(a\),以后按 \(\pi\) 行动,平均能得多少分?
Q 值不是当前动作的立即奖励,而是包含后续后果的预测。POMDP 中可以把完整历史作为条件,或使用近似历史表示训练价值网络。
4.2 Bellman 方程其实只是拆账
由于:
因此:
当前的长期价值 = 下一次得到的奖励 + 下一状态的折扣长期价值。
假如某动作立即得到 \(-1\) 分,但下一状态价值为 10,且 \(\gamma=0.9\),那么该动作价值为 \(-1+0.9\times10=8\)。立即付出代价并不意味着动作不好。
最优动作价值 \(Q^*\) 满足:
这里的 max 表示后面选择最有价值的动作。若转移和奖励已知、状态很小,可以用动态规划反复应用这种关系,不必先学习一个神经网络。
4.3 Monte Carlo:等这一局结束再算
Monte Carlo,蒙特卡洛方法,用实际走完轨迹后得到的 \(G_t\) 来学习价值:
\(\alpha\) 是学习率,表示每次相信新证据多少。
优点是目标直接来自实际回报,不依赖下一状态的价值预测;难点是要等回合结束,而且后续随机事件会让目标波动很大。
4.4 TD:先用下一步预测来更新这一步
时序差分学习,Temporal-Difference learning,简称 TD,采用目标:
以及 TD 误差:
于是:
例如原来预测价值是 3,这一步得到 1 分,下一状态预测价值为 4,取 \(\gamma=0.9\),则新证据对应 \(1+0.9\times4=4.6\)。TD 误差是 1.6;若学习率为 0.1,价值从 3 调到 3.16。
这种“用一个估计更新另一个估计”叫 bootstrapping,自举。它让学习不必等待整段长视频结束,但也可能传播错误预测。
4.5 Advantage:这个动作比通常情况好多少?
优势函数定义为:
如果这个状态平均能拿 5 分,而某动作预计能拿 7 分,优势就是 2。即使某动作的回报是正数,如果它比该状态下通常的选择更差,优势也可以为负。
它的作用是把“场景本身容易”与“动作选择得好”区分开。后面的策略梯度和 Actor–Critic 会使用这个量。
基础概念可对照 Sutton 与 Barto 的《Reinforcement Learning: An Introduction》第二版阅读;上面的视觉例子和数值演算为本文构造。
5. 第一条算法路线:Q-learning 与 DQN
5.1 Q-learning 如何从数据学习?
观察一次转移 \((s_t,a_t,r_{t+1},s_{t+1})\) 后,更新:
真正终止时,后续价值为 0。动作存在约束时,max 只应在合法动作中计算。
学习完成后,选择:
训练时如果一直选当前看起来最好的动作,可能永远发现不了其他好选择。最简单的探索方式是 \(\epsilon\)-greedy:以 \(1-\epsilon\) 的概率选当前最好动作,以 \(\epsilon\) 的概率从合法动作中随机选择。
注意这里的探索是“尝试不确定的动作”;机器人在空间中探索未知区域,则是一种具体任务。两者不能直接画等号。
5.2 从表格到神经网络
状态很多时,无法存一张完整 Q 表,于是使用网络 \(Q_\theta(s,a)\) 近似 Q 值,这就是 DQN 的核心出发点。经典 DQN 使用经验回放与目标网络,缓解样本相关性和学习目标快速变化的问题。DQN,Nature 2015
一个简化目标是:
\(d_t\) 表示真正终止,\(\bar\theta\) 是更新较慢的目标网络参数;计算目标时不通过 \(y_t\) 反传梯度。
经验回放,replay buffer,是保存过去转移并重复抽样训练的容器。它与视觉系统中保存关键帧的缓存是不同的东西。
5.3 对你的任务有什么意义?
“写入或不写入”“轻、中、重三档计算”这类小规模离散动作,可以考虑 DQN 系列。若动作变成从 10,000 个 token 中任意挑一个子集,直接枚举动作就不可行,应该先重设动作粒度。
对于连续相机控制,经典 DQN 中的 \(\max_a Q(s,a)\) 也不容易直接计算,需要其他算法或离散化设计。不要因为学会了一个算法,就把所有任务强行改成它能处理的形式。
6. 第二条算法路线:直接学习策略
6.1 一个看起来像分类器的网络
假设有三个动作:保持、写入关键帧、重新定位。策略网络可以输出:
训练时按这些概率采样动作。虽然结构像分类器,但训练数据中通常没有逐步的“正确动作标签”。你要根据动作后的结果,调整这些概率。
6.2 REINFORCE 的直觉
让带来较高回报的动作更可能再次发生。
最基本的策略梯度利用恒等式:
对于本文的有限时域折扣目标,在环境转移不依赖策略参数的通常设定下,可以写为:
其中 \(b(s_t)\) 是不依赖当前采样动作的 baseline,常取价值函数。减掉它不改变该梯度估计的期望,并可降低方差;策略更新时,把回报或优势目标视为常量。
如果选择某动作带来的回报比 baseline 高,就增大其概率;低于 baseline,则降低其概率。对环境本身不需要求导。策略优化推导
有些教程针对不折扣目标,或采用折扣状态访问分布来写期望,看不到外面的 \(\gamma^t\)。比较公式时,先检查目标和采样约定。
6.3 为什么需要 Actor–Critic?
完整回报可能要等很久才能得到,也可能被很多偶然事件影响。因此常联合训练两个角色:
| 角色 | 学什么 | 输出 |
|---|---|---|
| Actor,策略 | 如何选择动作 | 动作概率或连续动作分布 |
| Critic,价值评估器 | 预计还能得到多少回报 | \(V\) 或 \(Q\) 的估计 |
Actor 用 Critic 帮助估计优势,Critic 用真实奖励与后续价值目标学习。它不是一位掌握正确答案的“裁判”,也可能估错。
当 \(V\) 足够准确时,一步 TD 误差可以在合适条件下作为优势估计。更常见的折中是多步估计,例如下一节的 GAE。
对小型视觉控制器,可以先使用共享廉价输入、分别输出策略与价值的两层 MLP。若观测不够充分,再尝试循环网络,而不是一开始同时增加大模型、长记忆和复杂动作空间。
7. 理解 PPO:你很可能会用到的第一种深度 RL 算法
7.1 PPO 想解决什么问题?
一次策略更新如果过大,新策略可能跑到旧数据几乎没覆盖的区域。PPO 使用旧策略采集一批数据,再通过较保守的代理目标进行若干轮更新。PPO-Clip 的目标包含概率比:
这个目标被最大化。若用最小化损失的优化器,就对策略目标取负号。它限制继续把某个动作概率向有利方向推得太远的收益,但不是对新旧策略距离的严格保证。PPO 原论文、PPO 官方教学说明
自己算一个例子:旧概率为 0.2,新概率为 0.3,则 \(\rho=1.5\)。若优势为 2,裁剪参数为 0.2,则两个候选项分别为 3 和 2.4,取较小的 2.4。这个样本不再鼓励沿同一方向无限增加概率。参数共享仍可能使概率继续改变,所以还应监测更新幅度。
7.2 GAE:把多个时间尺度的证据混合起来
广义优势估计,Generalized Advantage Estimation,简称 GAE,使用:
这个式子针对同一条连续轨迹中的有效片段;真正终止时后续价值为 0。
\(\lambda\) 控制使用多少长程信息。较小的值更多依赖近处的价值预测;较大的值纳入更多实际后续奖励,通常具有不同的偏差与方差权衡。\(\lambda\) 和折扣 \(\gamma\) 不是同一个参数。GAE 原论文
7.3 训练过程长什么样?
- 固定一份当前策略作为采样策略,运行多段训练视频。
- 保存观测、动作、奖励、终止标志、旧动作对数概率和价值预测。
- 根据连续轨迹计算回报目标和优势。
- 对这批数据进行若干轮小批量更新,学习策略与价值;可加入熵奖励以鼓励探索。
- 重新用更新后的策略采集数据。
PPO 通常归为 on-policy。在同一批新数据上做有限轮更新,不等于可以无限复用任意旧策略生成的历史记录。
7.4 学到这里应该掌握到什么程度?
你应能解释:Actor 为什么提高某个动作概率,Critic 如何提供基准,为什么要限制策略变化,以及奖励为什么不需要可微。
暂时不必手写完整 PPO。先用成熟实现验证一个小环境,再把精力花在视觉任务的动作、状态、奖励和评测协议上。PPO 在你的重建环境中是否稳定、是否划算,都需要实验确认。
8. 算法地图:按问题选方法
8.1 先理解三个彼此不同的分类轴
| 分类轴 | 第一类 | 第二类 |
|---|---|---|
| 数据与策略的关系 | on-policy:主要使用当前或近期采样策略的数据 | off-policy:允许行为策略和所学策略不同,复用历史数据 |
| 是否再收集交互数据 | online RL:训练中继续通过策略采集新转移 | offline RL:只使用固定的既有转移数据集 |
| 是否显式使用转移模型来学习或规划 | model-free:不显式建立这类动力学模型 | model-based:使用已知或学得的转移模型 |
off-policy 不等于 offline;online RL 不等于推理时处理流式输入。
你可以在实验室中反复回放录制视频,以当前策略重新运行重建器来产生转移,完成 online RL 训练;部署时冻结策略,进行流式推理。也可以在固定日志上做 offline RL,最后仍部署为流式系统。
“model-free”也不表示没有神经网络,或环境里没有重建模型;它特指 RL 是否显式依靠状态转移模型进行学习或规划。
8.2 面向初学者的选择表
| 问题 | 建议先比较 | 原因或限制 |
|---|---|---|
| 一次独立决策,能枚举动作效果 | 规则、监督回归/分类 | 不必先解决多步信用分配 |
| 一次独立决策,只看到所选动作收益 | contextual bandit | 需要探索,但没有明确长期状态影响 |
| 少量离散动作,可重复交互 | DQN 系列、PPO | 易于建立可解释的控制器 |
| 连续动作,交互数据昂贵 | SAC 与其他 off-policy 方法 | 能利用回放;环境适配与调参仍重要 |
| 只有固定日志,不能测试新动作 | 模仿学习、专门的 offline RL | 普通 off-policy 算法不自动解决分布外动作问题 |
| 转移模型较准确,动作候选少 | 短视搜索、MPC、动态规划 | 可先通过显式规划利用已知结构 |
| 观测缺失关键历史 | 历史统计、循环策略或 belief 近似 | 单纯换优化算法无法补回缺失信息 |
SAC,Soft Actor-Critic,通过奖励与策略熵共同构造目标,是经典的 off-policy Actor–Critic 方法,原论文主要面向连续控制。SAC,ICML 2018
上述表格是实验起点,不是算法性能排名。对视觉项目而言,正确的环境定义通常比“把 PPO 换成更热门算法”更重要。
9. 把强化学习接到流式视觉里:先区分被动与主动
9.1 被动流式处理:相机轨迹固定,算法选择处理方式
假设输入是已经录好的视频,动作不改变下一帧图像,但会改变系统记忆:
以及剩余预算:
\(m_t\) 是处理当前帧之前的重建器状态或缓存,\(I_t\) 是当前已到达图像,\(c_t\) 是动作成本。即使 \(I_{t+1}\) 固定,后续输出仍会因 \(m_{t+1}\) 和 \(b_{t+1}\) 不同而改变。
因此,摄像机不受控制,也可以有强化学习问题。 学习的是内部处理决策。
| 决策位置 | 可用观测 | 动作 | 可能的长期后果 |
|---|---|---|---|
| 关键帧选择 | 当前廉价匹配、视差、缓存摘要 | 写入或不写入 | 基线质量、回访匹配和漂移改变 |
| 记忆管理 | 槽位年龄、覆盖、历史使用情况 | 保留、替换某个槽位 | 遮挡后能否恢复身份或定位 |
| 计算分配 | 跟踪置信度、当前预算、队列 | 轻量更新或重优化 | 剩余预算和输出延迟改变 |
| 地图维护 | 局部一致性、地图规模、动态区域比例 | 融合、压缩、暂缓更新 | 错误是否累积、地图是否遗忘 |
| 测试时适配调度 | 可用的自监督残差、漂移迹象 | 不更新或执行若干步适配 | 后续模型状态、耗时和遗忘改变 |
这里“使用残差做观测”有一个前提:它在决策发生前已能算出,且计算成本计入系统。 不能先执行昂贵动作,再把该动作产生的结果用来决定要不要执行它。
RL 用来决定是否运行测试时适配,并不意味着适配本身就是 RL;适配仍可以采用常规自监督梯度下降。
9.2 主动视觉:动作改变未来会看到什么
如果你能移动相机、机器人或传感器,就能控制未来观测。例如选择下一个拍摄位置,让遮挡区域被看见,或选择回到旧区域以减少位姿不确定性。
这类任务需要考虑:可达性、相机运动成本、碰撞、视野以及渲染或真实采集。环境必须能够回答“如果去了另一个位置,会看到什么”。
固定单条轨迹的视频一般不能回答这个问题。多视图数据可以支持有限候选视角选择,但其候选范围、遮挡和运动约束需要明确;不能直接当成自由移动的真实环境。
9.3 四个值得对照理解的研究例子
| 工作 | 设定与学习对象 | 对你最有用的启发 |
|---|---|---|
| Reinforcement Learning Meets Visual Odometry,ECCV 2024 | 把图像序列和 VO 系统组成环境,学习关键帧及网格大小选择 | RL 可以控制传统视觉流水线中的决策,不必直接预测几何 |
| Learning to Explore using Active Neural SLAM,ICLR 2020 | 主动探索;结合学习模块、分层策略与解析规划器 | 保留空间表示与规划结构,可以比完全端到端更容易分解问题 |
| Next-Best View Policy for 3D Reconstruction / Scan-RL,2020,页面标注 ECCV Workshops | 学习下一个视点,以完成房屋扫描 | 目标是控制观测获取;与固定视频上的缓存管理不同 |
| Towards Streaming Perception,ECCV 2020 | 定义把延迟纳入考虑的流式感知评测 | 这是评价方式的重要参照,不能把它当作“必须使用 RL”的证据 |
还有一篇直接相关的近期资料:Keyframe-Based Feed-Forward Visual Odometry,2026 年 arXiv 稿,已将 RL 关键帧策略用于前馈视觉里程计。本文按检索到的 arXiv 稿标注,不推断正式录用情况。因此,“在三维基础模型外加一个 RL 选帧器”本身已经不足以作为新颖性论证。
10. 奖励设计:最容易把任务做错的地方
10.1 先写评价目标,再设计训练奖励
假设你的目标是:在给定内存与计算预算下,使整段流式输出的几何误差尽量低。
可以先写成约束问题:
这里 \(E_{\mathrm{task}}\) 必须提前定义,例如所有规定时刻的几何误差平均值,而不是仅挑选成功帧。\(B\) 是整段计算预算,\(M_{\max}\) 是工作记忆上限。
软化成“误差 + 成本惩罚”是常用做法,但期望约束、惩罚项和逐次硬约束不同。若要求内存永不超限,就需要由合法动作集合、固定槽位等机制保证;仅在超限后扣分不足以保证约束成立。
10.2 一个可用来起步的奖励模板
对每帧固定决策一次的教学设定,可以考虑:
几何、位姿、身份保持误差都在本次动作产生输出后计算,\(\widetilde E\) 表示按预先约定方式缩放的误差。\(w\) 是研究者选择的权重,\(c_{\mathrm{ref}}\) 是参考成本。
不需要一开始把所有项都放进去。第一版可以只用一个核心误差、一个计算成本和一个明确失败项。各项缩放依据只能来自训练集或预先固定标准;应记录原始指标,防止总奖励掩盖某一项恶化。
这只是起点,不是适用于所有视觉任务的标准奖励。 对实时调度,更合适的目标可能是规定时间网格上的误差积分;对最终静态模型,可能是终局重建质量。两者不应混用。
10.3 为什么只奖励“误差下降”可能出问题?
有人会设计:
当 \(\gamma=1\),且所有 \(E_t\) 对应同一评价对象、同一尺度和同一规则时,累积和为 \(E_0-E_T\)。这主要关心终局改善,不能表达中间是否长期输出很差。
当评价区域变化、场景动态变化,或使用折扣时,上面的简单等价不再成立。当前帧更容易,也可能被误当成动作带来了改进。
如果是在原目标上增加辅助奖励,经典的势函数形式为:
在相应 MDP 假设下、使用同一折扣并正确处理终止边界,它能保持最优策略不变。有限回合通常需要令终止势为零,或作等价边界处理。任意增加“看起来合理”的辅助分数没有这个保证。Ng、Harada、Russell,ICML 1999
10.4 六种典型的奖励漏洞
| 奖励写法 | 策略可能学到的取巧方式 | 改进方向 |
|---|---|---|
| 只降低重投影误差 | 删除难点或减少输出,留下少量容易点 | 固定评价查询,统计覆盖率与缺失输出 |
| 只奖励自报置信度 | 越来越自信,但预测不更正确 | 使用独立正确性指标,检查校准 |
| 只奖励新建地图点数 | 重复生成或保留大量错误点 | 同时检验几何正确性与覆盖 |
| 只惩罚耗时 | 总是跳过或提前退出 | 评价全时段服务质量及缺失结果 |
| 只看终局全局误差 | 中间严重漂移,最后再修补 | 增加按实际时刻记录的前缀输出评测 |
| 失败立即结束并不再计负分 | 提前失败反而少受后续误差惩罚 | 在剩余时域采用约定失败代价或明确终局处理 |
动态场景还要区分“当前视野的几何正确”与“持续跟住同一物理点”。删掉动态物体可能让静态背景误差更好,却破坏你真正关心的感知能力。
10.5 几何不确定性与信息增益,先当作假设
对主动重建,奖励新增覆盖、减少位姿不确定性或预期信息增益,是自然的设计思路。但不确定性来自一个估计模型,可能失准;覆盖大也不意味着几何准。
应该检验:这些代理量是否预测独立的真值误差下降,策略是否偏好本来就容易的区域,以及长时间运行后是否仍然有效。不能仅凭变量名叫 uncertainty,就断言策略在学习有价值的信息获取。
11. 流式任务必须多想一层:因果性和墙钟时间
11.1 未来帧不能出现在当前决策输入中
严格因果策略只能依赖截至当前实际到达的观测:
常见泄漏包括:提前在整段视频上提取双向特征、用未来匹配质量给当前缓存排序、使用整段测试视频的统计量归一化,以及用最终优化后的轨迹作为当时已经可见的位姿。
一个简单审计方法是前缀一致性检查:在固定随机数与相同运行条件下,完整视频和只提供到 \(t\) 的前缀,其截至 \(t\) 的决策应一致。这里仅隐藏后续输入,不能同时改变已知任务期限、预算或提前发送结束信号。模拟延迟的系统还需保持相同到达时间与已完成任务状态。
11.2 流式不只是“按帧读文件”
假设图像在 0、33、67 毫秒到达。处理第一张图需要 70 毫秒,那么在 67 毫秒,第一张图的结果还没有产生。
墙钟时间: 0 ms 33 ms 67 ms 70 ms
图像到达: I0 I1 I2
处理过程: [------------- I0 计算 -------------]
可用结果: I0 的结果
如果你在评价 67 毫秒时就使用 I0 的最终结果,或者直接读取 I2 的离线预测,就是提前使用了尚未算出的输出。
真实流式评价应明确:在时刻 \(u\),实际可用的输出是什么,它描述哪个时刻,是否经过跟踪或预测传播到当前时刻。这是 Towards Streaming Perception 提醒视觉研究注意的核心问题。
11.3 为实时调度建立事件模拟
至少需要记录图像采集时间、入队时间、开始处理时间、完成时间、输出发布时间,以及策略决策自身的耗时。
评测器在固定墙钟时间网格读取“当时已发布的最新输出”。排队策略也要固定说明:处理所有积压帧、只处理最新帧、还是丢弃过期帧。否则不同方法比较的不是同一种服务方式。
若动作持续时间不同,\(t\) 更适合表示决策事件序号。若采用按时间折扣,可设置 \(\gamma_t=\exp(-\beta\Delta t)\),并让该事件奖励覆盖动作持续区间内的任务收益或误差成本。这样不会把 1 毫秒与 1 秒的动作机械地当作相同长度的一步;它属于半马尔可夫建模的思路。
11.4 对重建和跟踪,具体报告什么?
| 维度 | 建议指标或说明 |
|---|---|
| 当前感知质量 | 指定时刻的深度、几何、位姿或跟踪指标 |
| 长期一致性 | 随前缀长度变化的漂移、遮挡后恢复、身份保持 |
| 完整性 | 完成序列比例、有效覆盖、缺失预测数量 |
| 实时性 | 端到端延迟的中位数与 P95、输出年龄、截止期违约率 |
| 资源 | 峰值工作显存、CPU 工作内存、地图和缓存规模 |
| 训练代价 | 环境步数、训练墙钟时间、硬件与策略额外开销 |
ATE 是绝对轨迹误差,RPE 是相对位姿误差。单目评测还需说明是否允许尺度对齐。可以报告整段轨迹一次对齐后的最终指标,但也应单独报告适合在线输出的前缀指标;不能把整段未来信息得到的对齐效果称为系统当时已经具有的精度。
只保存更多历史到 CPU,并不能自动宣称系统总内存恒定。应该写清工作记忆、长期地图和结果归档分别统计什么。
12. 训练数据从哪里来?测试时还要奖励吗?
12.1 最适合被动流式任务的起点:视频回放环境
将已有训练视频、冻结的视觉模型和可重置的记忆管理器组合起来:
reset:抽取训练视频,清空地图、策略记忆、预算和队列
step(action):
1. 在当前内部状态上执行动作
2. 更新视觉输出、记忆、预算和模拟时钟
3. 由独立评价器计算训练奖励
4. 获取下一决策时刻允许看到的观测
5. 返回观测、奖励、终止状态与诊断信息
同一段训练视频可以重复使用,但每次必须按照这次策略的动作,重新推进会受动作影响的内部状态。
只缓存某个旧策略跑出来的地图和输出,再假装改变动作后仍会得到它们,不是正确的交互模拟。只有与动作、历史状态无关的确定性特征,才适合直接预计算复用;依赖缓存或跨帧上下文的特征需要另行处理。
12.2 训练可以看真值,部署策略不能偷偷依赖它
| 信息 | 训练奖励计算 | 部署 Actor 输入 |
|---|---|---|
| 训练序列真值深度、位姿 | 可以 | 不可以,除非部署任务本来就提供 |
| 训练序列未来结果 | 可以用于事后评价长期后果 | 严格因果设定下不可以 |
| 当前已测得的残差、预算、缓存统计 | 可以 | 可以,但必须计入获取成本 |
| 测试集真值 | 只供独立最终评测 | 不可以用于调策略、挑阈值或挑检查点 |
训练时事后知道“早先保留的帧帮助了后面”,是信用分配所需的反馈;把后面帧的内容直接塞给当时的 Actor,是另一回事。
有些方法让 Critic 在训练时使用特权信息,再在部署时丢弃 Critic。例如 Reinforcement Learning Meets Visual Odometry 的方法部分使用了可访问真值位姿信息的训练 Critic。实现这种方法时,还需检查 Actor 是否通过共享特征、历史奖励输入或预处理间接拿到了部署时不存在的信息。
12.3 冻结部署通常不需要实时计算训练奖励
离线完成训练后,部署路径可以仅保留:
当前图像与内部统计 → Actor → 动作 → 更新视觉系统
Critic、真值奖励和策略梯度更新不必运行。离散策略部署时可以取最高概率动作,也可以保留采样;两者可能有不同效果,应明确并验证实际采用的方式。策略每帧做不同选择,是自适应行为;策略参数每帧被训练更新,则是另一个问题。
这也解释了:一个系统可以具有流式决策能力,却完全不在测试序列上训练。
12.4 只有固定日志时,才进入典型 offline RL 困境
假设你只能拿到旧系统保存的 \((o_t,a_t,r_{t+1},o_{t+1})\),不能重跑重建器,也不能测试其他动作。此时新策略选出日志几乎没出现过的动作,其后果无法直接核实。
这会导致分布偏移与不可靠的价值外推。普通 DQN 或 SAC 能用经验回放,并不意味着它们能可靠地只靠任意固定日志训练。Offline RL 教程
CQL 等专门方法尝试约束价值的过度乐观,但不能凭空补齐完全没有证据支持的动作后果。若日志动作覆盖很窄,先做行为克隆并严格评价,可能更合理。Conservative Q-Learning
12.5 真正结束与人为截断必须分开
Gymnasium 的常见接口为:
obs, info = env.reset()
next_obs, reward, terminated, truncated, info = env.step(action)
terminated:任务定义中的结束,例如明确的有限时域结束或不可恢复的失败。truncated:因训练采样长度等外部条件停止,但任务在概念上仍会继续。
真正终止不 bootstrap;外部截断通常需要用截断处真实下一观测的价值 bootstrap,不能错误地使用环境自动重置后的初始观测。GAE 的轨迹递推也不能跨入下一回合。Gymnasium:处理时间限制
长视频切成多个训练片段时尤其要注意:片段结束不一定等于环境终止。视频本身就是完整有限任务时,结尾则可以是终止。选择哪一种,应由任务定义决定。
13. 亲手运行:一次预算应该花在哪一帧?
这个实验实现第 1 节的三阶段故事。只用 Python 标准库,不需要 GPU、PyTorch 或 RL 框架。将下面整段代码保存为 toy_keyframe_rl.py,使用 Python 3 运行。
状态是 (阶段, 剩余预算, 是否有岔路锚点);动作 0 表示等待,1 表示更新。时间和预算都进入状态,因此这个玩具问题是可完全观测的。
from collections import defaultdict
import random
GAMMA = 0.95
def legal_actions(state):
t, budget, anchor = state
if t >= 3:
return []
return [0, 1] if t < 2 and budget > 0 else [0]
def step(state, action):
assert action in legal_actions(state)
t, budget, anchor = state
reward = 0.0
if action == 1:
budget -= 1
if t == 0:
reward = 2.0
elif t == 1:
reward = 1.0
anchor = 1
if t == 2 and anchor:
reward = 6.0
next_state = (t + 1, budget, anchor)
terminated = (t + 1 == 3)
return next_state, reward, terminated
def train(seed=7, episodes=5000):
rng = random.Random(seed)
q = defaultdict(lambda: [0.0, 0.0])
alpha = 0.1
for episode in range(episodes):
state = (0, 1, 0)
epsilon = max(0.05, 0.5 * (1.0 - episode / episodes))
while True:
actions = legal_actions(state)
if rng.random() < epsilon:
action = rng.choice(actions)
else:
action = max(actions, key=lambda a: q[state][a])
next_state, reward, terminated = step(state, action)
target = reward
if not terminated:
target += GAMMA * max(
q[next_state][a] for a in legal_actions(next_state)
)
q[state][action] += alpha * (target - q[state][action])
state = next_state
if terminated:
break
return q
def evaluate(policy):
state = (0, 1, 0)
actions, rewards = [], []
while True:
action = policy(state)
state, reward, terminated = step(state, action)
actions.append(action)
rewards.append(reward)
if terminated:
break
discounted = sum((GAMMA ** t) * r for t, r in enumerate(rewards))
return actions, sum(rewards), discounted
def greedy_immediate(state):
return max(legal_actions(state), key=lambda a: step(state, a)[1])
q = train()
learned = lambda s: max(legal_actions(s), key=lambda a: q[s][a])
for name, policy in [("immediate", greedy_immediate), ("Q-learning", learned)]:
actions, total, discounted = evaluate(policy)
print(f"{name}: actions={actions}, total={total:.1f}, G0={discounted:.3f}")
print("Q(start, wait/update):", [round(v, 3) for v in q[(0, 1, 0)]])
assert evaluate(learned)[0] == [0, 1, 0]
assert evaluate(learned)[1] == 7.0
预期输出:
immediate: actions=[1, 0, 0], total=2.0, G0=2.000
Q-learning: actions=[0, 1, 0], total=7.0, G0=6.365
Q(start, wait/update): [6.365, 2.0]
代码中的关键步骤是:到 \(t=2\) 才出现的 6 分,通过 \(Q\) 值更新逐步传回前面的决策,最终让 \(t=0\) 的“等待”变得有价值。
这段实验也有明确局限:视频阶段固定,策略可以记住顺序;奖励规则已知,直接规划或写“第二步更新”的规则同样有效。得到 7 分只能说明你理解并实现了这个教学问题,不能证明 RL 对真实关键帧选择有优势。
完成后尝试三个改动:
- 把
GAMMA改成 0,观察策略是否只追求立即奖励;同时修改末尾断言以符合新目标。 - 把岔路锚点的延迟奖励从 6 改成 0,观察第一步决策如何变化。
- 随机化岔路出现时刻,并给策略提供能辨识当前内容的观测,检查它是否还只会记住时间位置。
第三个改动开始接近真正的研究问题:策略需要识别“什么时候值得保留信息”,而不只是记住某个固定剧本。
14. 你的第一个真实项目:固定预算下的关键帧写入
下面是一份可执行的实验设计,不是已跑出的结果。目的是检查你的现有视觉系统是否存在可学习的长期决策收益。
14.1 先把研究问题限定成一句话
在固定输入视频、固定视觉模型和明确工作记忆上限下,只学习“当前帧是否写入关键帧缓存”,改善给定预算下的整段在线输出质量。
暂时不要同时学习选帧、删帧、token 压缩、优化迭代数和连续相机运动。动作越多,性能变化越难归因。
14.2 系统构成
当前图像 + 历史缓存
│
├──→ 已有廉价特征与统计 ──→ 小型 Actor ──→ 写入 / 不写入
│ │
└──────────────→ 冻结视觉主干 + 缓存更新规则 ←────┘
│
└──→ 规定的逐帧输出
仅在训练时:输出 + 训练真值 + 实际成本 → 奖励 → 更新 Actor / Critic
选择能暴露缓存与更新接口的现有系统。如果主干完全不允许控制历史输入或内部状态,先做好接口,不能只给网络外面加一个没有实际影响的动作。
14.3 一份初始环境规格
| 项目 | 第一版定义 |
|---|---|
| 输入 | 录制的单目 RGB 序列;是否已知内参在实验中固定说明 |
| 视觉模型 | 冻结权重、固定预处理与输出协议 |
| 初始化 | 所有方法使用相同的因果初始化,不给策略额外真值位姿 |
| 工作缓存 | 例如 8 个关键帧槽位,属于实验起始设置 |
| 动作 | 0:不写入;1:写入当前帧 |
| 缓存满时 | 使用统一的确定性替换规则,例如删除最旧的非锚点帧 |
| 硬预算 | 每个明确有限任务至多写入 \(B\) 次;另记录实际计算成本 |
| 合法动作 | 预算耗尽或状态不允许写入时,只能选 0 |
| 输出 | 所有规定时刻仍需提供预测,缺失输出按统一规则处理 |
| Episode | 一段事先定义的任务;场景、地图、预算和策略记忆同步重置 |
| 奖励 | 先选一个核心任务误差,加必要的成本与失败处理 |
若任务有已知期限,把剩余期限作为观测;对实际不知道何时结束的无限流,不要让策略偷看视频总长度,可以改用每秒预算或令牌桶等资源机制重新定义环境。
“8 个槽位、二值动作”是为了降低第一轮实验复杂度。它们既不是论文结论,也不是必须采用的超参数。
使用动作掩码时,采样、记录旧策略概率和更新时计算新策略概率,都要使用该状态对应的同一合法动作集合。不要让策略选了非法动作,再由环境悄悄改成另一个动作,却仍按原动作概率训练。
14.4 Actor 应该看到什么?
建议先用低维统计量,并逐项确认能在决策前获得:
- 当前与上一关键帧的廉价匹配数量、内点率和视差摘要。
- 图像模糊程度、亮度变化、可用的动态区域比例。
- 缓存大小、槽位年龄、最近一次写入距今多久。
- 跟踪器已经产生的置信度、残差或状态标志。
- 剩余预算;实时版本还包括队列与近期延迟。
先用两层 MLP。若同一组统计在不同历史下需要明显不同动作,再尝试 GRU 等循环模型。增加历史后,要按连续片段训练,并正确重置隐藏状态。
对于基于 Transformer 的缓存,不能默认 key/value 可以随意删。应确认位置编码、参考坐标、缓存长度与关联元数据都支持你的操作。
14.5 首轮只选择一个主要评价任务
| 首轮任务 | 可以使用的核心训练反馈 | 必须另报的指标 |
|---|---|---|
| 位姿估计 | 训练真值下的局部位姿或固定规则轨迹误差 | 完成率、尺度处理、长前缀漂移 |
| 稠密重建 | 固定评价点上的几何或深度误差 | 覆盖、错误几何、动态区域表现 |
| 长期点跟踪 | 固定查询的定位与可见性误差 | 遮挡后恢复、身份错误、丢失查询 |
如果有训练真值,先验证“决策是否有效”,之后再研究无真值奖励。把难环境、弱奖励和复杂策略一次叠加,会让失败原因难以判断。
固定评价查询非常重要:策略不能通过删掉难跟踪的点,降低自己面对的考题难度。
14.6 必须比较的基线
| 基线 | 它检验什么 |
|---|---|
| 原系统默认规则 | 新方法是否比已有工程实践更好 |
| 按固定间隔写入 | 是否只是更新频率带来收益 |
| 随机写入,匹配写入次数与资源 | 是否只是探索到不同但无规律的选择 |
| 视差、置信度等阈值规则,在验证集调参 | 小策略是否优于合理手工规则 |
| 学习单步收益的监督模型或 bandit | 收益是否真的需要长程信用分配 |
| 相同观测与相近容量的模仿学习策略 | 强化学习训练是否比学一个好教师更必要 |
| 短片段上的搜索参考 | 当前动作空间究竟有没有可利用的性能空间 |
只有当短片段内枚举全部合法动作序列,并按同一目标求解时,才能称其为该设定的最优上界。有限宽度搜索或贪心搜索一般只是更强参考,不是真正上界。能够看到未来的搜索器也必须单独标注,不能与部署方法混报。
资源比较至少做两种:同等预算比较质量;相近质量比较资源。 多个预算点组成质量–成本曲线,比只报一个精心选出的工作点更有说服力。
14.7 实验顺序
第一步:验证动作有用。 在少量短片段上比较不同写入序列。如果同样预算下怎么选都差不多,当前动作空间可能没有研究价值,不必立刻训练 PPO。
第二步:验证环境正确。 重放完全相同的动作序列,应得到可重复结果;切换动作,应确实改变缓存及后续输出。检查预算扣除、重置、失败和合法动作。
第三步:建立学习基线。 能便宜评估多个动作时,先训练一步收益预测器,或模仿一个合理搜索器。使用 PPO 时可从简单策略开始,也可从模仿策略初始化;两者要在结果中说明。
第四步:训练小型 RL 控制器。 先在少数训练序列上确认能学到规律,再扩展场景。前者只用于调试,不是泛化结果。
第五步:按场景验证泛化。 训练、验证、测试使用不重叠场景或采集序列。不能把同一房间的相邻片段随机拆开,当成独立泛化证据。
第六步:拉长时域和加入真实计时。 先检查完整长序列的记忆与漂移,再验证真实墙钟服务质量。如果只做了离线回放步数预算,结论应限定为预算分配,不能直接称为实时性能提升。
14.8 训练到底要花多少钱?先量环境速度
RL 成本常由重建器反复运行决定,而不是小策略决定。先测若干完整 episode,估算:
例如,仅作量级演算:若平均一步需 0.2 秒,串行执行 \(10^6\) 步就要约 55.6 小时,还未计策略训练和评测。并行环境受显存、共享 GPU 和数据传输限制,不保证线性加速。
冻结与动作无关的特征提取器、缓存合法的确定性计算、降低决策频率,可能降低成本。每一种简化都应检查是否改变了要研究的任务。
14.9 什么样的结果值得继续?
值得继续的信号是:在多个未见场景、多个训练随机种子和合理预算范围内,策略稳定改善真正关心的指标,并且动作行为能与某种失效机制对应起来。
如果优势只来自更多计算、更大观测信息、更强主干或测试集调参,就不能归因于强化学习。
若一个简单阈值在公平条件下达到相同效果,可以采用阈值。这个结果仍然帮助你理解系统瓶颈;没有必要为保留 RL 模块而修改评价标准。
15. 怎样把应用做成一个有说服力的研究问题?
15.1 先证明长期后果存在
相比“把 PPO 用到重建”,下面这种表述更具体:
在有限缓存中,当前帧的即时重建贡献不足以预测其重访价值;是否能用当前可观测证据选择锚点,从而改善长遮挡之后的几何与身份恢复?
这仍只是研究假设。你需要先找到反例片段:短视规则确实删除了将来有用的信息,而且更好的选择在同等预算下能恢复性能。
15.2 三个可以继续探索的方向
| 方向 | 需要验证的假设 | 最有辨别力的实验 |
|---|---|---|
| 遮挡与重访下的记忆保留 | 即时不显著的观测具有可预测的后续价值 | 按遮挡时长、重访间隔和重复纹理分组 |
| 跟踪失稳前的计算分配 | 廉价信号能提前识别未来困难,及早干预更划算 | 与同信息、同容量的短视预测器比较 |
| 动态场景中的更新调度 | 过早融合或适配会污染后续状态,等待可以减少错误传播 | 分离静态几何、物体运动与身份保持指标 |
这些方向的价值来自具体机制与可证伪假设。是否新颖,仍需针对确切设定补做文献核查;本文不承诺某个方向尚无人研究。
15.3 一组能支撑归因的消融
- 长程与短视: 保持相同观测和动作,比较长期目标与单步收益训练。改变 \(\gamma\) 会改变优化目标,解释结果时要明确这一点。
- 记忆是否必要: 比较无历史、简单历史统计和循环策略。
- 奖励是否对齐: 去掉某一奖励项,观察独立任务指标是否按预期变化。
- 信息是否公平: 给规则或学习基线同样的廉价输入,防止仅靠更多信息获胜。
- 预算是否泛化: 在未用于调参的预算和更长序列上评价。
- 动作是否可解释: 画出写入时刻、误差、预算及遮挡事件的时间曲线,核对决策与失效机制。
不要只展示累计奖励上升。那只能说明策略更会优化你写下的分数。
15.4 如何报告不稳定性?
训练随机性和测试场景差异是两种不同的不确定性。分别记录,使用多个训练种子,在固定测试场景集合上配对比较;按场景进行重采样时,应保留整段时序结构,不把高度相关的视频帧当成独立样本。
初步试验可以先用少量种子筛查,正式结论需要与结果波动相适应的重复次数和置信区间。只挑最好种子或删除失败场景都不足以支撑可靠结论。Deep Reinforcement Learning at the Edge of the Statistical Precipice,NeurIPS 2021
冻结视觉主干、只训练小策略,也属于需要训练的方法。 可以强调训练范围小、复用已有主干或测试时不更新策略,但不应把整个方法称为 training-free。
16. 该读什么?按理解顺序读,不按年份追
16.1 第一轮:只选三份基础材料
- Sutton 与 Barto 的教材第二版。 先读第 1 章建立问题意识,再读第 3–6 章的 MDP、动态规划、Monte Carlo 和 TD;理解后再读第 13 章策略梯度。第 2 章老虎机有助于理解探索和一步决策。不要要求自己先通读全书才动手。出版社页面
- Spinning Up 的概念与策略优化教程。 用它连接符号、损失和代码,重点掌握策略、价值、回报以及策略梯度。它的概念说明仍有教学价值;旧代码环境不必逐项照搬。概念 · 策略优化
- Berkeley CS285 的课程材料。 推荐从模仿学习、策略梯度、Actor–Critic、Q-learning 开始,之后再看 offline RL 和 model-based RL。下面是可访问的 2023 年课程存档,不要求一定使用最新一期。课程与作业
16.2 第二轮:算法论文每篇只带一个问题
| 材料 | 阅读时必须回答的问题 |
|---|---|
| DQN,2015 | 为什么 Q 学习需要经验回放和目标网络? |
| GAE,2015 年首稿 | 如何在价值预测与实际长程回报之间折中? |
| PPO,2017 | 为什么要限制用旧数据更新策略的幅度? |
| SAC,ICML 2018 | 连续动作、经验回放与熵目标如何结合? |
| Offline RL 教程,2020 | 为什么固定日志上的策略学习比普通监督学习困难? |
初次实现离散控制器,不必同时复现这五篇。把 Q-learning 小实验理解清楚,再读 PPO,已经足以进入第一个项目。
16.3 第三轮:与你的视觉方向建立联系
优先精读 RL Meets VO。在纸上分别画出环境、观测、动作、奖励、训练数据、部署输入,重点检查哪些量来自视觉系统,哪些仅用于训练。
接着读 流式感知评测论文,用它重新审视“更快”的含义。关注结果在什么时候真正可用,而不是只看单次前向耗时。
如果你的相机可控,再读 Active Neural SLAM 和 Scan-RL。阅读时追问:动作改变的是内部计算还是外部视角?重建、定位、规划和策略分别负责什么?
准备做基础模型选帧时,把 2026 年前馈 VO 选帧稿加入相关工作核查。本文并未对 2026 年所有 RL 与视觉论文进行穷尽综述。
16.4 实现时查的资料
- Gymnasium 基本接口:学习环境的 reset、step 与观测/动作空间约定。
- Gymnasium 终止与截断:做长视频片段训练前读。
- Stable-Baselines3 实践建议:检查自定义环境、评测、归一化和训练稳定性。安装时固定并记录实际版本。
- RL VO 官方代码:参考怎样把现有 VO 程序变成 RL 环境,不应预设能直接兼容你的主干。
- rliable 官方代码:在需要更系统地汇总实验不确定性时使用。
17. 一个四阶段学习计划
下面可以按每阶段约一周安排,也可以按自己的节奏延长。通过标准比日历重要。
| 阶段 | 学习内容 | 亲手完成的产物 | 通过标准 |
|---|---|---|---|
| 1:建立决策直觉 | 第 1–4、13 节 | 跑通并修改玩具实验,手算回报和一次 TD 更新 | 能解释为何延迟收益改变第一步动作 |
| 2:理解训练机制 | 第 5–8 节与一份 PPO 实现 | 在小型标准环境中训练策略,记录回报与失败 | 能说清 Actor、Critic、优势和采样数据的关系 |
| 3:连接视觉程序 | 第 9–12、14 节前半 | 一个能重置、回放、切换动作的环境,以及规则基线 | 相同动作可复现,不同动作确实影响后续状态 |
| 4:验证研究假设 | 第 14–15 节 | 一个明确场景划分下的小型比较实验 | 能判断收益来自长期决策,还是信息、预算或主干差异 |
第一阶段最不该省略。很多“PPO 不收敛”的问题,实际上来自奖励与目标不一致、终止处理错误,或动作根本没有影响环境。
第二阶段使用小环境,是为了把算法调试与昂贵视觉系统调试分开。第三阶段如果环境速度过慢,先解决反馈和回放成本,不要直接扩大训练规模。
到第四阶段,你的成果可以是“在这个设定下,阈值规则已经足够”。这也是有价值且可以支撑下一步选题的结论。
18. 复习、自测与术语速查
18.1 先不看答案,回答八个问题
- 当前图像一样,剩余预算不同,为什么策略可能需要不同动作?
- 一个动作立即奖励为负,它的 Q 值能不能为正?
- 为什么一个固定录制视频也可以构成 RL 环境?
- 为什么在同一视频上重复回放并重新计算动作后果,不一定是 offline RL?
- 训练奖励使用未来真值,与部署时偷看未来帧有什么区别?
- 为什么增加每帧预测准确率,可能降低流式服务质量?
- 策略累计奖励上涨、但跟踪覆盖下降,你首先检查什么?
- 如果相同预算下监督决策器与 PPO 表现一样,你能得到什么结论?
18.2 参考答案
- 预算决定以后还有哪些合法选择及机会,因此是决策相关状态。忽略它会丢失影响后果的信息。
- 可以。后续收益折扣后足够大,就能补偿立即损失。
- 动作可改变重建器记忆、预算或队列,即使原始图像顺序不变,后续预测仍然不同。
- 如果新策略能在可执行环境中产生新的转移,就是持续采集交互;offline RL 指训练只依赖固定的既有转移记录。
- 前者是事后评价动作后果;后者改变了当时决策可以使用的信息。训练反馈、Actor 输入和部署接口要分开检查。
- 更昂贵的推理可能使结果过时、排队增加或错过截止期。准确率必须与实际输出时间共同评价。
- 检查策略是否通过删除困难查询、减少输出或拒绝困难片段取巧,且评测是否惩罚这些缺失。
- 当前实验尚未证明多步 RL 训练的额外价值。可能需要重新检查长程机制,也可能直接选择更简单的方法。
18.3 术语速查
| 英文 | 中文 | 一句话记忆 |
|---|---|---|
| Episode | 回合、一次完整任务 | 从重置到真正结束 |
| Rollout | 采样轨迹或轨迹片段 | 用策略实际运行环境得到的记录 |
| Policy | 策略 | 决定做什么 |
| Reward | 奖励 | 一次动作后的分数 |
| Return | 回报 | 以后分数的累计 |
| Value | 价值 | 对回报的期望预测 |
| Advantage | 优势 | 某动作相对当前策略平均选择的价值差 |
| Credit assignment | 信用分配 | 后果该归功或归咎于哪些动作 |
| Exploration | 探索 | 尝试后果尚不确定的选择 |
| Bootstrap | 自举 | 用价值估计帮助更新价值估计 |
| Replay buffer | 经验回放缓冲区 | 训练用转移记录,区别于关键帧缓存 |
| Behavior cloning | 行为克隆 | 用监督学习模仿示范动作 |
| Contextual bandit | 上下文老虎机 | 根据当前信息优化这一次选择的收益 |
| POMDP | 部分可观测决策过程 | 决策者看不见完整状态 |
| MPC | 模型预测控制 | 每次向前规划一段,只执行开头再重规划 |
| Reward hacking | 奖励取巧 | 分数提高,但真实目标没有改善 |
18.4 准备开始项目时,写下这六句话
- 我要控制的动作是: ______。
- 这个动作通过 ______ 改变未来,而不只是影响当前一次预测。
- 策略当时实际能看到: ______。
- 训练奖励来自 ______;独立评价指标是 ______。
- 在相同预算、信息与主干下,我要超过的简单基线是: ______。
- 如果实验出现 ______,我就认为当前 RL 假设没有得到支持。
如果这六句已经写清楚,你就具备了把强化学习用于视觉问题的正确起点。接下来最值得做的,是实现一个小而真实的决策环境,观察一次选择怎样改变后面的重建或感知结果。