RND(随机网络蒸馏,Random Network Distillation)

RND(随机网络蒸馏,Random Network Distillation)

随机网络蒸馏(RND)是一种无监督的探索奖励机制,最早由 OpenAI 在论文 “Exploration by Random Network Distillation”(2018)提出。它的核心思想是利用 预测误差 作为探索奖励,以鼓励智能体在强化学习(Reinforcement Learning, RL)任务中探索新颖的状态。 在强化学习中,智能体通常使用 外部奖励(extrinsic reward) 来学习最优策略。然而,在复杂环境(如游戏、现实世界任务)中,外部奖励可能稀疏或完全缺失。RND 提供了一种 内在奖励(intrinsic reward),使智能体能够主动探索环境,从而提高学习效率。

1. RND 的核心思想

RND 主要基于 预测误差驱动探索(prediction error-driven exploration),其核心思想如下: 训练一个固定的随机目标网络(random target network),并让智能体使用一个可训练的预测网络(trainable predictor network) 来学习目标网络的输出。 在智能体探索环境时,计算预测网络对目标网络输出的误差,并将误差作为探索奖励。 由于预测网络在常见状态下会逐渐拟合目标网络,其预测误差会变小;而在 罕见或新颖的状态 下,预测误差较大,智能体因此会倾向于探索这些状态。

2. RND 的网络结构

RND 由 目标网络 和 预测网络 组成,二者具有相同的结构:

2.1 目标网络(Target Network)

一个固定的、随机初始化的神经网络。 
输入:环境状态 𝑠 𝑡(或其某种嵌入表示)。 
输出:目标特征向量 𝑓 ( 𝑠 𝑡 ) 。 

2.2 预测网络(Predictor Network)

结构与目标网络相同,但参数是可训练的。 
输入:相同的状态 𝑠 𝑡 。 
目标:学习预测目标网络的输出,即 𝑓 ^ ( 𝑠 𝑡 ) ≈ 𝑓 ( 𝑠 𝑡 ) 

损失函数(L2 损失):
在这里插入图片描述

𝑓 ( 𝑠 𝑡 ) 是目标网络的输出(固定,不更新)。 
𝑓 ^ ( 𝑠 𝑡 ) 是预测网络的输出(可训练)。 
训练预测网络,使其最小化该损失。 

探索奖励(Intrinsic Reward):
在这里插入图片描述

当状态 𝑠 𝑡 罕见 或 未见过 时,预测误差较大,奖励较高。
当状态 𝑠 𝑡 被反复访问时,预测网络逐渐学习目标网络的输出,预测误差变小,奖励降低。

3. RND 的工作流程

初始化目标网络(固定参数,不更新)和预测网络(可训练)。 
智能体在环境中执行动作,收集状态 𝑠 𝑡 。 
目标网络生成目标特征 𝑓 ( 𝑠 𝑡 ) 。 
预测网络尝试预测 𝑓 ^ ( 𝑠 𝑡 ) 并计算预测误差。 
预测误差作为内在奖励 𝑟 𝑡 intrinsic 提供给智能体。 
预测网络使用梯度下降最小化误差,逐渐学习目标网络的映射。 
智能体基于外部奖励 + 内在奖励 来更新策略,鼓励探索新状态。

4. RND与PPO的结合

RND与PPO互相结合,使得PPO 在奖励稀疏环境下更容易学习:

4.1 RND 作为 PPO 的探索机制

PPO 本身依赖 环境奖励(extrinsic reward) 进行训练,但如果奖励稀疏(如迷宫游戏),PPO 可能会卡在局部最优或无法学习。 
RND 通过 内在奖励(intrinsic reward) 提供额外的探索驱动力,使智能体尝试更多新状态,提高数据效率。 

结合方式: 训练 PPO 时,修改奖励函数:
图片
其中:

𝑟 𝑡 extrinsic 是 PPO 的环境奖励(来自环境)。 
𝑟 𝑡 intrinsic 是 RND 提供的探索奖励(来自预测误差)。 
𝜆 控制内在奖励对总奖励的影响。 

4.2 RND 帮助 PPO 在奖励稀疏环境下学习

在奖励稀疏的环境中,PPO 可能很难优化策略,因为没有足够的奖励信号。 
RND 提供了一个额外的奖励信号,即探索奖励,使得智能体可以在初始阶段学习更多有效的状态。 

4.3 PPO 使用 RND 提供的奖励进行策略更新

PPO 仍然使用策略梯度方法进行优化,RND 只是影响 PPO 的奖励信号。 
PPO 通过值函数估计带有 RND 内在奖励的总奖励,然后使用策略梯度方法更新策略。

5. RSL-RL中的实现

RND 用于 探索奖励(intrinsic reward),鼓励智能体探索环境:

代码检查是否使用了 RND: 

    if "rnd_cfg" in self.alg_cfg:
        # check if rnd gated state is present
        rnd_state = extras["observations"].get("rnd_state")
        if rnd_state is None:
            raise ValueError("Observations for they key 'rnd_state' not found in infos['observations'].")
        # get dimension of rnd gated state
        num_rnd_state = rnd_state.shape[1]
        # add rnd gated state to config
        self.alg_cfg["rnd_cfg"]["num_state"] = num_rnd_state
        # scale down the rnd weight with timestep (similar to how rewards are scaled down in legged_gym envs)
        self.alg_cfg["rnd_cfg"]["weight"] *= env.dt

self.alg.rnd 表示 PPO 是否启用了 RND:

                # Intrinsic rewards (extracted here only for logging)!
                intrinsic_rewards = self.alg.intrinsic_rewards if self.alg.rnd else None

PPO 训练时,会计算 外部奖励(extrinsic rewards)和内部奖励(intrinsic rewards),RND 影响策略学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i宏同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值