花了一天时间大致了解了强化学习一些经典算法,总结成如下笔记。笔记中出现不少流程图,不是我自己画的都标了出处。
上面这个公式就是Bellman方程的基本形态。从公式上看,当前状态的价值和下一步的价值以及当前的反馈Reward有关。它表明价值函数(Value Function)是可以通过迭代来进行计算的!!!
有一点要注意的是
表示的是在
时刻的动作价值最优值,而仔细看看上面的等式可以发现,我们还需要求解出下一个状态
所对应的动作价值最优解。我们还在计算当前的Q值,怎么能有下个状态的Q值呢?所以,在实际运用时,我们会使用之前的Q值,也就是说每次我们会根据新得到的reward和原来的Q值来更新现在的Q值,具体的可以看看下面的算法介绍。
表示Q真实值,简单理解就是我在S状态下采取了action,从环境中获得了R的奖励,然后对下一时刻的Q值应该也是有影响的,这个影响因子就是
。另外这次是是一个递归的表达式,所以也可以看出离当前时刻越远,我所采取动作的影响力就越低。
就是常说的TD(temporal difference) error,这个error在后面的DQN中会作为损失函数。
其实可以看到Q-learning和Sarsa的最大区别就是对Q网络的更新策略,Sarsa使用的是使用下次状态所采取的的动作所对应的Q值来更新Q值,而Q-learning使用下次状态S2的最大Q值用于更新。
感性的理解就是Sarsa会探索更多的可能性,而Q-learning会铁定心地选择最大可能性的选择。因此,Q-learning虽然具有学习到全局最优的能力,但是其收敛慢;而Sarsa虽然学习效果不如Q-learning,但是其收敛快,直观简单。因此,对于不同的问题,我们需要有所斟酌。
通过计算每一个状态动作的价值,然后选择价值最大的动作执行。
前面介绍的Q-learning和Sarsa的action和state都是在离散空间中,但是有的情境下无法用离散空间表达,而且如果真的用离散空间表达,那么空间会非常巨大,这对计算机来说会很难处理。例如自动驾驶车的state和action,我们不可能用一个表格来记录每个state和对应action的value值,因为几乎有无限种可能。那么如何解决这种问题呢?
我们以自动驾驶为例,仔细想想可以知道,车的状态是高维表示的(例如,当前的位置,车的油耗,路况等等数据来表示当前状态),而动作相对来说可能是低维的(为方便说明,假设速度恒定,最后的动作只有方向盘旋转角度)。
因为我们要做的是针对某一时刻的状态选择最合适的动作,所以我们可以把车状态当做高维输入数据,车的当前时刻的动作当做是低维输出,我们可以对二者构建一个映射关系。
那么这个映射函数就可以用 "万能" 的神经网络代替,也就是后面要介绍的DQN了。
我们知道,要训练一个神经网络,那么我们就需要构建loss函数,而这个loss函数的构建又需要真实的label和预测的label。
预测的label很好理解,其实就是最终得到的输出向量嘛,那么真实的label是什么呢?其实就是前面Q-learning算法中介绍到的
,所以TD error表达式如下:
Playing Atari with Deep Reinforcement Learning
具体的算法还涉及到很多细节,例如Experience Replay,也就是经验池的技巧,就是如何存储样本及采样问题。由于玩Atari采集的样本是一个时间序列,样本之间具有连续性,如果每次得到样本就更新Q值,受样本分布影响,效果会不好。因此,一个很直接的想法就是把样本先存起来,然后随机采样如何?这就是Experience Replay的意思。按照脑科学的观点,人的大脑也具有这样的机制,就是在回忆中学习。那么上面的算法看起来那么长,其实就是反复试验,然后存储数据。接下来数据存到一定程度,就每次随机采用数据,进行梯度下降!也就是在DQN中增强学习Q-Learning算法和深度学习的SGD训练是同步进行的!通过Q-Learning获取无限量的训练样本,然后对神经网络进行训练。样本的获取关键是计算y,也就是标签。
一个神经网络,输入是状态,输出直接就是动作(不是Q值)。
前面三种算法都是基于价值(value)的方法,即输入当前状态,然后计算出每个action的价值,最后输出价值最大的action。而policy network则是根据某种策略直接输出action,即
或者表示为
其中
表示某个action,
和
分别表示该action的概率和对应的reward。
更一般地说,
应该是对action的评价指标,我们可以用reward,当然也可以用其他的指标,如Q值等等。换句话说Policy Network的核心就是这个评价指标的选取。
下图是文献中的截图,总结了多种评价指标,如Q,reward,TD等。
下图中的A表示策略输出的action,P表示该action对应的概率。
上面的policy gradient的loss函数中其实仅仅使用了环境返回的reward,而没有用到Q值。而如果我们希望用到Q值的话就需要用到Actor-critic网络来实现。简单理解,policy network其实就是actor,用来输出动作,而critic则对应评价网络,即评估actor选择的动作的好坏,进而引导actor下次做出更好的选择。
Actor的更新方法和上面policy network可以一样。
critic的评价指标我们可以用Q来表示,那么真实值就用
表示,和前面算法一样,可以用Q-learning或者Sarsa的思路加上环境返回的reward作为真实Q值,或者也可以直接使用reward,最后采用one step Monte Carlo来更新critic。
强推这篇博文,写的非常好:Deep Reinforcement Learning - 1. DDPG原理和算法。
参考: