回顾

 

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

在强化学习中,主要有三个部件(components):actor、environment、reward function。其中env和reward function是事先就定好的,你不能控制的。唯一能调整的是actor的policy,使actor能获得最大的reward。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

policy是actor中起决策作用的一个东西,决定了actor的行为。就是说输入什么状态(state)要输出什么动作(action)。 

这里以【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)来代表policy。在深度强化学习中,policy是通常使用network来实现,network中会包含很多参数,这里就用【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)来统一代表这些参数。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

 这里以游戏画面作为输入,经过红框的网络(policy)决策后,得出采取各种动作的几率,所以最终得出做left这个动作。

(类似于图像分类,看到什么图像,分成哪几类。只是这里的类别是要做出的动作)

一个例子:

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

初始的游戏画面作为 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,针对 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 采取的动作为 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,行动后会得到一个reward记为 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。之后会看到下一个游戏画面 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)...

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

经过很多轮 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 后游戏结束了,从开始到结束玩的这一次游戏称为一个episode,将每一个episode的 reward 相加就能得到Total reward:  【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)actor 的目标就是将 Total reward R 最大化。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

把每一个episode的所有s和a的序列,叫做Trajectory

在给定policy的参数 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 的情况下,可以计算每一个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 存在的概率 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

其中 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 代表的是environment,一般我们没办法控制这一部分。我们能控制的是采取不同的【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)(policy网络的参数),进而影响 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient),最终对【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)产生影响。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

给定一个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 可以得到一局游戏的 R,我们要做的就是调整actor中的参数,使得 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 最大化。但是注意 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 不是常量 scalable,而是随机变量 random variable,因为采取哪个action是有随机性的,而环境给出哪个state也是有随机性的。

所以对于 R 我们要算它的期望 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。穷举所有的trajectory  【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 并计算每个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 出现的概率,最后算 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。或者这样理解:从 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 的分布中采样(sample)出一个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,然后计算 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 的期望。

那很明显我们要做的就是最大化Expected Reward,所以可以采用policy gradient来做。

 

Policy Gradient:

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

为了使 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 最大化,我们需要做gradient ascent(注意不是gradient descent!),即对 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 求梯度。注意 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 中 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 是不可微的,但不影响。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 是无法计算的,所以sample出N个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,对每个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 求 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 再求和取平均。

 

上面提到【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient),而 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 由环境决定,我们无法知道,而且这一项本来也和【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)没关系,只能对 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)计算梯度,本质上就是对【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)计算梯度。

所以最后 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 改写为 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

最后的 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)若在 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 下执行 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 使得 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 为正,则增加概率 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ;为负则减少概率。

 

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

在实际实验中,我们会让actor去和environment做互动,产生左边的数据。左边的方框是做sample,获得很多 (s, a) 的pair(代表在s下采取a,得到 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) )。然后将这些数据送入训练过程中计算 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。然后更新模型的参数【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

注意数据只用一次,就是说更新一次参数后前面收集的所有数据就不能再用了,效率比较低。因为policy gradient ascend是on-policy的算法,具体说明可以看我的另一篇文章,前半段有讲on-policy和off-policy(https://blog.csdn.net/ACL_lihan/article/details/103989581)。

以下是policy gradient的两个小技巧:

技巧1:add a baseline【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

蓝色柱子的代表在某一state下,采取三种动作的概率【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient),绿色箭头则代表每种动作的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 出现概率下降。(即增加得少的归一化后相当于下降,增加得多的归一化后才上升)

 

问题是在sample中可能有些动作没有sample到,比如 action a(我们不知道这个action得到的reward是大是小),但归一化后 action a 出现的概率会必然下降(因为 action b/c 出现的概率无论如何都会上升,这样就把 action a 出现的概率给压下去了),这显然是不妥的。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

为了解决这个问题,我们希望reward不要总是正的,将所以 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,b是一个baseline,这样如果一个 reward 是一个很小的正值,减掉b后就会变负。【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 可以用 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 的平均值代替。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

技巧2:assign suitable credit 

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

由上图可知,在同一场游戏中,不管其中的某个 action 是好是坏,总会乘上相同的权重 R,这显然也是不公平的。

比如上图左边部分,整场游戏的 reward 是+3,按规定其中三个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 都要被乘上 3 的权重,但是 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 未必见得好,因为执行 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 后的即时得分是 -2。如果我们sample的次数够多,可能会看出 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 不够好,这个问题能够得到解决。但是实际中可能没办法搜集足够多的数据,所以在sample次数不够多的情况下,我们希望每个action的权重不同。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

解决的方法是,不把整场游戏的 R(+5+0+-2=+3)作为统一权重,而将执行该动作后剩下序列的【reward之和】作为该动作的权重。比如对于 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,它的权重应该为(+0-2=-2)。即执行某个 action 前得到多少 reward 都跟该 action 无关,该 action 只影响之后的游戏过程。

所以把权重中的 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 换成  【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) ,其中 t 代表该 action 执行的时刻,【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 代表游戏结束的时刻,即把当前的 r 以及之后每一步的 r 做一个求和。

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

还需要考虑的一点是,当前的 action 对之后游戏的影响会随之时间推移而减弱,所以我们要有 discount,在求和的每一步都乘上一个小于1的 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)(比如0.9),这样 action 之后的动作越多,即时分数乘上的 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 越多,越往后得到reward就会打上更大的折扣。

把 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 这一项称作Advantage Function【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient),也叫优势函数。它表示在actor在【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)下采取【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient),相较于其它action(同样对于【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient))有多好。

上标 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 代表 采用参数为【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)的policy 的 actor 。

 

最后总结:

1、介绍了actor、environment、reward function 

2、在深度强化学习中,policy可以看成是参数为【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)的网络,输入state,输出采取各种action的概率

3、一轮游戏叫做episode

4、trajectory={s1,a1,s2,a2,……},在给定policy的参数 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 的情况下,可以计算每一个 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 存在的概率 【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient) 。

5、总的expected reward=【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

6、使用policy gradient ascend求 expected reward的最大值

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

【李宏毅深度强化学习笔记】1、深度强化学习算法 策略梯度方法(Policy Gradient)

7、采集一次数据,更新一次参数后,要重新采集一次数据。

相关文章: