这里默认 **GCRL = Goal-Conditioned Reinforcement Learning**，中文通常叫**目标条件强化学习**。在 RL 文献里，它也常被叫做 goal-oriented RL 或 multi-goal RL。它的核心不是“学一个固定任务的最优策略”，而是**学一个以目标 (g) 为条件的通用策略**：给定当前状态 (s) 和目标 (g)，策略输出“为了达到这个目标，此刻该怎么做”。IJCAI 2022 的综述把它表述为：相对标准 RL，GCRL 在决策时额外接收一个目标，并且训练后应能在任务规定的目标空间内实现任意目标。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 1. 它到底比普通 RL 多了什么

普通 RL 里，策略通常写成

$$
\pi(a\mid s)
$$

奖励函数是固定的 ($r(s,a)$)，所以“任务”是被这个固定奖励函数隐式定义好的。GCRL 则把“任务描述”显式抽出来，变成目标 (g)，于是策略变成
$$
\pi(a\mid s,g)
$$
奖励也变成

$$
r(s,a,g)
$$

也就是说，**同一个环境、同一个状态、同一个动作，在不同目标 (g) 下，其价值和奖励都可能不同**。因此 GCRL 本质上是在一个环境里，同时学习一族相关任务，而不是只学一个任务。综述把这个形式化为在原 MDP 上增加 ($\langle G,p_g,\phi\rangle$​)：目标空间 (G)、目标分布 ($p_g$)、以及把状态映射到“已达到目标表示”的函数 ($\phi:S\to G$)。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

更严格地说，普通 RL 的 MDP 是

$$
M=\langle S,A,T,r,\gamma,\rho_0\rangle
$$

而 GCRL 常写成 **goal-augmented MDP**：
$$
\langle S,A,T,r,\gamma,\rho_0,G,p_g,\phi\rangle
$$

它的目标是学习一个条件策略 ($\pi(a\mid s,g)$)，去最大化跨目标分布的期望回报：
$$
J(\pi)=\mathbb E_{g\sim p_g,;a_t\sim \pi(\cdot\mid s_t,g),;s_{t+1}\sim T}\Big[\sum_t \gamma^t r(s_t,a_t,g)\Big]
$$

这说明 GCRL 改变的不是“优化器”本身，而是**策略与价值函数的定义域**：它们不再只对状态定义，而是对“状态–目标对”定义。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 2. “目标”在 GCRL 里不是一句空话，而是一个数学对象

综述里把目标相关概念分成三类，这个区分很关键：

- **desired goal**：任务真正要求你完成的目标；
- **achieved goal**：你在当前状态实际上已经达到的目标；
- **behavioral goal**：这一条 rollout 在执行时真正拿来驱动行为的目标。

如果没有做子目标替换，behavioral goal 和 desired goal 相同；一旦做了子目标规划，它们就可能不同。这个区分解释了为什么 GCRL 里“目标”既参与**控制**，也参与**数据重标记**。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

目标的表示也不局限于“一个坐标点”。综述提到，目标可以是状态子空间中的向量、图像，也可以是语言、命令、奖励描述，甚至是某种内在技能表征。也就是说，GCRL 的关键不是目标长什么样，而是：**目标能否作为条件变量，稳定地进入策略、价值函数和奖励判定中**。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 3. 一个最典型的例子：导航/机械臂到达任务

在机器人导航或机械臂任务里，常见做法是把目标 (g) 定义为某个想达到的位置；($\phi(s)$) 则从状态里提取当前位置或物体位姿。于是最朴素的成功奖励可以写成
$$
r_g(s_t,a_t,g)=\mathbf 1(|\phi(s_{t+1})-g|\le \varepsilon)
$$

也就是“下一时刻是否已经足够接近目标”。这类奖励通常是**二值成功信号**，优点是任务定义直接，缺点是极其稀疏：大多数时间步奖励都是 0。综述明确指出，GCRL 里的奖励通常就是这样的简单二值信号，而这正是它的核心难点之一。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

这里有一个机制上的关键点：在普通 RL 里，一条轨迹通常只按“对当前任务有用/没用”来评价；但在 GCRL 里，**同一条轨迹对不同目标会有不同意义**。比如机械臂原本想去点 A，结果去了点 B。对目标 A 来说这条轨迹失败，但对目标 B 来说它其实是成功样本。这正是 GCRL 后面很多方法能够大幅提升样本利用率的根本原因。([NeurIPS Proceedings](https://proceedings.neurips.cc/paper/7090-hindsight-experience-replay.pdf))

## 4. 为什么 GCRL 比普通 RL 更难

综述把两大基础挑战概括为：**跨目标泛化**和**样本效率**。前者是因为你不是在学一个任务，而是在学目标分布 ($p_g$) 上的一族任务；后者是因为奖励往往是稀疏的成功/失败信号，失败轨迹在原始目标下几乎不给学习信号。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

更底层一点看，GCRL 同时叠加了三种困难：

第一，**函数逼近难度上升**。原来只要近似 (V(s)) 或 (Q(s,a))，现在要近似 (V(s,g)) 或 (Q(s,a,g))。这要求模型不仅捕捉状态结构，还要捕捉目标空间结构，以及二者的耦合。UVFA 论文强调的就是这一点：目标空间和状态空间一样具有结构，附近目标往往也有相似价值，因此应该一起泛化。

第二，**探索更难**。如果目标很远、很复杂，随机探索几乎不可能恰好达到成功区域。于是目标越多，稀疏奖励越严重，因为成功样本更稀缺。综述因此把“长程目标分解为更容易达到的子目标”看作 GCRL 的另一大动机。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

第三，**目标表示本身可能带来偏差**。如果 ($\phi(s)$) 没有保留任务真正相关的信息，那么“达到目标”的判定就会失真。比如只看二维位置却忽略姿态、抓握状态、接触关系，那么形式上“到达目标”，在真实任务上可能仍然失败。这个问题很多视觉/潜变量 GCRL 方法都在处理，本质上是“什么才算 goal representation”的问题。综述也专门把目标表示列为一大部分。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 5. GCRL 的第一块基石：UVFA

GCRL 最经典的基础对象是 **UVFA（Universal Value Function Approximator）**。Schaul 等人提出：不要为每个目标单独学一个价值函数 ($V_g(s)$)，而是直接学一个统一的函数

$$
V(s,g;\theta)\approx V_g^*(s),\qquad
Q(s,a,g;\theta)\approx Q_g^*(s,a).
$$

这样一来，参数共享发生在目标之间：模型能利用“相似目标有相似价值结构”这个事实，把对一个目标学到的知识迁移到另一个目标。UVFA 论文还明确展示了它可以泛化到未见过的目标。

从机制上看，UVFA 做了两件事。

第一，它把“任务 ID”从离散枚举改成了连续条件输入。原来你可以想成有无数个 $value function (V_g)$；现在把它们压缩成一个统一近似器。于是复杂度不再主要由“任务数”决定，而是由状态–目标联合结构的复杂度决定。UVFA 论文把这描述为：它相当于把一整类 predictions/values 汇总进一个对象中。

第二，它让 Bellman 递推天然带上目标条件。虽然论文写法各有不同，但本质都是

$$
Q^\pi(s,a,g)=r(s,a,g)+\gamma,\mathbb E_{s'}\mathbb E_{a'\sim \pi(\cdot\mid s',g)}[Q^\pi(s',a',g)].
$$
注意目标 (g) 在时间上通常是不变的；变的是状态。于是学习过程变成：**在固定目标条件下估计从当前状态继续达到该目标的长期可达性/回报**。这就是 GCRL 的核心动态规划对象。其标准形式和 UVFA 的价值函数扩展都已由 UVFA 和综述明确提出。

## 6. GCRL 的第二块基石：HER

如果说 UVFA 解决的是“如何表示一族目标任务”，那么 **HER（Hindsight Experience Replay）** 解决的是“稀疏奖励下到底拿什么学”。

HER 的核心思想非常直接：一条轨迹执行完以后，不只用原目标 (g) 来存 replay buffer，还把这条轨迹里**实际达到过的目标**当成新的训练目标重放。比如轨迹是

$$
s_0,s_1,\dots,s_T,
$$

HER 会把其中某些 transition 不仅以原目标存储，还以“这条轨迹后来达到的某个 achieved goal”来重标记。这样，本来在原目标下全是 0 奖励的失败轨迹，在新目标下就可能变成成功轨迹。HER 论文把这看作一种从“未达到原目标的失败”中提取有效监督信号的方法，并强调它可以和任意 off-policy RL 算法结合。([NeurIPS Proceedings](https://proceedings.neurips.cc/paper/7090-hindsight-experience-replay.pdf))

机制上，HER 之所以成立，是因为 GCRL 里“目标”本来就是条件变量，而不是环境动力学的一部分。轨迹已经发生了，状态转移不变；你只是换了一个条件问题在问：**这条轨迹对哪个目标是有用的？** 这和普通 RL 非常不同，因为普通 RL 没有这个“同一轨迹服务于多个目标”的视角。综述把 relabeling 单独列为 GCRL 的核心环节，并把 HER 作为这条线的起点：它通过用 achieved goals 替换 desired goals 来缓解稀疏奖励，同时让 off-policy 算法能够更充分地重用 replay buffer 中的数据。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

所以可以把 HER 理解成一句话：
**GCRL 允许你把“失败经验”变成“针对别的目标的成功经验”。**
这不是技巧性的 data augmentation，而是由“目标作为条件变量”这个建模方式直接导出的。([NeurIPS Proceedings](https://proceedings.neurips.cc/paper/7090-hindsight-experience-replay.pdf))

## 7. 子目标方法在 GCRL 里处于什么位置

综述指出，GCRL 处理复杂任务通常有两条路：
一条是**一个策略同时覆盖多个目标**；
另一条是**把长时程、难达到的目标分解成更容易达到的中间子目标**。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

这里要把两个常被混淆的操作分开：

**子目标选择 / 生成（sub-goal selection/generation）**：发生在数据采集阶段。也就是说，在 rollout 之前或 rollout 过程中，就改变这次行为要追的目标，让 agent 先去追更容易达到的中间目标。综述明确说这相当于把环境的目标分布从 (p_g) 改成另一个更利于学习的分布。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

**重标记（relabeling）**：发生在数据已经采完之后。它不改变当时行为执行时的目标，只是在 replay buffer 里把样本元组 ($(s_t,a_t,g_t,r_t)$) 的目标替换成 ($h(\cdot)$) 并重新计算奖励。综述给出了这个过程的形式化写法。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

二者的根本区别是：

- 子目标方法改的是**行为分布**；
- HER 类方法改的是**训练监督信号**。

很多强方法其实同时用两者：先用子目标降低探索难度，再用 hindsight relabeling 提高样本利用率。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 8. 现代 GCRL 为什么越来越强调“表示学习”

早期 GCRL 更多是在向量状态上做；后来视觉和高维观测出现后，关键问题变成：目标 (g) 和状态 (s) 应该怎么编码，才能让“是否可达、还差多远、该做什么动作”这些信息变得线性或至少容易学习。UVFA 已经有这个方向：它希望在状态和目标两侧都学习可泛化的表示。

一个很有代表性的现代视角是 **Contrastive RL**。Eysenbach 等人在 2022 年指出，可以把对比表示学习直接解释为一种 GCRL：通过对轨迹片段做对比学习，学到的表示内积可以精确对应一个目标条件价值函数。这个观点的意义是：GCRL 不只是“加了个 goal 输入的 RL”，它还可以被理解为一种**关于可达性、接近性、未来占据分布的表示学习问题**。([arXiv](https://arxiv.org/abs/2206.07568?utm_source=chatgpt.com))

因此，从底层看，GCRL 在学的并不只是“动作规则”，而是在学一个更一般的对象：
**从当前状态出发，经过控制后，哪些目标是可达的、以什么代价可达、用什么行为可达。**

## 9. 它和几个相近概念的区别

### 和普通 RL 的区别

普通 RL：策略只对状态条件化，目标被固定奖励函数吸收了。
GCRL：策略和值函数都对目标条件化，目标是显式输入。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

### 和多任务 RL 的区别

多任务 RL 也学多个任务，但很多做法把任务当离散 ID 或单独 head；GCRL 更强调**目标空间的结构化表示**，尤其是目标可由状态、图像、语言等连续对象表示，并在这些目标之间做泛化。综述明确把 GCRL 看成可以从多任务学习视角理解的统一策略学习问题。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

### 和层次 RL（HRL）的区别

HRL 的核心是时间抽象和高层/低层控制结构；GCRL 的核心是目标条件化。两者可以结合，但不等价。综述提到 GCRL 常被用于把长时程目标分解成子目标；UVFA 论文也指出，不同目标价值函数可以用来生成 options，从而服务于 temporally abstract planning。也就是说，**GCRL 更像“目标接口”，HRL 更像“控制架构”**。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

### 和 instruction-conditioned / language-conditioned policy 的区别

如果“指令”最终扮演的是目标变量 (g)，那么它可以被看成 GCRL 的一种实例；区别只在于目标表示是语言而不是坐标或图像。综述也明确把语言列为目标表示之一。([IJCAI](https://www.ijcai.org/proceedings/2022/0770.pdf))

## 10. 一句话抓住 GCRL 的本质

我觉得最准确的一句话是：

**GCRL 不是“在 RL 里顺便加一个目标输入”，而是把 RL 的基本问题从“求一个任务的最优控制”改写成“学习一个关于目标可达性的条件控制器”。**

于是它自然导出三件事：

1. 用 ($V(s,g)) / (Q(s,a,g)$) 统一表示多目标任务（UVFA）；
2. 用 achieved goal 重写失败经验，提高稀疏奖励下的样本效率（HER）；
3. 用子目标、潜变量目标、对比表示等手段，去缓解长时程探索和高维表示学习难题。

