强化学习模型-Priority Replay Buffer

论文:Schaul T, Quan J, Antonoglou I, et al. Prioritized Experience Replay[J] . Computer Science,2015

前言

1.首先提下Replay Buffer吧,Replay Buffer是最基本的样本收集再采样的过程,是之前在做DDQN实验中使用的一种样本利用方式,原因是当我们使用Q-learning算法进行在线方式学习时,会存在两个问题:

           [1]交互得到的序列存在一定相关性(因为在线学习往往就是得到一个就立马拿来训练 )。而我们的机器学习模型对训练样本的假设是独立、同分布的,所以序列打破了这种独立同分布特性,因此效果不太好。

           [2]交互样本使用的效率过低。因为每次要使用一定的时间获取一个batch的样本才能完成一次训练,所以对样本的获取是有些慢的,而且在线学习方式往往会将学习后的样本直接丢弃,这样下来利用的效率不高。 针对这一问题提出下图这样的结构,可以发现就是之前一直使用哪种 设置‘样本回放缓存区’的架构,主要就包括样本收集和样本采样两个过程,一种有限量的保存和 均匀随机的采样。

2.注意这里还有个track点是必须均匀采样,也就是说这里会均匀从多个序列中采样轨迹,而不是只使用一次交互得到序列中的样本,这样可以减轻使用单一序列所导致的波动,从而可以很好地稳定训练的效果,同时可以将一份样本进行多次训练,从而提升样本利用率。      

3.traick

### 关于优先深度强化学习网络模型的研究与实现 #### 模型概述 优先深度强化学习Priority Deep Reinforcement Learning, PDRL)是一种结合了优先级机制的深度强化学习方法。这种方法旨在优化训练过程中样本的选择策略,从而加速收敛并提升性能。在标准的深度Q网络(DQN)中,经验回放缓冲区中的所有经历都是平等对待的;而在PDRL中,则会根据某些准则赋予不同经历不同的权重。 #### 实现细节 一种常见的做法是在传统的DQN基础上引入重要性采样技术来调整损失函数计算时所使用的梯度估计值。具体来说,在每次更新神经网络参数之前,先从经验池里按照一定概率抽取一批次的数据用于反向传播算法的学习过程之中。这些数据的重要性由TD误差大小决定——即当前状态下的预测动作价值与实际获得奖励加上下一状态下最大可能的动作价值之间的差距。较大的TD误差意味着这个经历对于改进智能体行为具有更高的潜在贡献,因此应当给予更多的关注[^1]。 ```python import numpy as np from collections import deque import random class PrioritizedReplayBuffer(object): def __init__(self, capacity=10000, alpha=0.6, beta_start=0.4, beta_frames=100000): self.capacity = capacity self.buffer = [] self.position = 0 # Parameters for prioritized experience replay self.priorities = np.zeros((capacity,), dtype=np.float32) self.alpha = alpha self.beta_start = beta_start self.beta_frames = beta_frames self.frame_idx = 1 def push(self, state, action, reward, next_state, done): max_prio = self.priorities.max() if self.buffer else 1.0 ** self.alpha if len(self.buffer) < self.capacity: self.buffer.append((state, action, reward, next_state, done)) else: self.buffer[self.position] = (state, action, reward, next_state, done) self.priorities[self.position] = max_prio self.position = (self.position + 1) % self.capacity def sample(self, batch_size): if len(self.buffer) == self.capacity: prios = self.priorities else: prios = self.priorities[:self.position] probs = prios / prios.sum() indices = np.random.choice(len(self.buffer), batch_size, p=probs) samples = [self.buffer[idx] for idx in indices] beta = min(1.0, self.beta_start + self.frame_idx * (1.0 - self.beta_start) / self.beta_frames) weights = (len(self.buffer) * probs[indices]) ** (-beta) weights /= weights.max() self.frame_idx += 1 states, actions, rewards, next_states, dones = zip(*samples) return np.array(states), np.array(actions), np.array(rewards), \ np.array(next_states), np.array(dones).astype(np.int), \ np.array(weights).reshape(-1, 1), indices def update_priorities(self, batch_indices, batch_priorities): for idx, prio in zip(batch_indices, batch_priorities): self.priorities[idx] = ((prio + 1e-5)**self.alpha)[0] ``` 上述代码展示了如何构建一个带有优先级的经验重放缓冲器`PrioritizedReplayBuffer`类。此结构允许基于先前交互产生的TD错误程度对存储的记忆片段分配不同程度的关注度。随着迭代次数增加,β逐渐接近1,使得最终得到的是无偏见的重要性质评估结果[^2]。 #### 应用实例 在机器人领域内,Bousmalis等人提出的方案利用模拟环境和领域适配技巧提高了物理世界中机械臂执行抓握任务的成功率。他们发现当采用适当的方法处理来自虚拟世界的反馈信号并与真实场景相结合时,可以显著减少在线调参所需的时间成本以及硬件损耗风险。这种跨平台迁移能力同样适用于其他类型的自动化控制系统设计当中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值