强化学习笔记 Ornstein-Uhlenbeck 噪声和DDPG
1 Ornstein-Uhlenbeck过程
用SDE的形式表示,Ornstein-Uhlenbeck过程为:
- θ就是均值回归的速率(θ越大,干扰越小)
- μ是均值
- σ是波动率(扰动的程度)
- ε ~N(0,1)
从SDE的角度看,随机过程包含两块:
- 第一部分表示均值回归,即不论如何变化,下一时刻总会朝着均值方向变化
- 第二部分就是一个布朗运动生成的随机项
1.1 解析解推导
定义,根据伊藤引理,有:
数学知识整理:布朗运动与伊藤引理 (Ito‘s lemma)_UQI-LIUWJ的博客-CSDN博客
然后我们计算
将移到等号右边去,同时等号左右同时除以( 的系数)
有:
又根据伊藤等距,有:数学知识整理:布朗运动与伊藤引理 (Ito‘s lemma)_UQI-LIUWJ的博客-CSDN博客
然后因为,所以
1.2 离散解
如果我们考虑离散形式,记单步step为τ:
形式上就是 ,也即自回归形式AR(1)
1.2.1 离散解在RL中的延申
通过上一小段,不难发现Ornstein-Uhlenbeck过程是时序相关的【且满足马尔科夫性,后一步的噪声仅受前一步的影响】,所以在强化学习的前一步和后一步的动作选取过程中可以利用Ornstein-Uhlenbeck过程产生时序相关的噪声,以提高在惯性系统(环境)中的控制任务的探索效率。【上一步的噪声和下一步的噪声之间是有单步自回归的关系)
常用的高斯噪声是时序上不相关的,前一步和后一步选取动作的时候噪声都是独立的。
——>相比于独立噪声,OU噪声适合于惯性系统,尤其是时间离散化粒度较小的情况 (时间离散化粒度大的时候,可能OU噪声和高斯噪声的区别就不明显了)
——>在惯性系统中,如果使用高斯噪声,那么会产生一系列独立的在0均值附近的高斯噪声,原地震荡,使得随机噪声的作用被平均/抵消了
——>如果使用OU噪声的话,会顺着惯性往一个方向多探索几步,这样可以累计探索的效果
2 代码实现
import numpy as np
import matplotlib.pyplot as pltclass Ornstein_Uhlenbeck_Noise:def __init__(self, mu, sigma=1.0, theta=0.15, dt=1e-2, x0=None):self.theta = thetaself.mu = muself.sigma = sigmaself.dt = dtself.x0 = x0self.reset()def __call__(self):x = self.x_prev + \self.theta * (self.mu - self.x_prev) * self.dt + \self.sigma * np.sqrt(self.dt) * np.random.normal(size=self.mu.shape)'''后两行是dXt,其中后两行的前一行是θ(μ-Xt)dt,后一行是σεsqrt(dt)'''self.x_prev = xreturn xdef reset(self):if self.x0 is not None:self.x_prev = self.x0 else: self.x_prev = np.zeros_like(self.mu)
2.1 和高斯噪声的比较
ou_noise = Ornstein_Uhlenbeck_Noise(mu=np.zeros(1))
y1 = []
y2 = np.random.normal(0, 1, 1000) #高斯噪声
for _ in range(1000):y1.append(ou_noise())
fig,ax=plt.subplots(1,2,figsize=(10,5))
ax[0].plot(y1, c='r')
ax[0].set_title('OU noise')
ax[1].plot(y2, c='b')
ax[1].set_title('Guassian noise')
plt.show()
可以看到OU噪声是一个有一定自回归的噪声,而高斯噪声是两两独立的
OU noise往往不会高斯噪声一样相邻的两步的值差别那么大,而是会绕着均值依据惯性在上一步附近正向或负向探索一段距离,就像物价和利率的波动一样,这有利于在一个方向上探索。
2.2 不同参数的影响
2.2.1 sigma
if __name__ == "__main__":ou_noise1 = Ornstein_Uhlenbeck_Noise(sigma=1,mu=np.zeros(1))ou_noise2 = Ornstein_Uhlenbeck_Noise(sigma=0.1,mu=np.zeros(1))y1 = []y2 = [] for _ in range(1000):y1.append(ou_noise1())y2.append(ou_noise2())fig,ax=plt.subplots(1,2,figsize=(10,5))ax[0].plot(y1, c='r')ax[0].set_title('OU noise_sigma=1')ax[1].plot(y2, c='b')ax[1].set_title('OU noise_sigma=0.1')plt.show()
σ大,那么扰动就会大一些
2.2.2 dt
if __name__ == "__main__":ou_noise1 = Ornstein_Uhlenbeck_Noise(dt=1e-2,mu=np.zeros(1))ou_noise2 = Ornstein_Uhlenbeck_Noise(dt=1,mu=np.zeros(1))y1 = []y2 = [] for _ in range(1000):y1.append(ou_noise1())y2.append(ou_noise2())fig,ax=plt.subplots(1,2,figsize=(10,5))ax[0].plot(y1, c='r')ax[0].set_title('OU noise_dt=1e-2')ax[1].plot(y2, c='b')ax[1].set_title('OU noise_dt=1')plt.show()
这也印证了前面1.2.1的说法:时间离散化粒度大的时候,可能OU噪声和高斯噪声的区别就不明显了【这可能是很多地方说OU噪声没有作用的一个原因。。。】
2.2.3 theta
if __name__ == "__main__":ou_noise1 = Ornstein_Uhlenbeck_Noise(theta=0.15,mu=np.zeros(1))ou_noise2 = Ornstein_Uhlenbeck_Noise(theta=1,mu=np.zeros(1))y1 = []y2 = [] for _ in range(1000):y1.append(ou_noise1())y2.append(ou_noise2())fig,ax=plt.subplots(1,2,figsize=(10,5))ax[0].plot(y1, c='r')ax[0].set_title('OU noise_theta=0.15')ax[1].plot(y2, c='b')ax[1].set_title('OU noise_theta=1')plt.show()
θ大,那么向均值考虑的程度就会更猛烈一些
参考内容
强化学习中Ornstein-Uhlenbeck噪声是鸡肋吗? - 知乎 (zhihu.com)
强化学习笔记 Ornstein-Uhlenbeck 噪声和DDPG相关推荐
- 莫烦强化学习笔记整理(九)DDPG
莫烦强化学习笔记整理(九)DDPG 1.DDPG 要点 2.DDPG 算法 actor critic actor与critic结合 类似于DQN的记忆库 回合更新 链接: DDPG代码. 1.DDPG ...
- 强化学习笔记 DDPG (Deep Deterministic Policy Gradient)
1 总述 总体来讲,和actor-critic 差不多,只不过这里用了target network 和experience relay 强化学习笔记 experience replay 经验回放_UQ ...
- 强化学习笔记-强化学习概述
强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...
- python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)
[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...
- 142页ICML会议强化学习笔记整理,值得细读
作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...
- 强化学习笔记:Q_learning (Q-table)示例举例
1 示例介绍 在右侧有宝藏,探险者到达宝藏所在的位置,就可以获得奖励 比如某一时刻的状态是这个样子的:"-o---T" T 就是宝藏的位置, o 是探索者的位置 如果在某个地点 s ...
- 强化学习笔记:Actor-critic
0 复习 由于actor-critic 是 policy gradient 和DQN的一个结合,所以我们先对这两个进行一个简单的复习: 0.1 policy gradient 强化学习笔记:Polic ...
- 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】
1 前言 我们回顾一下policy network: 强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客 它先去跟环境互动,搜集很多的 路径τ.根据它搜集 ...
- 强化学习笔记:Sarsa算法
1 Sarsa(0) Sarsa算法和TD类似,只不过TD是更新状态的奖励函数V,这里是更新Q函数强化学习笔记:Q-learning :temporal difference 方法_UQI-LIUWJ ...
- 强化学习笔记: generalized policy iteration with MC
强化学习笔记: MDP - Policy iteration_UQI-LIUWJ的博客-CSDN博客 强化学习笔记:Q-learning_UQI-LIUWJ的博客-CSDN博客 在policy ite ...
最新文章
- 1、交换机ARP缓存表分析
- 【读】这一次,让我们再深入一点 - UDP协议
- 网络营销专员浅析现阶段下的几种网络营销推广方式
- 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘
- Express 入门之Router - worldtree_keeper的专栏 - CSDN博客
- lwip+freeRTOS 无法ping通的解决方案
- 6.6(java学习笔记)文件分割(IO综合例子)
- 识别浏览器的JavaScript引擎的方法
- 【正则表达式系列】零宽断言
- 一些不错的理论[转载]
- Chrome插件英雄榜(第二期)
- 关于s19赛季服务器维修,王者荣耀S19赛季版本更新问题及解决办法一览
- Host 'admin-PC' is not allowed to connect to this MySQL server
- Vue使用阿里iconfont图标
- eclipse合并svn分支方法
- 如何绘制变参数根轨迹(针对复杂情况,无法分离出开环增益k*时)
- MAK代理激活的使用方法和注意事项
- ArcGis 10.2运行提示“未授权”的解决方法
- 记录自己需要读的几本书
- 数据库身份证号用什么类型_为什么喝不同的茶要用不同类型的茶具?