

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏: 【强化学习】(34)---《自监督强化学习(SSL-RL):理论与方法》
自监督强化学习(Self-Supervised Reinforcement Learning,SSL-RL)是一种通过让智能体在没有明确外部奖励信号的情况下,自主地从环境中学习表示和特征的强化学习方法。
核心思想是智能体通过自主生成目标或利用环境中的潜在结构,学习到有用的特征,以便在以后更高效地处理任务。
自监督强化学习的核心优势在于能够提高样本效率,减少对外部奖励信号的依赖,并促使智能体在丰富的环境中自主发现新的策略和行为。

以下是对自监督强化学习的详细介绍,涵盖其基本概念、关键机制、典型算法及其实现方式。
自监督学习的核心在于,智能体不依赖明确的外部标签或奖励,而是从环境的反馈中生成伪标签或辅助目标(auxiliary tasks),通过这些目标来学习有效的表示和策略。自监督强化学习的目标包括:
设智能体的状态空间为

,动作空间为

,在时间步

处,智能体在状态

下执行动作

,然后根据环境转移函数

转移到下一个状态

。标准的强化学习通常依赖外部给出的奖励函数

,而自监督强化学习则尝试通过智能体自身生成的奖励信号

来优化策略

。
在自监督强化学习中,优化的目标通常包含两部分:

:基于自监督目标生成的损失函数,用于学习状态的良好表示或特征。

:基于智能体在环境中的行为,优化其实际的策略。
最终的优化目标可以写为:

其中,

是一个权衡自监督目标和行为策略目标的超参数。
自监督强化学习主要包括以下几个关键机制:
在自监督强化学习中,智能体通常通过生成次级任务或伪目标(pseudo-goals)来引导其探索行为。典型方法有:
Intrinsic Curiosity Module (ICM):一种常见的机制,通过内在奖励(intrinsic reward)鼓励智能体探索未知的状态空间。内在奖励由两个模块生成:
一个前向模型(Forward Model)和一个逆向模型(Inverse Model)。
前向模型预测智能体当前状态和动作下的下一个状态

,
逆向模型则从状态对

中推测出智能体执行的动作

。
内在奖励为智能体探索的误差,即:

这个误差越大,说明智能体探索的状态越新颖,它会得到更多的内在奖励。
Random Network Distillation (RND):这种方法利用随机初始化的网络预测当前状态的特征值,并基于预测误差生成内在奖励。RND中的随机网络永远不会更新,因此状态空间中少见的状态将会产生更高的误差,从而鼓励智能体去探索这些状态。公式为:

其中,

是一个随机固定网络对状态

的特征提取,

是另一个经过训练的网络对同一状态的特征提取。
自监督学习中的一个重要目标是学习有效的状态表示,使智能体能够更好地进行决策。自监督目标可以通过多种方式帮助表示学习:
自监督强化学习领域有几个非常有代表性的算法和方法:(后续将针对这些算法进行细致的介绍,欢迎关注后续的文章)
ICM 是一种基于好奇心驱动的自监督探索机制,智能体通过计算对新奇状态的预测误差,产生内在奖励,从而促进探索。ICM使用两个模型:一个前向模型和一个逆向模型。

和动作

,预测下一个状态

。

,预测智能体采取的动作

。
内在奖励由前向模型预测的误差生成:

这种内在奖励鼓励智能体探索预测误差大的区域,增加对环境的探索。
论文: Curiosity-driven Exploration by Self-supervised Prediction, ICML 2017.
RND 是一种通过随机网络产生探索奖励的方法。在RND中,使用一个固定的随机网络对当前状态

提取特征

,并通过另一个可训练的网络

尝试预测这些特征。
预测误差作为内在奖励:

由于随机网络固定不变,智能体在探索新的状态时会得到更高的误差和奖励,促使它探索未见过的区域。
论文: Exploration by Random Network Distillation, ICML 2019.
Plan2Explore 是一种自监督强化学习算法,旨在通过“想象”未来的情景来进行探索。它利用世界模型(World Model)来模拟环境,并通过在模拟环境中生成潜在目标,促进智能体的探索。

来学习环境的动态变化。给定当前状态

和动作

,世界模型会预测下一个状态

。
论文:Plan2Explore: Model-based Exploration for Sample-Efficient Reinforcement Learning, ICLR 2022.
好奇心驱动的探索是一类基于内在动机的算法,智能体通过内在奖励机制自主发现新的状态或行为。CDE 方法的关键在于,内在奖励不依赖外部环境的回报,而是依赖于智能体对环境的预测误差、状态转移的置信度或未见状态的探索度。
论文: Curiosity-driven Exploration by Self-supervised Prediction, ICML 2017.
对比预测编码是一种通过预测未来状态来学习表征的自监督学习算法。智能体通过对比任务来学习有用的状态表征,目标是最大化正样本之间的相似性,并最小化负样本之间的相似性。
具体来说:
给定当前状态

,智能体通过对比未来状态

和无关状态

,学习到一个特征表示

,这种表示有助于增强策略学习和环境理解。
论文: Representation Learning with Contrastive Predictive Coding, NeurIPS 2018.
时间差分模型结合了自监督目标和强化学习中的时间差分(TD)学习。智能体通过预测未来状态或奖励,学习到可以泛化的状态表示,特别是在长期任务中的表现出色。
目标:智能体通过预测未来状态的演化,或者预测从当前状态到达目标状态的时间和路径。
解耦表示学习是一种用于自监督强化学习的表示学习技术,旨在将环境的动态和任务目标分开表示,使得智能体可以学习到更加通用和有用的状态表征。
具体而言,解耦表示学习将状态表示解耦为:
通过这种方法,智能体可以在不同任务间共享状态表示,减少训练时间。
URLB 是一种专门设计用于评估无监督强化学习算法的基准测试框架。它鼓励研究人员开发能够在没有明确奖励信号的情况下有效学习和探索的算法,并为不同的任务提供了一致的评估标准。
URLB 强调以下几点:
HER 是一种增强自监督学习的方法,尤其适用于稀疏奖励环境。它的核心思想是利用智能体的失败经验来生成新的成功经验。具体方法是将智能体的失败轨迹视为达到不同目标的成功轨迹,这样智能体就可以从失败中学习。
回顾失败的经验:智能体在训练过程中,会将一次失败中的某些状态转化为目标,从而“回顾”经验,并将其转化为有用的训练数据。
论文: Hindsight Experience Replay, NeurIPS 2017.
BLR 是一种自监督表示学习方法,旨在从序列数据中提取有用的潜在表示。该方法不依赖于明确的奖励,而是通过学习一个潜在空间中的模型,预测下一步可能的表示。BLR的关键思想是利用潜在空间的结构来引导智能体的探索和决策。
SLAC 是一种结合自监督学习和基于模型的方法。它通过对环境的潜在状态进行建模,训练智能体通过学习潜在空间中的动态和表示进行决策。
SPR 是一种专注于学习有用状态表示的自监督方法。智能体通过自预测未来的状态,生成内部的辅助目标,促使其学习更加紧凑和有用的表示,从而改进策略学习。
🔥若是下面代码复现困难或者有问题,欢迎评论区留言;需要以整个项目形式的代码,请在评论区留下您的邮箱📌,以便于及时分享给您(私信难以及时回复)。
"""《 Plan2Explore 简单示例》
时间:2024.10.24
作者:不去幼儿园
"""
import torch
import torch.nn as nn
class WorldModel(nn.Module):
def __init__(self, input_size, hidden_size):
super(WorldModel, self).__init__()
self.rnn = nn.LSTM(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, input_size)
def forward(self, state, action):
x = torch.cat([state, action], dim=-1)
rnn_out, _ = self.rnn(x.unsqueeze(0))
next_state = self.fc(rnn_out.squeeze(0))
return next_state
# Example usage
state_dim = 16 # State dimension
action_dim = 4 # Action dimension
model = WorldModel(state_dim + action_dim, 128)
state = torch.randn(state_dim)
action = torch.randn(action_dim)
predicted_next_state = model(state, action)自监督强化学习的代码实现通常基于深度学习框架,如PyTorch或TensorFlow。以下是一个简化的自监督强化学习实现框架示例:
import torch
import torch.nn as nn
import torch.optim as optim
class CuriosityModule(nn.Module):
def __init__(self, state_size, action_size, hidden_size):
super(CuriosityModule, self).__init__()
self.inverse_model = nn.Sequential(
nn.Linear(state_size * 2, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, action_size)
)
self.forward_model = nn.Sequential(
nn.Linear(state_size + action_size, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, state_size)
)
def forward(self, state, next_state, action):
predicted_action = self.inverse_model(torch.cat([state, next_state], dim=1))
predicted_next_state = self.forward_model(torch.cat([state, action], dim=1))
return predicted_action, predicted_next_state
# Example usage
state_dim = 10
action_dim = 3
curiosity = CuriosityModule(state_dim, action_dim, 64)
state = torch.randn(1, state_dim)
next_state = torch.randn(1, state_dim)
action = torch.randn(1, action_dim)
predicted_action, predicted_next_state = curiosity(state, next_state, action)由于博文主要为了介绍相关算法的原理和应用的方法,缺乏对于实际效果的关注,算法可能在上述环境中的效果不佳,一是算法不适配上述环境,二是算法未调参和优化,三是等等。上述代码用于了解和学习算法足够了,但若是想直接将上面代码应用于实际项目中,还需要进行修改。
尽管自监督强化学习在无标签和无奖励的任务中表现出色,但仍然存在以下挑战:
自监督强化学习方法旨在通过减少对外部奖励的依赖,鼓励智能体进行有效的探索和学习。这些算法包括利用内在动机生成自监督奖励、通过预测未来状态学习表示、或从失败中学习等多种机制。每种算法在不同的环境和任务设置下都展现出独特的优势,进一步推动了强化学习的研究与应用发展。
总结来说,自监督强化学习是一个正在快速发展和探索的领域,其结合了自监督学习和强化学习的优势,为智能体在复杂和未知的环境中学习和决策提供了新的途径和可能性。未来的研究方向包括探索更复杂的自监督任务、改进算法的鲁棒性,以及将自监督方法应用于现实世界的复杂环境中。
文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者