强化学习12——动态规划与策略迭代和值迭代

本文介绍了动态规划求解马尔可夫决策过程的方法。动态规划可将复杂问题分解为子问题,通过求解子问题得到整个问题的解。文中阐述了策略评估、策略迭代、值迭代和异步动态规划等内容,还总结了动态规划在预测和控制问题上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节我们说了马尔可夫决策过程,它是对完全可观测的环境进行描述的,也就是观测到的内容完整决定了决策所需要的特征。马尔可夫决策过程可以用方程组求解简单问题,但是对于复杂一点的问题,一般通过迭代的思想对其进行求解。动态规划是非常有效的求解马尔可夫决策过程的方法。

动态规划初步理解

  动态规划求解的大体思想可分为两种:1. 在已知模型的基础之上判断策略的价值函数,并在此基础上寻找最优的策略和最优的价值函数。这种方法我们通常称其为值迭代;2. 或者直接寻找最优策略和最优价值函数,这种方法称为策略迭代

   什么是动态规划

  • 动态规划算法,是解决复杂问题的一个方法,将复杂问题分解为子问题,通过求解子问题来得到整个问题的解。

  • 在解决子问题的时候,其结果通常需要存储起来,用来解决后续复杂的问题。

   什么样的问题,可以考虑使用动态规划来求解

  • 一个复杂问题的最优解由数个小问题的最优解构成,可以通过寻找子问题的最优解来得到复杂问题的最优解;

  • 子问题在复杂问题内重复出现,使得子问题的解可以被存储起来重复利用。

  马尔可夫决策过程(MDP)具有上述两个属性

  贝尔曼方程把问题递归为求解子问题,价值函数就相当于存储了一些子问题的解,可以复用,因此可以使用动态规划来求解MDP

  这一节是整个强化学习内容的核心入门知识点

  如何使用动态规划求解

  动态规划算法是用来求解一类被称为规划的问题。规划指的是,在了解整个马尔可夫决策模型的基础上来,求解最优策略。也就是在已知模型结构的基础上(包括状态-动作空间转移概率和奖励函数),求解最优策略。

  主要是预测(prediction)和控制(control):

  • Prediction

  预测是指:给定一个MDP和策略,要求输出基于当前策略的价值函数。具体的数学描述为:给定一个MDP 和一个策略,或者给定一个MRP,要求输出基于当前策略的value function 。

  • Control

  控制是指:给定一个MDP,要求确定最优价值函数和最优策略。给定一个MDP,要求确定最优价值函数和最优策略。具体的数学描述为:输入一个MDP ,输出optimal value function  和 optimal policy 。

策略评估

  那迭代法策略评估如何求解呢?策略评估(Policy Evaluation)指的是求解给定的策略下的值函数,也就是预测当前策略下所能拿到的值函数问题。把这个计算当前的状态值函数的过程,称为--策略评估(Policy Evaluation)。解决方案是应用Bellman期望方程进行迭代。

  具体方法:在次迭代中,使用更新计算,其中是的后继状态,此种方法通过反复迭代最终将收敛。

图片

s-a-s'

  其数学语言描述如下:

  用直白一点的语言描述:基于一种策略,不断地对state value迭代。比如:你当前在清华大学计算机系读博士,你的state-value是什么?是你对以后进入大厂、以后工资、生活条件有一个较好的预期。如上公式所述,当前的state-value是由对后继状态的state-value估计所构成。

  或者用策略(Policy)直接与环境互动就可以得到它的值函数,数学表达形式如下:

策略评估步骤

  那更具体策略评估(Policy Evaluation)的步骤是什么样子的呢?我们看一下算法伪代码:

图片

Policy Evaluation

  这里就是拿着一个策略一直进行迭代,直到值函数收敛。

策略迭代

  策略迭代法(Policy Iteration method)是动态规划中求最优策略的基本方法之一。它借助于动态规划基本方程,交替使用“求值计算”和“策略改进”两个步骤,求出逐次改进的、最终达到或收敛于最优策略的策略序列。

  我们发现如果想知道最优的策略,就需要能够准确估计值函数。然而想准确估计值函数,又需要知道最优策略,数字才能够估计准确。所以实际上这是一个“鸡生蛋还是蛋生鸡”的问题。

  一般的策略迭代法的思路可总结为以下三个步骤:

  1. 以某种策略开始,计算当前策略下的值函数。

  2. 利用这个值函数,更新策略,得到。

  3. 再用这个策略继续前行,更新值函数,得到,一直到不在发生变化。

  第一步就是上文说的策略评估(Policy Evaluation)

  第二步是如何更新策略的呢?

  大体思想是在当前策略的基础上,贪婪地选取行为,使得后继状态价值增加最多。Improve the policy by acting greedily with respect to 。

  这个计算最优策略的过程,称为--策略提升(Policy Improvement)

策略迭代步骤

  那更具体策略迭代法(Policy Iteration method)的步骤是什么样子的呢?我们看一下算法伪代码:图片

  这里是将策略评估(Policy Evaluation)和策略提升 (Policy Improvement)结合起来,进行迭代,直到策略收敛。

  策略迭代有点缺点,策略迭代的主要时间都花费在策略评估上,对一个简单的问题来说,在策略评估上花费的时间不算长;但对复杂的问题来说,这个步骤的时间实在有些长。一个最直接的想法就是,我们能不能缩短在策略评估上花的时间呢?有,就是价值迭代

值迭代

  理解价值迭代原理的思路,可以从策略迭代的缺点出发。

  1. 策略迭代的策略评估需要值函数完全收敛才进行策略提升的步骤,能不能对策略评估的要求放低,这样如果可以实现的话,速度会有所提升。

  2. 我们在策略迭代中关注的是最优的策略,如果说我们找到一种方法,让最优值函数和最优策略同时收敛,那样我们就可以只关注值函数的收敛过程,只要值函数达到最优,那策略也达到最优,值函数没有最优,策略也还没有最优。这样能简化了迭代步骤。

  我们的问题是寻找最优策略,值迭代的解决方案是:使用贝尔曼最优方程,将策略改进视为值函数的改进,每一步都求取最大的值函数。具体的迭代公式如下所示:

  上面这个公式与策略迭代相比,没有等到状态价值收敛才去调整策略,而是随着状态价值的迭代,及时调整策略,这样就大大减少了迭代的次数。

  也就是说从初始状态值函数开始同步迭代计算,最终收敛,整个过程中没有遵循任何策略。

  上述公式的理解可以参考下面这个推导:

图片

值迭代

  由于策略的调整,我们现在的价值每次更新。倾向于贪婪法寻找到最优策略对应的后续的状态价值。这样收敛的速度会更快。

  在值迭代过程中,算法不会给出明确的策略,迭代过程其间得到的价值函数不对应任何策略。

异步动态规划

  异步动态规划有几个研究的点:

  • In-place dynamic programming

  原位动态规划,所谓的原位动态规划指的是原地更新下一个状态的状态值,而不像同步迭代那样存储新的状态值。在这种情况下,按何种次序更新状态价值有时候会更有意义。

  • Prioritised sweeping

  重要状态优先更新,对那些重要的状态优先更新,一般使用td-error(反映的是当前的状态价值与更新后的状态j价值差的绝对值)来确定哪些状态是比较重要的。误差越大越需要优先更新。

  • Real-time dynamic programming

  实时动态规划,更新那些仅与个体关系密切的状态。同时使用个体经验来指导更新状态的选择,有些状态理论上存在,但是在现实生活中基本上不会出现,利用已有的现实经验,对于那些个体实际经历过的状态进行价值更新。这样个体经常访问过的状态得到较高品质的更新。个体较少访问的状态,其价值更新的机会就比较少,收敛速度会相对慢一点。

动态规划总结

  • 预测问题:就是指在给定策略下,迭代计算价值函数。预测问题的求解主要是通过Bellman Expectation Equation进行Iterative或者Policy Evaluation

  • 控制问题-策略迭代:是指策略迭代,寻找最优策略问题。在先给定策略,或随机策略下计算状态价值函数,根据状态函数,采用贪婪算法来更新策略,多次反复找到最优策略。主要是通过Bellman Expectation Equation 和Greedy Policy Improvement进行Policy Iteration

  • 控制问题-值迭代:单纯的使用价值策略,全程没有策略参与,也可以获得最优策略。但是我们需要知道状态的转移矩阵。通过Bellman Optimal Equation进行Value Iteration

  基于state-value function()每一次Iteration的 Complexity为,其中表示action space,表示state space

  基于state-action value function ()每一次Iteration的 Complexity为,其中表示action space,表示state space

### 策略迭代值迭代Actor-Critic方法的区别联系 #### 定义基本概念 策略迭代(Policy Iteration)是一种通过交替执行策略评估(Policy Evaluation)策略改进(Policy Improvement)来优化策略的方法。其核心在于显式地维护并更新一个策略函数π(s)[^1]。 值迭代(Value Iteration)则跳过了显式的策略表示,直接通过对状态价值函数V(s)的更新逐步逼近最优解。它利用贝尔曼最优方程进行动态规划求解。 Actor-Critic方法属于强化学习中的另一大类算法,结合了基于策略的方法(Actor)基于价值的方法(Critic)。其中,“Actor”负责生成行为策略π(a|s),而“Critic”用于估计该策略的价值函数V(s)或动作-价值函数Q(s,a)[^2]。 --- #### 差异分析 ##### 更新方式 - **策略迭代**依赖于完整的策略评估过程,在每次迭代中计算精确的状态价值函数后再进行策略改进。 - **值迭代**省去了单独的策略评估阶段,而是通过反复应用贝尔曼最优方程直接调整状态价值函数直至收敛。 - **Actor-Critic**采用样本驱动的方式在线更新参数,无需等待整个环境模型完全建模即可完成训练。具体来说,Actor部分通常使用梯度上升法最大化期望回报;Critic部分可以估算当前策略下的价值或者优势函数作为反馈信号。 ##### 数据需求 - 策略迭代值迭代都假设能够访问到马尔可夫决策过程(Markov Decision Process, MDP)的具体结构,即已知转移概率P以及奖励R。 - Actor-Critic不需要确切知道MDP细节,仅需观察交互产生的轨迹数据就能工作,因此更适合处理复杂高维甚至连续空间的任务场景。 ##### 收敛速度稳定性 - 策略迭代由于每步都会重新计算新的最佳策略,理论上具有较快的收敛速率但可能面临较高的时间开销。 - 值迭代简化了流程从而提升了效率但也可能导致某些情况下无法快速找到全局最优方案。 - 对于Actor-Critic而言,虽然引入随机性近似误差可能会降低理论上的稳定程度,但在实际应用尤其是深度强化学习领域却展现了强大的灵活性表现力。 --- #### 联系探讨 尽管三者的实现机制存在显著差异,它们之间仍然存在着紧密关联: - 都围绕着解决同一个目标——寻找使累积折扣奖励最大化的最优控制法则展开研究; - 可视为不同维度上探索同一问题解决方案的结果体现形式各异而已; - 特别是在现代深度强化学习框架下,许多先进算法实际上综合运用了上述各类技术特点加以改良创新,比如Deep Deterministic Policy Gradient (DDPG), Proximal Policy Optimization(PPO)等均不同程度融合了value-based critic component policy gradient based actor mechanism 的设计理念. 以下是几种典型组合模式的例子说明: 1. Advantage Actor Critic(A2C): 使用advantage function代替原始q-value estimation提供更精准评判依据给actor learning process. 2. Trust Region Policy Optimization(TRPO)/Proximal Policy Optimization(PPO): 这些方法进一步约束了policy update step size防止过大幅度改变破坏已有成果积累. --- ```python import numpy as np def policy_iteration(env): """ 实现简单版离散型环境下的策略迭代 """ V = np.zeros(env.nS) pi = np.random.choice(env.nA, size=env.nS) while True: # 策略评估 delta = 0 for s in range(env.nS): v = sum([p * (r + gamma * V[s_]) for p, s_, r, _ in env.P[s][pi[s]]]) delta = max(delta, abs(V[s]-v)) V[s] = v if delta < theta: break # 策略提升 policy_stable = True for s in range(env.nS): old_action = pi[s] q_values = [sum([p*(r + gamma*V[s_]) for p,s_,r,_ in env.P[s][a]]) for a in range(env.nA)] best_a = np.argmax(q_values) if old_action != best_a: policy_stable=False pi[s]=best_a if policy_stable: return V, pi def value_iteration(env): """ 实现简单版离散型环境下的值迭代 """ V = np.zeros(env.nS) while True: delta = 0 for s in range(env.nS): q_values = [sum([p*(r + gamma*V[s_]) for p,s_,r,_ in env.P[s][a]]) for a in range(env.nA)] new_v = max(q_values) delta = max(delta,abs(new_v-V[s])) V[s] = new_v if delta<theta:return V,np.array([np.argmax([sum([p*(r+gamma*V[s_])for p,s_,r,_in env.P[s][a]])for a in range(env.nA)])forsinsrange(env.nS)]) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值