强化学习经典算法笔记——推导贝尔曼方程
在写强化学习经典算法笔记(一):价值迭代算法Value Iteration和强化学习经典算法笔记(二):策略迭代算法Policy Iteration的时候,感觉关键的部分——为什么要这样进行值(策略)迭代,没有讲清楚,概念有点模糊,所以感觉有必要重新关注一下Bellman Equation的来龙去脉,也是加强自己对这一块内容的理解。
相关概念
在介绍贝尔曼方程之前,必须对几个概念有所了解,下面我们一一介绍。
- 策略函数,Policy Function
- 状态价值函数,State Value Function
- 状态动作价值函数,State-action Value Function
策略函数 Policy Function
策略常表示为π ( s ) : S → A \pi(s):\ S\rightarrow Aπ(s): S→A,函数的输入是一个状态s ss,输出状态s ss下应该采取的动作 a aa 。策略函数的最优化是强化学习算法的核心任务。
状态价值函数 State Value Function
策略π ( s ) \pi(s)π(s)的优劣可以用状态价值函数来评价。常简称为Value Function,即价值函数。
Value Function的意义是,当处于状态s t s_tst时,从下一个状态s t + 1 s_{t+1}st+1开始,直至一个Episode结束,都按照策略π ( s ) \pi(s)π(s)与env进行交互,将从s t + 1 s_{t+1}st+1到s ∞ s_{\infin}s∞过程中得到的reward累加起来,取其期望值作为状态s t s_tst的价值。即
V π ( s ) = E π [ R t ∣ s t = s ] V^{\pi}(s)=E_{\pi}[R_t\ |\ s_t=s]Vπ(s)=Eπ[Rt ∣ st=s]
因为R t = ∑ k = 0 ∞ γ k r t + k + 1 R_t=\sum_{k=0}^{\infin} \gamma^k\ r_{t+k+1}Rt=∑k=0∞γk rt+k+1 ,其中r t + 1 r_{t+1}rt+1表示从s t s_tst转移到s t + 1 s_{t+1}st+1时的回报。
V π ( s ) = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s ] V^{\pi}(s)=E_{\pi}[\sum_{k=0}^{\infin}\gamma^k\ r_{t+k+1}\ |\ s_t=s]Vπ(s)=Eπ[k=0∑∞γk rt+k+1 ∣ st=s]
直观来看,一个状态的价值是从这个状态开始,依照某种策略,继续与环境进行交互而得到的总的回报。因此可以说Value Function受两个变量的控制,一个是状态s ss,从不同的状态出发,得到的分数有可能一样,有可能不一样。另一个就是策略函数Policy Function,Value Function一定是建立在某个策略上做出的评价,处于同一个状态s ss时,依照策略π 1 ( s ) \pi_1(s)π1(s)玩下去的得分高于π 2 ( s ) \pi_2(s)π2(s),我们就可以说,π 1 \pi_1π1优于π 2 \pi_2π2。
另外需要注意,Value的定义是取累计回报的期望值,因为环境的不确定,进行N个episode的实验,得到N个s t + 1 s_{t+1}st+1到s ∞ s_{\infin}s∞的累计汇报R t R_tRt,这N个值不可能完全一样,因此可以将R t R_tRt建模为一个随机变量,并取E [ R t ] E[R_t]E[Rt]作为状态s t s_tst的比较可靠的评价。
状态动作价值函数 State-action Value Function
状态动作价值函数一般称为Q值函数——Q Function。相比于Value Function是对状态的评估,Q Function是对(状态-动作对) 的评估。
Q值的定义是,给定一个状态s t s_tst,采取动作a t a_tat后,按照某一策略π ( s ) \pi(s)π(s)与环境继续进行交互,得到的累计汇报的期望值。
Q π ( s , a ) = E π [ R t ∣ s t = s , a t = a ] Q^{\pi}(s,a)=E_{\pi}[R_t\ |\ s_t=s,a_t=a]Qπ(s,a)=Eπ[Rt ∣ st=s,at=a]
即
Q π ( s , a ) = E π [ ∑ k = 0 ∞ γ k r t + k + 1 ∣ s t = s , a t = a ] Q^{\pi}(s,a) = E_{\pi}[\sum_{k=0}^{\infin}\gamma^k\ r_{t+k+1}\ |\ s_t=s,a_t=a]Qπ(s,a)=Eπ[k=0∑∞γk rt+k+1 ∣ st=s,at=a]
Q函数对状态的评价更细化,精确到了每一个动作上。通过Q函数,可以确定在每个状态时应该采取什么动作。
Bellman Equation
贝尔曼方程用于求解MDP问题,也就是找到最优策略及其对应的价值函数。最优价值函数是在每一个状态上,其值 ≥ \ge≥ 其他价值函数在该状态的值 的价值函数。
V ∗ ( s ) = m a x π V π ( s ) V^*(s) = max_{\pi}V^{\pi}(s)V∗(s)=maxπVπ(s)
从另一个角度看,在状态s ss取最优的价值V ∗ ( s ) V^*(s)V∗(s),也就意味着,在状态s ss,依照最优Q函数,采取最优的动作a aa,得到的价值Q ∗ ( s , a ) Q*(s,a)Q∗(s,a)
V ∗ ( s ) = m a x a Q ∗ ( s , a ) V^*(s)=max_a Q^*(s,a)V∗(s)=maxaQ∗(s,a)
我们先给出价值函数的贝尔曼方程,它表示的是当前状态和下一个状态之间的递归关系。
V π ( s ) = ∑ a π ( s , a ) ∑ s ′ p s s ′ a [ R s s ′ a + γ V π ( s ′ ) ] V^{\pi}(s)=\sum_a \pi(s,a)\sum_{s'}p_{ss'}^a[R_{ss'}^{a}+\gamma V^{\pi}(s')]Vπ(s)=a∑π(s,a)s′∑pss′a[Rss′a+γVπ(s′)]
相应地,我们给出基于Q函数的贝尔曼方程。
Q π ( s , a ) = ∑ s ′ P s s ′ a [ R s s ′ a + γ ∑ a ′ Q π ( s ′ , a ′ ) ] Q^{\pi}(s,a) = \sum_{s'} P_{ss'}^a[R_{ss'}^a+\gamma \sum_{a'}Q^{\pi}(s',a')]Qπ(s,a)=s′∑Pss′a[Rss′a+γa′∑Qπ(s′,a′)]
其中,P s s ′ a P_{ss'}^aPss′a是前后状态之间的转移概率,R s s ′ a R_{ss'}^aRss′a是采取动作a aa,从s ss转移到s ′ s's′,环境反馈的reward。
利用上面的V和Q的关系,得到
V ∗ ( s ) = m a x a ∑ s ′ P s s ′ a [ R s s ′ a + γ ∑ a ′ Q π ( s ′ , a ′ ) ] V^*(s) = max_a\sum_{s'}P_{ss'}^a[R_{ss'}^a+\gamma \sum_{a'}Q^{\pi}(s',a')]V∗(s)=maxas′∑Pss′a[Rss′a+γa′∑Qπ(s′,a′)]
上式称为Bellman最优性方程,通过解这个方程,可以得到最优策略。而强化学习经典算法笔记(一):价值迭代算法Value Iteration和强化学习经典算法笔记(二):策略迭代算法Policy Iteration中的关键一步,正是上面这个式子的实现(只缺了max)。
for next_sr in env.P[state][action]:
# 在当前state和action的情况下,把可能转移的状态遍历一遍
# next_sr = (0.3333333333333333, 8, 0.0 , False)
# next_sr = (状态转移概率, 下一个状态,得到reward的概率,游戏是否结束)
trans_prob, next_state, reward_prob, _ = next_sr
# 下一状态t的动作状态价值 = 转移到t状态的概率 × ( env反馈的reward + γ × t状态的当前价值 )
next_states_rewards.append((trans_prob * (reward_prob + gamma * updated_value_table[next_state])))
贝尔曼方程的推导
先前定义的转移概率P s s ′ a P_{ss'}^aPss′a可以展开写成一个条件概率
P s s ′ a = P ( s t + 1 = s ′ ∣ s t = s , a t = a ) ① P_{ss'}^a=P(s_{t+1}=s'\ |\ s_t=s,a_t=a)\quad ①Pss′a=P(st+1=s′ ∣ st=s,at=a)①
再看R s s ′ a R_{ss'}^aRss′a,R s s ′ a R_{ss'}^aRss′a是从s t s_tst状态转移到s t + 1 s_{t+1}st+1状态的回报概率。(应该是一个介于0和1之间的值)
R s s ′ a = E ( R t + 1 ∣ s t = s , s t + 1 = s ′ , a t = a ) ② R_{ss'}^a = E(R_{t+1}\ |\ s_t=s,s_{t+1}=s',a_t=a) \quad ②Rss′a=E(Rt+1 ∣ st=s,st+1=s′,at=a)②
即
R s s ′ a = γ E π [ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t + 1 = s ′ ] ③ R_{ss'}^a = \gamma E_{\pi}[\sum_{k=0}^{\infin}\gamma^kr_{t+k+2}\ |\ s_{t+1}=s'] \quad ③Rss′a=γEπ[k=0∑∞γkrt+k+2 ∣ st+1=s′]③
但是从②式推导③式的过程我不是很理解。因为R t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ R_t=r_{t+1}+\gamma r_{t+2}+\gamma^2r_{t+3}+\cdotsRt=rt+1+γrt+2+γ2rt+3+⋯,所以
R t + 1 = r t + 2 + γ r t + 3 + γ 2 r t + 4 + ⋯ = ∑ k = 0 ∞ γ k r t + k + 2 R_{t+1} = r_{t+2}+\gamma r_{t+3}+\gamma^2r_{t+4}+\cdots= \sum_{k=0}^{\infin}\gamma^kr_{t+k+2}Rt+1=rt+2+γrt+3+γ2rt+4+⋯=∑k=0∞γkrt+k+2,将这个式子带入②式,和③式之间还是差着γ \gammaγ倍。
我们再来看状态函数的定义:
V π ( s ) = E π [ R t ∣ s t = s ] V^{\pi}(s)=E_{\pi}[R_t|s_t=s]Vπ(s)=Eπ[Rt∣st=s]
V π ( s ) = E π [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ ∣ s t = s ] V^{\pi}(s)=E_{\pi}[r_{t+1}+\gamma r_{t+2}+\gamma^2r_{t+3}+\cdots|s_t=s]Vπ(s)=Eπ[rt+1+γrt+2+γ2rt+3+⋯∣st=s]
把第一项提出来,之后的项写成求和的形式,就可以看成是前后两项求期望。一项是从s t s_tst跳转到s t + 1 s_{t+1}st+1,得到当前回报 r t + 1 r_{t+1}rt+1;第二项是按照策略π ( s ) \pi(s)π(s)继续走下去得到的累计回报∑ k = 0 ∞ γ k r t + k + 2 \sum_{k=0}^{\infin}\gamma^kr_{t+k+2}∑k=0∞γkrt+k+2。
V π ( s ) = E π [ r t + 1 + γ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t = s ] ④ V^{\pi}(s) = E_{\pi}[r_{t+1}+\gamma\sum_{k=0}^{\infin}\gamma^kr_{t+k+2}|s_t=s]\quad ④Vπ(s)=Eπ[rt+1+γk=0∑∞γkrt+k+2∣st=s]④
把第二项拿出来,因为我们知道从s t s_tst跳转到s t + 1 s_{t+1}st+1,有多个可能的动作以及对应的转移概率和回报概率,将其展开,就是下式,式中的s ′ s's′表示下一状态,∑ s ′ \sum_{s'}∑s′表示遍历状态s ss的所有可能的下一状态。
E π [ r t + 1 ∣ s t = s ] = ∑ a π ( s , a ) ∑ s ′ P s s ′ a R s s ′ a ⑤ E_{\pi}[r_{t+1}|s_t=s]=\sum_a\pi(s,a)\sum_{s'}P_{ss'}^aR_{ss'}^a \quad ⑤Eπ[rt+1∣st=s]=a∑π(s,a)s′∑Pss′aRss′a⑤
把②式带入⑤式右边,得
∑ a π ( s , a ) ∑ s ′ p s s ′ a γ E π [ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t + 1 = s ′ ] ⑥ \sum_a\pi(s,a)\sum_{s'}p_{ss'}^a\gamma E_{\pi}[\sum_{k=0}^{\infin}\gamma^kr_{t+k+2}\ |\ s_{t+1}=s']\quad ⑥a∑π(s,a)s′∑pss′aγEπ[k=0∑∞γkrt+k+2 ∣ st+1=s′]⑥
再看第二项 E π [ γ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t = s ] E_{\pi}[\gamma \sum_{k=0}^{\infin}\gamma^kr_{t+k+2}|s_t=s]Eπ[γ∑k=0∞γkrt+k+2∣st=s],表示状态s t s_tst的后2个状态(s t + 2 s_{t+2}st+2)开始的累计回报,所以应该遍历各个可能的s t + 1 s_{t+1}st+1状态。
E π [ γ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t = s ] = ∑ a π ( s , a ) ∑ s ′ P s s ′ a γ E π [ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t + 1 = s ′ ] ⑦ E_{\pi}[\gamma \sum_{k=0}^{\infin}\gamma^k r_{t+k+2}|s_t=s]=\sum_a\pi(s,a)\sum_{s'}P_{ss'}^a\gamma E_{\pi}[\sum_{k=0}^{\infin}\gamma^kr_{t+k+2}|s_{t+1}=s'] \quad ⑦Eπ[γk=0∑∞γkrt+k+2∣st=s]=a∑π(s,a)s′∑Pss′aγEπ[k=0∑∞γkrt+k+2∣st+1=s′]⑦
把上面⑥⑦两式加起来,
V π ( s ) = ∑ a π ( s , a ) ∑ s ′ P s s ′ a [ R s s ′ a + γ E π [ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t + 1 = s ′ ] ] ⑧ V^{\pi}(s)=\sum_a\pi(s,a)\sum_{s'}P_{ss'}^a[R_{ss'}^a+\gamma E_{\pi}[ \sum_{k=0}^{\infin}\gamma^kr_{t+k+2}|s_{t+1}=s']]\quad ⑧Vπ(s)=a∑π(s,a)s′∑Pss′a[Rss′a+γEπ[k=0∑∞γkrt+k+2∣st+1=s′]]⑧
把E π [ ∑ k = 0 ∞ γ k r t + k + 2 ∣ s t + 1 = s ′ ] E_{\pi}[ \sum_{k=0}^{\infin}\gamma^kr_{t+k+2}|s_{t+1}=s']Eπ[∑k=0∞γkrt+k+2∣st+1=s′]写成V π ( s ′ ) V^{\pi}(s')Vπ(s′),即下一状态的价值函数,则上式化简为Value函数的贝尔曼方程
V π ( s ) = ∑ a π ( s , a ) ∑ s ′ P s s ′ a [ R s s ′ a + γ V π ( s ′ ) ] ⑨ V^{\pi}(s)=\sum_a\pi(s,a)\sum_{s'}P_{ss'}^a[R_{ss'}^a+\gamma V^{\pi}(s')] \quad ⑨Vπ(s)=a∑π(s,a)s′∑Pss′a[Rss′a+γVπ(s′)]⑨
类似的,可以推出Q函数的贝尔曼方程
Q π ( s , a ) = ∑ s ′ P s s ′ a [ R s s ′ a + γ ∑ a ′ Q π ( s ′ , a ′ ) ] ⑩ Q^{\pi}(s,a)=\sum_{s'}P_{ss'}^a[R_{ss'}^a+\gamma \sum_{a'}Q^{\pi}(s',a')] \quad ⑩Qπ(s,a)=s′∑Pss′a[Rss′a+γa′∑Qπ(s′,a′)]⑩