【李宏毅深度强化学习笔记】3、深度强化学习算法 Q-learning(Basic Idea)

Q-learning 是 value base 的方法,在这种方法中我们不是要learn一个 policy,而是要学习一个critic网络。critic 并不直接采取行为,只是对现有的 actor \pi,评价它的好坏。

value fuction

critic 给出了一个 value function V^\pi(s),代表在遇到游戏的某个 state 后,采取策略为\pi的actor  一直玩到游戏结束,所能得到的 reward 之和。

 V^\pi(s)(即critic)是个函数,它的输入是某个state,输出是一个scalar标量。上图游戏画面中左边的 V^\pi(s) 很大,因为当前怪物比较多,防护罩也没被摧毁,从此时玩到游戏结束得到的 reward 就会比较多;而相对的右边的 V^\pi(s) 就比较小。综上 critic 的输出取决于两点:

1、是 state,这个就是左右图对比

2、是 actor 的策略 \pi,如果是个很弱的actor即便左图可能也得到很低的reward。

怎么计算V^\pi(s)呢?

 Monte-Carlo (MC) based approach

 Monte-carlo的方法很直观,直接让actor和环境做互动。

S_a作为 V^\pi(s)的输入最终输出 reward V^\pi(S_a),而实际上应该得到的reward是G_a。我们的目标就是通过训练让 V^\pi(S_a) 越来越接近 G_a ,这其实和 regression problem 很相似。

注意V^\pi(s)是一个网络,因为在游戏中,不可能所有的image都看过,所以将V^\pi(s)做成网络来提高泛化性。

Temporal-difference (TD) approach

MC based的方法要求遇到 S_a后把游戏玩到结束,如果游戏太长的话,那就可能收集不到多少数据去让网络去拟合G_a

而 TD 只需要从 S_t 玩到 S_{t+1} 就行,因为只需要算V^\pi(S_t) = V^\pi(S_t+1) + r_t 

假设s_t经过V^\pi输出V^\pi(S_t)s_{t+1}经过V^\pi输出V^\pi(S_t+1)

那么V^\pi(S_t+1) - V^\pi(S_t) 应该要越接近r_t才是正确的结果,所以将网络往这个方向去train,就可以把这个fuction训练出来。

MC v.s. TD :

MC 方法的问题在于最后得到的 G_a 的方差很大( G_a 是 在遇到S_a 的情况下根据策略 \pi进行游戏知道结束得到的实际 reward,是一个随机变量,因为游戏是有随机性的,每一次得到 G_a 是不一样的)。 

假设G_a 是k步 reward 的求和,而根据公式 Var[kX]=k^2Var[X],最终会相差 k^2。所以最后 G_a 的方差很大,即每次算出来的  V^\pi(S_a) 都会相差很多。

而用 TD base 中有随机性的部分是 r,它的方差比较小。但 TD 的问题在于 V^\pi(S_{t+1}) 可能很不准确。

下面举个例子:

可以看出,同一个actor,用MC based和TD,算出来的结果是不一样的,两种结果没有绝对的正确与否。

在第一个episode中,S_a出现后S_b的reward变为0。

在Monte-Carlo方法中,就会认为S_a是一个不好的state,才导致后来的S_b的reward变为0,所以 V^\pi(S_a) 为0.

而TD方法中, 会认为S_a 后 S_b 得到 reward 为 0 只是一个巧合,与 S_a 无关。大部分情况下 S_b 还是会得到 3/4 的 reward,所以认为 V^\pi(S_a) 为3/4。(因为V^\pi(S_a) = V^\pi(S_b) + r_a

Q function:

 Q function 的输入是一个 (s, a) 的 pair。这样相当于Q function 假设 state s下强制采取 action a(不管在这个actor认为state s下采取action a是不是好的,都强制采取a)。 

以上是Q function的两种常见的写法。

如果action可以穷举,则可以使用右边的写法;否则,使用左边的写法。

critic 看上去只能评价某个 action 的好坏,但是实际上可以直接用它来做 reinforcement learning。方法是只要学到一个 \pi 的 Q function Q^\pi(s,a) ,就能有办法找到一个更好的 actor \pi',这样就能不断更新policy  \pi 。

什么叫 \pi' 比 π 好呢?

就是说面对所有 state s 时,使用策略 \pi' 得到的 value 一定比使用策略 \pi 得到的 value 大,即:V^{\pi'}(s)\geqslant V^\pi(s) 

找 \pi' 的方法是,对于已经学到的 Q function  Q^\pi(s,a),在某个给定的 state 下,分别带入可能的 action,看看哪一个 action 使得函数值最大,把使得函数值最大的 a,作为以后面对该 state 时采取的 action

下图证明了 V^{\pi'}(s)\geqslant V^\pi(s)

技巧1:使用Target network

Q-function的训练,参考了TD的方法,即Q^\pi(s_t,a_t) = r_t + Q^\pi(s_{t+1},\pi(s_{t+1}))

现在以s_ta_t作为输入,则输出的结果Q^\pi(s_t,a_t),由上图可以得出,这个结果应该尽可能接近以s_{t+1}a_{t+1}作为输入,则输出的结果Q^\pi(s_{t+1},\pi(s_{t+1}))再加上r_t的结果。

也是一个类似回归的问题,但是这里不同于前面,这里的Q^\pi(s_{t+1},\pi(s_{t+1}))是一直在变化的,即Q^\pi(s_t,a_t)要去拟合的目标,其实是一直在变化,这就对训练产生很大的阻力。

所以

1、将以s_{t+1}a_{t+1}作为输入的网络(也叫Target network)固定住,这样r_t + Q^\pi(s_{t+1},\pi(s_{t+1}))也变成一个固定的值,然后让以s_ta_t作为输入的网络去拟合这个固定的值。

2、经过N次训练后,将左边的网络的参数覆盖掉Target network,形成新的Target network

重复1、2的步骤一直训练下去。

技巧2:使用exploration

TODO

发布了11 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ACL_lihan/article/details/104041905