介绍
动态规划(Dynamic Programming,DP)是一类优化算法。将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到目标问题的解 。
核心特点:
最优子结构——子问题的最优解是可以得到的
重复子问题——子问题的解决方案是可以存储和利用的
动态规划与强化学习
在完备的马尔可夫决策(状态转移矩阵、系统的奖励Ra完全已知的情况下)过程中,DP可用于计算最优策略。对于强化学习问题,传统的DP算法作用有限:完备的环境模型只是一个假设,计算复杂度极高。
但是,DP提供了必要的基础,所有的其他方法都是对DP的近似。:
- 降低计算复杂度
- 减弱对环境模型完备性的假设
基于动态规划的强化学习
策略迭代:使用贝尔曼期望方程,求解最优策略。包含两个核心步骤:
- 策略评估(Policy evaluation)——输入MDP<S,A,P,R,γ>和策略π,输出价值函数vπ
- 策略提升(Policy Improvement)——输入MDP<S,A,P,R,γ>和价值函数vπ,输出最优价值函数v* 和最优策略π*
价值迭代(Value iteration):使用贝尔曼最优方程,求解最优策略
策略评估
迭代策略评估
问题:评估一个给定的策略π,也称为“预测”问题
解决方案:迭代应用贝尔曼期望方程进行回溯
用老的打分器计算新的状态值,赋给新的打分器,实现迭代过程的进行
算法会收敛到vπ
迭代评估算法:
输入待评估的策略π
算法参数:小阈值θ>0,用于确定估计量的精度,对于任意s∈S+,任意初始化V(s)其中V(终止状态)=0,循环:
直到△<θ,其中策略π与环境奖励R均为已知(输入量)。求得的vπ在阈值θ允许的范围下,可以认为满足贝尔曼期望方程,但不一定满足贝尔曼最优方程。如果输入的策略π为最优策略,则迭代后的价值函数接近贝尔曼最优价值函数。
例子:小型网格世界中的随机策略评估
已知条件:
- 状态空间S:S1~S14为非终止状态,ST为中止状态(两个灰色正方形)
- 动作空间A:对于任何非终止状态可以有东、南、西、北四个移动动作
- 转移概率P:每个动作会导致状态转移,但当动作会导致智能体移出时,状态不变
- 即时奖励R:任何非终止状态间的转移得到的即时状态奖励均为-1,进入终止状态奖励为0
- 折扣率:γ = 1
- 智能体遵循随机策略
π(n |·) = π(e |·) = π(s |·) = π(w |·) = 0.25
问题:评估在小型网格世界中的随机策略
同步更新:像上图示这样一次迭代计算完所有的价值函数数据后,再将整张网格图作为下一次迭代的输入数据。
异步更新:将每一个小正方形作为迭代单位,完成迭代计算后即存入网格,作为下一个网格迭代的可用数据。异步更新不需要另辟存储空间来储存上一次的迭代结果,即直接在整张网格上逐“像素”迭代。因此有些时候需要考虑网格迭代的顺序。
经过多次迭代(k→∞),最后的策略评估结果(即每个网格的价值函数)满足贝尔曼期望方程,但不一定满足贝尔曼最优方程,这取决于在迭代开始前指定的动作策略π
策略迭代
如何获得最优策略?
策略迭代 方法,交替进行以下步骤:
-
评估给定的策略π,获得价值函数
-
应用贪婪方法来改进策略,使其后续状态价值增加最多
-
通过价值函数计算得到当前的vπ,进而通过贪婪策略得到新的π’(迭代进行),将新的π’再送入计算其vπ’,如此循环
-
在小型网格世界中,改进后的策略就是最佳的策略,π’=π*
-
但是更多场合中,我们需要进行多次的评估和改进迭代,才能找到最优策略
-
上述算法一般都能收敛至最优策略π*
策略迭代算法
前期知识铺垫:
迭代算法(用于估计 π ≈ π最优 ):
- 初始化:对于任意s∈S,任意初始化V(s),π(s)∈A(s)
- 策略评估:循环△ ← 0,对于每一个s∈S循环:直到△<θ(一个确定估计量的精度小正数)
- 策略改进:
Policy - stable ← true
,对于每一个s∈S
:如果Policy - stable
为true,那么停止并返回V = v*
。以及π = π*;否则跳转到2.策略评估 -
每次先存下当前的动作策略,然后通过贪婪机制得到新的策略。通过argmax将动作集中所用动作中使得价值取得最大值的对应动作赋给π(s),而直接放弃其他动作,这就是一种贪婪机制
最优策略:
如果改进停止,则满足(收敛于最大值等于期望值):
并满足贝尔曼最优方程:
此时,对于所有的s∈S,vπ(s) = v*(s),所以π是最优策略
在策略评估阶段,不一定要求最终的价值函数一定收敛到vπ,比如在小型网络结构中,价值评估阶段迭代三次就可以使得最终输出最优策略
价值迭代
可以认为是k = 1的迭代算法
- 初始化:对于任意s∈S,任意初始化V(s),π(s)∈A(s)
- 策略评估:对于每一个s∈S循环:
- 策略改进:
Policy - stable ← true
对每一个s∈S:如果Policy - stable
为true,那么停止并返回V = v*。以及π = π*;否则跳转步骤2
此时其实已经可以将上述的步骤2与步骤3合并:
并得到贝尔曼最优方程:
j价值迭代算法(用于估计 π ≈ π最优 ):
算法参数:小阈值θ>0,用于确定估计量的精度,对于任意s∈S+,任意初始化V(s),其中V(终止状态)=0,循环:
直到△<θ
输出一个确定的策略 π ≈ π*,使得
价值迭代可以理解为策略迭代的一个特殊过程
例子:网格价值迭代
红色方框:
-2 = max{
- 向北:即时奖励-1,加上回到原地的上个状态value = -1,相加为-2;
- 向南:即时奖励-1,加上到达的下个格子的上个状态value = -1,相加为-2;
- 向西:即时奖励-1,加上到达的下个格子的上个状态value = -1,相加为-2;
- 向东:即时奖励-1,加上到达的下个格子的上个状态value = -1,相加为-2;
}
蓝色方框:
-1 = max{
- 向北:即时奖励-1,加上到达的下个格子的上个状态value = -0,相加为-1;
- 向南:即时奖励-1,加上到达的下个格子的上个状态value = -1,相加为-2;
- 向西:即时奖励-1,加上回到原地的上个状态value = -1,相加为-2;
- 向东:即时奖励-1,加上到达的下个格子的上个状态value = -1,相加为-2;
}
总结
问题 | 贝尔曼方程 | 算法 |
---|---|---|
预测 | 贝尔曼期望方程 | 迭代策略评估 |
控制 | 贝尔曼期望方程 + 贪婪策略改进 | 策略迭代 |
控制 | 贝尔曼最优方程 | 价值迭代 |