强化学习的数学基础4---Q-Learning进阶
笔记整理自李宏毅老师的公开课
Asynchronous Advantage Actor-Critic (A3C)
回顾Policy Gradient的梯度参数:
∇Rˉθ≈1N∑n=1N∑t=1Tn(∑t′=tTnrt′−trt′n−b)∇logpθ(atn∣stn)\nabla \bar{R}_{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_n}\left(\sum_{t^{'}=t}^{T_n}r^{t^{'}-t_{r^{n}_{t^{'}}}}-b\right)\nabla\log{p_{\theta}(a_{t}^{n}|s_{t}^{n})} ∇Rˉθ≈N1n=1∑Nt=1∑Tn⎝⎛t′=t∑Tnrt′−trt′n−b⎠⎞∇logpθ(atn∣stn)
如果令Gtn=∑t′=tTnrt′−trt′nG_{t}^{n}=\sum_{t^{'}=t}^{T_n}r^{t^{'}-t_{r^{n}_{t^{'}}}}Gtn=∑t′=tTnrt′−trt′n,GtnG_t^{n}Gtn是Actor跟环境互动而来的,那么GGG则会使不稳定的。因为数值本身具有随机性,而且环境也有随机性。不过,如果我们sample足够多的次数,那么均值会比较稳定。
其实,本质上来说,有下面的公式成立:
E[Gtn]=Qπθ(stn,atn)E\left[G_{t}^{n}\right]=Q^{\pi_{\theta}}(s_t^{n},a_t^{n}) E[Gtn]=Qπθ(stn,atn)
那么问题转换成了求解Qπθ(stn,atn)Q^{\pi_{\theta}}(s_t^{n},a_t^{n})Qπθ(stn,atn);同时,bbb可以用Vπθ(stn)V^{\pi_{\theta}}(s_t^{n})Vπθ(stn)进行表示。但是,这样做的缺点在于,我们需要估计QπQ^\piQπ和VπV^\piVπ这两个神经网络,这样的训练量大,而且结果不稳定。引入一个代换法则:
Qπ(stn,atn)=E[rtn+Vπ(st+1n)]Q^\pi\left(s_t^n,a_t^n\right)=E\left[r_t^n+V^\pi\left(s_{t+1}^n\right)\right] Qπ(stn,atn)=E[rtn+Vπ(st+1n)]
实际使用时,可以去掉期望值,原作者的Paper实验这样做的效果比较好。
Qπ(stn,atn)=rtn+Vπ(st+1n)Q^\pi\left(s_t^n,a_t^n\right)=r_t^n+V^\pi\left(s_{t+1}^n\right) Qπ(stn,atn)=rtn+Vπ(st+1n)
可以这么理解,QQQ的意思是为了表示sts_tst状态下,采取行动ata_tat后会获得的所有的奖励总和,那么和自然,这个公式可以表示成当前这一步行动的奖励rtr_trt累加上下一个状态的奖励VVV。rrr是个随机值,由环境等的因素共同决定,这也是这个模型的缺点,由随机值的影响。
那么,最终的梯度可以表示为:
∇Rˉθ≈1N∑n=1N∑t=1Tn(rtn+Vπ(st+1n)−Vπ(stn))∇logpθ(atn∣stn)\nabla \bar{R}_{\theta}\approx \frac{1}{N}\sum_{n=1}^{N}\sum_{t=1}^{T_n}\left(r_t^n+V^\pi(s^n_{t+1})-V^\pi(s^n_t)\right)\nabla\log{p_{\theta}(a_{t}^{n}|s_{t}^{n})} ∇Rˉθ≈N1n=1∑Nt=1∑Tn(rtn+Vπ(st+1n)−Vπ(stn))∇logpθ(atn∣stn)
训练时候的QQQ和VVV网络可以共享前面几层的参数,只是在最后输出的时候,变换到不同的网络层中。训练的时候,可以使用输出参数的交叉熵作为π(s)\pi(s)π(s)的参数,那么交叉熵越大,说明越需要进行Exploration。
A3C是同时开多个环境进行产生数据,并不断更新。
Pathwise Derivative Policy Gradient
在之前的QπQ^\piQπ网络中,我们输入一个游戏状态sss和一个行动aaa,时候会得到一个Qπ(s,a)Q^\pi(s,a)Qπ(s,a)作为输出。而该方法的特别之处在于,专门产生一个Actorπ\piπ网络用于生成行动aaa,这样,一个网络的输出就会作为另一个网络的输入。训练的时候,需要先训练QπQ^\piQπ网络,之后固定住该网络,再去训练π\piπ网络。
那么,Actor网络的梯度是:
θπ′=θπ+η∇θπQπ(s,a)\theta^{\pi^{'}}=\theta^\pi+\eta\nabla_{\theta^\pi}Q^\pi(s,a) θπ′=θπ+η∇θπQπ(s,a)
给出一般性的算法:
- 初始化Q-function QQQ,target Q-function Q^=Q\hat{Q}=QQ^=Q,actor π\piπ,target actor π^=π\hat{\pi}=\piπ^=π
- 在每个episode中:
- 对于每一步
- 给定一个状态sts_tst,基于π\piπ采取行动ata_tat,注意这里需要Exploration
- 获得一个奖励rtr_trt,并到达一个新的状态st+1s_{t+1}st+1
- 把(si,ai,ri,si+1)(s_i,a_i,r_i,s_{i+1})(si,ai,ri,si+1)存储到buffer中
- 从buffer中随机获取一个批次的(si,ai.ri,si+1)(s_i,a_i.r_i,s_{i+1})(si,ai.ri,si+1)
- 目标函数y=ri+Q^(si+1,π^(si+1))y=r_i+\hat{Q}(s_{i+1},\hat{\pi}(s_{i+1}))y=ri+Q^(si+1,π^(si+1))
- 更新QQQ的参数,使得Q(si,ai)Q(s_i,a_i)Q(si,ai)接近yyy
- 更新π\piπ的参数去最大化Q(si,π(si))Q(s_i,\pi(s_i))Q(si,π(si))
- 每C步执行更新Q^=Q\hat{Q}=QQ^=Q,π^=π\hat{\pi}=\piπ^=π
- 对于每一步
强化学习的数学基础4---Q-Learning进阶相关推荐
- 强化学习入门 : 一文入门强化学习 (Sarsa、Q learning、Monte-carlo learning、Deep-Q-Network等)
最近博主在看强化学习的资料,找到这两个觉得特别适合入门,一个是"一文入门深度学习",一个是"莫烦PYTHON". 建议:看资料的时候可以多种资料一起参考,一边调 ...
- [强化学习实战]出租车调度-Q learning SARSA
出租车调度-Q learning & SARSA 案例分析 实验环境使用 同策时序差分学习调度 异策时序差分调度 资格迹学习调度 结论 代码链接 案例分析 本节考虑Gym库里出租车调度问题(T ...
- 强化学习的数学基础2---PPO算法
强化学习的数学基础2-PPO系列算法 这篇笔记来自于李宏毅老师的公开课 PPO算法全称是Proximal Policy Optimization算法.该类算法是为了解决Policy Gradient算 ...
- 强化学习 最前沿之Hierarchical reinforcement learning(一)
强化学习-最前沿系列 深度强化学习作为当前发展最快的方向,可以说是百家争鸣的时代.针对特定问题,针对特定环境的文章也层出不穷.对于这么多的文章和方向,如果能撇一隅,往往也能够带来较多的启发. 本系列文 ...
- 【强化学习】双深度Q网络(DDQN)求解倒立摆问题 + Pytorch代码实战
文章目录 一.倒立摆问题介绍 二.双深度Q网络简介 三.详细资料 四.Python代码实战 4.1 运行前配置 4.2 主要代码 4.3 运行结果展示 4.4 关于可视化的设置 一.倒立摆问题介绍 A ...
- 【论文笔记】分层强化学习鼻祖:Feudal Reinforcement Learning 1993
1993年的分层强化学习:Feudal Reinforcement Learning 概括 1992年没有深度学习,人们研究RL的思路与现在并不相同.但不可否认,提出"分层强化学习" ...
- 分层强化学习综述:Hierarchical reinforcement learning: A comprehensive survey
论文名称:Hierarchical reinforcement learning: A comprehensive survey 论文发表期刊:ACM Computing Surveys 期刊影响因子 ...
- 强化学习(九)Deep Q-Learning进阶之Nature DQN
在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...
- 深度强化学习-基于价值的强化学习-TD算法和Q学习(三)
本文主要介绍TD算法和Q学习算法 目录 TD算法: Q学习算法: 同策略,异策略: TD算法: 即时间差分 (Temporal Difference):此处用举例子方法来帮助大家理解 1.假设我从天津 ...
- 强化学习笔记(4)-深度Q学习
以下为学习<强化学习:原理与python实现>这本书的笔记. 在之前学习到的强度学习方法中,每次更新价值函数只更新某个状态动作对的价值估计.但是有些情况下状态动作对的数量非常大,不可能对所 ...
最新文章
- Apollo分布式配置中心入门
- 如何用Python从数据库里面获取数据?4个步骤就能轻松实现
- python删除列表元素_追求简单C++之删除STL列表的元素
- java日历类add方法_Java日历computeTime()方法及示例
- javaweb解决编码问题_学习编码? 首先,学会解决问题。
- LG-Transformer:全局和局部建模Transformer结构新作
- mysql noinstall 5.5_mysqlnoinstall 手动安装
- H3C OSPF基本配置命令
- 模糊控制 进化算法 PID参数整定
- 【fiddler手机抓包不能上网问题解决】
- ssoj3991: 雪人(snowman)
- 2019 力扣杯全国秋季编程大赛:3. 机器人大冒险(模拟)
- 一些CSS兼容性处理写法汇总。
- centos系统添加桌面图标
- 突发!又一MCU大厂暂停接单!
- 动软代码生成器基础使用
- objc.io 3.1 图像是怎样绘制到屏幕的 (转)
- NFS挂载文件系统出现nfsnobody解决方式
- 【Git】GitHub flow笔记 | GitHub flow和Git flow的区别
- PHP——你应该知道的面试题