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=1T​rt。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=1Tn​​R(τ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=1Tn​​R(τ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′=tTn​​rt′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. 总结

  1. 介绍了actor、environment、reward function
  2. 在深度强化学习中,policy可以看成是参数为 θ \theta θ的网络,输入state,输出采取各种action的概率
  3. 一轮游戏叫做episode
  4. trajectory={s1,a1,s2,a2,……},在给定policy的参数 θ \theta θ 的情况下,可以计算每一个 τ \tau τ 存在的概率 p θ ( τ ) p_\theta(\tau) pθ​(τ) 。
  5. 总的expected reward= ∑ τ R ( τ ) p θ ( τ ) \sum_\tau{R(\tau)p_\theta(\tau)} ∑τ​R(τ)pθ​(τ)
  6. 使用policy gradient ascend求 expected reward的最大值
  7. 采集一次数据,更新一次参数后,要重新采集一次数据。

Lee Hung-yi强化学习 | (1) Policy Gradient相关推荐

  1. 【强化学习】Policy Gradient算法详解

    DeepMind公开课https://sites.google.com/view/deep-rl-bootcamp/lectures David Silver教程 http://www0.cs.ucl ...

  2. 强化学习6——policy gradient的变种State of the Art

    policy-base SOTA 学习周博雷老师课程总结 Natural Policy Gradient 为了改善PG算法的不稳定的缺点(如果更新到一个bad policy,就会采集到的一个坏的数据集 ...

  3. 【强化学习】Policy Gradient原理

    1.Policy Gradient和DQN系列强化算法最大的区别在于: DQN系列基于Value,也就是说执行完所有的动作并保存所得到的价值,根据这些价值计算出最优价值函数,并以此选择动作,最终获得一 ...

  4. 强化学习-Vanilla Policy Gradient(VPG)

    文章目录 Background Quick Facts Key Equations Exploration vs. Exploitation Pseudocode Documentation Refe ...

  5. 强化学习6——policy gradient的优化( Use temporal causality,Baseline and Critic)

    policy gradient的优化 听周博雷教授的课程有感 为什么优化 因为基于MC policy gradient的优化,方差较大 方法1: Use temporal causality 使用时序 ...

  6. 强化学习算法Policy Gradient

    1 算法的优缺点 1.1 优点 在DQN算法中,神经网络输出的是动作的q值,这对于一个agent拥有少数的离散的动作还是可以的.但是如果某个agent的动作是连续的,这无疑对DQN算法是一个巨大的挑战 ...

  7. 百度强化学习之Policy learning

    强化学习初探 1.代码 1.1.导入依赖 1.2.设置超参 1.3.搭建Model.Algorithm.Agent架构 1.4.Algorithm 1.5.Agent 1.6.Training &am ...

  8. 强化学习数学基础1---Policy Gradient

    强化学习基础数学基础1 这篇笔记由李宏毅老师的强化学习公开课整理而来 强化学习的基本步骤: Step 1:定义一个Neural Network作为一个Actor Step 2:定义评估函数,有些评估函 ...

  9. 强化学习论文——Policy invariance under reward transformations: Theory and application to reward shaping

    Policy invariance under reward transformations: Theory and application to reward shaping 这篇文章是奖励塑造的重 ...

最新文章

  1. iOS 数字滚动 类似于老 - 虎- 机的效果
  2. Linux学习笔记5月22日任务
  3. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
  4. Spring Boot 2.2.1 正式发布,需特别注意这个注解的使用!
  5. js获取时间段内属于星期一的日期们
  6. Docker制作dotnet core控制台程序镜像
  7. python数据库框架_目前最受欢迎的12个Python开源框架
  8. java中的函数指的是,函数式接口在Java中是指有且仅有一个抽象方法的接口。( )...
  9. 7.高性能MySQL --- MySQL 高级特性
  10. King Arthur
  11. 网易易盾最新一代Java2c加固究竟有什么厉害之处?
  12. c语言给出太多参数,C语言中不定参数的实现
  13. linux基本命令操作(二)
  14. inkscape矢量图_使用Inkscape创建矢量图形的教程
  15. [转]各种配置管理工具的比较
  16. 修改华为 Echolife HG8010h 的超级用户密码
  17. IPTV的开展在广电企业、电信运营商角度上的异同
  18. 如何使LED灯泡变暗---凯利讯半导体
  19. 考研政治与专业课总结(持续更新)
  20. 无线蓝牙耳机什么牌子好一点?2022年蓝牙耳机推荐

热门文章

  1. PHP内核-Zend引擎的详解
  2. 和别人玩成语接龙词汇量少怎么办?今天教你在成语接龙无敌天下
  3. 双浮球水位开关的原理
  4. 计算机软件作为无形资产摊销,购进计算机软件如何摊销
  5. 亚马逊加入购物车会有排名吗
  6. 实验室清洗玻璃仪器小窍门,一篇管够!
  7. 你套牢了吗?国庆狂欢后的A股小预测
  8. TalkTalk公司泄密事件时间轴
  9. 开发H5游戏练手, 黑暗堡垒-炼狱传奇H5 (三) 玩家信息,背包,商店,技能,任务,玩家菜单,游戏菜单,NPC对话与攻击怪物
  10. 利用Java编写手机应用程序PalmOS基础篇