强化学习系列之五:价值函数近似
实际问题中,状态的数目非常多,因此强化学习算法不适用。为了解决这个问题,人们提出了价值函数近似的方法。价值函数近似之后,我们才算能把强化学习算法应用在实际问题上。...
目前,我们已经介绍了一些强化学习的算法,但是我们无法在实际问题中运用这些算法。为什么呢?因为算法估算价值函数
或者
,保存这些价值函数意味着保存所有状态。而实际问题中,状态的数目非常巨大,遍历一遍的事情就别想了。比如,围棋的状态总数是
,听说比宇宙的总原子数还多,23333。解决这个问题的方法是抽特征。对于一个状态 s, 我们抽取一些特征
,将这些特征代替状态作为价值函数的输入,即
或者
。这种方法我们称之为价值函数近似。价值函数近似解决了海量状态之后,我们才能实用强化学习算法。
1. 参数化和目标
设为 0.8。
机器人找金币只有 9 个状态,但为了介绍价值函数近似,我们就假装状态非常多。我们以四个方向是否有墙作为状态特征,比如状态 1 的特征为
, 分别表示北 (东、南、西) 方向有 (没有、没有、有) 墙。状态太多的情况下,模型无关的强化学习算法比较有用。模型无关的强化学习算法的工作对象是
(有状态特征之后为
), 因此只有状态的特征是不够的。为此我们设定
特征向量一共分为 |A| 部分,分别对应不同的动作。在
特征向量, a 动作部分放上
特征,其他动作部分全部置为 0。比如机器人找金币场景,状态 1 采取向北动作的特征向量
如下。搞出特征来了,接下来就用参数计算价值了。我们设定参数向量
,然后用特征向量和权重向量的内积估计状态-动作价值。这时强化学习其实就是学习参数
的值,使得参数化的 q 值
尽量接近最优策略的 q 值
,优化目标如下所示。我们用梯度下降法求解这个优化目标。梯度下降法首先要计算梯度
。直接求导可得梯度。但是状态很多,我们不可能真的按照上面的公式计算梯度 (上面的公式得遍历所有的状态)。实际的方法是让系统探索环境,遇到状态特征
和采取动作 a, 计算梯度然后更新参数。这个类似随机梯度下降。参数更新的代码如下所示。
2. 强化学习算法
需要最优策略的 q 值,那我们上哪里去找这个值呢? 这是就是该强化学习算法上场了。我们回想一下三个模型无关的强化学习算法,都是让系统探索环境,探索时更新状态-动作价值。在更新时,MC Control 认为该样本的预期收益
为最优策略的 q 值,让状态-动作价值 q(s,a) 尽量接近。SARSA 认为
为最优策略的 q 值,Q Learning 认为
。有了这些想法,我们只需要简单地改变下强化学习算法的更新部分,就可以引入价值函数近似了。新的更新规则是将算法认为的最优策略的 q 值输入参数更新模块。觉个例子,价值函数近似之后的 Q Learning 算法代码如下所示。
3. 做个实验
贪婪策略的
设为 0.2, 学习率
设为 0.001。和上文一样,算法计算得到的状态(特征)-动作价值和最优策略的状态-动作价值之间的平方差,当做评价指标。实验的结果如下图所示。
这个实验结果告诉我们的第一件事就是选好特征。墙特征比 id 特征差。状态2 和 4 都是南北方向有墙,墙特征是一样的,会造成混淆。id 特征就没有这个问题。表现在实验结果上,MC Control 和 SARSA 在墙特征上都不停震荡,同时三种算法在墙特征的表现都不如其在 id 特征上的表现。
Q Learning 一如既往地表现出优越的效果。在墙特征上, Q Learning 不仅没有像 MC Control 和 SARSA 一样震荡,而且效果远远好于它们两者。在 id 特征上, Q Learning 完美拟合了最优策略的状态-动作价值。
4. 总结
关注公众号 AlgorithmDog。
关注 AlgorithmDog
微信扫一扫关注公众号