《强化学习的数学原理》中文版第2章-第4章总结

文章目录

策略迭代和值迭代

两者都用于在已知MDP模型(即知道状态转移概率 P P P励函数 R R R)的情况下,找到最优策略 π ∗ \pi^* π∗,但实现路径截然不同。首先明确一下这里的"策略"和"值"的含义。

1.策略

策略是一个函数,通常用 π ( a ∣ s ) \pi(a|s) π(a∣s)来表示在状态 s s s采取动作 a a a的概率,规定了在某个状态下应该采取什么动作。它可以是确定性的(比如:在状态A一定向右走),也可以是随机性的(比如:在状态A有80%概率向右,20%概率向下)。

2.值

:通常指状态价值函数 V ( s ) V(s) V(s) 或动作价值函数 q ( s , a ) q(s,a) q(s,a)。一般我们用状态值 V ( s ) V(s) V(s),它表示智能体从一个状态出发所能获得的回报的期望值。在强化学习中,一个"状态值" V π ( s ) V_\pi(s) Vπ(s) 必须满足一个核心条件:它必须是某个特定策略 π \pi π下的期望回报,并且必须满足该策略的贝尔曼方程。

v π ( s ) = E [ R t + 1 ∣ S t = s ] + E [ γ G t + 1 ∣ S t = s ] = ∑ a ∈ A π ( a ∣ s ) ∑ r ∈ R p ( r ∣ s , a ) r + γ ∑ a ∈ A π ( a ∣ s ) ∑ s ′ ∈ S p ( s ′ ∣ s , a ) v π ( s ′ ) , s ∈ S (1) \begin{split} v_{\pi}(s)&=\mathbb{E}[R_{t+1} |S_t=s] + \mathbb{E}[γG_{t+1}|S_t=s] \\ &=\sum_{a\in\mathcal{A}}\pi(a|s)\sum_{r\in\mathcal{R}}p(r|s,a)r+γ\sum_{a\in\mathcal{A}}\pi(a|s)\sum_{s'\in\mathcal{S}}p(s'|s,a)v_\pi(s'),s\in\mathcal{S} \end{split} \tag{1} vπ(s)=E[Rt+1∣St=s]+E[γGt+1∣St=s]=a∈A∑π(a∣s)r∈R∑p(r∣s,a)r+γa∈A∑π(a∣s)s′∈S∑p(s′∣s,a)vπ(s′),s∈S(1)

式(1)中,第一个等号右端第一项是即时奖励的期望值,第二项是未来奖励的期望值。

第二个等号右端第一项是即时奖励期望值的具体数学表达式,其含义可以近似认为是对所有动作的加权平均 ,这一项中的第二个求和符号含义是:对于已选定的动作 a a a,由于环境具有随机性,执行 a a a后可能会转移到不同的 s ′ s' s′并获得不同的 r r r,此时,求 ∑ r ∈ R p ( r ∣ s , a ) r \sum_{r\in\mathcal{R}}p(r|s,a)r ∑r∈Rp(r∣s,a)r得到的就是一个条件期望(即在状态 s s s下执行动作 a a a,能得到的平均奖励);这一项的第一个求和符号的含义,在状态 s s s下,可能会以概率 π ( a ∣ s ) \pi(a|s) π(a∣s)选择不同的动作 a a a,此时求 ∑ a ∈ A π ( a ∣ s ) ∑ r ∈ R p ( r ∣ s , a ) r \sum_{a\in\mathcal{A}}\pi(a|s)\sum_{r\in\mathcal{R}}p(r|s,a)r ∑a∈Aπ(a∣s)∑r∈Rp(r∣s,a)r得到的就是全期望,即以概率 π ( a ∣ s ) \pi(a|s) π(a∣s)选择不同的动作 a a a,得到了即时奖励的期望值。

第二个等号右端第二项是未来奖励期望值的具体数学表达式,其含义可以近似认为是从下一个状态开始,按照既定策略玩下去,未来能赚到的总回报的折现值,取平均是多少? 这一项中的 γ \gamma γ是折扣因子,这是对未来收益的"打折"。因为"明天的钱不如今天的钱值钱"。如果 γ = 0 \gamma=0 γ=0,智能体是"短视"的,完全不看未来;如果 γ = 1 \gamma=1 γ=1,智能体是"深谋远虑"的,非常看重长远利益。这一项的第二个求和符号含义是:在当前状态 s s s下,选定的动作 a a a,由于环境具有随机性,执行 a a a后可能会转移到不同的状态 s ′ s' s′,不同的状态 s ′ s' s′具有不同的状态值 v π ( s ′ ) v_\pi(s') vπ(s′),此时求 ∑ s ′ ∈ S p ( s ′ ∣ s , a ) v π ( s ′ ) \sum_{s'\in\mathcal{S}}p(s'|s,a)v_\pi(s') ∑s′∈Sp(s′∣s,a)vπ(s′)得到的就是一个条件期望(即在状态 s s s下执行动作 a a a,能得到的平均奖励);这一项的第一个求和符号的含义,在状态 s s s下,可能会以概率 π ( a ∣ s ) \pi(a|s) π(a∣s)选择不同的动作 a a a,此时求 ∑ a ∈ A π ( a ∣ s ) ∑ s ′ ∈ S p ( s ′ ∣ s , a ) v π ( s ′ ) \sum_{a\in\mathcal{A}}\pi(a|s)\sum_{s'\in\mathcal{S}}p(s'|s,a)v_\pi(s') ∑a∈Aπ(a∣s)∑s′∈Sp(s′∣s,a)vπ(s′)得到的就是全期望,即以概率 π ( a ∣ s ) \pi(a|s) π(a∣s)选择不同的动作 a a a,得到了未来奖励的期望值。

贝尔曼方程清晰地描述了不同状态值之间的关系,以及如何通过迭代的方式求解状态值。此外,由于状态值可用于评价策略的优劣,因此,根据贝尔曼方程求解某一策略的状态值的过程称为策略评价。

3.策略迭代

显式地维护一个策略,通过交替进行"策略评估"和"策略改进"两个步骤来寻找最优解。

  • 工作原理

    • 1.策略评估:锁定当前的策略 π \pi π,然后通过反复计算,算出在这个策略下每个状态 的真实价值 V π ( s ) V_\pi(s) Vπ(s) 。这一步是为了搞清楚当前这个"行为指南"到底有多好。

    • 2.策略改进:基于刚刚计算出的价值函数,对每个状态进行检查,看是否存在一个动作,能比当前策略选择的动作带来更高的价值。如果有,则更新策略。如果策略不再发生变化,说明已经找到了最优策略,算法结束。

  • 特点:逻辑清晰,通常收敛所需的总轮数较少,但每一轮中的"策略评估"步骤需要多次迭代才能完成,计算成本较高

算法:策略迭代算法
初始化:已知模型,即任意(s,a)对应的 p ( r ∣ s , a ) p(r|s,a) p(r∣s,a)和 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a),初始策略 π 0 \pi_0 π0。
目标 :求解最优状态值和最优策略。
当 v π k v_{{\pi}_k} vπk 未收敛时,进行如下迭代:
策略评价:
选择初始值 v π k ( 0 ) v^{(0)}_{{\pi}_k} vπk(0)
当 v π k ( j ) v^{(j)}_{{\pi}_k} vπk(j)未收敛时
对每个状态 s ∈ S s\in\mathcal{S} s∈S
v π k ( j + 1 ) ( s ) = ∑ a π k ( a ∣ s ) [ ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π k ( j ) ] v^{(j+1)}{{\pi}k}(s)=\sum{a}\pi_k(a|s)[\sum{r}p(r|s,a)r+\gamma \sum_{s'}p(s'|s,a)v^{(j)}_{{\pi}_k}] vπk(j+1)(s)=∑aπk(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(j)]
策略改进:
对每个状态 s ∈ S s\in\mathcal{S} s∈S
对每个动作 a ∈ A ( s ) a\in\mathcal{A(s)} a∈A(s)
q π k ( s , a ) = ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π k ( s ′ ) q_{{\pi}k}(s,a)=\sum{r}p(r|s,a)r+\gamma \sum_{s'}p(s'|s,a)v_{{\pi}_k}(s') qπk(s,a)=∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(s′)
a k ∗ ( s ) = a r g m a x a q k ( s , a ) a^*_k(s)=argmax_aq_k(s,a) ak∗(s)=argmaxaqk(s,a)
π k + 1 ( a ∣ s ) = 1 \pi_{k+1}(a|s)=1 πk+1(a∣s)=1 如果 a = a k ∗ a=a^*k a=ak∗;否则 π k + 1 ( a ∣ s ) = 0 \pi{k+1}(a|s)=0 πk+1(a∣s)=0

4.值迭代

不显式地维护一个策略,直接通过贝尔曼最优方程,将策略改进和价值评估合并为一步,假设每一步都是最优的。

  • 工作原理:算法从一个任意的价值函数开始。在每一轮迭代中,它会遍历所有状态,并对每个状态尝试所有可能的动作,计算出动作价值(Q值)。然后,它会贪婪地选择那个能带来最大Q值的动作,并将该最大值作为这个状态的新价值。这个过程不断重复,直到价值函数收敛。最后,通过在每个状态下选择最优动作,从收敛的价值函数中提取出最优策略

  • 特点:实现简单,不需要显式地维护一个策略,每轮迭代的计算量相对较小

直观类比:

想象你在解一个复杂的方程 x = f ( x ) x=f(x) x=f(x)。

  • 你可以以尝试直接代入数值,比如 x 0 = 0 x_0=0 x0=0, 然后计算 x 1 = f ( x 0 ) x_1=f(x_0) x1=f(x0) ,再算 x 2 = f ( x 1 ) x_2=f(x_1) x2=f(x1)...

  • 如果这个过程最终稳定在一个值上,那么这个值就是方程的解。

值迭代就是这样做的:

  • 它把 v ∗ ( s ) v^*(s) v∗(s) 看作一个未知数。

  • 它用一个近似值 v k ( s ) v_k(s) vk(s) 代入右边。

  • 计算出新的 v k + 1 ( s ) v_{k+1}(s) vk+1(s)

  • 重复直到不再变化

所以,值迭代 = 用迭代法求解贝尔曼最优方程的不动点。

算法:值迭代算法
初始化:已知模型,即任意(s,a)对应的 p ( r ∣ s , a ) p(r|s,a) p(r∣s,a)和 p ( s ′ ∣ s , a ) p(s'|s,a) p(s′∣s,a),初始值 v 0 v_0 v0。
目标 :求解最优状态值和最优策略。
当 v k v_k vk尚未收敛时(例如 v k − v k − 1 v_k-v_{k-1} vk−vk−1 的范数大于给定阈值时),进行如下迭代:
对每个状态 s ∈ S s\in\mathcal{S} s∈S
对每个动作 a ∈ A ( s ) a\in\mathcal{A(s)} a∈A(s)
计算 q q q值: q k ( s , a ) = ∑ r p ( r , s a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v k ( s ′ ) q_k(s,a)=\sum_{r}p(r,sa)r+\gamma \sum_{s'}p(s'|s,a)v_k(s') qk(s,a)=∑rp(r,sa)r+γ∑s′p(s′∣s,a)vk(s′)
最大价值动作: a k ∗ ( s ) = a r g m a x a q k ( s , a ) a^*_k(s)=argmax_aq_k(s,a) ak∗(s)=argmaxaqk(s,a)
策略更新: π k + 1 ( a ∣ s ) = 1 \pi_{k+1}(a|s)=1 πk+1(a∣s)=1 如果 a = a k ∗ a=a^*k a=ak∗;否则 π k + 1 ( a ∣ s ) = 0 \pi{k+1}(a|s)=0 πk+1(a∣s)=0
值更新: v k + 1 ( s ) = m a x a q k ( s , a ) v_{k+1}(s)=max_aqk(s,a) vk+1(s)=maxaqk(s,a)

5.为什么说值迭代过程中生成的值不是状态值?

在值迭代(Value Iteration)的过程中,生成的中间值不被认为是严格意义上的"状态值"(State Value),主要原因在于它们并不对应于任何一个具体的、稳定的策略 。在强化学习中,一个"状态值" 𝑉 π ( 𝑠 ) 𝑉_\pi(𝑠) Vπ(s)必须满足一个核心条件:它必须是某个特定策略 π \pi π 下的期望回报,并且必须满足该策略的贝尔曼方程。

  • 策略迭代(Policy Iteration): 在这个算法中,每一步迭代都有一个明确的策略 π k \pi_k πk 。算法会耐心地计算这个策略下的真实状态值(通过多次迭代求解 V π ( k ) V_\pi(k) Vπ(k) ),直到收敛。因此,策略迭代过程中的中间值,都是某个真实策略的状态值

  • 值迭代(Value Iteration): 值迭代走了一条捷径。它并不想等待当前策略的值完全收敛,而是"走一步看一步"。它在更新值的时候,隐含的策略其实是在不断剧烈变化的 。因此,当前计算出的 V k V_k Vk并不满足任何一个固定策略的贝尔曼方程,它只是一个向最优值逼近的"中间变量"

在策略迭代中,我们需要对一个策略进行多次(甚至无穷次)的值更新,直到 V V V 稳定下来,这叫做"策略评估"。而值迭代只做了一次(或极少数几次)评估就急着更新策略了。因为评估过程被强行中断,所以得到的 V k V_k Vk 只是一个粗糙的近似值,无法代表任何实际策略的真实性能。

简单来说,值迭代过程中的中间值不是状态值,是因为它"算得不够彻底"。它没有耐心去计算当前策略下的真实回报,而是为了追求计算速度,牺牲了中间结果的"合法性"。只有当算法跑完最后一轮,收敛的那一刻,它才变回那个我们想要的、对应于最优策略的状态值。

相关推荐
Lips6112 小时前
第五章 神经网络(含反向传播计算)
人工智能·深度学习·神经网络
愚公搬代码2 小时前
【愚公系列】《AI+直播营销》032-主播的选拔和人设设计(主播人设打造的4个要素)
人工智能
love530love2 小时前
告别环境崩溃:ONNX 与 Protobuf 版本兼容性指南
人工智能·windows·python·onnx·stablediffusion·comfyui·protobuf
gorgeous(๑>؂<๑)2 小时前
【电子科大-李晶晶组-AAAI26】利用专用提示引导泛化视觉 - 语言模型
人工智能·语言模型·自然语言处理
程序员果子2 小时前
GraphRAG:让大模型在知识图谱中精准导航
人工智能·git·语言模型·aigc·知识图谱
Code-world-12 小时前
NVIDIA Isaac Sim 安装教程
linux·人工智能·ubuntu·强化学习·isaac sim
猫天意3 小时前
【深度学习小课堂】| torch | 升维打击还是原位拼接?深度解码 PyTorch 中 stack 与 cat 的几何奥义
开发语言·人工智能·pytorch·深度学习·神经网络·yolo·机器学习
cyyt3 小时前
深度学习周报(1.12~1.18)
人工智能·算法·机器学习
摸鱼仙人~3 小时前
深度对比:Prompt Tuning、P-tuning 与 Prefix Tuning 有何不同?
人工智能·prompt