【SSL-RL】自监督强化学习: 好奇心驱动探索 (CDE)算法

        📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:

       【强化学习】(45)---《自监督强化学习: 好奇心驱动探索 (CDE)算法》

自监督强化学习: 好奇心驱动探索 (CDE)算法

目录

1. 引言

2. CDE算法的核心思想

2.1 内在奖励的设计

2.2 预测模型

2.3 总损失函数

3. CDE算法的工作流程

3.1 数据收集与预测模型训练

3.2 内在奖励计算

3.3 策略优化

[Python]  CDE算法的实现示例

[Experiment]  CDE算法的应用实例

[Notice]  代码解析

4. CDE的优势与挑战

5. 结论


1. 引言

        好奇心驱动探索,Curiosity-driven Exploration (CDE)算法 是一种用于自监督强化学习的算法,旨在通过激发智能体的“好奇心”来引导其探索未知环境。好奇心驱动的探索机制主要基于智能体对环境的预测误差:当智能体遇到无法准确预测的情境时,会将其视为一个具有“新奇性”的事件,从而被激励去探索该区域。CDE适用于稀疏奖励或无奖励的环境,通过自监督的方式增强智能体的探索能力,使其能够自主地发现和学习新的环境结构和行为模式。

        CDE的目标是通过设计一种“内在奖励”(intrinsic reward)来补充或替代外在奖励,以帮助智能体在稀疏奖励环境中仍然保持探索动机。


2. CDE算法的核心思想

        CDE的核心思想是构建一种基于“好奇心”的内在奖励机制。当智能体难以预测某个情境的结果时,其预测误差会增加,这时CDE会生成一个内在奖励,以激励智能体去探索这些“好奇”事件。CDE的主要思路可以分为以下几个要素:

  • 预测误差:CDE通过预测模型来估计智能体在给定状态和动作下的下一个状态。预测误差的大小作为衡量“新奇性”的标准。
  • 内在奖励:CDE将预测误差作为内在奖励,奖励智能体去探索那些带有较大预测误差的情境。
  • 探索与开发的平衡:CDE不仅追求高预测误差的情境,也利用策略学习收敛于具有高回报的行为。

2.1 内在奖励的设计

        在CDE中,内在奖励的计算方式为:

[ r_{\text{intrinsic}} = | \hat{s}{t+1} - s{t+1} |^2 ]

其中,( s_{t+1} )是环境真实的下一个状态,( \hat{s}{t+1} )是智能体的预测模型生成的下一状态。预测误差 ( | \hat{s}{t+1} - s_{t+1} |^2 )越大,表明智能体对该情境的理解不足,因此其“好奇心”也更强,从而给予更大的内在奖励。

2.2 预测模型

        CDE使用一个预测模型(通常是神经网络)来估计智能体在当前状态( s_t )和动作 ( a_t )下的下一个状态 ( \hat{s}{t+1} )。预测模型的输入是状态-动作对 ( (s_t, a_t) ),输出是对下一个状态的预测( \hat{s}{t+1} )

        该预测模型可以用以下公式表示:

[ \hat{s}{t+1} = f\theta(s_t, a_t) ]

其中,( \theta )是预测模型的参数。通过对预测误差进行反向传播,CDE可以更新模型,使其在探索过程中逐步提升预测能力。

2.3 总损失函数

        CDE的总损失函数包含外在奖励(如果有)和内在奖励。总回报可以表示为:

[ R_t = r_{\text{extrinsic}} + \beta \cdot r_{\text{intrinsic}} ]

其中,( r_{\text{extrinsic}} )是外在奖励,( r_{\text{intrinsic}} )是内在奖励,( \beta ) 是超参数,用于平衡内在奖励和外在奖励的影响。

        在稀疏奖励环境中,( r_{\text{extrinsic}} )的值大部分时间为0,因此( r_{\text{intrinsic}} )将成为主要的驱动力。通过最大化包含内在奖励的总回报( R_t ),CDE能够引导智能体在没有外部奖励的情况下进行有效的探索。


3. CDE算法的工作流程

3.1 数据收集与预测模型训练

        在与环境交互的过程中,智能体收集状态-动作-下一状态三元组( (s_t, a_t, s_{t+1}) ),并将其用于训练预测模型。通过最小化预测误差,智能体能够提高对环境的建模能力。

3.2 内在奖励计算

        在每一步交互中,CDE根据预测模型计算下一状态的预测误差,将其作为内在奖励( r_{\text{intrinsic}} )。这种内在奖励会被添加到智能体的策略更新中,驱动其进一步探索那些预测误差较大的区域。

3.3 策略优化

        使用基于内在奖励和外在奖励的总回报( R_t ),CDE通过常规的强化学习方法(如DQN、PPO等)优化智能体的策略。内在奖励的引入使得智能体在探索未见过的状态时更有动力,因而能够在没有明确奖励的情况下探索环境。


[Python]  CDE算法的实现示例

        以下是一个简化的CDE实现示例,通过一个预测模型和内在奖励机制,展示如何在稀疏奖励环境中实现好奇心驱动的探索。

        🔥若是下面代码复现困难或者有问题,欢迎评论区留言;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。

"""《 CDE算法的实现示例》时间:2024.11作者:不去幼儿园
"""
import torch
import torch.nn as nn
import torch.optim as optim# 定义预测模型
class PredictiveModel(nn.Module):def __init__(self, state_dim, action_dim):super(PredictiveModel, self).__init__()self.fc1 = nn.Linear(state_dim + action_dim, 64)self.fc2 = nn.Linear(64, state_dim)self.relu = nn.ReLU()def forward(self, state, action):x = torch.cat([state, action], dim=1)x = self.relu(self.fc1(x))next_state_pred = self.fc2(x)return next_state_pred# 计算内在奖励
def compute_intrinsic_reward(state, action, next_state, model):next_state_pred = model(state, action)intrinsic_reward = torch.mean((next_state_pred - next_state) ** 2).item()return intrinsic_reward# 更新预测模型
def update_predictive_model(state, action, next_state, model, optimizer):next_state_pred = model(state, action)loss = torch.mean((next_state_pred - next_state) ** 2)optimizer.zero_grad()loss.backward()optimizer.step()return loss.item()# 示例用法
state_dim = 16
action_dim = 4
predictive_model = PredictiveModel(state_dim, action_dim)
optimizer = optim.Adam(predictive_model.parameters(), lr=1e-3)# 假设有批量数据
state = torch.randn(64, state_dim)
action = torch.randn(64, action_dim)
next_state = torch.randn(64, state_dim)# 计算内在奖励
intrinsic_reward = compute_intrinsic_reward(state, action, next_state, predictive_model)
print(f"Intrinsic Reward: {intrinsic_reward}")# 更新预测模型
loss = update_predictive_model(state, action, next_state, predictive_model, optimizer)
print(f"Predictive Model Loss: {loss}")

[Experiment]  CDE算法的应用实例

        Curiosity-driven Exploration (CDE) 算法在稀疏奖励或无奖励的复杂环境中有广泛的应用。例如,在迷宫探索、机器人导航和游戏AI中,智能体可能不会经常接收到外在奖励。这种情况下,CDE通过内在奖励机制引导智能体自主探索未知区域,从而提高探索效率。

应用流程

以下是CDE结合深度Q网络(DQN)在迷宫探索任务中的应用流程:

  1. 环境初始化:创建强化学习环境,例如一个复杂的迷宫,其中智能体只有在到达目标时才会获得外在奖励。
  2. CDE模型初始化:创建预测模型,用于预测智能体在当前状态和动作下的下一状态,并计算内在奖励。
  3. 强化学习模型初始化:例如使用DQN,将CDE生成的内在奖励和外在奖励相结合,用于更新Q值。
  4. 训练循环
    • 内在奖励计算:每次与环境交互后,通过预测模型计算下一状态的预测误差,生成内在奖励。
    • 总奖励计算:结合内在奖励和外在奖励,得到总奖励。
    • 策略更新:使用总奖励,通过Q-learning更新DQN模型。
    • 预测模型更新:根据预测误差优化预测模型,使其更准确地预测智能体的下一状态。
# DQN智能体定义
class DQNAgent:def __init__(self, state_dim, action_dim, lr=1e-3):self.q_network = nn.Sequential(nn.Linear(state_dim, 64),nn.ReLU(),nn.Linear(64, action_dim))self.optimizer = optim.Adam(self.q_network.parameters(), lr=lr)def select_action(self, state):with torch.no_grad():q_values = self.q_network(state)action = q_values.argmax().item()return actiondef update(self, states, actions, rewards, next_states, dones):q_values = self.q_network(states).gather(1, actions.unsqueeze(1)).squeeze()with torch.no_grad():max_next_q_values = self.q_network(next_states).max(1)[0]target_q_values = rewards + (0.99 * max_next_q_values * (1 - dones))loss = torch.mean((q_values - target_q_values) ** 2)self.optimizer.zero_grad()loss.backward()self.optimizer.step()

实例训练:

# 训练循环
predictive_model = PredictiveModel(state_dim, action_dim)
dqn_agent = DQNAgent(state_dim=state_dim, action_dim=env.action_space.n)
predictive_optimizer = optim.Adam(predictive_model.parameters(), lr=1e-3)for episode in range(num_episodes):state = env.reset()done = Falseepisode_reward = 0while not done:state_tensor = torch.tensor(state, dtype=torch.float32).unsqueeze(0)# 选择动作action = dqn_agent.select_action(state_tensor)next_state, reward, done, _ = env.step(action)# 计算内在奖励next_state_tensor = torch.tensor(next_state, dtype=torch.float32).unsqueeze(0)intrinsic_reward = compute_intrinsic_reward(state_tensor, torch.tensor([[action]], dtype=torch.float32), next_state_tensor, predictive_model)# 计算总奖励total_reward = reward + beta * intrinsic_reward# 更新DQN智能体dqn_agent.update(state_tensor, torch.tensor([action]), torch.tensor([total_reward]), next_state_tensor, torch.tensor([done]))# 更新预测模型update_predictive_model(state_tensor, torch.tensor([[action]], dtype=torch.float32), next_state_tensor, predictive_model, predictive_optimizer)state = next_stateepisode_reward += rewardprint(f"Episode {episode + 1}: Total Reward = {episode_reward}")

[Notice]  代码解析

  • 预测模型:通过预测模型计算内在奖励,使用状态-动作对作为输入,预测下一个状态,并计算预测误差。
  • 内在奖励计算:内在奖励由预测误差计算得出,并与外在奖励相结合形成总奖励,驱动智能体的探索行为。
  • 策略更新:基于总奖励,DQN智能体更新其Q网络,从而学习到更优的策略。
  • 预测模型更新:在每次迭代中,预测模型通过反向传播更新,使得内在奖励能够更准确地反映新奇性。

        通过引入Curiosity-driven Exploration (CDE),智能体可以在稀疏奖励环境中自主探索,保持学习动机。CDE利用内在奖励补充外在奖励,使得强化学习在缺乏明确奖励信号的环境中也能高效地工作。这种基于好奇心的探索机制不仅提升了智能体的学习能力,也使其更具适应性和鲁棒性。 

        由于博文主要为了介绍相关算法的原理应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳或者无法运行,一是算法不适配上述环境,二是算法未调参和优化,三是没有呈现完整的代码,四是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。


4. CDE的优势与挑战

优势

  1. 适用于稀疏奖励环境:CDE通过内在奖励激励智能体去探索具有高预测误差的情境,因此即便外在奖励稀疏或缺失,CDE依然能够驱动智能体进行探索。
  2. 自动发现新奇情境:基于预测误差的内在奖励机制使得智能体可以自动发现环境中的新奇情况,而不需要外部监督。
  3. 提升学习效率:通过引导智能体关注不确定性高的情境,CDE能够在复杂环境中加速智能体的学习过程。

挑战

  1. 预测模型的误差积累:在复杂的动态环境中,预测模型的误差可能积累,导致智能体错误地评估内在奖励,从而影响探索的有效性。
  2. 超参数调优:内在奖励和外在奖励的平衡系数 ( \beta ) 需要根据具体任务进行调优,以确保探索和开发之间的平衡。
  3. 计算资源需求:训练预测模型以及计算内在奖励会增加计算开销,特别是在高维观测环境中。

5. 结论

        Curiosity-driven Exploration (CDE)是一种强化学习中探索未知环境的有效方法,通过内在奖励机制激励智能体去探索预测误差较大的情境。CDE的引入能够帮助智能体在稀疏奖励或无奖励的环境中仍然保持高效的学习和探索能力。然而,CDE的实现需要根据具体任务和环境进行调优,特别是在预测模型的设计和内在奖励的计算上需要仔细考虑。

更多自监督强化学习文章,请前往:【自监督强化学习】专栏 


     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者添加VX:Rainbook_2,联系作者。✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16793.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统 ElasticSearch,Kibana安装

目录 1.wins安装ElasticSearch2.将 elasticsearch 以服务的方式安装3. 在系统环境变量 Path 中添加如下路径4.启动点击即可5.双击 elasticsearch.bat 启动 elasticsearch 服务6.启动后第一次会显示一些配置信息,包括默认的用户密码 先记住 记不住的话可以重置密码7.验证安装结果…

《Probing the 3D Awareness of Visual Foundation Models》论文解析——单图像表面重建

一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…

P3-4.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计语句

知识要点:break、continue和goto辅助循环设计语句 视频: P3-4.1.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计语句 P3-4.2.【结构化程序设计】第四节——知识要点:break、continue和goto辅助循环设计…

灵神DAY3 KMP算法

具体解释: 1. 真前缀和真后缀的定义 前缀:字符串的起始部分。例如,字符串 s "aabcaa" 的前缀是 ""、"a"、"aa"、"aab"、"aabc"、"aabca"、"aabcaa"。 …

MySQL5.7.37安装配置

1.下载MySQL软件包并解压 2.配置环境变量 3.新建my.ini文件并输入信息 [mysqld] #端口号 port 3306 #mysql-5.7.27-winx64的路径 basedirC:\mysql-5.7.37\mysql-5.7.37-winx64 #mysql-5.7.27-winx64的路径\data datadirC:\mysql-5.7.37\mysql-5.7.37-winx64\data #最大连接数…

基于单片机的手持金属探测仪设计

本设计以STM32F103C8T6单片机为核心,通过金属线圈感应器来判断是否存在金属,控制OLED显示屏显示金属探测仪的灵敏度和参考值,通过电源模块将220V转化为3.3V对单片机进行供电,还可以通过按键对金属探测仪的灵敏度进行设置&#xff…

P1197 星球大战(并查集+逆向思维)

这是今天写的比较有价值的一道题,晚上写了大概一个多小时,主要还是在debug,出得很妙,好题👍 P1197 [JSOI2008] 星球大战 - 洛谷 | 计算机科学教育新生态 思路:如果我们按照顺序一个一个的去计算毁灭一个星…

深度学习驱动的蛋白质设计技术与前沿实践-从基础到尖端应用

RoseTTAFold,作为David Baker教授团队早期开发的蛋白质结构预测工具,在学术界与工业界广受认可。然而,随着时间推移,仅局限于预测已知结构的蛋白质并不能满足生物医药和生物工程领域对创新设计的需求。这促使David Baker教授团队继…

Linux 进程信号初识

目录 0.前言 1.什么是信号 1.1生活中的信号 1.2 OS中的信号 2.认识信号 2.1信号概念 2.2查看信号 2.3 signal函数 2.4代码示例 3. 信号处理方式 3.1 忽略信号 3.2 默认处理 3.3 自定义处理 4.小结 (图像由AI生成) 0.前言 在之前的学习中,我…

SpringBoot(二十五)SpringBoot集成JRebel实现热更新

今天来安装一个IDEA代码热更新的插件,一个神器。 我们之前也为IDEA配置了热更新,使用的是spring-boot-devtools插件。具体请移步《SpringBoot(一)创建项目及配置IDEA热更新》 上边这个热更新对于单模块项目是没有问题的,但是对于多模块项目可能就无能无能为力了,而且,随…

MATLAB中的绘图技巧

MATLAB作为一种强大的科学计算软件,不仅可以进行数据分析和模拟,还具有出色的绘图功能。本文介绍若干在MATLAB中绘图的技巧和方法,帮助使用者更好地呈现数据和结果 文章目录 基本绘图函数高级绘图技巧三维绘图动态绘图绘图工具结语 基本绘图函…

java八股-AQS,Reentrantlock

什么是AQS? 难度:★★★☆☆ 考频:★★★☆☆ 注意这个队列是双向队列,每次有线程释放锁了之后,会有下一个线程来,以及队列头元素,如果设置的是公平锁,那么是等了很久的头元素先获…

python——模块 迭代器 正则

一、python模块 先创建一个 .py 文件,这个文件就称之为 一个模块 Module。 使用模块的优点: 模块化编程,多文件编程 1.2 模块的使用 1.2.1 import语句 想要B.py文件中,使用A.py文件,只需要在B.py文件中使用关键字…

STL之mapset|AVL树

STL之map&set|AVL树 set&map搜索二叉树实现代码 set的使用map的使用set&map的模拟实现(见红黑树篇) AVL树AVL树的模拟实现 set&map 前言:stl库中set和map的底层都是红黑树,一种平衡搜索二叉树,是我下…

使用阿里云快速搭建 DataLight 平台

使用阿里云快速搭建 DataLight 平台 本篇文章由用户 “闫哥大数据” 分享,B 站账号:https://space.bilibili.com/357944741?spm_id_from333.999.0.0 注意:因每个人操作顺序可能略有区别,整个部署流程如果出现出入,以…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中,普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中,同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表,而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

代码随想录算法训练营第三十八天 | 322.零钱兑换 279.完全平方数 139.单词拆分 多重背包以及背包总结

LeetCode 322.零钱兑换: 文章链接 题目链接:322.零钱兑换 思路: 首先分析题目,每种硬币的数量是无限的,因此为完全背包问题;又要求返回的是最少硬币个数,因此与组合数/排列数无关&#xff0c…

计算机网络WebSocket——针对实习面试

目录 计算机网络WebSocket什么是WebSocket?WebScoket和HTTP协议的区别是什么?说明WebSocket的优势和使用场景?说明WebSocket的建立连接的过程? 计算机网络WebSocket 什么是WebSocket? WebSocket是一个网络通信协议,提…

在Ubuntu 24.04 LTS上安装飞桨PaddleX

前面我们介绍了《在Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0 是基于飞桨框架构建的一站式全流程开发工具,它集成了众多开箱即用的预训练模型,可以实现模型从训练到推理的全流程开发,支持国内外多…

LM2 : A Simple Society of Language Models Solves Complex Reasoning

文章目录 题目摘要简介相关工作方法论实验结果结论局限性 题目 LM2:简单的语言模型社会解决复杂推理问题 论文地址:https://aclanthology.org/2024.emnlp-main.920/ 项目地址: https://github.com/LCS2-IIITD/Language_Model_Multiplex 摘要…