基于动态规划的强化学习算法
基于动态规划的强化学习算法
学习「强化学习」(基于这本教材,强烈推荐)时的一些总结,在此记录一下。
在马尔可夫决策过程 环境模型已知(也就是状态转移函数P、奖励函数r已知)的情况下,我们可以通过 「动态规划」 求得马尔可夫决策过程的最优策略
1. 动态规划
对于做过算法题目的同学而言,这个词应该并不陌生,比较经典的「背包问题」就是需要利用「动态规划」。动态规划的思想是:将当前问题分解为子问题,求解并记录子问题的答案,最后从中获得目标解。它通常用于求解「最优」性质的问题。
而求解马尔可夫决策过程最优策略的动态规划算法主要有两种:
- 策略迭代
- 价值迭代
2. 策略迭代
「策略迭代」 分为「策略评估」和「策略提升」两部分。
策略评估
策略评估会先设定一个初始状态价值函数
策略评估的迭代公式可以看作是「贝尔曼期望方程」+「动态规划」。我们可以看看两者的不同:

光说这些还是不容易理解的,我们用实例演示一遍吧。同样以教材中的「悬崖环境」为例:

假设现在有这么一个

-
可能会有的疑惑:
不是 由状态与动作一起决定 的吗,这里怎么把 直接放在状态上了?
答:这其实是种简化的表达方式,我们应该这么看:这里的 指 从其它状态(格子)以任意方向走到当前状态(格子)的 ,只不过因为它们都相同(因为设置的这个环境比较特殊),所以写在了一起。比如下面这个红色小旗所在格子位置上的 其实是它周围格子走到该格子的 :
- 我们先让初始
全为0,判定迭代结束的小阈值 ,为了方便,让折扣因子 ,而且由于走一步仅能到达一个状态,所以让所有的状态转移概率都为1 :

-
根据迭代公式,开始迭代
,先以起点的 开始:每个状态(格子)都计算完后,就得到了完整的新的
: -
然后进行评估,发现
,还得继续迭代 -
重复与2相同的步骤,根据
求出 ,又可以得到: -
……

总之,在经过多轮的重复迭代后,我们取得了收敛的
策略提升
接下来就是调整策略

根据这个调整方式,来看看最终策略提升得到的新的

然而,这还没有结束,如果不满足
总结
最后,综合「策略评估」和「策略提升」,得到策略迭代算法(教材中的):

3. 价值迭代
「策略迭代算法」似乎计算量大了些,既要进行不断迭代
它可以看作是:「贝尔曼最优方程」+ 「动态规划」。

可以直接来对比下「策略迭代」与「价值迭代」:

红色框表示的是「(所以才叫「价值迭代」嘛
虽然很简单,但同样我们也来实操一遍「价值迭代」,同样用到刚刚的「悬崖」环境:

-
初始化就不提了,直接根据迭代公式,开始迭代
,先以起点的 开始:每个状态(格子)都计算完后,就得到了完整的新的
: -
同样评估一下是否
,如有则继续迭代。这里经过7次迭代就达到判定阈值了: -
最后同样选取最大动作价值,来更新策略即可。如果动作中有多个「最大动作价值」的动作,则给予等概率。
4. 总结
策略迭代在理论上能更好地收敛到最优策略,但有着比较大的计算量;价值迭代可以通过较少的计算就收敛,但不像策略迭代那样有严格的收敛性保证(可以看看这个数学证明)。只能说各有优劣,具体用哪个还得看实际情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了