深度强化学习(DRL)

深度强化学习(DRL)是深度学习和强化学习的结合,克服了两者单独的局限性。强化学习基于马尔可夫决策过程(MDP),通过奖惩机制寻找最优策略。DRL通过引入深度神经网络解决Q-learning的泛化问题,采用经验回放和分离目标网络以提高稳定性。主要方法包括基于值函数、基于策略梯度和基于多agent的DRL,其中DQN是一种常用的技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DRL形成背景

深度强化学习(Deep Reinforcement Learning)顾名思义,是深度学习与强化学习的结合,因此深度强化学习弥补了DL和RL的不足之处。

  • 深度学习最近火热,大家也都有所了解,就是通过多层网络和非线性变换,去学习数据的分布式特征表示,因此深度学习侧重于对事物的感知和表达。
  • 而强化学习,了解的同学都知道,通过奖惩机制去挖掘最优策略,因此它侧重于学习解决问题的策略。

因此由于深度学习特征感知能力强却缺乏决策能力,引入了深度强化学习这个概念。

强化学习

要了解深度强化学习,首先要了解强化学习这个概念,接下来就简单介绍一下强化学习的基础知识。

强化学习是从环境状态到动作空间的映射的一种学习。它的基础是马尔可夫决策过程(MDP),即:当前状态只与上一个状态有关,不考虑上一个状态之前的累积影响。

通常MDP被定义为一个四元组(S,A,R,P):

  • S代表状态空间,St表示agent在t时刻所处的状态。
  • A代表动作空间,at表死agent在t时刻所进行的动作。
  • R代表奖励/惩罚reward,可以代表一个学习过程的反馈,其中rt+1代表在t时刻St状态下,做出at动作后,转移到达St+1状态所获得的奖励。
### 深度强化学习 (Deep Reinforcement Learning, DRL) 的基本原理 深度强化学习的核心在于结合深度学习的强大表示能力与强化学习的目标优化机制。具体而言,DRL旨在通过与环境的交互,使智能体学会一个策略(policy),从而最大化长期累积奖励[^1]。 #### 贝尔曼最优公式的理论基础 根据收缩映射定理(Contraction Mapping Theorem),贝尔曼最优公式中的状态价值函数 \(v\) 存在一个唯一最优解,并且可能存在多个达到该最优值的策略[^2]。这一结论为后续算法的设计提供了坚实的数学依据。 #### 基于值的算法:DQN 实现详解 深度Q网络(DQN)是最早成功的深度强化学习算法之一,它将深度神经网络用于近似Q表(Q-table)。为了提升训练效率和稳定性,DQN引入了两项关键技术: 1. **经验回放(Experience Replay)** 将每次交互的经验存储至缓冲区,在训练过程中随机抽样这些数据以打破时间关联性并减少样本间的相关性[^3]。 2. **目标网络(Target Network)** 使用独立的目标网络计算目标值,定期同步权重参数,以此降低更新过程中的波动性和不稳定性。 以下是经典的DQN实现代码示例: ```python import torch import random from collections import deque class DQN: def __init__(self, state_dim, action_dim, lr=0.001, gamma=0.99): self.state_dim = state_dim self.action_dim = action_dim self.gamma = gamma # 定义在线网络和目标网络 self.online_net = self.build_network(state_dim, action_dim).to(device) self.target_net = self.build_network(state_dim, action_dim).to(device) self.target_net.load_state_dict(self.online_net.state_dict()) self.optimizer = torch.optim.Adam(self.online_net.parameters(), lr=lr) self.replay_buffer = deque(maxlen=1e5) def build_network(self, input_size, output_size): model = torch.nn.Sequential( torch.nn.Linear(input_size, 64), torch.nn.ReLU(), torch.nn.Linear(64, output_size) ) return model def update_target_network(self): self.target_net.load_state_dict(self.online_net.state_dict()) def train_step(self, batch_size): if len(self.replay_buffer) < batch_size: return minibatch = random.sample(self.replay_buffer, batch_size) states, actions, rewards, next_states, dones = zip(*minibatch) states = torch.tensor(states, dtype=torch.float32).to(device) actions = torch.tensor(actions, dtype=torch.int64).unsqueeze(-1).to(device) rewards = torch.tensor(rewards, dtype=torch.float32).unsqueeze(-1).to(device) next_states = torch.tensor(next_states, dtype=torch.float32).to(device) dones = torch.tensor(dones, dtype=torch.bool).unsqueeze(-1).to(device) current_q_values = self.online_net(states).gather(dim=-1, index=actions) with torch.no_grad(): target_q_values = self.target_net(next_states).max(dim=-1)[0].unsqueeze(-1) targets = rewards + (~dones * self.gamma * target_q_values) loss = torch.mean((targets - current_q_values)**2) self.optimizer.zero_grad() loss.backward() self.optimizer.step() ``` #### 基于策略的算法:REINFORCE 和 Actor-Critic 架构 REINFORCE算法属于蒙特卡洛方法的一种变种,其核心思想是从一整幕轨迹中采样数据进行梯度估计,虽然这种方法无偏,但由于仅依赖最终回报作为信号源,因此具有较高的方差[^4]。为缓解此问题,许多现代算法采用Actor-Critic框架,其中Critic部分负责提供即时反馈,而Actor则专注于调整策略分布。这种架构既降低了方差又保留了一定程度上的无偏性质。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值