Lee Hung-yi强化学习 | (1) Policy Gradient
Lee Hung-yi强化学习专栏系列博客主要转载自CSDN博主 qqqeeevvv,原专栏地址
课程视频
课件
1. 回顾
在强化学习中,主要有三个部件(components):actor、environment、reward function。其中env和reward function是事先就定好的,你不能控制。唯一能调整的是actor的policy,使actor能获得最大的reward。
policy是actor中起决策作用的一个东西,决定了actor的行为。可以理解为是一个函数,输入是状态(state,对环境的观察),输出是动作(action)即,输入一个状态,决定输出什么动作。
这里以 π \pi π来代表policy。在深度强化学习中,policy是通常使用network来实现,network中会包含很多参数,这里就用\theta来统一代表这些参数。
这里以游戏画面(state, 对环境的观察)作为输入,经过红框的网络(policy)决策后,得出采取各种动作的几率(在动作空间上的概率分布),所以最终得出做left这个动作。
类似于图像分类,这里的类别是动作。
2. 例子
初始的游戏画面作为 s 1 s_1 s1 ,针对 s 1 s_1 s1采取的动作为 a 1 a_1 a1 ,行动后会得到一个reward记为 r 1 r_1 r1。之后会看到下一个游戏画面 s 2 s_2 s2…
经过很多轮 (s,a,r) 后游戏结束(消灭了所有敌人或者被消灭)了,一次游戏开始到结束称为一个episode,将每一个episode的 reward 相加就能得到Total reward: R = ∑ t = 1 T r t R=\sum_{t=1}^Tr^t R=∑t=1Trt。actor 的目标就是将 Total reward R 最大化。
把每一个episode的所有s和a的序列,叫做Trajectory。
在给定policy的参数 θ \theta θ的情况下,可以计算每一个 Trajectory τ \tau τ存在的概率 p θ ( τ ) p_{\theta}(\tau) pθ(τ)。
其中, p ( s t + 1 ∣ s t , a t ) p(s_{t+1} | s_t,a_t) p(st+1∣st,at)代表的是environment,一般我们没办法控制这一部分。我们能控制的是采取不同的 θ \theta θ(policy网络的参数),进而影响 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st),最终对 p θ ( τ ) p_\theta(\tau) pθ(τ)产生影响。
给定一个 τ \tau τ 可以得到一局游戏的 R ( τ ) R(\tau) R(τ),我们要做的就是调整actor中的参数,使得 R ( τ ) R(\tau) R(τ) 最大化。但是注意 R ( τ ) R(\tau) R(τ) 不是常量 scalable,而是随机变量 random variable,因为采取哪个action是有随机性的,而环境给出哪个state也是有随机性的。
所以对于 R 我们要算它的期望 R θ ˉ \bar{R_\theta} Rθˉ。穷举所有的trajectory τ \tau τ 并计算每个 τ \tau τ 出现的概率,最后算 ∑ τ R ( τ ) p θ ( τ ) \sum_\tau{R(\tau)p_\theta(\tau)} ∑τR(τ)pθ(τ) 。或者这样理解:从 p θ ( τ ) p_\theta(\tau) pθ(τ) 的分布中采样(sample) τ \tau τ ,然后计算 R ( τ ) R(\tau) R(τ) 的期望。
那很明显我们要做的就是最大化Expected Reward,所以可以采用policy gradient来做。
3. Policy Gradient
为了使 R θ ˉ \bar{R_\theta} Rθˉ 最大化,我们需要做gradient ascent(注意不是gradient descent!),即对 R θ ˉ \bar{R_\theta} Rθˉ 求梯度。注意 R θ ˉ \bar{R_\theta} Rθˉ 中 R ( τ ) R(\tau) R(τ) 是不可微的,但不影响。
E τ ∼ p θ ( τ ) [ R ( τ ) ∇ l o g p θ ( τ ) ] E_{\tau \sim p_\theta(\tau)}[R(\tau)\nabla log p_\theta(\tau)] Eτ∼pθ(τ)[R(τ)∇logpθ(τ)] 是无法计算的,所以可以sample出N个 τ \tau τ(近似表示) ,对每个 τ \tau τ 求 R ( τ n ) ∇ l o g p θ ( τ n ) R(\tau^n)\nabla log p_\theta(\tau^n) R(τn)∇logpθ(τn) 再求和取平均。
上面提到,而 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1∣st,at) 由环境决定,我们无法知道,而且这一项本来也和 θ \theta θ没关系,只能对 l o g p θ ( τ n ) log p_\theta(\tau^n) logpθ(τn)计算梯度,本质上就是对 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st)计算梯度。所以最后 R ( τ n ) ∇ l o g p θ ( τ n ) R(\tau^n)\nabla log p_\theta(\tau^n) R(τn)∇logpθ(τn) 改写为 ∑ t = 1 T n R ( τ n ) ∇ l o g p θ ( a t n ∣ s t n ) \sum_{t=1}^{T_n} R(\tau^n)\nabla log p_\theta(a_t^n|s_t^n) ∑t=1TnR(τn)∇logpθ(atn∣stn)。
最后变为 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ l o g p θ ( a t n ∣ s t n ) \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n)\nabla log p_\theta(a_t^n|s_t^n) N1∑n=1N∑t=1TnR(τn)∇logpθ(atn∣stn):若在 s t n s_t^n stn 下执行 a t n a_t^n atn 使得 R ( τ n ) R(\tau^n) R(τn) 为正,则增加概率 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st) ;为负则减少概率。
在实际实验中,我们会让actor去和environment做互动,产生左边的数据。左边的方框是做sample,获得很多 (s, a) 的pair(代表在s下采取a,得到 R ( τ ) R(\tau) R(τ) )。然后将这些数据送入训练过程中计算 ∇ l o g p θ ( a t n ∣ s t n ) \nabla log p_\theta(a_t^n|s_t^n) ∇logpθ(atn∣stn) 。然后更新模型的参数 θ \theta θ。
注意数据只用一次,就是说更新一次参数后前面收集的所有数据就不能再用了(再利用更新后的参数 继续收集数据,以此循环),效率比较低。因此,Policy Gradient是on-policy的算法。
强化学习和有监督的分类问题有点相似,只不过监督分类问题的标签是人工标记的,而强化学习没有label,或者它的label是自己探索得到的,因此不是最优的选择,所以需要对每一步(样本)的损失进行加权。
4. Tricks
- add a baseline
蓝色柱子的代表在某一state下,采取三种动作的概率 p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(at∣st),绿色箭头则代表每种动作的Reward,长的表示Reward比较大。
之前约定的做法:假如执行 action a 后 R 为正,则提高 action a 出现的概率;R 为负,则降低 action a 出现的概率。
但是可能某个游戏不管什么执行动作得到的 reward 都是正的(比如0-20),则若执行 action a 后 R 的增加量大,则 action a 出现概率增加得大;执行 action b 后R的增加量小,则 action b 出现概率增加得小。(注意在reward恒为正的情况下,看起来无论如何执行哪个 action ,概率都会增加,只是增加多少的问题) 因为所有action出现的概率和为1,那么在理想情况下,在归一化后相当于 action a 出现概率上升而 action b 出现概率下降。(即增加得少的归一化后相当于下降,增加得多的归一化后才上升)。因此,理想状态下, reward恒正问题不大。
问题是我们无法做到理想状态,实际上我们要进行sample操作。在sample中可能有些动作没有sample到,比如 action a(我们不知道这个action得到的reward是大是小),但归一化后 action a 出现的概率会必然下降(因为 action b/c 出现的概率无论如何都会上升,这样就把 action a 出现的概率给压下去了),这显然是不妥的。
为了解决这个问题,我们希望reward不要总是正的,将所以 R ( τ n ) − b R(\tau^n)-b R(τn)−b ,b是一个baseline,这样如果一个 reward 是一个很小的正值,减掉b后就会变负(reward恒正时,只要一个动作被sample到,那么它对应的概率就可能上升;当他的reward比较小时,减掉b之后,就很有可能变为负的,此时就算被采样到,该动作出现的概率也会下降)。 b ≈ E [ R ( τ ) ] b \approx E[R(\tau)] b≈E[R(τ)] 可以用 R ( τ ) R(\tau) R(τ) 的平均值代替。(当某个action被采样到且reward比较高时,才会增加该action的概率)
- assign suitable credit
由上图可知,在同一场游戏中,不管其中的某个 action 是好是坏,总会乘上相同的权重 R,这显然也是不公平的。
比如上图左边部分,整场游戏的 reward 是+3,按规定其中三个 ∇ l o g p θ ( a t n ∣ s t n ) \nabla log p_\theta(a_t^n|s_t^n) ∇logpθ(atn∣stn) 都要被乘上 3 的权重,但是 a 3 a_3 a3 未必见得好,因为执行 a 3 a_3 a3 后的即时得分是 -2。如果我们sample的次数够多,可能会看出 a 3 a_3 a3 不够好,这个问题能够得到解决。但是实际中可能没办法搜集足够多的数据,所以在sample次数不够多的情况下,我们希望每个action的权重不同。
解决的方法是,不把整场游戏的 R(+5+0±2=+3)作为统一权重,而将执行该动作后剩下序列的【reward之和】作为该动作的权重。比如对于 ( s b , a 2 ) (s_b,a_2) (sb,a2) ,它的权重应该为(+0-2=-2)。即执行某个 action 前得到多少 reward 都跟该 action 无关,该 action 只影响之后的游戏过程。
所以把权重中的 R ( τ n ) R(\tau^n) R(τn) 换成 ∑ t ′ = t T n r t ′ n \sum_{t'=t}^{T_n}r_{t'}^n ∑t′=tTnrt′n ,其中 t 代表该 action 执行的时刻,T_n 代表游戏结束的时刻,即把当前的 r 以及之后每一步的 r 做一个求和。
还需要考虑的一点是,当前的 action 对之后游戏的影响会随之时间推移而减弱,所以我们要有 discount,在求和的每一步都乘上一个小于1的 γ \gamma γ(比如0.9),这样 action 之后的动作越多,即时分数乘上的 \gamma 越多,越往后得到reward就会打上更大的折扣。
把 R ( τ n ) − b R(\tau^n)-b R(τn)−b 这一项称作Advantage Function,也叫优势函数。它表示在actor在 s t s_t st下采取 a t a_t at,相较于其它action(同样对于s_t)有多好。
上标 θ \theta θ 代表 actor 策略网络的参数。
5. 总结
- 介绍了actor、environment、reward function
- 在深度强化学习中,policy可以看成是参数为 θ \theta θ的网络,输入state,输出采取各种action的概率
- 一轮游戏叫做episode
- trajectory={s1,a1,s2,a2,……},在给定policy的参数 θ \theta θ 的情况下,可以计算每一个 τ \tau τ 存在的概率 p θ ( τ ) p_\theta(\tau) pθ(τ) 。
- 总的expected reward= ∑ τ R ( τ ) p θ ( τ ) \sum_\tau{R(\tau)p_\theta(\tau)} ∑τR(τ)pθ(τ)
- 使用policy gradient ascend求 expected reward的最大值
- 采集一次数据,更新一次参数后,要重新采集一次数据。
Lee Hung-yi强化学习 | (1) Policy Gradient相关推荐
- 【强化学习】Policy Gradient算法详解
DeepMind公开课https://sites.google.com/view/deep-rl-bootcamp/lectures David Silver教程 http://www0.cs.ucl ...
- 强化学习6——policy gradient的变种State of the Art
policy-base SOTA 学习周博雷老师课程总结 Natural Policy Gradient 为了改善PG算法的不稳定的缺点(如果更新到一个bad policy,就会采集到的一个坏的数据集 ...
- 【强化学习】Policy Gradient原理
1.Policy Gradient和DQN系列强化算法最大的区别在于: DQN系列基于Value,也就是说执行完所有的动作并保存所得到的价值,根据这些价值计算出最优价值函数,并以此选择动作,最终获得一 ...
- 强化学习-Vanilla Policy Gradient(VPG)
文章目录 Background Quick Facts Key Equations Exploration vs. Exploitation Pseudocode Documentation Refe ...
- 强化学习6——policy gradient的优化( Use temporal causality,Baseline and Critic)
policy gradient的优化 听周博雷教授的课程有感 为什么优化 因为基于MC policy gradient的优化,方差较大 方法1: Use temporal causality 使用时序 ...
- 强化学习算法Policy Gradient
1 算法的优缺点 1.1 优点 在DQN算法中,神经网络输出的是动作的q值,这对于一个agent拥有少数的离散的动作还是可以的.但是如果某个agent的动作是连续的,这无疑对DQN算法是一个巨大的挑战 ...
- 百度强化学习之Policy learning
强化学习初探 1.代码 1.1.导入依赖 1.2.设置超参 1.3.搭建Model.Algorithm.Agent架构 1.4.Algorithm 1.5.Agent 1.6.Training &am ...
- 强化学习数学基础1---Policy Gradient
强化学习基础数学基础1 这篇笔记由李宏毅老师的强化学习公开课整理而来 强化学习的基本步骤: Step 1:定义一个Neural Network作为一个Actor Step 2:定义评估函数,有些评估函 ...
- 强化学习论文——Policy invariance under reward transformations: Theory and application to reward shaping
Policy invariance under reward transformations: Theory and application to reward shaping 这篇文章是奖励塑造的重 ...
最新文章
- iOS 数字滚动 类似于老 - 虎- 机的效果
- Linux学习笔记5月22日任务
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
- Spring Boot 2.2.1 正式发布,需特别注意这个注解的使用!
- js获取时间段内属于星期一的日期们
- Docker制作dotnet core控制台程序镜像
- python数据库框架_目前最受欢迎的12个Python开源框架
- java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...
- 7.高性能MySQL --- MySQL 高级特性
- King Arthur
- 网易易盾最新一代Java2c加固究竟有什么厉害之处?
- c语言给出太多参数,C语言中不定参数的实现
- linux基本命令操作(二)
- inkscape矢量图_使用Inkscape创建矢量图形的教程
- [转]各种配置管理工具的比较
- 修改华为 Echolife HG8010h 的超级用户密码
- IPTV的开展在广电企业、电信运营商角度上的异同
- 如何使LED灯泡变暗---凯利讯半导体
- 考研政治与专业课总结(持续更新)
- 无线蓝牙耳机什么牌子好一点?2022年蓝牙耳机推荐