跳到正文
Lanxinmob

CS285 课程笔记:逆强化学习、RLHF 与元学习

从逆强化学习与特征匹配出发,延伸到 RLHF、序列模型,以及迁移学习与 Meta-RL。

在之前,我们解决的强化学习问题中都假设会提供 reward function 或我们手动编写 reward function 来定义任务。如果有一个任务很难手动指明 reward funciton,我们能不能用这些任务的成功数据来反推他们的 reward function 并通过强化学习再次优化这个我们推出的 reward function?这就是接下来要讲的逆强化学习问题。

Feature Matching IRL

在深度强化学习之前的时代,人们常用的方法是特征匹配。假设 reward 是各种特征的加权和,根据专家的轨迹去反推那些特征的权重,希望用猜出来的 reward ψ\psi 训练出来的 agent 长期表现出的行为特征和专家一样。但存在的问题是行为并不能唯一决定 reward,不同的 reward 也可能产生几乎一样的行为。

既然完全匹配不能唯一确定 reward,那就换一个思路:不要求只找到一个能解释专家的 reward,而是找一个 reward,让专家行为明显比其他行为更优。而且不是只要好一点点,至少要比其他策略高 mm。但如果一个策略和专家非常接近,累计奖励却又相差很大是不合理的,所以可以把 m 写成 DkLD_{kL} 。

Probabilistic Graphical Model of Decision Making

上面约束优化的方法很复杂,需要不断给定 reward,求一个最优 policy,找最违反约束的 policy,增加约束再优化 reward,策略空间巨大时很难扩展到 deep learning。为了解决 hard optimality,可以不再假设专家一定选择唯一最优行为而改成 reward 越高的行为出现概率越高。

定义: [ p(\mathcal O_t=1|s_t,a_t) \propto \exp(r(s_t,a_t))] 因此 [ r(s_t,a_t)\uparrow \Rightarrow p(\mathcal O_t=1|s_t,a_t)\uparrow ]

所以: [ p(\tau|\mathcal O) \propto p(\tau) \exp \left( \sum_t r(s_t,a_t) \right) ] Trajectory probability 由两部分决定 [ p(\tau|\mathcal O) \propto \underbrace{p(\tau)}{\text{环境动力学}} \underbrace{e^{R(\tau)}}{\text{reward }}]

因此物理上不可能的 trajectory 概率仍然很低,reward 越高的 trajectory,概率越高,次优 trajectory 并不会被直接排除,只是概率较低。 所以现在是把 reward 参数化为概率模型,最大化在这个概率图模型下某条轨迹的概率来学习 reward 参数。

max⁡ψ1N∑i=1Nlog⁡pψ(τiE)\max_\psi \frac1N \sum_{i=1}^N \log p_\psi(\tau_i^E) 展开 [ \mathcal L(\psi) = \frac1N \sum_i r_\psi(\tau_i^E) - \log Z(\psi) + \text{const}],梯度为 ∇ψL=Eτ∼π∗[∇ψrψ(τ)]−Eτ∼pψ[∇ψrψ(τ)]\nabla_\psi\mathcal L = \mathbb E_{\tau\sim\pi^*} [\nabla_\psi r_\psi(\tau)] - \mathbb E_{\tau\sim p_\psi} [\nabla_\psi r_\psi(\tau)] 即 [\text{expert statistics} - \text{current reward model statistics} ]。

如果 reward 是线性的 [ r_\psi(s,a)=\psi^\top f(s,a), ]则 [ \nabla_\psi r_\psi(s,a)=f(s,a), ]因此 [ \nabla_\psi\mathcal L = \mu_E-\mu_\psi ] 又自然回到了 feature matching。

Approximations in High Dimensions

精确计算 [ \mathbb E_{\tau\sim p_\psi} [\nabla_\psi r_\psi(\tau)] ]要求枚举或积分整个 state-action space,并且每次 reward 参数 (\psi) 改变后,都重新求新的 soft-optimal distribution 非常昂贵。

Guided Cost Learning 的想法是:

不要每次都把 policy 从头训练到收敛,维护一个持续更新的 policy (\pi_\theta),每次只改善一点,然后利用它产生轨迹样本来近似 MaxEnt IRL 中难算的期望。

reward gradient 是:

∇ψL≈1N∑i=1N∇ψrψ(τiE)−1∑jwj∑j=1Mwj∇ψrψ(τj)\nabla_\psi \mathcal L \approx \frac1N \sum_{i=1}^{N} \nabla_\psi r_\psi(\tau_i^E) - \frac{1}{\sum_jw_j} \sum_{j=1}^{M} w_j \nabla_\psi r_\psi(\tau_j)

第一项来自专家 demonstrations,梯度上升会倾向于提高 expert trajectories 的 reward 从而使其 [ p_\psi(\tau_E) ]变大。第二项代表当前 MaxEnt model 的轨迹期望,降低当前 policy 产生的不够像 expert 行为的 reward。更新完 reward 再让 policy 去最大化当前学出来的 reward,更严格地说,policy 不只是最大化 reward, Guided Cost Learning / MaxEnt sampler 还包含 entropy bonus。

RLHF

DPO 利用 policy 与 reward 之间的解析关系,将 reward 隐式表示为

rθ(x,y)=βlog⁡πθ(y∣x)πref(y∣x)+C(x)r_\theta(x,y) = \beta \log \frac{\pi_\theta(y|x)} {\pi_{\rm ref}(y|x)} +C(x)

因此不再需要先显式训练 reward model,再通过 RL 求解该 reward 的最优策略,而是直接利用 preference data 优化 policy。让 winner 相对于 reference 的概率增加,loser 相对于 reference 的概率减少,使 chosen 相对于 rejected 的隐式 reward 差距增大。

但是由于 DPO 学习的是 chosen 相对于 rejected 的相对优势,当行为同时存在于 chosen 和 rejected 中时,该共同部分会在梯度差中抵消,DPO 就不能获得直接的 preference 信号。同时 DPO 通常属于 offline preference optimization ,不会像 PPO-based RLHF 那样通过当前 policy 不断生成新的样本并获得新的奖励反馈,从而持续调整训练分布。

DPO 从 RLHF 中移除了强化学习训练循环,不再需要像 PPO 那样进行复杂的在线采样、奖励评估和策略更新,因此整体上更加简单、稳定,而且计算成本更低。虽然训练形式变成了直接基于偏好数据优化策略,但 DPO 通过 reward 与 policy 之间的解析关系,仍然对应于 RLHF 中同一类 KL 正则化偏好优化目标。

RL with sequence model

首先通过 supervised training / fine-tuning 得到初始策略 [ \pi_{\theta_0}(a|s)],然后进入 preference + RL 循环。对于每个 prompt (s_i),从当前模型采样 (K) 个回答 [ a_{i,k}\sim\pi_\theta(a|s_i)] 形成数据 [ \mathcal D = { (s_i,a_{i,1},\ldots,a_{i,K}) }] 并让人工对这些回答进行排序或两两比较,得到 preference labels。接着用这些 preference 数据训练 reward model [ r_\psi(s,a) ],最后固定当前 reward model,用 RL 更新语言模型 [ \pi_\theta \leftarrow \text{maximize }r_\psi],然后可以再次使用新的 policy 生成回答,再收集新的 preference,再更新 reward model。

实际中人工 preference 非常昂贵,因此通常不会每一次 policy update 都重新找人标注。常见做法是先收集一批 preference,然后在这批 reward feedback 上进行很多轮 RL 更新,过一段时间再补充新的 preference data。

这种方法能够把难以直接表达的人类偏好转化成可优化的 scalar reward,但主要问题也很明显:人工 preference 昂贵,reward model 必须非常可靠,policy 对 learned reward 的过度优化可能利用 reward model 的误差,哪怕 reward model 只有一个很小的系统性误差,RL 都可能不断放大它。因此 reward model 往往本身也需要是一个较大的 sequence model / Transformer,并且需要足够好的 preference data。

Transfer learning & Meta-learning

我们希望模型在 Source Domain 训练后,仍能适应数据分布不同的 Target Domain。例如自动驾驶模型在车外视角的图像上训练,换成车内视角后,即使任务仍是识别车辆,模型也可能因为视角、背景、光照等变化而性能下降,传统的领域适应常依赖 invariance assumption。

Invariance Assumption(不变性假设)

虽然不同领域的输入分布 p(x) 不同,但存在一个特征映射 z=f(x),既保留预测目标 y 所需要的信息,又使不同领域的特征分布 p(z) 尽可能一致,并且特征与标签的关系保持稳定。然而,并非所有领域差异都与任务无关,因此这种假设可能失效。

迁移学习主要有三种思路:

  • Forward Transfer 是先在源任务训练,再直接迁移到目标任务(Zero-shot),或通过少量微调适应新任务,通常依赖两个任务足够相似;
  • Multi-task Transfer 是在多个任务上联合训练,学习共享的 representation 和网络参数,再迁移到新任务,但新任务通常需要与训练任务分布有一定相似性;
  • Meta-learning 则进一步将如何适应新任务本身作为训练目标,在训练阶段就模拟不同任务之间的学习与适应过程,使模型学会通过少量新数据快速适应的初始化、更新规则或学习机制。

Meta-RL

Meta-RL 的本质是把任务适应过程本身作为学习对象,而不是简单地训练一个具有记忆功能的策略。RL² 使用 RNN hidden state 隐式实现适应,SNAIL 利用时序卷积和注意力处理历史,PEARL 则通过任务 latent 显式推断任务。它们都希望通过跨任务训练,让模型在面对新任务时,能够利用少量交互经验(Few-shot)迅速调整行为。但这种快速适应通常仍依赖新任务与元训练任务分布具有一定相似性,并不意味着模型可以无条件适应任意未知环境。

1. RL²:通过 RNN Hidden State 实现快速适应

RL²(Fast Reinforcement Learning via Slow Reinforcement Learning)采用 RNN 作为策略网络,将当前 observation、上一步 action、reward 和 episode termination 信息输入 RNN,不断更新 hidden state。

训练时通过外层 RL(例如 TRPO)在大量不同任务上优化 RNN 参数,使它逐渐学会怎样根据 action 和 reward 更新内部记忆。测试时共享权重保持不变,只通过 hidden state 的变化实现任务适应。所谓 Fast RL via Slow RL,就是利用缓慢的外层强化学习,训练出能够在新任务中快速适应的内部学习机制。RNN 并没有显式运行一个新的 RL 优化器,而是用 hidden-state dynamics 隐式实现类似学习的过程。

2. SNAIL:Temporal Convolution + Causal Attention

SNAIL(A Simple Neural Attentive Meta-Learner)与 RL² 一样,通过历史交互经验实现快速任务适应,但它不再依赖 RNN 将所有历史压缩进固定维度的 Hidden State,而是采用 Temporal Convolution 加 Causal Attention 的组合架构。

首先,将历史交互组织为时间序列,每个时间步的输入包含 Observation、上一步 Action 和 Reward:

xt=[ot,at−1,rt−1]x_t=[o_t,a_{t-1},r_{t-1}]

整体输入为:

X=[x1,x2,…,xT]⊤∈RT×CX=[x_1,x_2,\ldots,x_T]^\top \in\mathbb R^{T\times C}

其中 T 是序列长度,C 是每个时间步的特征维度。

第一阶段:Temporal Convolution 提取历史时序特征。 SNAIL 使用 Dilated Causal Convolution(膨胀因果卷积),通过逐层增大的 dilation 扩大时间感受野。例如卷积核大小为 2,三层 dilation 分别为 1、2、4:

ht(1)=f(xt,xt−1)h_t^{(1)}=f(x_t,x_{t-1}) ht(2)=f(ht(1),ht−2(1))h_t^{(2)}=f(h_t^{(1)},h_{t-2}^{(1)}) ht(3)=f(ht(2),ht−4(2))h_t^{(3)}=f(h_t^{(2)},h_{t-4}^{(2)})

这样三层卷积就可以让当前特征整合最近 8 个时间步的信息,同时保证不会访问未来数据。SNAIL 还使用 tanh × sigmoid 门控处理卷积输出,并将新特征与原特征沿特征维度拼接:

Hnew=Concat⁡(Hold,TC⁡(Hold))H_{\text{new}}=\operatorname{Concat} (H_{\text{old}},\operatorname{TC}(H_{\text{old}}))

因此卷积不仅保留原始交互信息,还能提取不同时间尺度的局部规律,例如某个动作如何影响后续状态,以及 Reward 如何随动作变化。

第二阶段:Causal Attention 检索相关历史。 卷积处理后,每个时间步已经具有一定的历史上下文,再通过 Attention 计算:

Q=HWQ,K=HWK,V=HWVQ=HW_Q,\qquad K=HW_K,\qquad V=HW_V

当前时刻 t 根据 Query 与过去各时间步 Key 的相似度计算注意力权重:

αt,j=exp⁡(qt⊤kj/dk)∑i=1texp⁡(qt⊤ki/dk),j≤t\alpha_{t,j}= \frac{ \exp(q_t^\top k_j/\sqrt{d_k}) }{ \sum_{i=1}^{t}\exp(q_t^\top k_i/\sqrt{d_k}) },\qquad j\le t

然后对历史 Value 加权求和:

mt=∑j=1tαt,jvjm_t=\sum_{j=1}^{t}\alpha_{t,j}v_j

最后将 Attention 检索结果与当前特征拼接:

zt=Concat⁡(ht,mt)z_t=\operatorname{Concat}(h_t,m_t)

其中 Causal Mask 保证当前时刻只能读取当前及过去的信息。这样策略就可以直接访问较早的关键经验,而不需要像普通 RNN 那样依赖 Hidden State 一直保存全部信息。

第三阶段:组合模块并输出 Policy。 SNAIL 可以交替堆叠多个 Temporal Convolution Block 和 Attention Block,不要求固定先后顺序。整个过程可以概括为:

历史 Observation / Action / Reward
                ↓
         Input Embedding
                ↓
     Temporal Convolution
      提取多尺度时序规律
                ↓
       Causal Attention
         检索相关历史
                ↓
      Feature Concatenation
                ↓
           Policy Head
                ↓
             Action

最终根据当前时间步的表示生成动作:

at∼πθ(a∣zt)a_t\sim\pi_\theta(a\mid z_t)

训练时,通过跨任务的外层 RL 优化累计 Reward,梯度端到端更新卷积、注意力与 Policy 网络,使模型学会如何从历史经验中提取、检索和利用对新任务适应有帮助的信息。例如机器人在早期尝试较小夹持力后发现物体滑落,随后增加夹持力并成功抓取。Temporal Convolution 可以提取“夹持力变化 → 物体运动变化”的局部交互关系;当机器人很久之后再次面对类似物体时,Causal Attention 可以检索之前的成功经验,帮助当前 Policy 选择动作。

因此,Temporal Convolution 主要负责理解连续交互中的时间结构,Causal Attention 主要负责根据当前决策需求检索相关历史。两者联合训练,从而学习根据历史经验适应任务。

3. PEARL:通过 Context Encoder 推断任务 Latent

PEARL(Efficient Off-Policy Meta-Reinforcement Learning via Probabilistic Context Variables)采用更显式的任务推断方法。首先从当前任务收集若干 transition:

C=(si,ai,ri,si′)C = {(s_i, a_i, r_i, s'_i)}

,然后通过 Context Encoder 推断任务 latent variable 的概率分布:

qφ(z∣C)q_φ(z | C)

最后用采样得到的任务表示 zz 条件化策略:

πθ(a∣s,z)π_θ(a | s, z)

。其中 z 用于表示当前任务的隐藏特征,例如环境动力学、目标或奖励结构的差异。随着交互经验增加,context posterior 会发生变化,策略因此可以逐渐适应当前任务。

PEARL 的 Context Encoder 采用 permutation-invariant 的集合编码方式,因此不直接依赖 transition 的排列顺序。与 RL²、SNAIL 不同,PEARL 结合 SAC 和 Replay Buffer 复用 off-policy 旧数据,提高样本效率。

它的核心思想是:先从交互经验中推断当前是什么任务,再根据任务表示执行相应策略。 测试时通常也不需要对共享网络进行梯度更新,只需要用新的 context 更新对 zz 的推断。

以上三种都属于 context-based Meta-RL:共享网络参数在新任务中可以保持固定,快速适应主要发生在 hidden state、attention representation 或 task latent 中。此外,还有 MAML 等 gradient-based Meta-RL,通过少量新任务数据直接更新部分或全部模型参数。

MAML(Model-Agnostic Meta-Learning)

是一种基于梯度的 Meta-learning 方法,核心思想不是直接学习一个能够完成所有任务的通用 Policy,而是学习一组能够通过少量梯度更新快速适应新任务的初始化参数。训练采用 Inner Loop 加 Outer Loop 的双层优化:Inner Loop 从同一组初始参数 θ\theta 出发,针对不同任务分别采集 rollout,并通过 Policy Gradient 更新得到各自的任务参数 θi′\theta_i';Outer Loop 则评估这些更新后 Policy 在对应任务上的表现,并通过对适应过程求导,反过来优化初始参数 θ\theta,使其经过少量更新就能在不同任务上获得较高 reward。测试时,面对新任务仍需采集少量交互数据,并通过梯度更新参数完成适应。

为什么不是所有 RNN Policy 都叫 Meta-RL?

普通 Recurrent RL 也可以使用 ht=RNN(ht−1,ot)h_t = RNN(h_{t-1}, o_t),但它可能只是利用历史处理 POMDP 的部分可观测性,例如通过连续图像推断物体速度或位置。RNN 具备记忆能力,并不意味着它学会了如何快速适应新任务。

关键区别在于训练目标,普通 Recurrent RL 主要优化一个环境中的累计 reward,RNN hidden state 用于改善状态估计和决策;Meta-RL 则在多个任务组成的分布上训练,明确要求模型能够利用早期交互经验改善同一任务后续的表现。训练时需要让模型经历任务差异,并给适应过程提供优化信号。

emergent phenomena

另一个人们研究的重点是强化学习如何导致有趣的涌现行为,这通常处于强化学习和认知科学的交叉领域。人类和动物看似以各种各样的方式学习行为,包括高效的 model-free RL、回忆有效的方法并执行、model-based RL、因果推理等。在研究人类和动物的大脑时这些方式似乎都会在某个阶段发生,但大脑如何选择哪一种或者还有着我们不知道的算法在运行,目前尚不清楚。因此,一种假设是这些方式都是某种能够学习如何学习的总体方法的涌现特性。人们已经研究了元学习如何导致与最初用于元学习不同的学习过程的涌现,比如元强化学习如何产生 episodic learning、model-free meta-RL 如何产生基于基于模型的适应、元强化学习如何产生类似因果推理的能力。

deepseek R1 出来时人们认为是他们原创的 GRPO 强化学习算法让 r1 在数学领域实现顿悟时刻的涌现,但是后来人们发现并不是这样,顿悟时刻是模型本身的能力与强化学习算法本身没有直接关联。

← 全部文章 edit on github →