- 简介
上一节主要介绍了强化学习的基本概念,主要是通过设定场景带入强化学习的策略、奖励、状态、价值进行介绍。有了基本的元素之后,就借助马尔可夫决策过程将强化学习的任务抽象出来,最后使用贝尔曼方程进行表述。本次内容主要是介绍强化学习的求解方法。也等同于优化贝尔曼方程。
- 贝尔曼方程
首先我们回顾一下贝尔曼方程。贝尔曼方程可以用于表示在当前时刻t状态的价值和下一时刻t+1状态的价值之间的关系。因此状态值函数v(s)和动作值函数q(s,a)的动态关系都可套用贝尔曼方程进行表示。
这里以状态值函数v(s)为例使用贝尔曼方程进行表示。那么就需要将式子1进行带入,整体可以分为两个部分:第一部分可以理解为即时的奖励rt;另一部分表示的是未来状态的折扣价值γv(st+1):
image.png
式子1
那么,状态值函数的贝尔曼方程进化变成为:
image.png
式子2
式子2表示当前状态s的价值函数,由当前状态获得的奖励Rs加上经过状态间转换概率Pss乘以下一状态的状态值函数v(s
)得到,其中γ是未来折扣因子。最后可以将表达式简化为式子3的形态:
image.png
式子3
- 动态规划法
动态规划的解决思想:把一个复杂的原始问题分解为多个子问题,再对每一个子问题求解,得出每个子问题的解后,把所有子问题的解进行结合,从而解决困难的原始问题。其中的“动态”指的是问题由系列的状态组成,而且能够随着时间的变化而逐步变化,“规划”就是优化每一个子问题。
基本的原理是在计算值函数时用到当前状态s的所有后续状态s的值函数,后续状态值函数根据环境模型中的MDP的p(s
|s,a)计算得到,值函数的计算表达式为:
image.png
式子4
策略评估:首先在环境模型已知的情况下,策略评估(Policy Evaluation)用于对任意策略进行合理的估计该策略将带来的累计奖励期望及准确衡量该策略的优略程度。策略评估通过计算与策略π对应的状态值函数vπ(s),以评估该策略π的优劣。即给定一个策略π,计算基于该策略下的每一个状态s的状态值v(s)的期望,并用该策略下单最终状态的期望来进行评估策略π。
策略改进:策略评估的目的时衡量策略的优劣程度,而策略改进(Policy Improvement)的目的是找到更优的策略。首先通过策略评估计算处当前策略的状态值v(s),然后策略改进算法基于计算得到的状态值v(s)进一步计算求解,以便找到更优的策略。
策略迭代算法:策略迭代(Policy Iteration)由策略评估和策略改进相互组合而成。假设有一个策略π0,首先利用策略评估获得该策略的状态值函数vπ0(s);然后基于策略改进,获得更优的策略π1;接着再次利用策略评估得到新的策略π1对应的状态值函数vπ1(s);最后根据策略改进获得更优的策略π2.根据上述的步骤,多次交替使用策略迭代和策略改进,经过多轮的交替,策略迭代算法不断逼近最优状态值v(s),最后可以找到最优策略π及其对应的状态值函数vπ(s)。
值迭代算法:结合策略评估和策略改进,策略迭代算法可以转换为效率更高的值迭代算法,具体表述为,每一次迭代对多有的状态s按照下面式子进行更新:
image.png
式子5
式子5中的p(s,r|s,a)表示:在状态s下执行动作a,环境转移到状态s
并获得奖励r的概率。
目标是最大化状态值的概率,表示迭代到第k+1次的时候,值迭代能够把获得的最大状态值v(s)赋值给vk+1(s),直到算法结束,再通过状态值v获得最优的策略。
利用式子5,算法迭代完成所有状态后,可以获得局部最优的状态值,根据局部最优状态值获得局部最优策略。不断迭代上述过程,直至局部最优状态值收敛于全局最优状态值为止。
- 蒙特卡罗法
蒙特卡罗法可以有效地处理免模型情况下的任务,重要原因是无需依赖环境的完备知识,只需要收集从环境中进行采样得到的经验轨迹(Experience Episode)即可,基于经验轨迹集数据的计算,用于求解最优的策略。具体而言,是利用经验轨迹的平均值估计状态值函数,经验轨迹平均值指一次经验轨迹中状态s出的累计折扣回报值G,其值函数计算公式为:
image.png
式子6
蒙特卡罗法有以下4个符合特点:
·适用于免模型,能够直接从环境中学习经验轨迹,即采样过程。
·可以基于免模型任务,无需提前知晓MDP的状态转换概率P。
·使用完整经验轨迹进行学习,属于离线学习方法。
·基于状态值期望等于多次采样点平均奖励这一假设,以更为简介的方式求解免模型的强化学习任务。
- 总结
求解强化学习的主要目的就是求解最优化策略,最优化策略主要是通过求解最优化函数得到,所以最优化值函数的求解就是优化贝尔曼方程。以上介绍的两种方法中,动态规划法能够较好的表示贝尔曼方程,但是在实际的情况下,大多数的强化学习任务都属于免模型任务。通过基于采样点蒙特卡罗法,就能够在一定程度上解决强化学习任务求解方法的问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。