贝尔曼方程
第一部分——return
return 能够作为策略好坏的一个评估标准
下面通过三种情况来说明这个问题
第一种策略
按照策略1,从 s1 出发,往下去 s3,再往右到达 s4,discounted return计算如下
gamma 是衰减系数
第二种策略
第三种策略
注意,严格说来,这个return3 已经不是我们所说的return了,因为return是针对一条轨迹定义的,针对一个trajectory定义的,这里实际上是有两个轨迹,这里所做的是求取平均值,也即求expectation(期望),这个return3就是state value
显然,return1 > return3 > return2,那么对应的就是策略1最好,策略3居中,策略2最差
第二部分——return的计算
以图中的例子为例
用 v_i来表示从 s_i 出发对应的return
方法一
方法二
这里的方法二说明了什么一个问题呢,从当前状态出发,return的值,就等于当前的reward + 下一状态的return * 衰减因子gamma,也就是说从一个状态出发,它的return是依赖于其他状态的return的,这种思想在强化学习中被称之为 bootstrapping,这种思想是从自身出发,不断迭代所得到的结果
通过矩阵的形式给出上面的四个式子
对该式子进行求解得到 v,实际上这个式子就是 贝尔曼方程,但这是一个非常简单的贝尔曼方程
第三部分——state value
先来看一个单步的过程
$$
S_t \xrightarrow{A_t} R_{t+1}, S_{t+1}
$$在这个过程中,都存在一个条件概率
再来看一个多步的过程 trajectory
$$
S_t \xrightarrow{A_t} R_{t+1}, S_{t+1} \xrightarrow{A_{t+1}} R_{t+2}, S_{t+2} \xrightarrow{A_{t+2}} R_{t+3}, \ldots
$$其对应的 discounted return如下
$$
G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \ldots
$$这里的G_t 也是一个随机变量
正式介绍 state value
state value 实际上就是 G_t 的期望值(expectation)或平均值
$$
v_\pi(s) = \mathbb{E}[G_t | S_t = s]
$$它是关于状态s的一个函数,所以在不同状态下,对应不同的G_t也对应不同的 state value
另外,它也是关于策略pi的函数,也可以写为 v(s , pi),不同的策略会得到不同的轨迹,从而得到不同的G_t
state value不仅仅是一个数值,当其值很大时,说明当前状态具有很高的价值
return 与 state value的区别
return是针对单个trajectory而言的,单个trajectory的return(对应的是一种确定性,如拓扑图)
state value是针对多个trajectory而言的,它是多个trajectory的return的平均值(对应的是一种随机性)
第四部分——贝尔曼公式的推导
贝尔曼公式就是用来计算上一部分提到的state value,它描述了不同状态下state value之间的关系
考虑这样一个trajectory
$$
S_t \xrightarrow{A_t} R_{t+1}, S_{t+1} \xrightarrow{A_{t+1}} R_{t+2}, S_{t+2} \xrightarrow{A_{t+2}} R_{t+3}, \ldots
$$对应的G_t(discounted return)可以表示为
对应的v( s, pi)(state value)可以表示为(贝尔曼公式)
上面的表达式中的第一项的详细表示
在状态s下,采取行动a之后所得到的即时奖励r的期望值
在当前状态s下,有多个可采取的action,每个action对应的一个概率 pi
当采取action a,所得到的value就是
$$
\mathbb{E}[R_{t+1} | S_t = s, A_t = a]
$$也等同于
$$
\sum_{r} p(r | s, a) r
$$它的意思是,在状态s下,采取动作a,得到的即时奖励r的概率为p,最后乘以r本身
所以这整个第一项的期望就是这么求来的,它实际上就是所能得到的即时奖励r的期望值
第二部分的详细表示
在当前状态s下,下一个时刻的return的期望值
这里隐含了一个马尔科夫性,即下一状态,只取决于当前状态,与当前状态之前的状态无关
其余的变换都是概率论中的一些技巧
然后就是正式给出贝尔曼公式的表达式(看起来好复杂!)
它描述了不同状态的state value之间的关系,如上面所示,左边是s的state value,右边的式子包含s’的state value
另外,这是针对一个状态空间而言的,对应的可能是多个式子多个s,而不是一个单一的式子
其求解思想就是 bootstrapping,还依赖于几个概率,第一个是概率是policy,求解出 state value就是在评估策略的好坏,后面两个概率对应的是两个model,dynamic model或 environment model,这里的model可能是已知的也可能是未知的(model free RL)
通过一个例子深入理解贝尔曼公式
先来s1的state value
先看第一个式子,在状态s1下采取动作a3的概率是1,不采取a3的概率是0,也就是说必然采取a3,那么第一部分就等于 1
第二个式子,在状态s1下采取动作a3后状态转换为s3的概率是1,不为s3的概率为0,也就是说状态必然转换为s3,所以第三部分的值为v_pi(s3)*gamma
第三个式子,在状态s1下采取动作a3后获得的即时奖励r=0的概率是1,r不等于0的概率是0,所以第二部分的值为0
此时s1的state value对应的的贝尔曼公式为
$$
v_{\pi}(s_1) = 0 + \gamma v_{\pi}(s_3)
$$这里所得到的形式,过程虽然复杂,但实际上就是跟 第二部分中(return的计算)方法二的表达式是一个道理,那么根据这个思想,就可以直接得出其他几个状态下的state value的贝尔曼公式
有了这几个方程组,就可以通过矩阵的思想来求解了(也可以采取其他办法),得到的结果如下
当 gamma 取某个值时,上面的式子也会对应有一个确定的值,而这个值的大小就说明了那些状态是值得去探索的
计算得到 state value 之后,根据其反映出来的情况,就可以根据需要去改进策略(policy evaluation),不断的改进策略以得到最优策略
第五部分——贝尔曼公式的矩阵和向量形式
贝尔曼公式是针对一个状态空间而言的,所以自然而然的与矩阵产生关联
将贝尔曼公式的形式进行一个变换,先看贝尔曼公式最初的形式
将其改写为
改写后的式子,第一部分表示的是:从当前状态s出发,所能得到的即时奖励r的平均值(期望)
再将上面改写后的形式进一步简化为
$$
v_{\pi} = r_{\pi} + \gamma P_{\pi} v_{\pi}
$$其中
举一个n=4的例子
上式右边第一部分 r_pi 表示:从状态s出发获得的即时奖励r的期望(平均值)
第二部分中前一个矩阵 P_pi 表示:从状态s_i转换为s_j的概率
给定一个policy,可以列出一个与之对应的贝尔曼公式,通过对贝尔曼公式进行求解得到 state value,这样的过程就称之为 policy evaluation,通过评估一个策略的优劣,进而去改进策略,最终得到最优策略
求解贝尔曼方程的常用方法(求逆的方法通常不推荐,因为当矩阵维数很大时,求逆的计算量很大)
常用的是迭代法求解
$$
v_{k+1} = r_{\pi} + \gamma P_{\pi} v_{k}
$$从 v_0开始,可以先假定一个值,然后就可以求出v_1,通过v_1又求出v_2,以此类推,求得v_k,v_k+1,最后就会求出这样一个序列,v_0,v_1…v_k,当 k 趋近于无穷时,就有
v_k收敛到了v_pi,证明如下
其证明过程类似于李亚普诺夫函数的稳定性证明
在下面这样一个例子中,说明了一些情况
可以发现,越靠近目标区域的状态的state value越大,反之则越小
另外就是,不同的策略可能会得到相同的state value
通过计算state value可以评估一个策略的优劣
第六部分——Action value
state value 和 Action value 的联系与区别
前者是agent从一个状态出发,所获得的return的平均值(期望)
后者是agent从一个状态出发并且选择了一个Action之后,所获得的returen的平均值(期望)
为什么要引入action value,因为一个状态的转换是选择了一个Action之后引起的
定义
它依赖策略pi
它与state value 数学式上的联系,state value可以表示为下面这个形式
在一个状态下,可能有多种可选的动作,每个动作都有对应的概率,上式右边部分表示,在状态s下,选择动作a后的所获得的return的平均值 * 在状态s下选择动作a的概率
注意到,右边的前面一部分就是 action value的定义,所以二者数学式的联系如下
这个式子说明什么呢,说明了已知一个状态的 action value,对其求平均就可以求出其对应的 state value
另外呢,根据前面第五部分开头的表达式可以进一步给出 action value的表达式
而这个式子,它有说明了,已知一个状态的 state value 可以求出其对应的 action value
(没怎么懂,迷迷糊糊的!)