0x00 概要
要理解 DIVL,必须先理解 IQL。IQL 是离线强化学习中的里程碑式工作,其精妙之处在于"只用数据集里已有的数据,却能推断出比数据集更好的策略",全程不需要对未见过的动作进行采样。SERL/LWD 的训练通常从加载人类演示数据开始——如何从离线数据平滑地切换到在线实时学习,正是 IQL 解决的问题。

1.1 核心哲学:在已知数据中"沙里淘金"
1.1 离线学习的"贪婪陷阱"
我们先来思考一下离线 RL 面临的根本困境。

假设我们有一堆别人开车的录像(数据集 D),目标是学出一个最强车神。如果使用传统 Q-Learning,核心公式是:

Q
(
s
,
a
)

r
+
γ
max
a

Q
(
s

,
a

)
Q-Learning 的本质是"跨越时空的价值传递":每个状态-动作对的 Q 值记录了这个位置往这个方向走未来总共能赚多少钱;终点的高额奖金会像水流一样,沿着路径倒灌回起点,最终让机器人学会"抄近道"。

但问题在于
max
a

Q
(
s

,
a

)
这个操作。在离线数据集中,如果网络误给一个没见过的动作(OOD)打了高分,这个"谎言"会通过 Bellman 方程不断自举(Bootstrapping),导致价值崩盘。对于仿真环境,这也许只是训练不稳定;对于真机机器人,这可能导致机械臂撞到桌子、夹爪打坏物体,甚至损坏硬件。

1.2 IQL 的思路:不猜、不看、只提取
IQL 的解决思路非常克制:不去猜没见过的动作,只在 Replay Buffer 已经发生过的动作里寻找高价值信号,绝不往外看一眼。

这就是"Implicit"(隐式)的核心含义:它不显式执行
max
a
Q
(
s
,
a
)
,而是通过一个状态价值函数
V
(
s
)
来隐式表达"在这个状态下,数据集中较好动作能达到什么水平"。

在同一个状态
s
下,数据集中可能有多个不同的动作尝试——好的(50 分),烂的(10 分)。模仿学习(BC)会学习它们的平均行为(30 分);而 IQL 的目标是:即使不亲自去尝试,也要通过观察发现"原来在这个位置,最高能拿到 50 分",从而把策略固定在那个 50 分的行为上。

1.3 优势加权行为克隆
IQL 训练策略网络
π
(
a

s
)
的方式是给模仿损失加一个"权重":

普通 BC:
Loss

(
π
(
s
)

a
dataset
)
2
,不管好坏,通通都学
IQL:
Loss

w

(
π
(
s
)

a
dataset
)
2
,只学好的
这就是优势加权行为克隆(Advantage-Weighted Regression, AWR)。但仅仅加权还不够——IQL 引入了一个更精巧的数学工具来定义"什么是好的标准"。

1.4 非对称损失:Expectile 回归
IQL 最精华的数学技巧在于 V 函数的训练方式。假设我们要估算一个状态的价值
V
(
s
)
,数据集中有人拿了 10 分,有人拿了 50 分。定义误差
error

Q
(
s
,
a
)

V
(
s
)

当 error < 0(数据比我猜的低):我认为这是"失误"或"平庸的表现",不怎么在乎它,给很小的权重
当 error > 0(数据比我猜的高):我认为这才是"财富"和"潜力",给巨大的权重
这引出一个反直觉的问题:如果你想追逐上限,对负误差应该重罚还是轻罚?

我们来推演一下。你的目标是成为全校第一名,估值代表你对"第一名"水平的认知(95 分)。现在看到一张考了 10 分的卷子(低分数据),误差 = 10 - 95 = -85。如果重罚这个负误差,优化器会感到巨大压力,唯一办法就是让估值降到 30 分——这恰恰违背了"追逐上限"的目标。

所以正确的做法是:轻罚负误差(差生只是意外),重罚正误差(好苗子必须追上)。

数学实现如下,其中
τ
(Tau)是关键参数,通常设为 0.7~0.9:

L_V =
if Q - V < 0: (1-τ) |Q - V|² # 轻罚
if Q - V > 0: τ |Q - V|² # 重罚

τ

0.9


Q

V
时(好数据),误差乘以 0.9——严厉的教练看到好苗子:"你怎么离冠军还差这么一点?重罚!"V 必须大幅往上提

Q
<
V
时(坏数据),误差乘以 0.1——教练看到差生,摆摆手:"这只是个意外,我不在乎。"V 只会稍微往下掉
1.5 离线→在线微调流程
IQL 天然支持从离线训练平滑过渡到在线微调:

Phase 1: Offline Pretraining
Replay Buffer → sample batch → trainer.train (仅使用离线数据)

↓ 检查点继承

Phase 2: Online Fine-tuning
Actor π → env.step(a) → (s’, r, done)
↑ ↓
sample + trainer.train add_transition (新经验入 buffer)
关键点:离线阶段和在线阶段使用完全相同的训练逻辑。在线阶段只需将新采样经验加入 Replay Buffer,继续执行同样的 V→Q→Policy 三步训练。不需要切换损失函数,不需要预热,体现了 IQL 设计的统一性。

0x02 网络架构
IQL 的核心由多个神经网络构成。从功能角色的角度看,可以归纳为三个网络;从工程实现的角度看,实际存在四个网络。

2.1 功能角色:选秀节目的评审团
网络 角色 问题 方法
V 函数 梦想上限评估师 在当前状态下,表现最好的那批选手能达到什么水平? Expectile 回归挑高分
Q 函数 现实打分员 对这个具体的选手,他的真实实力是多少? Bellman 方程传递未来信息
Actor 策略 优等生模仿者 我该怎么做,才能成为最像高分的那个? Advantage 加权克隆
2.2 工程实现:四网络闭环
在代码层面,IQL 实际上是四个网络——Q 有一个"影子分身" Target Q:

Target Q 定义了"好"的稳定标准
V 把这个标准平滑化并传递给 Q
Online Q 根据奖励进行实时更新
Policy 在 Online Q 和 V 的指导下提取最终的动作
网络名称 缩写 输入 输出 核心任务 更新频率
Online Q Q
(
s
,
a
)
Q
(
s
,
a
)
评估具体 (状态, 动作) 的好坏 每个 Batch 实时更新
Target Q
Q
targ
(
s
,
a
)
Q
(
s
,
a
)
提供稳定的训练目标,计算 V 时使用 随 Online Q 软更新
Value V
s
V
(
s
)
评估状态的整体水平,估计数据集支持集中的高价值基准 每个 Batch 实时更新
Policy
π
s
π
(
a

s
)
给出具体动作指令(最终部署用) 每个 Batch 实时更新
这种"四重奏"的结构,让 IQL 既能像监督学习一样稳定地在离线数据上训练,又能像强化学习一样通过价值评估来提取最优策略。

2.3 V 网络:梦想上限评估师
V 函数的职责用一个词概括:向上看。给定一个状态
s
,V 回答"在这个处境下,数据集中表现最好的那批动作大概能拿到什么水平的分?"

在 IQL 中,
V
(
s
)
充当了基准线。通过比较
Q
(
s
,
a
)

V
(
s
)
,我们可以知道某个动作
a
是否比平均水平更好。同时,在更新 Q 网络时直接用
V
(
s

)
代表下一个状态的期望回报——这彻底避免了对 Actor 网络的采样查询,是离线 RL 防 OOD 动作的关键。

V 的损失函数是非对称 L2 损失(Expectile 回归):

L
V

{
τ
(
Q

V
)
2
,
if
Q

V
(
1

τ
)
(
Q

V
)
2
,
if
Q

V
直观上讲,V 是一个乐观的提取员:它不看平均水平,只盯着上限看。

需要指出的是,V 网络是针对具体任务的"专家网络",不是通用的普世网络。
V
(
s
)
的输出是一个标量——在自动驾驶中代表安全行驶公里数,在下棋中代表获胜概率,在交易中代表预期收益。因为状态
s
不同、奖励
r
定义不同,V 的内容无法通用,但训练 V 的"偏心公式"(IQL 算法)是普世的。

2.4 Q 网络:现实打分员
Q 函数的职责用一个词概括:向后传。与 V 只看
s
不同,Q 评价具体的
(
s
,
a
)
对——“在当前状态下执行这个具体动作后,未来能拿到多少回报”。

Q 的更新遵循 Bellman 方程:

Q
(
s
,
a
)

r
+
γ
V
(
s

)
这里的关键在于:Q 的更新不使用
max
a
Q
(
s

,
a
)
(避免 OOD 动作),而是使用 V 网络的输出作为未来价值估计。因为 V 是从数据集中挑出的高分基准,这个目标天然在数据分布之内。

双 Q 网络:对抗过估计
实际实现中,IQL 使用两个 Q 网络(
q
1

q
2
)以及各自的 Target 版本。原因是经典 Q-learning 中的
max
操作存在数学上的风险:

E
[
max
(
X
1
,
X
2
,

)
]

max
(
E
[
X
1
]
,
E
[
X
2
]
,

)
即使噪声是均值为 0 的随机波动,取最大值也会自动把期望往上拉,导致 Q 值越跑越高。双 Q 网络的解决思路很直观:

场景 A:只有一个评估师。 如果他今天心情好,把一辆破车高估了 1 万块,你花冤枉钱买了一堆垃圾。

场景 B:有两个评估师,取最小值。 评估师 A 说值 10 万,B 说值 8 万。你保守主义,只信 8 万的。只有当两个评估师同时高估时,你才会被骗。

更新 V 网络时,我们取两个 Q 的最小值

with torch.no_grad():
q1_val = self.q1_target(torch.cat([s, a], dim=-1))
q2_val = self.q2_target(torch.cat([s, a], dim=-1))
# 精华在这里:取最小值,消除过估计
q_val = torch.min(q1_val, q2_val)

计算 V 的 Loss

v_val = self.v(s)
v_loss = expectile_loss(q_val - v_val, tau)
保守 vs 乐观:两种力量的平衡
这里有一个微妙的问题:之前说 IQL 的核心是乐观(
τ

0.9
,提取上限),现在又引入双 Q 网络的保守(取 min)——矛盾吗?

如果只有"乐观",模型会发疯(过估计崩溃);如果只有"保守",模型会变怂(学不到最优解)。IQL 的精妙之处在于在保守的评估中寻找乐观的上限——既看最坏的可能(取 min),又在现有的机会里挑最好的(Expectile 回归)。

2.5 Actor 网络:优等生模仿者
V 和 Q 是"裁判":
V
(
s
)
告诉你"这个地方不错",
Q
(
s
,
a
)
告诉你"这个动作挺好"。但它们只是数字,不能告诉你"具体该怎么动"。

在连续动作空间中,即便完全知道 Q 网络的值,要找出使 Q 最大的动作
a

arg
max
a
Q
(
s
,
a
)
,每一步都需要运行复杂的优化算法(如梯度上升)——这对实时控制不可接受。

Actor 的角色是充当缓存器:它将 Q 和 V 的"评估智慧"提前吸收,固化成一个从状态到动作的直接映射
s

a
。机器人运行时,点一下火就能出动作。

Actor 的更新策略是优势加权行为克隆:

计算 Advantage:
A
(
s
,
a
)

Q
(
s
,
a
)

V
(
s
)
Advantage 为正 → 重点模仿;为负 → 降低权重
加权系数
e
A
/
β

Q

V
的优等生权重极大,
Q
<
V
的差生权重趋向于 0
网络 角色 视角 输出 哲学
Q 客观记录 微观(每个动作)
Q
(
s
,
a
)
诚实记录每一份成绩单
V 主观提取 宏观(每个状态)
V
(
s
)
只盯上限,不看平均
π
最终模仿 动作(具体操作)
π
(
a

s
)
谁分高我模仿谁
0x03 核心参数解析
IQL 的三个核心参数定义了机器人的"性格":

参数 名称 作用 调大 调小
τ
Expectile 定义"什么是优秀"的标准 激进追高 稳健保守
γ
折扣因子 对未来的耐心程度 高瞻远瞩 短视务实
β
逆温度 对 Advantage 的敏感度 偏激执着 平庸平均
3.1
τ
(非对称系数):野心与稳健的权衡
τ

0.5
:Loss 退化为 MSE,
V
(
s
)
收敛到所有
Q
(
s
,
a
)
的算术平均值。机器人变成"平庸之辈"。
τ

(
0.7
,
0.9
)
(推荐):迫使 V 向上拟合"潜力上限"。既能提取"优等生",又能容忍噪声。
τ

1.0

V
(
s
)
拼命追赶数据集最高分,但对噪声敏感。
调参哲学:数据质量决定
τ
。规整的数据集(如 halfcheetah-medium)中
τ

0.7
就够用;极其困难的任务可能需要
τ

0.9
甚至 0.95 来挖掘罕见成功信号;安全第一的应用(自动驾驶、手术机器人)应调小
τ

高阶思路——动态
τ
:基于不确定性自适应。在熟悉场景失败时增大惩罚(环境可能变了),在陌生场景失

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐