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相关推荐

  1. 莫烦强化学习笔记整理(九)DDPG

    莫烦强化学习笔记整理(九)DDPG 1.DDPG 要点 2.DDPG 算法 actor critic actor与critic结合 类似于DQN的记忆库 回合更新 链接: DDPG代码. 1.DDPG ...

  2. 强化学习笔记 DDPG (Deep Deterministic Policy Gradient)

    1 总述 总体来讲,和actor-critic 差不多,只不过这里用了target network 和experience relay 强化学习笔记 experience replay 经验回放_UQ ...

  3. 强化学习笔记-强化学习概述

    强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...

  4. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  5. 142页ICML会议强化学习笔记整理,值得细读

    作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...

  6. 强化学习笔记:Q_learning (Q-table)示例举例

    1 示例介绍 在右侧有宝藏,探险者到达宝藏所在的位置,就可以获得奖励 比如某一时刻的状态是这个样子的:"-o---T" T 就是宝藏的位置, o 是探索者的位置 如果在某个地点 s ...

  7. 强化学习笔记:Actor-critic

    0 复习 由于actor-critic 是 policy gradient 和DQN的一个结合,所以我们先对这两个进行一个简单的复习: 0.1 policy gradient 强化学习笔记:Polic ...

  8. 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】

    1 前言 我们回顾一下policy network: 强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客 它先去跟环境互动,搜集很多的 路径τ.根据它搜集 ...

  9. 强化学习笔记:Sarsa算法

    1 Sarsa(0) Sarsa算法和TD类似,只不过TD是更新状态的奖励函数V,这里是更新Q函数强化学习笔记:Q-learning :temporal difference 方法_UQI-LIUWJ ...

  10. 强化学习笔记: generalized policy iteration with MC

    强化学习笔记: MDP - Policy iteration_UQI-LIUWJ的博客-CSDN博客 强化学习笔记:Q-learning_UQI-LIUWJ的博客-CSDN博客 在policy ite ...

最新文章

  1. 1、交换机ARP缓存表分析
  2. 【读】这一次,让我们再深入一点 - UDP协议
  3. 网络营销专员浅析现阶段下的几种网络营销推广方式
  4. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学C组 - D.相乘
  5. Express 入门之Router - worldtree_keeper的专栏 - CSDN博客
  6. lwip+freeRTOS 无法ping通的解决方案
  7. 6.6(java学习笔记)文件分割(IO综合例子)
  8. 识别浏览器的JavaScript引擎的方法
  9. 【正则表达式系列】零宽断言
  10. 一些不错的理论[转载]
  11. Chrome插件英雄榜(第二期)
  12. 关于s19赛季服务器维修,王者荣耀S19赛季版本更新问题及解决办法一览
  13. Host 'admin-PC' is not allowed to connect to this MySQL server
  14. Vue使用阿里iconfont图标
  15. eclipse合并svn分支方法
  16. 如何绘制变参数根轨迹(针对复杂情况,无法分离出开环增益k*时)
  17. MAK代理激活的使用方法和注意事项
  18. ArcGis 10.2运行提示“未授权”的解决方法
  19. 记录自己需要读的几本书
  20. 数据库身份证号用什么类型_为什么喝不同的茶要用不同类型的茶具?

热门文章

  1. 百度初级认证考试知识点
  2. 嗅探工具 --- wireshark、tcpdump、dsniff、ettercap、bettercap、netsniff-ng
  3. 网线转RS232如何接线
  4. python求函数零点,在函数零点问题中求解参数范围
  5. 台湾移动互联网为什么跑慢了?
  6. 在香港用什么软件可以唱歌?香港K歌app推荐
  7. 计算机地图制图的论文,计算机地图制图实习报告.doc
  8. 稚辉君的Clion搭建STM32教程的自己实现,以及相关记录
  9. 微信公众号开发(个人订阅号)
  10. 用Python绘制杨紫作品集动态二维码