什么是 IQL(一句话)

IQL 是一种基于隐式 Q 的离线 RL,把策略学习变成一个加权监督学习(advantage-weighted imitation) 问题,而把价值函数学习为 expectile 回归的过程,从而既能获得高性能又能避免强制 pessimism 带来的不稳定性。它把“策略学习”与“价值估计”的角色分离,策略通过加权模仿行为数据学习(权重来自 Q−V),价值通过 expectile regression 学习。


1 原理直觉(为什么这样做?)

  • 离线 RL 面临distribution shift(学习的策略会选择与数据分布不同的动作)和泛化 / 估计偏差问题。传统 pessimism(例如 CQL)通过对 OOD 动作下调 Q 值来避免分布漂移,但这类方法在复杂函数逼近下往往不稳定或过保守。
  • IQL 的核心思想是:先学好价值 / 优势评估(但不直接依赖 Q 来约束策略),再用 Q−V 指示哪些历史动作是“好”的,按好坏对行为数据加权做监督学习。这样策略只在数据支持下进行改进(因为它还是从数据分布中学习),同时又能利用 Q 来偏好高回报动作。
  • 关键点:策略学习不需要回归未来返回的 Bellman 目标(避免直接的 bootstrapping 不稳定),而是变成了一个带权的行为克隆(weighted BC)。这给了 IQL 很好的稳定性。

2 数学表示与损失(核心公式)

设数据集 (D={(s,a,r,s’)})、折扣 γ\gammaγ

Q 网络

IQL 维护一个 Q 函数 Qθ(s,a)Q_\theta(s,a)Qθ(s,a)。其更新是 标准的回归到 r + γ V(s’) 的目标,但 V 在下文用 expectile 得到。
通常 Q 的 loss(原 IQL):
LQ(θ)=E(s,a,r,s′)∼D[(r+γVψ(s′)−Qθ(s,a))2] L_Q(\theta)=\mathbb{E}_{(s,a,r,s')\sim D}\big[(r+\gamma V_\psi(s') - Q_\theta(s,a))^2\big] LQ(θ)=E(s,a,r,s)D[(r+γVψ(s)Qθ(s,a))2]
(可用 MSE,也可如 RIQL 用 Huber)

V 网络(Expectile regression)

IQL 的关键:不是把 V 当作 Q 的简单均值,而用 expectile regression 使 V 成为“偏向上界/下界”的估计。定义 expectile loss(二阶 expectile):
LV(ψ)=E(s,a)∼D[Lτ(2)(Qθ(s,a)−Vψ(s))], L_V(\psi) = \mathbb{E}_{(s,a)\sim D}\big[ L_\tau^{(2)}( Q_\theta(s,a) - V_\psi(s) ) \big], LV(ψ)=E(s,a)D[Lτ(2)(Qθ(s,a)Vψ(s))],
其中
Lτ(2)(x)=∣τ−1(x<0)∣x2. L_\tau^{(2)}(x) = |\tau - \mathbf{1}(x<0)| x^2. Lτ(2)(x)=τ1(x<0)x2.
解释:当 τ>0.5 时,V 变得偏保守(更接近高端),当 τ<0.5 则偏向低端。常用 τ≈0.7。Expectile 跟 quantile 类似但可通过最小化加权平方得到(便于优化)。

Effectively V is a τ-expectile of Q over actions in dataset.

策略(policy)——加权模仿(Advantage-weighted regression)

IQL 用加权模仿来提取策略:
Lπ(φ)=−E(s,a)∼D[exp⁡(β⋅A(s,a))log⁡πφ(a∣s)] L_\pi(\varphi) = -\mathbb{E}_{(s,a)\sim D}\big[ \exp(\beta \cdot A(s,a)) \log \pi_\varphi(a|s) \big] Lπ(φ)=E(s,a)D[exp(βA(s,a))logπφ(as)]
其中 A(s,a)=Qθ(s,a)−Vψ(s)A(s,a) = Q_\theta(s,a) - V_\psi(s)A(s,a)=Qθ(s,a)Vψ(s) 是 advantage,β 控制权重“尖锐度”。策略的目标是把在数据中 A 大(看起来优)的动作模仿得更多。

如果用确定性策略(回归 a),等价于带权的均方误差回归 exp⁡(βA)∣∣a−π(s)∣∣2\exp(\beta A)||a-\pi(s)||^2exp(βA)∣∣aπ(s)2


3 算法步骤(逐步 & 伪代码)

初始化参数 θ,ψ,φ\theta, \psi, \varphiθ,ψ,φ。repeat:

  1. 从 D 采样批次 (B)。
  2. 计算 Q 值:q=Qθ(s,a)q = Q_\theta(s,a)q=Qθ(s,a) 对批次样本。
  3. 更新 V(expectile regression):
    • 计算 LV=1∣B∣∑(s,a)∈BLτ(2)(Qθ(s,a)−Vψ(s))L_V = \frac{1}{|B|}\sum_{(s,a)\in B} L_\tau^{(2)}( Q_\theta(s,a) - V_\psi(s) )LV=B1(s,a)BLτ(2)(Qθ(s,a)Vψ(s))
    • 梯度下降更新 ψ。
  4. 计算目标 y = r + γ Vψ(s’) (这里 Vψ 使用上一步更新后的参数或使用 target net,实践中常把 V 更新放在 Q 之前/之后并用稳定技巧)。
  5. 更新 Q:
    • LQ=1∣B∣∑(y−Qθ(s,a))2L_Q = \frac{1}{|B|}\sum (y - Q_\theta(s,a))^2LQ=B1(yQθ(s,a))2
    • 梯度下降更新 θ。(若使用 target networks,请按实现细节)
  6. 计算 advantage A(s,a)=Qθ(s,a)−Vψ(s)A(s,a) = Q_\theta(s,a) - V_\psi(s)A(s,a)=Qθ(s,a)Vψ(s)
  7. 更新 policy:
    • Lπ=−1∣B∣∑exp⁡(βA(s,a))log⁡πφ(a∣s)L_\pi = - \frac{1}{|B|}\sum \exp(\beta A(s,a)) \log \pi_\varphi(a|s)Lπ=B1exp(βA(s,a))logπφ(as)
    • 梯度下降更新 φ。
  8. Repeat until convergence.

简洁伪代码

Initialize Qθ,, πφ
for steps:
  batch = sample(D)
  q =(batch.s, batch.a)

  # V expectile update
  LV = mean( expectile_loss_tau(q -(batch.s)) )
  ψ ← ψ - lr_v * ∇ LV

  # Q update (regress to r + γ V(s'))
  target = batch.r + γ *(batch.s')
  LQ = mean( (target -(batch.s, batch.a))**2 )
  θ ← θ - lr_q * ∇ LQ

  # Policy update (advantage weighted imitation)
  A =(batch.s, batch.a) -(batch.s)= - mean( exp(β*A) * log πφ(batch.a | batch.s) )
  φ ← φ - lr_pi * ∇ Lπ

4 理论 / 直观解释(为啥能 work)

  • Expectile 的作用是把 V 做成“阈值式”的 baseline:当 τ>0.5,V 偏向上方,这样 A=Q−V 对于高质量动作更突出(更正经营利)。因此即使 Q 存在偏差,policy 还是只大幅学习那些 advantage 明显为正的样本。

  • 策略学习是监督(IE:行为克隆加权),不会像直接 actor-critic 那样在策略更新中不断 bootstrap Q,减少了训练震荡风险。

  • Q 和 V 的分离使得 Q 的 Bellman 回归仍保留,但 policy 并不直接通过 Q 的 Bellman 回归信号来更新(避免了许多 bootstrapping 带来的问题)。

  • IQL 的设计在经验和理论上显示出了在离线数据(尤其是 data-rich)下的良好稳定性与表现。


5 实践实现细节与工程建议

网络、参数化

  • Q 网络:通常 MLP,输出 scalar。

  • V 网络:MLP,输出 scalar。

  • Policy:可以用确定性回归(直接回归动作)或概率性网络(高斯)。论文与常用实现常用确定性回归 + MSE(或负 log-likelihood)。

  • Target networks:Q 与 V 的 target nets 可选;IQL 原论文在实现上并不过分依赖,但在有噪声和不稳定时可使用 target net/EMA。

hyper-params(经验)

  • τ(expectile):0.6 ~ 0.9,论文常用 0.7。

  • β:2 ~ 10,控制权重尖锐度。太小则退化为 BC,太大数值不稳定且容易过拟合少数样本。

  • lr:3e-4(Adam)常用,Q 与 V 可以不同学习率。

  • batch size:256 常见;大 batch 有利于稳定估计。

  • normalization:对 state 做标准化通常有帮助(尤其实际环境维度尺度差异大时)。


IQL 与CQL对比

  • CQL:通过在 Q 函数上施加“悲观/保守”约束,降低对数据中未见(或分布外)动作的估计,防止策略选择 OOD 动作导致性能崩溃。
  • IQL:把策略学习变成加权监督学习(advantage-weighted imitation),以更稳定的监督方式利用数据改进策略,避免将策略更新直接绑定在 Q 的 bootstrap 误差上。

1. 核心目标与直觉对比

CQL(保守化 Q)

  • 直觉:在离线设置下,过估计 Q 对策略是致命的(会使策略选择未验证的高 Q 动作)。
  • 方法:对 Q 的期望值在数据分布上和策略分布上加入一个下压(penalty),使 Q 对于未见动作显得较低(即 pessimist/LCB)。
  • 目标是:使得在数据支持下 Q 值较高,而对 OOD 动作 Q 值被主动压低,从而保证学到的策略不会贸然选择没有数据支持的动作。

IQL(隐式 Q)

  • 直觉:直接用 Q 来驱动策略(actor-critic)会把 bootstrapping 的 Q 误差放大。相反,把策略改成“受 Q 引导的加权模仿”,能兼得性能和稳定性。
  • 方法:先学习 Q(或 V)并用 expectile 回归得到 V,之后用 (A = Q - V) 对行为数据做加权模仿:策略仅在数据支持的范围内“向高 advantage 的动作靠拢”。
  • 目标是:把策略学习变成监督任务(带权 BC),减少 bootstrap 带来的不稳定性,同时利用 value 信息实现改进。

2. 关键公式对比(最重要的差别)

CQL 的典型目标(简化形式)

CQL 在 Q-learning loss 上加一项 conservative penalty。一种常见形式(CQL paper):
min⁡θ;Lbellman(θ)+λ(E∗s∼D[log⁡∑∗aexp⁡(Qθ(s,a))]−E∗(s,a)∼D[Q∗θ(s,a)]) \min_\theta ; L_{\text{bellman}}(\theta) + \lambda \left( \mathbb{E}*{s\sim D}\left[ \log\sum*{a} \exp(Q_\theta(s,a)) \right] - \mathbb{E}*{(s,a)\sim D}[Q*\theta(s,a)] \right) θmin;Lbellman(θ)+λ(EsD[logaexp(Qθ(s,a))]E(s,a)D[Qθ(s,a)])
其中第一项为 Bellman 回归(例如 TD/MSE),第二项为 log-sum-exp(对动作空间做上界估计) - 数据内均值,促使 Q 对数据外动作更低。λ 控制悲观强度。

直观:增加项越大,对未见动作的惩罚越强(更保守)。

IQL 的三项损失(核心)

IQL 由三步组成(分别优化):

  1. Q regression(Bellman 回归):
    LQ(θ)=E∗(s,a,r,s′)∼D[(r+γV∗ψ(s′)−Qθ(s,a))2] L_Q(\theta) = \mathbb{E}*{(s,a,r,s')\sim D} \big[ (r + \gamma V*\psi(s') - Q_\theta(s,a))^2 \big] LQ(θ)=E(s,a,r,s)D[(r+γVψ(s)Qθ(s,a))2]

  2. V via expectile regression:
    LV(ψ)=E∗(s,a)∼D[L∗τ(2)(Qθ(s,a)−Vψ(s))] L_V(\psi) = \mathbb{E}*{(s,a)\sim D} \big[ L*\tau^{(2)}(Q_\theta(s,a) - V_\psi(s))\big] LV(ψ)=E(s,a)D[Lτ(2)(Qθ(s,a)Vψ(s))]
    (expectile loss,τ 控制 V 的偏保守程度)

  3. Policy as advantage-weighted imitation:
    Lπ(φ)=−E∗(s,a)∼D[exp⁡(β(Q∗θ(s,a)−Vψ(s)))log⁡πφ(a∣s)] L_\pi(\varphi) = -\mathbb{E}*{(s,a)\sim D} [\exp(\beta (Q*\theta(s,a)-V_\psi(s))) \log \pi_\varphi(a|s)] Lπ(φ)=E(s,a)D[exp(β(Qθ(s,a)Vψ(s)))logπφ(as)]

注意:IQL 没有在 Q 上显式地做 OOD penalty(不像 CQL 用 log-sum-exp);IQL 通过 V 的 expectile + policy 的加权模仿间接实现保守效果。


3. 算法流程对比(伪代码层面)

CQL(简化流程)

Init Qθ, πφ
for steps:
  sample batch from D
  # 1) Q update: Bellman + CQL penalty
  compute bellman_target = r + γ * E_a' [Q_target(s', a')]
  L_bellman = mse((s,a), bellman_target)
  conservative_penalty = logsumexp_a Qθ(s,a) - E_{(s,a)~D}[(s,a)]
  L_Q = L_bellman + λ * conservative_penalty
  θ ← θ - lr * ∇ L_Q

  # 2) update policy (usually via policy gradient to maximize Q under regularization)
  L_π = - E_s [ E_{a~π}[(s,a) ] ] + regularizer (e.g., KL to behavior)
  φ ← φ - lr * ∇ L_π

CQL 的 policy 优化往往直接最大化 Q(受保守 Q 约束),或结合 KL 行为正则化。

IQL(简化流程)

Init Qθ,, πφ
for steps:
  sample batch from D
  # 1) V update: expectile regression toward Q
  L_V = expectile_loss((s,a) -(s))
  ψ ← ψ - lr * ∇ L_V

  # 2) Q update: Bellman regression using V(s')
  target = r + γ Vψ(s')
  L_Q = mse((s,a), target)
  θ ← θ - lr * ∇ L_Q

  # 3) policy update: advantage-weighted imitation
  A =(s,a) -(s)
  L_π = - E[ exp(β A) log π(a|s) ]
  φ ← φ - lr * ∇ L_π

4. 理论与直观差异

保守性来源

  • CQL:通过明确惩罚未见动作的 Q(explicit pessimism),理论上能保证在部分覆盖下的安全性(upper/lower bounds等)。适合当你担心策略跑到数据未覆盖的状态/动作时。
  • IQL:通过 expectile(偏向上端的 V)+ 加权模仿(只在数据支持下偏好高 advantage 动作),实现一种 “隐式的保守”。其理论分析(及实践)表明对许多常见场景更稳定。

对噪声 / corrupted data 的敏感性

  • CQL(以及其他 ensemble-或 pessimism-based):在数据干净的假设下表现优异,但对于训练数据本身被腐败(例如 observation/dynamics/reward 被污染)时,惩罚机制可能会把腐败动作当成高不确定性并产生错误的置信估计,导致严重性能下降(论文实测)。
  • IQL:监督化策略学习结构在面对某些类型的数据噪声时往往更鲁棒(论文中 IQL 在 observation/action/reward corruption 下表现优于 CQL),但 IQL 依然依赖 Q 的估计,在 dynamics corruption(s’ 污染导致 Q-target heavy-tailed)时表现脆弱,除非对 Q 的回归做鲁棒化(比如 RIQL 用 Huber + quantile ensemble)。

总结:CQL 更强调对 OOD 的惩罚(在 clean offline 数据下安全);IQL 更强调训练稳定性(在 noisy 数据/大量数据下稳定)。在数据被攻击或heavy-tail时,两者都有各自的弱点(CQL 对腐败极敏感,IQL 对 dynamics corruption 敏感,但可用 RIQL 改进)。


5. 实践实现差异(工程层面)

计算复杂度

  • CQL:通常需要计算 log-sum-exp 或对动作空间做采样/近似(连续动作时需用采样或一组候选动作),并可能需要 ensemble,计算开销较大。
  • IQL:结构上简单(Q、V、π 三个网络),policy 更新为加权监督(不需要对动作空间做大量采样),实现上更简洁、收敛也更稳。

超参数敏感性

  • CQL:λ(保守强度)、样本数量(用于 logsumexp 的样本采样数)、policy regularizer 强度 对结果影响很大。调参不当会过度保守或根本无效。
  • IQL:τ(expectile),β(adv-weight sharpness)是关键;但通常比 CQL 更容易调。

稳定性与收敛

  • CQL:若网络表达强、估计不准,可能出现过度惩罚或欠惩问题;在复杂函数逼近中需要 careful tuning。
  • IQL:通常更稳定、易于训练;但在 Q-target heavy-tailed 场景需要额外鲁棒措施(如 Huber、quantile ensemble)。

6. 哪种场景选哪种算法(建议)

  • 数据比较干净,且你担心策略跑到 OOD 动作(覆盖不足):倾向用 CQL(或其他 pessimism-based 方法),因为其理论上更直接保障保守性。
  • 数据可能包含噪声、采集误差或你优先考虑训练稳定性与工程易用性:倾向用 IQL(更易复现、超参更稳)。
  • 如果数据既脏又覆盖欠佳:可以考虑 IQL + RIQL(Huber + quantile) 或在 CQL 上加入鲁棒回归技巧(例如对 Q 更新使用 Huber / 过滤异常样本),并结合 ensemble 与更稳健的 uncertainty estimation。
  • 在高维连续动作、动作空间难以枚举的任务:IQL 的加权监督更方便(CQL 的 log-sum-exp 在连续空间需要采样技巧)。

7. 代码片段对比(PyTorch 风格伪实现)

CQL 风格(核心 penalty)

# bellman target
target = rewards + gamma * Q_target(next_states, next_actions).max(dim=1)[0]  # simplified
loss_bellman = F.mse_loss(Q(states, actions), target)

# CQL conservative penalty (continuous actions: sample random actions)
random_actions = sample_uniform_actions(states, N_samples)
logsum = torch.logsumexp(Q(states.unsqueeze(1), random_actions), dim=1).mean()
data_q_mean = Q(states, actions).mean()
cql_penalty = logsum - data_q_mean

loss_q = loss_bellman + lambda_cql * cql_penalty

IQL 风格(expectile + weighted imitation)

# V update (expectile)
diff = Q(states, actions).detach() - V(states)
weight = torch.where(diff < 0, 1 - tau, tau)
loss_v = (weight * (diff**2)).mean()

# Q update
target = rewards + gamma * V(next_states).detach()
loss_q = F.mse_loss(Q(states, actions), target)

# policy update (weighted imitation)
adv = (Q(states, actions).detach() - V(states).detach())
weights = torch.exp(beta * adv)
weights = torch.clamp(weights, max=1e3)  # numerical safety
loss_pi = (weights * (policy(states) - actions).pow(2)).mean()

8. 常见误区 / 实验陷阱

  • 误区:认为 CQL 总是更“安全”。事实是:CQL 的“安全”依赖于 Q 的正确估计与 penalty 的合适强度;在数据被污染或模型欠拟合时 CQL 可能过度惩罚或反而放大错误。
  • 误区:IQL 不需要任何 Q 稳健化。对 dynamics corruption(s’ 错误)等情况,IQL 的 Q 更新仍然脆弱,需用 Huber/smoothing/ensemble。
  • 实验陷阱:在比较时测试环境一定要干净环境评估(训练在污染数据上仍要在干净环境中评估真实性能),否则难判断哪种方法真的学到了更好策略。

9. 迁移建议(如果你要从一种改成另一种或做混合)

  • 若从 IQL → 更保守:可以在 Q 上加小量的 CQL-style penalty(log-sum-exp),或者在 policy 里加入 KL(π||behavior) 正则化。注意逐步调 λ,观察是否变得过保守。
  • 若从 CQL → 更稳健对噪声:对 Q 的 Bellman regression 改用 Huber 或者用 ensemble Q 求 quantile(类似 RIQL 的思路),再观察是否缓解腐败敏感性。
  • 做混合:IQL 的加权模仿 + CQL 的 in-sample penalty(对 dataset 内高方差点额外惩罚)——理论与实验上有可能兼得,但实现上需要 careful balancing(避免两种保守互相叠加导致过度保守)。

10. 总结

  • CQL:明确的 pessimism(对 OOD 动作惩罚),理论保障强,适合数据覆盖差时保证安全,但对训练数据内的腐败/噪声敏感并且超参数敏感性高。
  • IQL:把策略问题转为受 value 指导的监督学习,训练稳定、工程实现友好,通常在噪声数据或需要稳定复现实验时表现更好;但对 Q-target 的 heavy-tail(如 dynamics corruption)敏感,需要与鲁棒统计或不确定性方法(如 Huber、quantile ensemble)配合使用以增强鲁棒性(RIQL)。

两者不是绝对的“孰优孰劣”,而是在不同数据质量 / 覆盖 / 任务风险偏好下的权衡。如果你把目标定得清楚(例如是否容忍探索超出数据分布的风险、数据是否可能被腐败),我可以帮你给出具体的超参网格与实验对照计划,或直接把某个实现(IQL/CQL)改造成你需要的混合版本。你想接下来做哪一步?

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐