文章目录
策略迭代和值迭代
两者都用于在已知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 只是一个粗糙的近似值,无法代表任何实际策略的真实性能。
简单来说,值迭代过程中的中间值不是状态值,是因为它"算得不够彻底"。它没有耐心去计算当前策略下的真实回报,而是为了追求计算速度,牺牲了中间结果的"合法性"。只有当算法跑完最后一轮,收敛的那一刻,它才变回那个我们想要的、对应于最优策略的状态值。