强化学习-DQN和AC算法

DQN

DQN 是指基于深度学习的 Q-learning 算法,主要结合了价值函数近似(Value Function Approximation)与神经网络技术,并采用了目标网络和经历回放的方法进行网络的训练。

在 Q-learning 中,我们使用表格来存储每个状态 s 下采取动作 a 获得的奖励,即状态-动作值函数 Q(s,a)Q(s,a)。然而,这种方法在状态量巨大甚至是连续的任务中,会遇到维度灾难问题,往往是不可行的。因此,DQN 采用了价值函数近似的表示方法。

举例来说,有一种评论家叫做 state value function(状态价值函数)。状态价值函数的意思就是说,假设演员叫做 \piπ,拿 \piπ 跟环境去做互动。假设 \piπ 看到了某一个状态 s,如果在玩 Atari 游戏的话,状态 s 是某一个画面,看到某一个画面的时候,接下来一直玩到游戏结束,期望的累积奖励有多大。所以 V^{\pi}V
π
是一个函数,这个函数输入一个状态,然后它会输出一个标量( scalar)。这个标量代表说,\piπ 这个演员看到状态 s 的时候,接下来预期到游戏结束的时候,它可以得到多大的值。

DQN的问题

DQN 其实存在一些问题,最大的问题是它不太容易处理连续动作。很多时候动作是连续的,比如我们玩雅达利的游戏,智能体只需要决定比如说上下左右,这种动作是离散的。那很多时候动作是连续的。举例来说假设智能体要做的事情是开自驾车,它要决定说它方向盘要左转几度, 右转几度,这是连续的。假设智能体是一个机器人,它身上有 50 个 关节,它的每一个动作就对应到它身上的这 50 个关节的角度。而那些角度也是连续的。所以很多时候动作并不是一个离散的东西,它是一个向量。在这个向量里面,它的每一个维度都有一个对应的值,都是实数,它是连续的。假设动作是连续的,做 DQN 就会有困难。因为在做 DQN 里面一个很重要的一步是你要能够解这个优化问题。估计出 Q函数Q(s,a)Q(s,a)以后,必须要找到一个aa,它可以让 Q(s,a)Q(s,a) 最大
第一个方案是假设你不知道怎么解这个问题,因为a是没有办法穷举的,怎么办?我们可以采样出 N 个可能的 a ,一个一个带到 Q函数里面,看谁最大。这个方法其实也不会太不高效, 因为你在运算的时候会使用 GPU,一次会把 N 个连续动作都丢到 Q函数里面,一次得到 N 个 Q 值,然后看谁最大。当然这不是一个非常精确的做法,因为你没有办法做太多的采样, 所以你估计出来的 Q 值,最后决定的动作可能不是非常的精确,这是第一个方案。

第二个方案是什么呢?既然要解的是一个优化问题(optimization problem),其实是要最大化目标函数(objective function),要最大化一个东西, 就可以用梯度上升。我们就把aa当作是参数,然后要找一组a去最大化Q函数,就用梯度上升去更新 a 的值,最后看看能不能找到一个a去最大化Q函数,也就是目标函数。当然这样子你会遇到全局最大值(global maximum)的问题, 就不见得能够真的找到最优的结果,而且这个运算量显然很大, 因为你要迭代地更新 a。我们训练一个网络就很花时间了。如果你用梯度上升的方法来处理连续的问题, 等于是你每次要决定采取哪一个动作的时候,都还要做一次训练网络的过程,显然运算量是很大的。这是第二个方案。

AC算法

演员-评论家算法(Actor-Critic Algorithm)是一种结合策略梯度和时序差分学习的强化学习方法,其中:

演员(Actor)是指策略函数π θ(a∣s),即学习一个策略来得到尽量高的回报。
评论家(Critic)是指值函数V π (s),对当前策略的值函数进行估计,即评估演员的好坏。
借助于值函数,演员-评论家算法可以进行单步更新参数,不需要等到回合结束才进行更新。

参考资料

https://linklearner.com/datawhale-homepage/#/learn/detail/91

你可能感兴趣的:(强化学习,算法)