强化学习(四):探索策略与好奇心驱动学习

在几乎没有奖励反馈的环境中,智能体如何发现回报?从计数型方法到 ICM、RND、NGU——好奇心驱动探索的完整脉络与工程实践。

把一个新出生的 Agent 丢进 Atari 游戏《蒙特祖玛的复仇》。要拿到游戏中的第一分,它必须向右走、跳过头骨、抓住绳子、再跳到台子上、最后捡起钥匙——大约 一百个连续动作不能错。在钥匙到手之前,环境给出的奖励一直是 0。

按教科书的标准 DQN,$\varepsilon = 0.1$,凑齐这一百个动作的概率大约是 $0.1^{100} \approx 10^{-100}$。也就是说:普通 DQN 在这局游戏上永远是 0 分——不是"分数低",而是字面意义的零分,从训练开始到训练结束。

这就是 稀疏奖励问题(Sparse Reward Problem)。它揭示了一个残酷的事实:再漂亮的 Bellman 备份,碰不到非零奖励都白搭。深度强化学习的算法上限,几乎完全由它的探索策略决定。本文要讲的,就是从最朴素的随机探索一路走到 好奇心驱动学习(Curiosity-Driven Learning) 的完整路径——让 Agent 自己给自己造奖励,从而对"新东西"产生兴趣。

你将学到什么

  • 为什么 $\varepsilon$-greedy、Boltzmann、甚至 UCB 在高维环境中都会失效
  • 计数型方法(count-based) 与基于密度模型的伪计数(pseudo-count)
  • ICM(内在好奇心模块):在学到的特征空间中以预测误差作为新奇性信号
  • RND(随机网络蒸馏):能在工业级环境中真正 work 的最简单的好奇心信号
  • NGU(Never Give Up):用情景记忆解决"需要反复回到同一状态"的任务
  • PPO + 好奇心的工程实战配方、超参与常见踩坑

前置阅读: 第 1-3 部分 (MDP、DQN、Policy Gradient、PPO 基础)。


1. 探索为什么这么难

1.1 经典 ε-greedy:朴素到一眼能看穿的弱点

每本入门书都会先讲 $\varepsilon$-greedy:以概率 $\varepsilon$ 随机选一个动作,否则选当前 Q 值最大的那个。公式不难,难的是 schedule:训练越久,$\varepsilon$ 应该怎么衰减?

ε-greedy 三种衰减策略与对应的动作概率分布

上图左侧是三种最常用的 schedule(线性、指数、阶梯式),右侧是线性衰减下、4 个可选动作的实际概率构成。三个值得记住的细节:

  1. 不同的衰减曲线对应非常不同的"探索预算"。 指数衰减把绝大多数随机动作集中在前 20k 步;线性衰减更均匀;阶梯式更像是给 Agent 排了一个粗粒度的课程。
  2. 即便 $\varepsilon = 0.05$,仍然有约 1/4 的"随机动作"恰好打到了 greedy 动作上($1 - \varepsilon + \varepsilon/|\mathcal{A}|$)。很多人误以为 5% 的 ε 就意味着 5% 的 off-policy 行为,其实并不是。
  3. 整个过程没有任何一处看了状态。 探索仅仅是训练步数的函数。这正是它最大的弱点,也是后面所有方法要攻破的地方。

数学定义为:

$$ \pi_\varepsilon(a \mid s) = \begin{cases} 1 - \varepsilon + \dfrac{\varepsilon}{|\mathcal{A}|} & a = \arg\max_{a'} Q(s, a') \\[4pt] \dfrac{\varepsilon}{|\mathcal{A}|} & \text{其他} \end{cases} $$

1.2 Boltzmann(softmax)探索:略有改善的同门兄弟

不再是粗暴的"全有或全无",Boltzmann 把动作概率按 Q 值加权:

$$ \pi_\tau(a \mid s) = \frac{\exp(Q(s,a)/\tau)}{\sum_{a'} \exp(Q(s,a')/\tau)}. $$

温度 $\tau$ 取代了 $\varepsilon$:$\tau \to 0$ 时策略变 greedy,$\tau \to \infty$ 时变成均匀分布。

不同温度下的 Boltzmann 动作分布与策略熵

右侧那张图画了策略熵 $H(\pi_\tau) = -\sum_a \pi_\tau(a) \log \pi_\tau(a)$ 随温度的变化。注意它饱和得非常快:$\tau = 2$ 时已经达到了最大熵 $\ln |\mathcal{A}|$ 的 90%。这其实就是 PPO、SAC 中常用的 熵正则项(entropy bonus) 的本质——把 Boltzmann 探索包装成了一项加在策略网络上的正则。

但 Boltzmann 与 $\varepsilon$-greedy 共享同一个致命缺陷:它根据 当前的 Q 估计 分配概率,而完全不参考 Agent 已经在哪些状态附近转悠过多少次。两个 Agent 从未见过的状态,依然会得到一样的 softmax。

1.3 UCB:理论漂亮,规模上栽跟头

在多臂赌博机问题里,UCB1 准则是出了名的"接近最优":

$$ a_t = \arg\max_a \left[ \hat Q(a) + c \sqrt{\frac{\ln t}{N(a)}} \right]. $$

第一项负责利用,第二项负责探索——拉过越少次数的臂,得到的不确定性奖励越大。

5 臂赌博机上 UCB1 的得分构成与拉臂统计

观察上面这张图。$t = 50$ 时,橙色的 UCB bonus 占主导,所有臂看起来都"值得一试",拉臂数被均匀地分散开。$t = 1000$ 时,最优臂 3 已经被拉了几百次,它的 bonus 已经掉得很低,但其它臂的 bonus 仍较高,于是算法稳定在"主要拉 3,偶尔抽查其它"的模式上。这才是真正合理的探索——它由数据驱动,而不是由一个写死的 schedule 决定。

那为什么我们不在所有任务里都用 UCB?因为 $N(s, a)$ 在高维状态空间里毫无意义。 Atari 一帧画面是 $84 \times 84 \times 4 = 28{,}224$ 个像素,Agent 几乎不可能见到完全相同的两帧。$N(s, a) = 1$ 对任何遇到的 $(s, a)$ 都成立,这个 bonus 项就退化成一个常数。

1.4 Thompson 采样:贝叶斯版本的 UCB

UCB 的近亲是 Thompson 采样:为每个臂维护一个奖励参数的后验,每一步从后验里抽一个"假想世界",按照在这个世界里最优的动作执行。Bernoulli 臂 + Beta 先验时,更新规则极其简单——成功就 $\alpha + 1$,失败就 $\beta + 1$。

3 个 Bernoulli 臂经过 10、50、300 次拉臂后的 Beta 后验

从图里可以看到后验在向真实奖励率(虚线)逐渐"收紧"。10 次后算法几乎没下结论;300 次时,最优臂 2($\mu = 0.75$)的后验已经是一根细峰,而表现差的臂仍然保留了足够的方差,不会被立刻排除。Thompson 采样在实践中往往与 UCB 持平甚至更好,推荐系统中的 contextual bandit 几乎是它的天下。但要把它原封不动地搬到深度 RL,会遇到和 UCB 同样的问题:在 $10^{60}$ 维状态空间里维护一个后验是不现实的;Bootstrapped DQNBayes by Backprop 等贝叶斯深度 RL 方法只能部分还原这种思想。

1.5 深度 RL 中"探索难"的四个维度

把上面的观察拼起来,可以总结出深度 RL 里探索难度同时来自四个方向:

  1. 奖励稀疏:成百上千个正确动作之后才有一次反馈,随机探索是大海捞针。
  2. 状态空间组合爆炸:$256^{28224}$ 种 Atari 帧,根本不可能"统计访问次数"。
  3. 局部最优陷阱:死胡同里那枚硬币会让 Agent 永远忘记还有一道更难的门后藏着大奖。
  4. 噪声电视(Noisy-TV)问题:如果用朴素的"新奇性"信号,房间里一台播放静态雪花的电视会被永远当作"新内容",Agent 会盯着它看到训练结束。

现代探索方法的核心思路转变是:不再把探索当成训练步数的函数,而是当成 Agent 自身经验的函数。 婴儿就是这样——他们玩的总是新玩具,不是旧的。


2. 好奇心的统一框架:内在奖励

接下来要讲的所有现代方法,都遵循同一个套路——在环境奖励之上加一个 内在奖励 $r^{\text{int}}_t$:

$$ r^{\text{total}}_t = r^{\text{ext}}_t + \beta \cdot r^{\text{int}}_t. $$

然后用任意你喜欢的 RL 算法(DQN、PPO、IMPALA…)在 $r^{\text{total}}$ 上训练。所有的设计精力,都集中在一个问题上:

如何定义 $r^{\text{int}}_t$,让它对真正新奇的体验给出大值,对老生常谈给出小值——而且不能要求我们去数像素?

下面的三个答案,越往后越优雅。


3. 计数型方法:计数还能用的时候

最干净的"新奇性"定义就是"我访问得越少,越新奇"。在表格 MDP 上,这给出 MBIE-EB 奖励:

$$ r^{\text{int}}(s) = \frac{\beta}{\sqrt{N(s)}}, $$

它有与 UCB 一致的理论保证。问题在于,对像素环境而言,几乎所有状态都满足 $N(s) = 0$。

Bellemare 等(2016)用一个密度模型 $\rho(s)$ 推出"伪计数(pseudo-count)“绕开了这个困难:

$$ \hat N(s) = \frac{\rho(s)\bigl(1 - \rho_{\text{new}}(s)\bigr)}{\rho_{\text{new}}(s) - \rho(s)}, $$

其中 $\rho_{\text{new}}$ 是把 $s$ 多观察一次后模型的密度。它假装 $\rho$ 来自一个巨大的计数器、然后把计数器反推出来。配合强力的密度模型(PixelCNN 等),它在《蒙特祖玛的复仇》上拿到了第一个非平凡的分数。但密度模型训练昂贵且脆弱,噪声电视问题 仍然完全没解决——随机像素噪声密度低、被估计为高新奇性、被疯狂奖励。后来主流逐渐放弃了 pseudo-count,转向更鲁棒的"预测误差"思路。


4. ICM:以预测误差衡量好奇心

Intrinsic Curiosity Module(ICM)(Pathak 等, ICML 2017)把"我有没有见过这个状态"换成了"我能不能预测接下来会发生什么”。直觉是:

  • 如果环境对我动作的反应是 可预测的,说明我已经懂了——内在奖励小。
  • 如果反应让我 吃惊,说明我的模型还不能解释它——内在奖励大。

但直接预测原始像素不行——电视雪花永远不可预测、却毫无意义。ICM 的关键操作是:在一个学出来的特征空间 $\phi$ 里做预测,而这个特征空间只编码 Agent 自身动作能影响到的信息

ICM 与 RND 架构对比

上图左半部分展示了 ICM 的三个组件:

  1. 编码器 $\phi$(CNN)把原始观测 $s_t$ 映射到特征向量 $\phi(s_t)$。
  2. 前向模型 $\hat f$ 根据当前特征和动作预测下一刻特征:$\hat\phi_{t+1} = \hat f(\phi(s_t), a_t)$。它的平方误差 $$r^{\text{int}}_t = \eta \,\bigl\| \hat\phi_{t+1} - \phi(s_{t+1}) \bigr\|^2$$ 就是 内在奖励。
  3. 逆向模型 $g$ 反过来,根据连续两帧的特征预测动作:$\hat a_t = g(\phi(s_t), \phi(s_{t+1}))$,它的损失会回传到 $\phi$ 上。

第三步是关键。逆向模型只有在 $\phi$ 保留了"两帧之间会随动作变化的信息"时才能成功;与此无关的背景噪点、电视雪花等都会被 $\phi$ 自动丢掉,因为它们对预测 $a_t$ 没有帮助。这些被丢掉的东西自然也就不会被前向模型当成"新奇性"。

参考实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import torch
import torch.nn as nn
import torch.nn.functional as F


class ICM(nn.Module):
    """内在好奇心模块(Pathak 等, 2017)。"""

    def __init__(self, obs_channels, action_dim, feature_dim=256, eta=0.1):
        super().__init__()
        self.eta = eta

        # 特征编码器(Atari 风格 CNN)
        self.encoder = nn.Sequential(
            nn.Conv2d(obs_channels, 32, 8, stride=4), nn.ReLU(),
            nn.Conv2d(32, 64, 4, stride=2), nn.ReLU(),
            nn.Conv2d(64, 64, 3, stride=1), nn.ReLU(),
            nn.Flatten(),
            nn.Linear(64 * 7 * 7, feature_dim),
        )

        # 前向模型:(phi_t, a_t) -> phi_{t+1}
        self.forward_model = nn.Sequential(
            nn.Linear(feature_dim + action_dim, 256), nn.ReLU(),
            nn.Linear(256, feature_dim),
        )

        # 逆向模型:(phi_t, phi_{t+1}) -> a_t
        self.inverse_model = nn.Sequential(
            nn.Linear(feature_dim * 2, 256), nn.ReLU(),
            nn.Linear(256, action_dim),
        )

    def forward(self, obs, next_obs, action_onehot):
        phi = self.encoder(obs)
        phi_next = self.encoder(next_obs)

        # 前向预测误差 = 内在奖励
        phi_next_pred = self.forward_model(
            torch.cat([phi, action_onehot], dim=1))
        forward_err = F.mse_loss(
            phi_next_pred, phi_next.detach(), reduction="none").sum(dim=1)
        intrinsic_reward = self.eta * forward_err

        # 逆向模型损失 —— 强迫编码器只保留与动作相关的信息
        action_pred = self.inverse_model(torch.cat([phi, phi_next], dim=1))
        inverse_loss = F.cross_entropy(action_pred, action_onehot.argmax(1))

        return intrinsic_reward, forward_err.mean(), inverse_loss

实测效果

《蒙特祖玛的复仇》上,ICM + A3C 在 25M 帧内能跑到约 6,600 分(vanilla DQN 永远是 0)。更惊人的是:把外在奖励完全去掉,只留下 ICM 的内在奖励,Agent 仍然能学会在前几个房间里穿梭、躲避敌人、捡起钥匙——只因为做这些事能让它的前向模型保持忙碌。

ICM 的局限

  • 依赖环境的确定性。 如果环境里有真正随机的"老虎机",前向模型永远预测不了它,Agent 会沉迷于拉杆。逆向模型能过滤"动作无关"的随机性,但"动作相关"的随机性依然致命。
  • 算力开销。 三套额外网络(编码器、前向、逆向),训练成本通常是 vanilla PPO 的 2 倍左右。

5. RND:简单到不可思议的替代方案

Random Network Distillation(随机网络蒸馏,RND)(Burda 等, ICLR 2019)把 ICM 的整套前向/逆向机器换成一句话:

把一个固定的随机网络蒸馏出来,预测器误差大的地方,就是 Agent 还没访问够的地方。

具体做法(架构图右半部分):

  • 目标网络 $f$:随机权重,整个训练过程都不更新
  • 预测网络 $\hat f$:用梯度下降学着把观测 $s$ 上的输出 $\hat f(s)$ 拟合到 $f(s)$。

内在奖励就是预测残差:

$$ r^{\text{int}}(s) = \bigl\| \hat f(s) - f(s) \bigr\|^2. $$

对预测器看过很多次的状态,loss 早被驱动到接近 0——奖励小。对从未见过的状态,预测器没有训练过,输出是随机的,残差很大——奖励大。冻结的目标网络相当于一个确定性的哈希函数,结构相似的状态映射到相似的目标,泛化能力是免费送的

同样的机制能搞定噪声电视:随机雪花虽然像素差异巨大,但在一张随机 CNN 看来 结构高度相似,预测器只需要几次更新就能匹配,奖励迅速衰减到零。所以 ICM 和 RND 解决"噪声电视"用的是完全不同的机制——ICM 在 特征层面 过滤,RND 利用 随机映射的一致性

参考实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class RND(nn.Module):
    """随机网络蒸馏(Burda 等, 2019)。"""

    def __init__(self, obs_channels, output_dim=512):
        super().__init__()

        # 目标网络:随机权重,永不更新
        self.target = nn.Sequential(
            nn.Conv2d(obs_channels, 32, 8, stride=4), nn.LeakyReLU(),
            nn.Conv2d(32, 64, 4, stride=2), nn.LeakyReLU(),
            nn.Conv2d(64, 64, 3, stride=1), nn.LeakyReLU(),
            nn.Flatten(),
            nn.Linear(64 * 7 * 7, output_dim),
        )
        for p in self.target.parameters():
            p.requires_grad = False

        # 预测网络:被训练去拟合目标
        self.predictor = nn.Sequential(
            nn.Conv2d(obs_channels, 32, 8, stride=4), nn.LeakyReLU(),
            nn.Conv2d(32, 64, 4, stride=2), nn.LeakyReLU(),
            nn.Conv2d(64, 64, 3, stride=1), nn.LeakyReLU(),
            nn.Flatten(),
            nn.Linear(64 * 7 * 7, 512), nn.ReLU(),
            nn.Linear(512, output_dim),
        )

        # 滑动统计量,用于奖励归一化
        self.r_mean, self.r_std = 0.0, 1.0

    def compute_reward(self, obs):
        with torch.no_grad():
            r = (self.predictor(obs) - self.target(obs)).pow(2).sum(dim=1)
        return r

    def update(self, obs):
        loss = F.mse_loss(self.predictor(obs), self.target(obs).detach())
        return loss

    def normalise(self, r):
        # 关键:把内在奖励控制在稳定的尺度
        self.r_mean = 0.99 * self.r_mean + 0.01 * r.mean().item()
        self.r_std = max(0.99 * self.r_std + 0.01 * r.std().item(), 1e-8)
        return (r - self.r_mean) / self.r_std

头条战绩

  • 《蒙特祖玛的复仇》:平均 8,152 分——首个超过人类专家基准 7,385 的算法
  • 《Pitfall!》:70.4 分(之前最好成绩是确切的 0)。
  • 在很长一段时间里,RND 在所有"硬探索(hard exploration)“的 Atari 游戏上都是 SOTA。

让 RND 真正 work 的两个非显然的工程技巧:(i) 策略网络配 两个独立的 value head,分别对 $r^{\text{ext}}$ 与 $r^{\text{int}}$ 估值,并用不同的折扣因子;(ii) 用 滑动标准差 对内在奖励做 per-environment 归一化。如果不做归一化,内在奖励的尺度会失控、把外在奖励淹没,训练立刻崩。


6. NGU:永不放弃任何状态

RND 有一个隐含假设——一个状态的预测器误差被压到零之后,它就再也"不新奇"了。绝大多数情况下没问题。但有两类重要场景会被这个假设干掉:

  • 钥匙-门类任务。 Agent 死亡后重生,需要 再次 去捡那把钥匙。但 RND 已经认为钥匙位置很无聊了,Agent 不会再回去拿。
  • 回溯探索(Backtracking)。 探索完地图右半边,Agent 必须从起点回到左半边继续探索。但起点已经被走过几千次,RND 不会奖励它再次穿过那里。

Never Give Up(NGU)(Badia 等, ICLR 2020)的方案是把两种新奇性信号 起来:

$$ r^{\text{int}}_t = r^{\text{episodic}}_t \cdot \min\bigl(r^{\text{lifetime}}_t,\; L\bigr). $$
  • 情景新奇性 $r^{\text{episodic}}$:维护一个 只属于当前 episode 的状态嵌入记忆库。当前状态在嵌入空间中距离记忆库越远,奖励越大。关键在于这个记忆库 每个新 episode 都会清空——一个被全局访问过千百万次的状态,在新一局开局时仍然算"新奇”。
  • 生命周期新奇性 $r^{\text{lifetime}}$:经典的 RND 信号,并加一个上限 $L$ 防止失控。

乘法保证两者都要高才能给出大奖励:状态既要"在本局新鲜"又要"在全局尚未走腻"。NGU 还引入了 多策略并行训练(不同 $\beta$ 的策略族)以及 directed exploration 机制,但情景-生命周期分解才是它思想的内核。

后续的 Agent57(Badia 等, 2020)在 NGU 之上再加一个 meta-controller 来动态选择当前用哪条探索策略,是史上 第一个在全部 57 个 Atari 游戏上都超过人类基线 的单一算法。

关键得分对比

游戏DQN(ε-greedy)RNDNGU人类专家
蒙特祖玛的复仇08,15211,000+7,385
Pitfall!0705,000+6,464
Private Eye08,80069,00069,571

7. 直观对比:随机 vs 好奇

把"随机"和"好奇"两种探索拿到一个最小问题上看一眼,差距会非常震撼。

ε-greedy 与好奇心驱动 Agent 在 25x25 网格上的访问热力图

上面两幅图展示了同一个 Agent 从中心白星出发、在 25x25 GridWorld 中走 1500 步的访问分布。蓝色 Agent 是均匀随机游走;紫色 Agent 按照 $1/\sqrt{N(s')}$ 的概率从邻居中采样下一步——这是最朴素的计数型好奇心奖励。同样步数后:随机游走者只覆盖了 65.6% 的格子,最热门格子被踩了 19 次;好奇心 Agent 覆盖了 80%,最高重访次数只有 11。右侧那张按访问数排序的对数曲线传递了同样的信息:好奇心把"头部"压平(不再有过度访问的格子),把"尾部"抬起(不再有被冷落的格子)。

把这种效应放大到 $10^8$ 帧、状态空间大如系外行星的 Atari,你就明白为什么"好奇心"是 0 分和 11000 分之间的鸿沟了。

Montezuma’s Revenge 上不同方法的得分曲线与"首次拿到奖励"耗时

上图把同一个故事放到了大场景里。Vanilla DQN 一直锁死在 0——它从来没找到过哪怕一次奖励。从 count-based 到 ICM、RND、再到 NGU,每一代好奇心方法都把"首次拿到奖励"的时间往前压、把渐进得分往上抬。NGU 是第一个站到人类专家虚线之上的方法。


8. 工程配方:PPO + 好奇心如何上线

起手超参

参数起始值备注
内在奖励系数 $\beta$0.01极稀疏奖励环境可推到 0.1
奖励归一化必须开,$r^{\text{ext}}$ 和 $r^{\text{int}}$ 分开做否则 RND/ICM 会淹没任务奖励
折扣 $\gamma_{\text{int}}$0.99经常 $\gamma_{\text{ext}}$ 更小,鼓励局部探索
双 value head一个 head 一种奖励,永远比混在一起好
Frame skip / stack4 / 4Atari 标配
梯度裁剪0.5ICM/RND 梯度尾部很厚

训练应该看到的进度

PPO + RND,Montezuma’s Revenge,单张现代 GPU:

帧数期望里程碑
10M稳定通过第一个房间(≈100 分)
30M拿到钥匙,开门(≈400 分)
100M平均回报 6000+,偶尔 8000+

如果跑到 20M 帧仍然过不了第一个里程碑,踩坑排序 通常是:忘了归一化 $r^{\text{int}}$、用了单 value head、$\beta$ 设得过低。

怎么选方法

场景推荐探索策略原因
奖励密集,低维状态$\varepsilon$-greedy 线性衰减便宜、够用
连续控制(MuJoCo、机器人)SAC 熵奖励 / 参数噪声平滑动作空间需要平滑探索
单个稀疏奖励 Atari 游戏PPO + RND简洁与性能的最佳折中
需要反复回到同一状态的稀疏奖励任务NGU情景记忆解决"再做一次同样的事"
全 Atari、研究级 SOTAAgent57 / Go-Explore顶尖性能,但工程复杂度陡升

9. 小结与下一步

探索是横亘在"玩具 RL"与"通用智能"之间最大的瓶颈。随机探索按理论也能 cover 所有状态,但它的缩放规律实在太糟——状态空间远比均匀采样能覆盖的范围庞大。

所有现代探索方法的共同思想可以浓缩成一句话:

把好奇心当成一个可学习的奖励。 用某种可计算的方式定义"新奇性"——访问次数低、预测误差大、蒸馏残差高、距离情景记忆远——再让 Agent 同时最大化它和任务奖励。

我们看了四个具体实例:

  • 计数型 / 伪计数:表格 MDP 上漂亮,像素世界里脆弱。
  • ICM:在学到的、动作相关的特征空间里以预测误差为新奇性。
  • RND:以一个随机网络的蒸馏残差为新奇性,简洁到尴尬,效果好到尴尬。
  • NGU / Agent57:把情景新奇与生命周期新奇相乘,专治"会忘记应该回去做某事"的任务。

但探索问题远未解决。当前主流方法仍然需要 $10^8 \sim 10^9$ 量级的环境帧;人脑解决《蒙特祖玛的复仇》只需要几小时。当前活跃的研究方向包括 技能发现(skill discovery)语言锚定的探索(language-grounded exploration)从人类示范中学习探索策略

下一篇预告: 第 5 部分 进入 Model-Based RL 与世界模型——学一个可微的环境模拟器,让 Agent 在"想象"中预演成千上万条轨迹,从而把真实交互的需求降低一两个数量级。


参考文献

  • Pathak, D., Agrawal, P., Efros, A. A., & Darrell, T. (2017). Curiosity-driven exploration by self-supervised prediction. ICML. arXiv:1705.05363
  • Burda, Y., Edwards, H., Storkey, A., & Klimov, O. (2019). Exploration by random network distillation. ICLR. arXiv:1810.12894
  • Badia, A. P., Sprechmann, P., Vitvitskyi, A., et al. (2020). Never Give Up: learning directed exploration strategies. ICLR. arXiv:2002.06038
  • Badia, A. P., Piot, B., Kapturowski, S., et al. (2020). Agent57: outperforming the Atari human benchmark. ICML. arXiv:2003.13350
  • Bellemare, M. G., Srinivasan, S., Ostrovski, G., Schaul, T., Saxton, D., & Munos, R. (2016). Unifying count-based exploration and intrinsic motivation. NeurIPS. arXiv:1606.01868
  • Ecoffet, A., Huizinga, J., Lehman, J., Stanley, K. O., & Clune, J. (2021). First return, then explore. Nature, 590, 580-586. arXiv:2004.12919
  • Auer, P., Cesa-Bianchi, N., & Fischer, P. (2002). Finite-time analysis of the multi-armed bandit problem. Machine Learning, 47, 235-256.

系列导航

部分主题
1基础与核心概念
2Q-Learning 与深度 Q 网络
3Policy Gradient 与 Actor-Critic
4探索策略与好奇心驱动学习(本文)
5Model-Based 强化学习与世界模型
6PPO 与 TRPO:信任域策略优化

Liked this piece?

Follow on GitHub for the next one — usually one a week.

GitHub