第十八章 Python 机器学习入门之强化学习
目录
我们通过之前的学习知道了所谓的强化学习,关键就是学习到Q函数,也就是状态动作函数,然后使用它来选择 好的行动。 为了求得Q函数,我们-使用了深度学习和神经网络来训练模型学习Q函数。本文所讲的对于强化学习的优化,一是对改进神经网络框架;二是使用 ε-贪婪策略来改进算法。
改进的神经网络框架可以提高效率,如图,这是之前的神经网络框架,它将输入12个数字并输出Q(s,a),
当我们处于某个状态时,我们都需要计算4个Q值,从而选择最大Q值的动作A,这是低效的,因为我们必须从每个状态进行4次推理。
事实证明,训练单个神经网络更有效,同时输出这4个值,如下图所示,
这是一个修改后的神经网络框架,其中输入是与登月器状态相对应的八个数字,然后通过第一个隐藏层中有64个单元的神经网络,第二个隐藏层有64个单元的神经网络,输出层有4个单元的神经网络。
神经网络的工作就是有4个输出单元输出Q(s , a), 它同时计算所有4种可能动作的Q值。因为当我们处于状态S时,事实证明这比计算4个Q值更有效,因为给定状态S,我们只需要运行一次神经网络就可以获得所有的4个Q值,可以更块地找到最大的Q值对应的动作A。 此外,在贝尔曼方程中,有一个步骤我们必须计算Q函数的最大值,贝尔曼方程的右边,
即R(S) + γ*maxQ(s', a'),使用这种改进的神经网络,使得计算它也变得更有效。
这种对神经网络框架的改变使得RN更加高效。
Algorithm refinement :ε-greedy policy
我们开发的学习算法,即使我们还在学习要如何去近似Q(s,a ) 的过程中,也是需要在月球着陆器中采取一些行动。
当我们还在学习的时候,我们如何选择这些动作?最常用的方法是使用一种叫做epsilon ε-贪婪策略的东西。
让我们来看看ε-greedy policy 是如何起作用的。
如图,这是我们之前看到的算法,该算法的步骤之一是在月球着陆器中采取行动,当算法仍然在运行时,我们并不知道每个状态采取的最佳行动是什么。但即使我们仍在学习并且还没有很好的Q(s,a )估计,我们还是需要在学习算法的这一步采取行动,怎么采取行动呢?
我们有两个办法,一是随机采取动作;二是选择 在状态s 的任何时候选择一个使Q(s, a)最大化的动作A。
这时候,我们一般可能会选择 在状态s 的任何时候选择一个使Q(s, a)最大化的动作A 。这样做确实比完全随机的采取行动要好。但是我们有更好的选择。
假设概率为0.95,我们选择使Q(s, a)最大化的动作A;并且有0.05的概率,我们随机选择一个动作。
为什么我们要偶尔随机选择一个动作?
假设Q(s,a )被初始化时,因为一些原因,让算法认为启动推进器不是一个好的主意,也许神经网络被初始化,使得Q(s,main ) 总是很低,而神经网络是尝试选择最大化Q(s,a) 的动作a, 那么它永远也不会尝试启动主推进器,而启动主推进器有时是我们需要的。
如果我们 选择选项1, 即选择一个使Q(s, a)最大化的动作a, 那我们永远也不能实现它,虽然这样的概率很低。
所以我们更多的时候是使用选项2,我们有一些尝试的可能性很小的动作,这样神经网络就可以陷入上面所说的情况。
这种随机选择动作的想法有时被称为 探索步骤 ’exploration‘. 因为我们要尝试一些可能不是很好的行动。
采取最大化Q(s,a) 的行动a,有时被称为greedy 贪婪行动(或exploitation 利用),因为我们试图通过选择这个来最大化我们的回报。
而对于选项2,我们就称其为epsilon-greedy policy( ε-贪婪策略), spsilon 就是随机选择动作的概率 0.05.
有时强化学习中使用的技巧之一是从高的epsilon 开始,然后逐渐减少,这样随着时间的推移,我们就会很小的概率选择随机采取行动,更多的是使用我们改进的估计Q函数来选择好的动作,