Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >详解DDPG算法:解决对大量的超参数、随机重启、任务环境敏感问题,完成月球着陆器,双足机器人demo、以及超参数调优教学

详解DDPG算法:解决对大量的超参数、随机重启、任务环境敏感问题,完成月球着陆器,双足机器人demo、以及超参数调优教学

作者头像
汀丶人工智能
发布于 2023-10-11 09:46:42
发布于 2023-10-11 09:46:42
2.6K00
代码可运行
举报
文章被收录于专栏:NLP/KGNLP/KG
运行总次数:0
代码可运行

0.demo展示

当我复现强化学习算法 DDPG 时,我发现论文中缺少必要的实现细节,例如:Gamma、噪声方差、最大训练步数等参数的取值。此外,在我调整参数,成功完成某次训练后,当我对随机种子进行修改,发现训练时长有很大变化,甚至有时候无法完成训练。更别提把在某个任务上 work 的代码换到相似任务上的艰辛历程了。

如果你被这些问题困扰,那么你可能需要这份代码。由于我找不到符合我要求的轮子(2019-08),所以我只能自己造了,我认为这份代码解决了以上问题,符合以下要求:

  • 算法适用性广,适用于不同的任务(即便不做修改,也能完成不同的 Gym 的游戏)
  • 算法比较简单,代码可读性强(若某个结构加入后对性能提升小,那么删去此结构)
  • 算法训练时间短,训练稳定(训练时间不超过 1 小时,即使更换 RandomSeed)

通关双足机器人硬核版 (BipedalWalkerHardcore-v3), 训练比较快(旧记录是 10,000 + 轮) 使用 IntelAC 算法,

4106 轮,1960k 步,31 小时,单 GPU

(平均分 310,target reward 是 300) (不稳定,有时候需要训练 7000 轮,3000k 步,40 小时)

训练最快 4106 轮(用 IntelAC 算法通关双足机器人硬核版)BipedalWalkerHardcore-v3_哔哩哔哩 (゜ - ゜) つロ 干杯~-bilibili

此外,有一个的原创文章 kangaroo CreateAMind 在 2019-07-30 也通关了(使用了采用 state-of-the-art 的 model-free RL 算法 sac1,但是没有公布训练步数)(请注意:他们修改了 Reward 函数,将超时后 done=True 时的 - 100 改为 0),文章还分析了 OpenAI Leaderboard 上的两个解决了’BipedalWalkerHardcore-v2’ 的项目(分别是 A3C+LSTM 与 CMA-ES)。其中 A3C 需要开多个 agent 进行大量的异步交互,LSTM 可能是用来解决这个任务状态转移概率比较难以完整获取的问题。而 CMA-ES(Covariance Matrix 协方差 Adaptation Evolutionary Strategies 自适应遗传算法)则使用了 遗传算法,有它的帮助,在大量交互后,获得巨大优势的个体可以很快地扩散出去(比如学会了在方格上面跳的 Agent)。如果是工业界做机器人的的可不会轻易用这种两种算法,因为会报废掉很多机器人,详细内容去看他们公众号写的文章吧,写得不错:

结果出乎我的意料,经过大刀阔斧的修改后,这份代码竟然在 OpenAI 官方的排行榜 Leaderboard 上的 3 个项目都拿了靠前的名次(使用更少的训练步数达到目标分数),如下:

Yonv1943/ElegantRL

上面的代码参考了「GitHub, nikhilbarhate99 TD3 算法」,删去了 TD3 的双 actor 结构,然后把 Actor-Critic 框架当成 Generator-Discriminator 框架去训练,具体请看:

它可以不对模型进行任何修改的情况下,在下面几个 OpenAI-gym 的开游戏中,达到通关条件(硬件 RTX 2080Ti):

  • 月球着陆器:训练 114 轮,1231 秒(LunarLanderContinuous-v2 ,连续动作)
  • 月球着陆器:训练 147 轮,1487 秒(LunarLander-v2 ,离散动作)
  • 双足机器人:训练 165 轮,2011 秒(BipedalWalker-v2)
  • 双足机器人:训练 4096 轮,28,143 秒(BipedalWalkerHardcore-v2,硬核版)平均分 244,无法达到通关条件平均分 300,若有人找到了通关此游戏的开源代码,请告诉我
  • 正文目录
    1. 原版 DDPG 的三个「敏感」:对大量的超参数、随机重启、任务环境敏感。
    2. 改良 DDPG,克服「敏感」:使用延迟更新,并总结超参数选择方法
    3. 如何选择强化学习的超参数:Gamma 值,训练步数,噪声方差
    4. 适应连续、离散的动作
    5. 适应不同的环境参数

1.原版 DDPG 的三个「敏感」:对大量的超参数、随机重启、任务环境敏感。

对**「敏感」**条件稍作修改,便会显著影响任务训练时间,甚至无法完成任务。我认为以 DDPG 为代表的 Actor-Critic 强化学习框架是具有美感的模型,让我想起了 2014 年的对抗网络(GANs),在 2015 年 GANs 刚出来的时候,也和 DDPG 一样,训练的时候非常不稳定。我想要为解决这个问题出一份力。对此的讨论请移步姊妹篇:xxxx

随机重启:换用 随机种子 random seed,会使得训练时间出现波动,甚至无法收敛。根据我的观察**(猜测)**,若训练初期,误打误撞地出现了几次成功案例,那么智能体便得以快速地通关;若训练前期没有出现成功案例,那么对于一个没有好奇心的智能体,它就需要更长的训练时间,甚至会陷入自暴自弃的境地,此时增长训练时间并不能完成训练。

任务环境:通关「月球着陆器」的代码,需要进行新一轮的参数调整,才能通关「双足机器人」;通关「月球着陆器(连续版)」的代码,竟无法通关「月球着陆器(离散版)」。

大量敏感的超参数

  • explore noise:探索时,需要为动作添加的噪声,此噪声的方差
γ

\gamma gamma:对动作进行估值时,下一步动作的价值所占权重

τ

\tau tau:软更新时,该值越小,更新越 “软”

R(m)

R^{(m)} m:记忆回放缓存的记忆容量 m (memory size)

R(n)

R^{(n)} n:记忆回放时,进行抽样的批次大小 (batch size)

MaxStep

MaxStep :最大步数,若探索步数超过此最大值,则刷新环境,重新开始

  • 对神经网络的超参数敏感:简单的任务不能用参数过多的神经网络

对应的算法如下:

=== 算法:策略梯度算法(DDPG 论文原文 ICLR 2016 [1])===

  • 建立两个网络:评价网络
Q(s,a|θQ)

Q(s,a|\theta^{Q}) 以及策略网络

μ(s|θμ)
θQ=RandomInit(Q),θμ=RandomInit(μ)

随机初始化网络的参数

复制得到完全相同的两个目标网络

(用于软更新)

初始化记忆回放缓存,m 为记忆容量

  • For e=1, 最大训练次数 do

初始化环境,并得到初始状态

\quad For t=1, 最大步数 do

选择动作

添加噪声,进行探索

与环境进行交互,得到状态与收益

保存到记忆 R 里面

从记忆中抽样

使用评估网络进行对动作进行估值

\qquad 更新 评估网络 与 策略网络 的参数

\qquad \mathcal{L}_{Q} = \frac{1}{n}\sum^n_i \big( y_i - Q(s_i,a_i|\theta^{Q}) \big)^2 \quad 计算估值与记忆的差别

根据梯度更新参数

软更新目标评价网络的参数

软更新目标策略网络的参数

输出目标动作网络

翻译约定:

  • Actor Network 策略网络(演员:根据策略输出动作)
  • Critic Network 评估网络(评论家:根据状态,评估动作的价值)
  • soft update 软更新
  • replay buffer 记忆回放缓存

2.解决 DDPG 的三个「敏感」

我参考了其他开源代码,得到了 DelayDDPG,因为它与原版 DDPG 相比,最大的不同是:它采用了延迟更新、软更新、设置更新间隔,科学计算超参数的方法,这使得强化学习算法变稳定。

**2.1 为何延迟更新,可以使强化学习算法变得更加稳定?**举月球登录器为例,我是这样解释的:现在有两种登陆的策略:

  • 稳妥策略(降低月球登录器的移动速度,慢慢靠近地面,防止坠毁
  • 激进策略(只通过喷气维持平衡,接近地面时发动机全开,节省燃料

这两种策略,都可以达到任务要求(任务要求:在连续的 100 次任务中,平均分超过 200,安全着陆且节省燃料会得到高分)。若当前状态 state 是:月球登陆器以较快的速度往下掉落,但是登录器姿态平稳,并且其距离地面还有一段距离。而策略网络的动作 action 是:不喷气,让它自由落体。那么此时 评估网络 应给这个 state-action 一个怎样的分数?

  1. 给低分惩罚,不喷气会增大坠毁风险,要稳一点(稳妥策略)
  2. 给高分鼓励,不喷气能节省燃料,我可以浪(激进策略)

我认为,只有当评估网络和策略网络采用相同的策略,对智能体的训练才能足够稳定,评估网络对于一个同一个 state-action 可以在训练的不同时期有不同的评估结果,但是在某一段时期内,一定要稳定,不应该发生太大的改变(陟罚臧否,不宜异同)。相比于原版 DDPG,DelayDDPG 修改了参数的更新方法,如图:

**2.2 「延迟更新」**可以稳定评估网络对 state-action 的判断。如果评估网络不断地变换战略目标,那么策略网络作为动作的实行者,将会陷入混乱。若每轮训练开始前,我先把策略网络固定下来(采用相同的策略)。等这一轮训练完成后,我再进行回忆,然后提升评估的精度,并修改我的策略。

稳定的训练过程,能够少走弯路,最终降低平均训练时间。我们可以看到一些改良算法也是这么做的。如:TRPO(Trust Region Policy Optimization),为了保证策略梯度的每一次优化,都能使网络变得更好,因此要保证在合适的步内进行参数更新,那么在这个合适的步长内内达到的区域就是信任域(Trust Region) 。只要在信任域内进行策略的更新,就能保证策略稳定(更新前后,策略不会剧变)。后来的近端策略优化(PPO:Proximal Policy Optimization,2017)是对 TRPO 的改进版本,利用近似,简化了计算,成为了强化学习的一个基线模型(baseline)。

还有很多稳定训练的技巧(「设置更新间隔 update gap」「使用软更新 soft update」,这些方法不等同于减少学习率),我也都用到了 DelayDDPG 算法中去:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"""算法:延迟策略梯度算法(DelayDDPG)"""
随机初始化 策略网络Act()评估网络Cri()
为了软更新,因此我们复制得到一模一样的两个目标网络 Act'() 与 Cri'()
选择合适的损失函数 Criterion()
初始化记忆缓存R,设置最大记忆容量为m

for e in range(最大训练次数):
  s = env.reset() 初始化环境,得到初始状态s
  for t in range(最大步数):
    a = Act(s) 让策略网络根据状态输出动作
    a += explore_noise 在探索环境时添加噪声(epsilon-Greedy)
    s_, r, done = env.step(a) 与环境交互,得到收益与状态,任务结束时done==True
    R.store(s, r, done, a, s_) 将这些经历保存到记忆中去
    s = s_ 更新当前状态
    if done: break 若任务结束,则开始下一轮训练
  for i in range(t):  # 此处即 DelayDDPG 中的「延迟更新」
    s, r, done, a, s_ = R.sample(n) 每次从记忆中取出批次大小为n的记忆进行训练
    a_ = Act'(s_)  让目标策略网络得到下一步的动作
    a_ += polic_noise 在评估策略时,为下一步的动作添加噪声(epsilon-Greedy)
    
    q_target = r + (1-done) * gamma * Cri'(s_, a_) 使用目标评估网络评估接下来的动作
    q_eval = Cri(s, a) 将评估网络的结果与记忆对比
    Cri.update(argmin(Criterion(q_eval, q_target))) 最小化评估网络的预测误差

    a = Act(s) 离线学习,而不是通过与环境的直接交互去学习(与环境隔了一个评估网络)
    Act.update(argmax(Cri(s, a))) 最大化评估网络的估值,使用评估网络提供的梯度对策略进行优化

    update_counter += 1
    if update_counter == update_gap: 每隔一段时间,对两个目标网络进行软更新
      update_counter = 0
      Act'.p = tau * Act.p + (1-tau)*Act'.p
      Cri'.p = tau * Cri.p + (1-tau)*Cri'.p

  if r > target_reward: break 如果达到目标分数,那么训练终止
Save(Act')  训练完成后,保存目标策略网络,作为算法的输出结果

3. 如何选择强化学习的超参数?


我将代码中所有超参数都分离出来,放在 class Arguments 中,并给出了默认值。选择超参数前,你需要需要推测你的模型的**「每轮训练的步数」**。不需要准确估计,只需要数量级对得上就可以。尽管数量级是以 10 为底数,但是请注意,下面我使用 2 作为底数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
以月球登录器为例,我们可以使用未经训练的模型,测得坠毁需要的步数:
[68,142,72,99,73,89,197,59,88,59,92,93,64,81] ~= 912 ** 7)
那么我们猜测,平稳降落需要的步数将会和坠毁需要的步数处在相同数量级,也是2 ** 7

根据「每轮训练的步数 S」来制定多个超参数。以月球登录器为例,S 取 128(2**7)

3.1 「gamma」

*决策网络会做出让评估网络给出高评分的动作,评分的计算会使用到 gamma。为了体现决策的连续性,我们希望决策网络根据状态 state 选择动作 action 时,不仅要考虑这一步的收益,也要考虑这么做之后接下去几步的收益(下一步的局势)。根据 gamma 计算出来的 q 值,代表了这一步的质量(quality)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q_target = r + gamma * Cri'(s_, a_)
q_eval   = Cri(s, a)
然后训练评估网络Cri(),使得 q_eval 接近于 q_target

令 q0 = Cri(s, a) ~= r0 + gamma * Cri'(s_, a_)
有 q1 = Cri(s_, a_) = r1 + gamma * Cri'(s__, a__)
则 q0 = r0 + gamma * Cri'(s_, a_)
      = r0 + gamma * q1
      = r0 + gamma * (r1 + gamma * q2)
      = r0 + gamma * (r1 + gamma * (r2 + gamma * q2))
      ... 迭代 ...
      = r0*gamma**0 + r1*gamma**1 + r2*gamma**2 + ... + rt*gamma**t
      = sum([r*gamma*i for i, r in enumrate(r_list)])

对于有通关条件的任务(如:安全降落 + 100 分,坠毁 - 100 分),其训练的最后一步是否完成任务是非常重要的。如下方图左,Gamma 值越大,就越能预见更遥远的未来。此处可以看出,在这个任务中,将 Gamma 取值为 0.99 是合适的。如下方的右图蓝色折线:从浅蓝色的第 300 步可以看出这是一次失败的降落(-100),而当 Gamma 取值为 0.99 时,一个好的评估网络应该在第 150 步之前就已经提前意识到局势危急(bad state),因而在接下去的训练中,评估网络可以很好地指导策略网络,让策略网络在坠毁的前 150 步就及时地意识到自己的错误,此时采取挽救措施还来得及。在此任务中,过小的 Gamma 值(如 0.9)将使评估网络无法及时地预见未来的事件,等到大难临头才向策略网络发出预警就来不及了。

如果 Gamma 值过大也不行,因为距离现在越远,评估网络对未来的预测精度越低,其预测结果越不可信,因此我们有必要加上一个小于 1 的 gamma 值降低遥远未来的权重。有兴趣的话,可以将 Gamma 值取最大值 1.0 体验一下。

3.2 根据「每轮训练的步数 S」

计算出合适的 Gamma 值我需要使策略网络做出判断的时候,考虑关键步骤的分数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在某轮训练中的某一步的q值为 q0,则有:
q0 = r0*gamma**0 + r1*gamma**1 + r2*gamma**2 + ... + rt*gamma**t (由前面推出)
其中,t步之后的reward 在q0 中体现为 rt * gamma**t

若t取值为「每轮训练的步数S== 128128为估计值)
若该项系数 gamma**t == 0.50, 那么 0.50 ** (1/t) ==  0.5 ** (1/128) ~= 0.994 
若该项系数 gamma**t == 0.10, 那么 0.10 ** (1/t) ==  0.5 ** (1/128) ~= 0.982 # notic
若该项系数 gamma**t == 0.01, 那么 0.01 ** (1/t) ==  0.5 ** (1/128) ~= 0.964 

若t取值为「每轮训练的步数S== 400400为实际值)
若该项系数 gamma**t == 0.50, 那么 0.50 ** (1/t) ==  0.5 ** (1/400) ~= 0.998 
若该项系数 gamma**t == 0.10, 那么 0.10 ** (1/t) ==  0.5 ** (1/400) ~= 0.994 # notic
若该项系数 gamma**t == 0.01, 那么 0.01 ** (1/t) ==  0.5 ** (1/400) ~= 0.988

可见,若希望 S 步后将出现的关键节点的权重为一个接近 0.1 的数,那么 gamma 值的合理区间应为 0.982~0.994,因此我在月球登陆器这个任务中,选择 0.99 作为默认值。总的来说,对 gamma 值进行调整,目的是使 q 值曲线尽可能平稳,如上图左所示,橙色曲线 gamma 值过小(gamma==0),曲线陡峭,调整后的折线两端平衡**,不会在关键节点出现极端值**。另外,如果 gamma 值过大,而评估网络的预测能力较弱(特别在复杂任务下),那么对 q 值的不准确的估计会影响策略网络的训练。因此我们需要在明确物理意义后,按照上面的计算方法去确定 gamma 值,而不是像炼丹一样去调参。条件允许的情况下,还是要尽可能举起数学的火炬照亮前方的路。

3.3 「记忆容量」

是记忆回放缓存中存放的最大记忆容量,若超过最大值,那么程序会自动会删除旧的记忆以维持容量稳定。每轮训练结束后需要通过梯度下降更新参数,更新次数为本轮训练的步数。若希望每轮训练结束后,将记忆中的所有数据都被拿出来训练,则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
记忆容量 memories_size = 本轮训练的步数 * batch_size ~= S * batch_size 

3.4 「最大训练步数」

若每轮训练步数超过最大值,则强行终止,并判定为任务失败,进入参数更新步骤。如果不设置最大训练步数,那么可能会训练出一个磨磨蹭蹭的智能体,如:就差一步就到终点了,但是它就是不完成任务。则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
最大训练步数 max_step = S * 10

3.5 「探索噪声的方差」

原版 DDPG 只有探索噪声,它在与环境交互,收集训练数据存放到记忆里面时,为动作添加了噪声,促使智能体多探索未知(低阶的、被动的好奇)。

3.6 「策略噪声的方差」

在探索结束后,训练开始了,从记忆里面取出数据进行训练时,在计算 q 值的时候,也添加了噪声,促使智能体做出更加稳重的动作。

举例子,训练一个智能体过桥:距离远的桥,有宽阔的桥面;距离近的桥,桥面狭窄而没有护栏。河面以下有猛萌的黎曼鲲,掉下去后,除非证明出ζ(s) 函数的所有非平凡零点都位于临界线上,否则就会被吃掉。到达终点会,并且走的路程短就会得到奖励。那么我要如何选择两个方差呢?

可以看到,选择了大的噪声方差,会让智能体选择稳妥策略(即:加了噪声也不会掉河里),始终走在安全的地方,这样的好处是评估网络对 q 值的估计变得更加准确了,训练变得更加稳定。但是过大的噪声无法训练出采用激进策略的智能体——即便智能体以精细微操走在窄桥正中间,也无济于事,在大噪声的影响下,它还是会掉河里。如果选择了小的方差,那么我们可以训练出走橙色路径的智能体(激进策略),训练也会变得不稳定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                 经验值         激进策略 稳妥策略
「探索噪声的方差」 explore_noise 0.4       0.1
「策略噪声的方差」 policy_nose   0.8       0.2

4. 适应连续、离散的动作

OpenAI 的 gym 刚好有两个用 Box2D 模拟的环境,动作空间为连续与离散,如下:

  • 连续动作,LunarLanderContinuous-v2,action 为两个闭区间内的浮点数,控制两对发动机,符号决定喷射方向,绝对值决定喷射力度。
  • 离散动作,LunarLander-v2,action 为一个整数(可为 0,1,2,3),控制四个发动机,被选中的发动机将会喷气。

我选择让策略网络输出一串浮点数矢量(闭区间),可以直接作为连续动作,也可以转换为离散动作。为了方便添加噪声,我在训练阶段使用「轮盘赌」,测试阶段使用「锦标赛」。这两个词在讨论「遗传算法 Genetic Algorithm」时会出现:

  • 连续动作:
  • 离散动作:
  • 直接选择最大的数(锦标赛):
  • 按照概率随机选择(轮盘赌):

写成实际代码的时候,需要进行归一化处理与极小值处理,修改后的轮盘赌为:

a^{cont.}_i &= a^{cont.}_i - \min(a^{cont.}_i) + \epsilon

a^{cont.}_i &=a{cont.}_i\sum_{i=1}na^{cont.}_i \ a^{disc} &= RandomChoiceByProb(a^{cont.}_i)

其中,如果是 32 位浮点数(24 位数值),阿年 epsilon 取一个极小值为

= 0.00001 ;此外,

。因而,代码中的相关函数为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def adapt_action(action, action_max, action_dim, is_train):
    """
    action belongs to range(-1, 1), makes it suit for env.step(action)
    :return: state, reward, done, _
    """
    if action_max:  # action_space: Continuous
        return action * action_max
    else:  # action_space: Discrete
        if is_train:
            action_prob = action + 1.00001
            action_prob /= sum(action_prob)
            return rd.choice(action_dim, p=action_prob)
        else:
            return np.argmax(action)

5. 适应不同的游戏环境

让程序通过接口 自行读取环境参数。例如:程序可以会自行向 gym 的环境确认动作空间的取值范围、数量、连续或者离散,然后自行去适应它,不需要手动修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
env.make('ENV_NAME')

env.spec.reward_threshold # 通关目标,target_reward
env.observation_space.xxx # 状态空间,state
env.action_space.xxx      # 动作空间,action
...

目前我们的代码可以自行适配多个环境,如果受到更多的关注(Github 有很多星星、或者知乎有很多点赞),那么我会推出其他版本的。甚至把近端策略优化 Proximal Policy Optimization 也加进去(PPO 是在线策略,而 DDPG 是离线策略)。

参考

  1. ^Continuous Control with Deep Reinforcement Learning ICLR 2016 https://arxiv.org/pdf/1509.02971.pdf
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
离散动作与连续动作是相对的概念,一个是可数的,一个是不可数的。 如图 7.1 所示,离散动作和连续动作有几个例子。在 CartPole 环境中,可以有向左推小车、向右推小车两个动作。在 Frozen Lake 环境中,小乌龟可以有上、下、左、右4个动作。在雅达利的 Pong 游戏中,游戏有 6 个按键的动作可以输出。但在实际情况中,我们经常会遇到连续动作空间的情况,也就是输出的动作是不可数的。比如:推小车推力的大小、选择下一时刻方向盘转动的具体角度、给四轴飞行器的4个螺旋桨给的电压的大小。
汀丶人工智能
2023/10/11
1.5K0
强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
强化学习方法小结
在介绍强化学习算法之前先介绍一个比较重要的概念,就是Bellman方程,该方程表示动作价值函数,即在某一个状态下,计算出每种动作所对应的value(或者说预期的reward)。
marsggbo
2019/12/23
7080
强化学习方法小结
强化学习(十六) 深度确定性策略梯度(DDPG)
    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Critic难收敛的问题,这个算法就是是深度确定性策略梯度(Deep Deterministic Policy Gradient,以下简称DDPG)。
刘建平Pinard
2019/03/05
5.5K0
强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
深度确定性策略梯度(deep deterministic policy gradient,DDPG):在连续控制领域经典的强化学习算法,是深度Q网络在处定性”表示其输出的是一个确定的动作,可以用于连续动作环境;“策略梯度”代表的是它用到的是策略网络,并且每步都会更新一次,其是一个单步更新的策略网络。其与深度Q网络都有目标网络和经验回放的技巧,在经验回放部分是一致的,在目标网络的更新上有些许不同。
汀丶人工智能
2023/06/27
3600
DDPG 算法
对于这些连续的动作控制空间,Q-learning、DQN 等算法是没有办法处理的。那我们怎么输出连续的动作呢,这个时候,万能的神经网络又出现了。在上面这个离散动作的场景下,比如说我输出上下或是停止这几个动作。有几个动作,神经网络就输出几个概率值,我们用
全栈程序员站长
2022/07/02
1.8K0
DDPG 算法
强化学习基础篇3:DQN、Actor-Critic详细讲解
在之前的内容中,我们讲解了Q-learning和Sarsa算法。在这两个算法中,需要用一个Q表格来记录不同状态动作对应的价值,即一个大小为 $状态个数,动作个数$ 的二维数组。在一些简单的强化学习环境中,比如迷宫游戏中(图1a),迷宫大小为4*4,因此该游戏存在16个state;而悬崖问题(图1b)的地图大小为 4*12,因此在该问题中状态数量为48,这些都属于数量较少的状态,所以可以用Q表格来记录对应的状态动作价值。但当我们需要应用强化学习来解决实际问题时,比如解决国际象棋问题或围棋问题,那么环境中就会包含 $10^{47}$ 个state或 $10^{170}$ 个state,如此庞大的状态数量已经很难用Q表格来进行存储,更不要说在3D仿真环境中,机器人手脚弯曲的状态是完全不可数的。由此可以看到Q表格在大状态问题和不可数状态问题时的局限性。同时,在一个强化学习环境中,不是所有的状态都会被经常访问,其中有些状态的访问次数很少或几乎为零,这就会导致价值估计并不可靠。
汀丶人工智能
2023/06/03
2.3K0
强化学习基础篇3:DQN、Actor-Critic详细讲解
强化学习算法TD3论文的翻译与解读:延迟学习、软更新、策略噪声、梯度截取
强化学习算法 TD3 论文:Addressing Function Approximation Error in Actor-Critic Methods 2018.10. ,作者本人的 TD3 代码,PyTroch 实现
汀丶人工智能
2023/10/11
2.1K0
强化学习算法TD3论文的翻译与解读:延迟学习、软更新、策略噪声、梯度截取
强化学习调参技巧二:DDPG、TD3、SAC算法为例:
强化学习里的 env.reset() env.step() 就是训练环境。其编写流程如下:
汀丶人工智能
2022/12/21
3.4K0
强化学习调参技巧二:DDPG、TD3、SAC算法为例:
深度强化学习-DDPG算法原理和实现
基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基于这种思想我们就引出了强化学习中另一类很重要的算法,即策略梯度(Policy Gradient)。之前我们已经介绍过策略梯度的基本思想和实现了,大家可以有选择的进行预习和复习:
用户1332428
2023/03/28
9750
深度强化学习-DDPG算法原理和实现
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Steve Wang
2019/10/22
6980
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
Keras和DDPG玩赛车游戏(自动驾驶)
这里,s是状态,a是行为/动作,θ是策略网络的模型参数,π是常见的表示策略的符号。我们可以设想策略是我们行为的代理人,即一个从状态到动作的映射函数。
CreateAMind
2018/07/24
1.7K0
Keras和DDPG玩赛车游戏(自动驾驶)
【深度学习】强化学习(五)深度强化学习
  强化学习的基本任务是通过智能体与环境的交互学习一个策略,使得智能体能够在不同的状态下做出最优的动作,以最大化累积奖励。这种学习过程涉及到智能体根据当前状态选择动作,环境根据智能体的动作转移状态,并提供即时奖励的循环过程。
Qomolangma
2024/07/30
4440
【深度学习】强化学习(五)深度强化学习
强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解
以及一个初始的演员与环境交互、收集数据以及反馈。通过每一步得到的反馈,我们进一步更新我们的策略
汀丶人工智能
2023/10/11
3950
DDPG强化学习的PyTorch代码实现和逐步讲解
来源:Deephub Imba本文约4300字,建议阅读10分钟本文将使用pytorch对其进行完整的实现和讲解。 深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)是受Deep Q-Network启发的无模型、非策略深度强化算法,是基于使用策略梯度的Actor-Critic,本文将使用pytorch对其进行完整的实现和讲解。 DDPG的关键组成部分是 Replay Buffer Actor-Critic neural network Explorati
数据派THU
2023/04/05
8690
DDPG强化学习的PyTorch代码实现和逐步讲解
【强化学习】理论知识整理汇总
本篇旨在总结强化学习相关术语,主要参考了邹伟等人所著的《强化学习》(清华大学出版社)这本书。
zstar
2022/06/14
8740
【强化学习】理论知识整理汇总
Python深度强化学习智能体DDPG自适应股票交易策略优化道琼斯30股票数据可视化研究
股票交易策略在投资公司中起着至关重要的作用。然而,在复杂多变的股票市场中获取最优策略颇具挑战。本文探索深度强化学习在优化股票交易策略以实现投资回报最大化方面的潜力。选取 30 只股票作为交易标的,其每日价格作为训练和交易的市场环境。训练深度强化学习智能体以获得自适应交易策略,并将其性能与道琼斯工业平均指数和传统最小方差投资组合配置策略进行评估比较。结果表明,所提出的深度强化学习方法在夏普比率和累计回报方面均优于这两个基准。
拓端
2024/11/27
1740
Python深度强化学习智能体DDPG自适应股票交易策略优化道琼斯30股票数据可视化研究
强化学习(十四) Actor-Critic
    在强化学习(十三) 策略梯度(Policy Gradient)中,我们讲到了基于策略(Policy Based)的强化学习方法的基本思路,并讨论了蒙特卡罗策略梯度reinforce算法。但是由于该算法需要完整的状态序列,同时单独对策略函数进行迭代更新,不太容易收敛。
刘建平Pinard
2019/02/22
9790
强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
策略最简单的表示是查找表(look-up table),即表格型策略(tabular policy)。使用查找表的强化学习方法称为表格型方法(tabular method),如蒙特卡洛、Q学习和Sarsa。本章通过最简单的表格型方法来讲解如何使用基于价值的方法求解强化学习问题。
汀丶人工智能
2023/10/11
1K0
强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
深度强化学习-DDPG算法原理和实现
在之前的几篇文章中,我们介绍了基于价值Value的强化学习算法Deep Q Network。有关DQN算法以及各种改进算法的原理和实现,可以参考之前的文章: 实战深度强化学习DQN-理论和实践 DQN三大改进(一)-Double DQN DQN三大改进(二)-Prioritised replay DQN三大改进(三)-Dueling Network 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基
石晓文
2018/04/11
2.4K0
深度强化学习-DDPG算法原理和实现
强化学习算法总结(一)——从零到DQN变体
中对应价值最大的动作的Q值进行更新,注意这里只是更新,并不会真的执行这个价值最大的动作。这里的更新策略(评估策略)与我们的行为策略(
CristianoC
2021/04/16
2.7K0
强化学习算法总结(一)——从零到DQN变体
推荐阅读
强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
1.5K0
强化学习方法小结
7080
强化学习(十六) 深度确定性策略梯度(DDPG)
5.5K0
强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
3600
DDPG 算法
1.8K0
强化学习基础篇3:DQN、Actor-Critic详细讲解
2.3K0
强化学习算法TD3论文的翻译与解读:延迟学习、软更新、策略噪声、梯度截取
2.1K0
强化学习调参技巧二:DDPG、TD3、SAC算法为例:
3.4K0
深度强化学习-DDPG算法原理和实现
9750
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
6980
Keras和DDPG玩赛车游戏(自动驾驶)
1.7K0
【深度学习】强化学习(五)深度强化学习
4440
强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解
3950
DDPG强化学习的PyTorch代码实现和逐步讲解
8690
【强化学习】理论知识整理汇总
8740
Python深度强化学习智能体DDPG自适应股票交易策略优化道琼斯30股票数据可视化研究
1740
强化学习(十四) Actor-Critic
9790
强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
1K0
深度强化学习-DDPG算法原理和实现
2.4K0
强化学习算法总结(一)——从零到DQN变体
2.7K0
相关推荐
强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档