“贝尔曼方程”那些事儿:含贝尔曼方程详细推导,通俗易懂

268 阅读4分钟

欢迎大家关注搜索关注微信公众号《一懂算法》,希望能把东西讲的通俗易懂,终极目标是一遍就懂

零、前言

相信只要是浅学过强化学习的人应该都能感受到贝尔曼方程的重要性,可以说是遍布了各种教程的每个角落。在遇到这些贝尔曼方程的时候,一直有几个问题困扰着我:

  1. 怎么又冒出来一个贝尔曼方程?
  2. 咋格式还和上一个不一样,变体咋这么多?
  3. 证明怎么这么跳跃?

几度回看都是跳过贝尔曼方程的细节,不想被绕进去。这几天终于有时间静下心来把证明过程理清了一遍,希望能用直白的语言跟大家讲清楚,尽量掰开揉碎了讲给大家。

一、基础变量符号定义

讲之前还是得声明一下几个重要变量的符号,毕竟不同版本之前的符号约定很容易差异。【这里默认大家了解强化学习基础概念,只是简单声明定义】 第tt回合下:

  1. 奖励为rtr_t,状态为sts_t,动作为ata_t
  2. 回报Gt=Rt+1+γRt+2+γ2Rt+3+γ3Rt+4++γTt1RTG_t=R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\gamma^3R_{t+4}+\ldots+\gamma^{T-t-1}R_T,也就是当前回合到回合结束的总奖励(含折扣)
  3. 状态价值函数Vπ(st)=Eπ[GtSt=st]V_\pi(s_t)=\mathbb{E}_\pi\begin{bmatrix}G_t\mid S_t=s_t\end{bmatrix},即sts_t状态下回报的期望
  4. 动作价值函数Qπ(st,at)=Eπ[GtSt=st,At=at]Q_\pi(s_t,a_t)=\mathbb{E}_\pi\left[G_t\mid S_t=s_t,A_t=a_t\right],即sts_t状态下执行动作ata_t后回报的期望

二、抽丝剥茧,逐步证明

好了,现在开始进入正文:

  1. 首先,为什么贝尔曼方程能成为强化学习的核心基础?
V(st)=R(st)+γE[Vt+1St=st]\begin{aligned} V(s_t)=R(s_t)+\gamma\mathbb{E}[V_{t+1}|S_t=s_t] \end{aligned}
  • 是因为它描述的是当前状态的价值和下一状态的价值的关系,有了这个关系,就可以通过下一个状态的价值来迭代更新上一状态的价值【这样就可以通过最后一个状态逐步往前倒着推】。
  • 这也是贝尔曼方程推导思想的核心,我们需要想办法找到当前状态价值和下一状态价值的具体关系,搭好它们之间的“大桥”,也就是找到V(st)V(s_t)V(st+1)V(s_{t+1})的公式关系。
  1. 那么如何找到V(st)V(s_t)V(st+1)V(s_{t+1})的公式关系呢?
  • 首先我们先从状态价值函数的定义出发进行拆分,看看能不能从V(st)V(s_t)中拆分出V(st+1)V(s_{t+1})

    V(st)=E[GtSt=st](状态价值函数的定义)=E[Rt+1+γRt+2+γ2Rt+3+St=st](回报的定义)=E[Rt+1St=st]+γE[Rt+2+γRt+3+γ2Rt+4+St=st](期望的可加性)=R(st)+γE[Gt+1St=st](回报的定义)\begin{aligned} V(s_t)& =\mathbb{E}\left[G_t\mid S_t=s_t\right](状态价值函数的定义) \\ &=\mathbb{E}\begin{bmatrix}R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\ldots\mid S_t=s_t\end{bmatrix}(回报的定义) \\ &=\mathbb{E}\left[R_{t+1}|S_t=s_t\right]+\gamma\mathbb{E}\left[R_{t+2}+\gamma R_{t+3}+\gamma^2R_{t+4}+\ldots\mid S_t=s_t\right](期望的可加性) \\ &=R(s_t)+\gamma\mathbb{E}[G_{t+1}|S_t=s_t](回报的定义) \end{aligned}
  • 我们现在得到了V(st)V(s_t)Gt+1G_{t+1}的关系,这个时候我们还是无法去做迭代的,因为V(st)V(s_t)无法继续往前推导出V(st1)V(s_{t-1}),我们还是需要继续得到V(st)V(s_t)V(st+1)V(s_{t+1})之间的迭代关系,才能循环推导下去,因此我们还需要从Gt+1G_{t+1}中拆分出V(st+1)V(s_{t+1})

    • 首先从定义上可以显然知道两者的关系,即V(st+1)=E[Gt+1St+1=st+1]V(s_{t+1})=\mathbb{E}\begin{bmatrix}G_{t+1}\mid S_{t+1}=s_{t+1}\end{bmatrix},这里我们发现其实已经很接近上面的E[Gt+1St=st]\mathbb{E}\begin{bmatrix}G_{t+1}\mid S_t=s_{t}\end{bmatrix}了,两者求期望的目标都是Gt+1G_{t+1},只不过两者求期望的条件不一样,一个是sts_t,一个是st+1s_{t+1}。这个时候我们注意,st+1s_{t+1}就是sts_t的下一个状态,换句话说也相当于sts_t的一个子空间,这时候我们就可以用全期望公式建立起它们的联系了。

    • 全期望公式:E(X)=kmP(Yk)E(XYk)=E(E(XY))E(X)=\sum_{k}^m P(Y_k)E(X|Y_k)=E(E(X|Y)) 公式含义说法1:随机变量X的数学期望等于,局部条件下X的期望的加权平均 公式含义说法2:将样本空间划分为m个互斥的子空间,在每个空间下对X求期望然后再加权平均,结果就等于直接对X求期望

    • 那么由全期望公式我们可以得到:

      E[Gt+1St=st]=st+1E[Gt+1St=st,St+1=st+1]p(st+1st)\mathbb{E}[G_{t+1}|S_{t}=s_{t}]=\sum_{s_{t+1}}\mathbb{E}[G_{t+1}|S_t=s_{t},S_{t+1}=s_{t+1}]p(s_{t+1}|s_{t})

      再由于马尔可夫性,Gt+1G_{t+1}其实只和st+1s_{t+1}有关,和sts_{t}无关,因此

      E[Gt+1St=st,St+1=st+1]=E[Gt+1St+1=st+1]=V(st+1)\mathbb{E}[G_{t+1}|S_t=s_{t},S_{t+1}=s_{t+1}]=\mathbb{E}[G_{t+1}|S_{t+1}=s_{t+1}]=V(s_{t+1})

      将其代回上一个式子得,

      E[Gt+1St=st]=st+1V(st+1)p(st+1st)=E[Vt+1St=st]\mathbb{E}[G_{t+1}|S_{t}=s_{t}]=\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t})=\mathbb{E}[V_{t+1}|S_{t}=s_{t}]

    综上

    V(st)=R(st)+γE[Gt+1St=st]=R(st)+γst+1V(st+1)p(st+1st)=R(st)+γE[Vt+1St=st]\begin{aligned} V(s_t)&=R(s_t)+\gamma\mathbb{E}[G_{t+1}|S_t=s_t] \\ &=R(s_t)+\gamma\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t}) \\ &=R(s_t)+\gamma\mathbb{E}[V_{t+1}|S_t=s_t] \end{aligned}

    以上的公式也被称作“贝尔曼期望方程”。

三、千遍万化,打包汇总

证明好了上面的方程后,很有可能会有人有疑惑:“这和我看到的贝尔曼方程也不是完全一样啊,我看到的感觉更复杂啊”。确实,上面只是贝尔曼方程中的一种形式,但是搞明白了一种之后,其它的推导和转化也就容易了,接下来我们将逐步推导并转化出贝尔曼方程的其它形式:

  1. 贝尔曼期望方程——展开版(考虑动作ata_t

    V(st)=R(st)+γst+1V(st+1)p(st+1st)=R(st)+γst+1[V(st+1)atp(st+1st,at)π(atst)]\begin{aligned} V(s_t) &=R(s_t)+\gamma\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t}) \\ &=R(s_t)+\gamma\sum_{s_{t+1}}[V(s_{t+1})\sum_{a_{t}}p(s_{t+1}|s_{t},a_t)\pi(a_t|s_{t})] \end{aligned}
    • 以上其实就是把p(st+1st)p(s_{t+1}|{s_t})展开,这个通常是结合了马尔可夫决策过程的概念,中间加了一个动作的环节,就是在状态sts_t下,会根据策略π\pi去执行动作ata_t,执行概率为π(atst)\pi(a_t|s_{t}),然后根据ata_t再转移到st+1s_{t+1},转移概率为p(st+1st,at)p(s_{t+1}|s_{t},a_t)。所以上面其实就是一个全概率公式的展开:p(st+1st)=atp(st+1st,at)π(atst)p(s_{t+1}|s_{t})=\sum_{a_{t}}p(s_{t+1}|s_{t},a_t)\pi(a_t|s_{t})

    • 对于R(st)R(s_t),原本R(st)=E[Rt+1St=st]=rt+1rt+1p(rt+1st+1)R(s_t)=\mathbb{E}\left[R_{t+1}|S_t=s_t\right]=\sum_{r_{t+1}}r_{t+1}p(r_{t+1}|s_{t+1}),引入ata_t后,则可同理可展开为:p(rt+1st+1)=atp(rt+1st,at)π(atst)p(r_{t+1}|s_{t+1})=\sum_{a_t}p(r_{t+1}|s_t,a_t)\pi(a_{t}|s_{t})

    • 因此:

      V(st)=rt+1[rt+1atp(rt+1st,at)π(atst)]+γst+1[V(st+1)atp(st+1st,at)π(atst)]=atπ(atst)rt+1rt+1p(rt+1st,at)+γatπ(atst)st+1V(st+1)p(st+1st,at)=atπ(atst)[rt+1rt+1p(rt+1st,at)+γst+1V(st+1)p(st+1st,at)]\begin{aligned} V(s_t) &=\sum_{r_{t+1}}[r_{t+1}\sum_{a_t}p(r_{t+1}|s_t,a_t)\pi(a_{t}|s_{t})]+\gamma\sum_{s_{t+1}}[V(s_{t+1})\sum_{a_{t}}p(s_{t+1}|s_{t},a_t)\pi(a_t|s_{t})]\\ &=\sum_{a_t}\pi(a_{t}|s_{t})\sum_{r_{t+1}}r_{t+1}p(r_{t+1}|s_t,a_t)+\gamma\sum_{a_{t}}\pi(a_t|s_{t})\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t},a_t)\\ &=\sum_{a_t}\pi(a_{t}|s_{t})[\sum_{r_{t+1}}r_{t+1}p(r_{t+1}|s_t,a_t)+\gamma\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t},a_t)] \end{aligned}
    • 注:有的版本会再加个下标π\pi,比如pπ(rt+1st,at)p_\pi(r_{t+1}|s_t,a_t),直接替换即可,不影响以上的推导

  2. 贝尔曼期望方程——矩阵版 矩阵版也是可以从R(st)+γst+1V(st+1)p(st+1st)R(s_t)+\gamma\sum_{s_{t+1}}V(s_{t+1})p(s_{t+1}|s_{t})开始推导,核心需要转化的就是那个求和符号。为了避免符号混乱,我们这里用,ss代表当前tt时刻的状态,它的值可能是(sa,sb,sc)(s_a,s_b,s_c)中的一种,ss'表示下一时刻t+1t+1时刻的状态,它的值同样可能是(sa,sb,sc)(s_a,s_b,s_c)中的一种,也就是p(sbsa)p(s_b|s_a)代表了sas_asbs_b之间的转移概率,外面的求和符号,代表需要在已知ss具体状态值的情况下遍历ss'可能的所有值。假设s有三种状态值(sa,sb,sc)(s_a,s_b,s_c),则将值代入之前的公式得:

    {V(sa)=R(sa)+γs(sa,sb,sc)V(s)p(ssa)V(sb)=R(sb)+γs(sa,sb,sc)V(s)p(ssb)V(sc)=R(sc)+γs(sa,sb,sc)V(s)p(ssc)\left\{ \begin{aligned} V(s_a) = R(s_a)+{\gamma}\sum_{s'\in(s_a,s_b,s_c)}V(s’)p(s'|s_a) \\ V(s_b) = R(s_b)+{\gamma}\sum_{s'\in(s_a,s_b,s_c)}V(s’)p(s'|s_b)\\ V(s_c) = R(s_c)+{\gamma}\sum_{s'\in(s_a,s_b,s_c)}V(s’)p(s'|s_c) \end{aligned} \right.

    写成矩阵形式,则为:

    [V(sa)V(sb)V(sc)]=[R(sa)R(sb)R(sc)]+γ[p(sasa)p(sbsa)p(scsa)p(sasb)p(sbsb)p(scsb)p(sasc)p(sbsc)p(scsc)][V(sa)V(sb)V(sc)]\begin{bmatrix}V(s_a)\\V(s_b)\\V(s_c)\end{bmatrix}=\begin{bmatrix}R(s_a)\\R(s_b)\\R(s_c)\end{bmatrix}+\gamma\begin{bmatrix}p(s_a|s_a)&p(s_b|s_a)&p(s_c|s_a)\\p(s_a|s_b)&p(s_b|s_b)&p(s_c|s_b)\\p(s_a|s_c)&p(s_b|s_c)&p(s_c|s_c)\end{bmatrix}\begin{bmatrix}V(s_a)\\V(s_b)\\V(s_c)\end{bmatrix}

    简化得:

    V=R+γPVV=R+{\gamma}PV

    其中VVRRPPVV和上方一一对应即可

  3. 贝尔曼期望方程——动作价值函数版

    • 形式1:

      Q(st,at)=E[Rt+γV(st+1)St=st,At=at]\begin{aligned} Q(s_t,a_t)=\mathbb{E}[R_t+{\gamma}V(s_{t+1})|S_t=s_t,A_t=a_t] \end{aligned}
      • 相比于第二部分推导出的V(st)=R(st)+γE[Vt+1St=st]V(s_t)=R(s_t)+\gamma\mathbb{E}[V_{t+1}|S_t=s_t],其区别就在于Q(st,at)Q(s_t,a_t)多考虑了动作ata_t,假设我们现在在sts_t状态下只考虑一种动作ata_t,那么之前的推导过程需要把(st)(s_t)变成(st,at)(s_t,a_t)即可,基本不需要做什么改变,因此上面的公式也是可以类似推导的。
    • 形式2:

      Qπ(st,at)=E[Rt+γQπ(St+1,At+1)St=st,At=at]\begin{aligned} Q_\pi(s_t,a_t)=\mathbb{E}[R_t+{\gamma}Q_\pi(S_{t+1},A_{t+1})|S_t=s_t,A_t=a_t] \end{aligned}
      • 相比于形式1,其实就是把Vt+1V_{t+1}展开了,因为V(st+1)=EAt(Qπ(St,At))V(s_{t+1})=E_{A_t}(Q_\pi(S_t,A_t))
  4. 贝尔曼最优方程

    1. 最优贝尔曼方程是对应了”最优动作函数“的状态转移:
      Q(st,at)=ESt+1[Rt+γmaxAAQ(St+1,A)St=st,At=at]Q_{\star}\big(s_{t},a_{t}\big) = \mathbb{E}_{S_{t+1}}\bigg[R_{t}+\gamma\cdot\max_{A\in\mathcal{A}}Q_{\star}\big(S_{t+1},A\big)\bigg|S_{t}=s_{t},A_{t}=a_{t}\bigg]
      其中,Q(st,at)Q_{\star}\big(s_{t},a_{t}\big)对应最优动作函数。这个的推导比较容易,在上一个东西价值函数版贝尔曼方程的基础上,首先把策略π\pi换成最优的策略π\pi^*:Qπ(st,at)=E[Rt+γQπ(St+1,At+1)St=st,At=at]Q_{\pi^*}(s_t,a_t)=\mathbb{E}[R_t+{\gamma}Q_{\pi^*}(S_{t+1},A_{t+1})|S_t=s_t,A_t=a_t],而最优策略π\pi^*必然会选出最优的动作,因此At+1A_{t+1}一定会是选出来的最优动作。

补充

  1. 全期望公式证明
E(X)=i=1nxiP(xi)<期望的定义>=i=1n[xik=1mP(xi,Yk)]<P(xi)展开>=i=1n[xik=1mP(xiYk)P(Yk)]<条件期望的定义>=i=1nk=1m[xiP(xiYk)P(Yk)]<交换求和次序>=k=1m[i=1nxiP(xiYk)]P(Yk)<i求和时,Yk相当于常量>=k=1mE(XYk)P(Yk)<期望的定义>=E(E(XY))<期望的定义>\begin{aligned} &E\left(X\right) \\ &=\sum_{i=1}^nx_iP(x_i) <期望的定义>\\ &=\sum_{i=1}^n\left[x_i{\sum_{k=1}^mP\left(x_i,Y_k\right)}\right] <将P(x_i)展开>\\ &=\sum_{i=1}^n\left[x_i{\sum_{k=1}^mP\left(x_i|Y_k\right)P\left(Y_k\right)}\right] <条件期望的定义>\\ &=\sum_{i=1}^n{\sum_{k=1}^m[x_iP\left(x_i|Y_k\right)P\left(Y_k\right)]} <交换求和次序>\\ &=\sum_{k=1}^m{[\sum_{i=1}^nx_iP\left(x_i|Y_k\right)]P\left(Y_k\right)} <对i求和时,Y_k相当于常量>\\ &=\sum_{k=1}^m{E(X|Y_k)P\left(Y_k\right)} <期望的定义>\\ &=E(E(X|Y))<期望的定义>\\ \end{aligned}