强化学习三大基本方法-DP、MC、TD
强化学习进阶
- 本文主要讲解
- 动态规划法(Dynamic Programming DP)
- 蒙特卡洛法(Monte Carlo MC)
- 时序差分法(Temporal Difference TD)
1. 动态规划法
1.1 动态规划概念
-
动态规划核心思想:
- 其核心思想在于复杂问题的最优解划分为多个小问题的最优解的求解问题,就像递归一样,且子问题的最优解会被储存起来重复利用。
-
动态规划方法在强化学习中使用:
- 在已知状态转移概率和奖励函数的前提下,通过反复更新值函数,找到最优策略的方法
1.2 动态规划法的使用
-
动态规划的前提:
-
环境是一个已知的马尔可夫决策过程(MDP),必须知道:
-
状态集合 S \mathcal{S} S
-
动作集合 A \mathcal{A} A
-
状态转移概率: P ( s ′ ∣ s , a ) P(s'|s,a) P(s′∣s,a)
-
奖励函数: R ( s , a , s ′ ) R(s,a,s') R(s,a,s′)
-
-
在强化学习中,我们的目标是最大化累计奖励。
- 相当于当知道奖励函数和状态转换函数时,便可以根据下一个状态的价值来更新当前状态的价值
- 即可以把计算下一个可能状态的价值当成一个子问题,而把计算当前状态的价值看做当前问题
-
DP 的核心思想是:
- 把求解整个最优策略的问题,分解为求解每个状态最优值的子问题。
-
这就符合动态规划的精髓:最优子结构 + 重叠子问题。
-
1.2.1 方法一:策略迭代
1.2.1.1 策略评估(Policy Evaluation)
-
给定一个策略 π \pi π,估计每个状态 s s s 的值函数 V π ( s ) V^\pi(s) Vπ(s)
-
公式如下(贝尔曼期望方程):
V π ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V π ( s ′ ) ] V^\pi(s) = \sum_a \pi(a|s) \sum_{s'} P(s'|s,a) [R(s,a,s') + \gamma V^\pi(s')] Vπ(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′)]- 用这个公式反复更新所有状态的 V π ( s ) V^\pi(s) Vπ(s),直到收敛。
1.2.2.2 策略改进(Policy Improvement)
-
有了 V π ( s ) V^\pi(s) Vπ(s) 之后,我们可以生成一个“更贪心”的策略。
-
做法:对每个状态 s s s,选择能使 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a) 最大的动作:
KaTeX parse error: Can't use function '$' in math mode at position 2: $̲\pi'(s) = \arg\…- 也就是:让策略尽可能选“更高价值”的动作。
1.2.2.3 策略迭代(Policy Iteration)
-
将上面两个步骤交替执行:
-
初始化一个策略 π \pi π
-
重复直到收敛:
-
策略评估:根据当前策略估算 V π ( s ) V^\pi(s) Vπ(s)
-
策略改进:更新策略 π ← π ′ \pi \leftarrow \pi' π←π′
-
-
-
最终会收敛到一个最优策略 π ∗ \pi^* π∗。
1.2.2.4 算法流程图
初始化 π
重复:1. 用 DP 做策略评估(多个循环直到 V 收敛)2. 用贪心策略改进 π ← π'
直到 π 不再变化
1.2.2 方法二:值迭代
-
不显式做策略评估,而是直接用 Bellman 最优方程迭代值函数
-
核心公式:
V ( s ) ← max a ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V ( s ′ ) ] V(s) \leftarrow \max_a \sum_{s'} P(s'|s,a) [R(s,a,s') + \gamma V(s')] V(s)←amaxs′∑P(s′∣s,a)[R(s,a,s′)+γV(s′)]- 每一步就朝着最优值推进,不需要再等策略完全评估完成。
-
算法流程图
初始化 V(s) 随便设 重复直到收敛:对每个 s:V(s) ← max_a Σ_s' P(s'|s,a) [R + γ V(s')] 最终通过 V 生成最优策略 π*(s) = argmax_a ...
1.3 方法的优缺点
-
优点
-
收敛快、稳定性强
- 利用完整的模型计算,可以精确推导价值函数的收敛。
-
可得最优策略
- 理论上保证找到最优值函数和策略。
-
结构清晰
- 策略评估+策略改进,逻辑明确,适合 理论推导和分析。
-
-
缺点
-
必须知道模型
- 很多实际问题中,环境状态转移和奖励函数是未知的,无法使用 DP。
-
计算量大,不适合大规模状态空间
- 每次更新都需要对所有状态和动作进行遍历计算。
-
不能从真实交互中学习
- 只能在离线已知模型上操作,不适合实际交互式学习。
-
-
以下是从参考文章中补充的数学推导
2. 蒙特卡洛法
2.1 蒙特卡洛方法概述
-
概念
- 蒙特卡洛(monte carlo,简称MC)方法,也称为统计模拟方法,就是通过大量的随机样本来估算或近似真实值,比如近似估算圆的面经、近似定积分、近似期望、近似随机梯度
-
强化学习中的应用
-
类似上面的例子,用蒙特卡洛方法来估计一个策略在一个马尔可夫决策过程中的状态价值。
-
考虑到一个状态的价值是它的期望回报,我们用策略在MDP上采样很多条序列,然后计算从这个状态出发的回报,再求其期望: V π ( s ) = E π [ G t ∣ S t = s ] = 1 N ∑ i = 1 N G t ( i ) V_\pi (s) = E_\pi [G_t|S_t = s] = \frac{1}{N} \sum_{i=1}^{N}G_{t}^{(i)} Vπ(s)=Eπ[Gt∣St=s]=N1∑i=1NGt(i)
-
通俗定义
- 蒙特卡洛方法是通过多次试验采样完整轨迹,然后用这些轨迹中的实际回报来估计状态或动作的价值,从而改进策略。
-
2.2 蒙特卡洛方法使用
2.2.1 策略评估阶段
-
在这一步,我们只是评估当前策略 π \pi π 的效果,不改变它。
-
流程如下:
-
固定策略 π \pi π,用它与环境交互,采样多次轨迹。
-
从每条轨迹中收集回报 G t G_t Gt,估计每个状态 s s s 或状态-动作对 ( s , a ) (s, a) (s,a) 的价值(即 V ( s ) V(s) V(s) 或 Q ( s , a ) Q(s, a) Q(s,a))。
-
此阶段策略是人为设定或初始定义的,不会改变。
-
-
举例
- 「每次都往右走多一点」是当前策略,那你就照这个策略模拟很多次,把每个点走后的总收益 G t G_t Gt 记录下来,用于评价“这套策略好不好”。
2.2.2 策略改进阶段
-
用估计的价值函数,来更新策略
-
这个阶段,我们根据估计出来的值函数来调整策略:
-
方法一:贪婪策略改进(Greedy)
-
如果我们有了动作价值函数 Q ( s , a ) Q(s,a) Q(s,a),那么我们可以对策略这样更新: π ′ ( s ) = arg max a Q ( s , a ) \pi'(s) = \arg\max_a Q(s, a) π′(s)=argmaxaQ(s,a)
-
也就是说,在每个状态 s s s 中,选择价值最高的动作作为新的策略。
-
-
方法二:ε-贪婪策略改进(探索+利用)
-
因为纯贪婪可能陷入局部最优,MC 通常使用 ε-贪婪策略:
-
以 1 − ε 1 - \varepsilon 1−ε 的概率选择最优动作;
-
以 ε \varepsilon ε 的概率随机选一个动作,鼓励探索。
-
-
就是增加一个参数来控制
-
2.3 方法的优缺点
-
优点
-
不需要知道模型
- 可以从与环境的交互中直接学习,适用于模型未知的情况。
-
简单直观
- 基于“真实经验轨迹”估算期望回报,更贴近现实过程。
-
适合非马尔可夫任务的评估
- 如果任务不是严格的 MDP,MC 也能处理。
-
-
缺点
-
必须等一整条轨迹结束才能学习(Delayed update)
- 不能在线更新,每次更新都要等 episode 结束,不适合无限期任务。
-
高方差
- 一条轨迹可能包含很多随机性,导致估计不稳定。
-
效率低
- 需要大量完整轨迹才能得到准确估计,收敛速度慢。
-
3. 时序差分法
- 时序差分法是一种结合了动态规划(DP)和蒙特卡洛(MC)方法优点的学习方法:
- 它像 MC 一样从经验中学习,但像 DP 一样每一步就更新价值函数
3.1 方法的核心思想
-
在一个状态 s t s_t st,执行一个动作 a t a_t at,然后观察到奖励 r t + 1 r_{t+1} rt+1 和下一个状态 s t + 1 s_{t+1} st+1。
-
用以下公式更新当前状态价值:
V ( s t ) ← V ( s t ) + α ⋅ [ R t + 1 + γ V ( s t + 1 ) ⏞ 时序差分目标 − V ( s t ) ] ⏟ 时序差分误差 TD Error V(s_t) \leftarrow V(s_t) + \alpha \cdot \underbrace{[\overbrace {R_{t+1} + \gamma V(s_{t+1})}^{\text{时序差分目标}} - V(s_t)]}_{\text{时序差分误差 TD Error}} V(st)←V(st)+α⋅时序差分误差 TD Error [Rt+1+γV(st+1) 时序差分目标−V(st)]-
α \alpha α:学习率(多快学新信息)
-
γ \gamma γ:折扣因子
-
T D E r r o r = 目标值 − 当前估计 TD\ Error = \text{目标值} - \text{当前估计} TD Error=目标值−当前估计
-
-
通俗理解:
- 原来以为这一步能拿5分,现在从下一个状态估计来看其实是7分,那我就修正一下对当前状态的估计
-
以下是参考文章对于公式的讲解
-
3.2 方法流程
-
以TD(0)为评估策略
-
初始化状态价值函数 V ( s ) V(s) V(s)
-
从起始状态开始与环境交互(执行当前策略)
-
每走一步:
-
得到当前状态 s s s、奖励 r r r、下一状态 s ′ s' s′
-
用上述 TD 公式更新 V ( s ) V(s) V(s)
-
-
不断重复以上过程,直到收敛
-
-
三种方法对比
- MC的做法相当于一条道走到黑 没走个10公里不回头
- DP相当于所有道比如10条道 每条道都走个1公里 不错过任何一条可能成为最好道的可能,最后10条道都走完1公里后才返回汇报/反馈
- TD则相当于先选一条道走个1公里即返回汇报/反馈,之后再走下一条道的1公里
参考文章