Agent不能直接获取状态转移矩阵P和奖励函数R
Agent的每次交互过程,会采集一条轨迹(Trajectories/episodes)
,Agent要收集大量的轨迹,然后从中获取信息,改进策略,以求获得更多的奖励
一条轨迹是一个 “状态、动作、奖励” 序列,如
{ S 1 , A 1 , R 2 , S 2 , A 2 , . . . S t , A t , R t + 1 , . . . R T , S T } \{S_1,A_1,R_2,S_2,A_2,...S_t,A_t,R_{t+1},...R_T,S_T\} { S1,A1,R2,S2,A2,...St,At,Rt+1,...RT,ST}
下面介绍model-free RL的两种常用方法
MC
):Monte Carlo MethodTD
) :Temporal Difference Learning以policy π \pi π 大量进行轨迹采样,找到其中所有的状态s,分别计算return G t G_t Gt,用这些 G t G_t Gt的期望(均值)作为s的价值 V π ( s ) V^{\pi}(s) Vπ(s)
根据大数定律,当采集的轨迹足够多时, V ( s ) → V π ( s ) V(s) \to V^{\pi}(s) V(s)→Vπ(s)
在MC方法中,定义
MC target
: G t G_t GtMC error
: δ t = G t − V ( S t ) \delta_t = G_t-V(S_t) δt=Gt−V(St) 我们利用它修正 V ( S t ) V(S_t) V(St)s
/二元组(s,a)
”,称为对 “状态s
/二元组(s,a)
” 的一次访问(visit)s
/二元组(s,a)
” 可能在同一个episode中多次出现,以此可以把MC方法分成两类Unless
可以理解为if not
,仅保留轨迹中状态s第一次出现时的returnUnless
判断那句去掉就行了在真实的RL环境中,比如Control问题,我们往往要提升Policy,这时策略评估和策略提升交替进行(Generalized Policy iteration)。面对一个不停变化的Policy,V(s)也在随时间不断变化,我们采样的episode就不是越多越好了,因为越早期的采样的episode,其服从的Policy和当前相差越多,我们需要 “忘记” 一些太老的 G t G_t Gt
一个常用的方法是设定一个均值计算步长,这有点像滑动均值滤波,我们只用最近若干次采样的 G t G_t Gt 来估计V(s)。设步长为n,并设 1 n = α \frac{1}{n} = \alpha n1=α,有
V ( S t ) = 1 n ( G t + ( n − 1 ) V ( S t ) ) = α ( G t + ( 1 α − 1 ) V ( S t ) ) = V ( S t ) + α ( G t − V ( S t ) ) \begin{aligned} V(S_t) &= \frac{1}{n}(G_t + (n-1)V(S_t)) \\ &= \alpha(G_t + (\frac{1}{\alpha}-1)V(S_t)) \\ &= V(S_t) +\alpha(G_t-V(S_t)) \end{aligned} V(St)=n1(Gt+(n−1)V(St))=α(Gt+(α1−1)V(St))=V(St)+α(Gt−V(St))
我们把 α \alpha α 称为学习率,用来调节 V ( S t ) V(S_t) V(St)的更新速度。 V ( S t ) = V ( S t ) + α ( G t − V ( S t ) ) V(S_t) = V(S_t) +\alpha(G_t-V(S_t)) V(St)=V(St)+α(Gt−V(St))这个式子,可以直观地理解为我们不断地用新算出的 G t G_t Gt 来修正对 V ( S t ) V(S_t) V(St)的估计,调整的多少由学习率 α \alpha α控制。这种方法一般称为 α-MC
如果要估计状态价值函数,方法完全类似,只要把更新V换成下面这个更新q即可
q ( S t , A t ) ← q ( S t , A t ) + α ( G t − q ( S t , A t ) ) q(S_t,A_t) \leftarrow q(S_t,A_t) +\alpha(G_t - q(S_t,A_t)) q(St,At)←q(St,At)+α(Gt−q(St,At))
思想对比
覆盖状态对比
MC相对DP的好处
MC相对DP的缺点:
回顾MC方法,我们计算每个轨迹的episode的 G t G_t Gt ,并采用以下方式修正 V ( S t ) V(S_t) V(St)的估计值
V ( S t ) ← V ( s t ) + 1 N ( S t ) ( G t − V ( S t ) ) V(S_t) \leftarrow V(s_t) + \frac{1}{N(S_t)}(G_t - V(S_t)) V(St)←V(st)+N(St)1(Gt−V(St))
使用类似MRP中的Bellman等式, G t G_t Gt 可以被分解成立即奖励和未来奖励两部分
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . = R t + 1 + γ ( R t + 2 + γ R t + 3 + . . . ) = R t + 1 + γ G t + 1 \begin{aligned} G_t &= R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} +... \\ &= R_{t+1} + \gamma (R_{t+2} + \gamma R_{t+3} +...) \\ &= R_{t+1} + \gamma G_{t+1} \end{aligned} Gt=Rt+1+γRt+2+γ2Rt+3+...=Rt+1+γ(Rt+2+γRt+3+...)=Rt+1+γGt+1
根据 V ( s ) V(s) V(s)的定义,有
V Π ( S t ) = E Π [ G t ∣ S t = s ] = E Π [ R t + 1 + γ G t + 1 ∣ S t = s ] = E Π [ R t + 1 + γ V Π ( S t + 1 ) ∣ S t = s ] \begin{aligned} V^{\Pi}(S_t) &= \mathbb{E}_{\Pi}[G_t|S_t = s] \\ &= \mathbb{E}_{\Pi}[R_{t+1} + \gamma G_{t+1}| S_t = s] \\ &= \mathbb{E}_{\Pi}[R_{t+1} + \gamma V^{\Pi}(S_{t+1})|S_t = s] \end{aligned} VΠ(St)=EΠ[Gt∣St=s]=EΠ[Rt+1+γGt+1∣St=s]=EΠ[Rt+1+γVΠ(St+1)∣St=s]
这启发我们用 R t + 1 + γ V ( S t + 1 ) R_{t+1} + \gamma V(S_{t+1}) Rt+1+γV(St+1) 代替MC方法中的 G t G_t Gt,同时因为TD中的episode不完整没有对应次数N,使用 α ∈ [ 0 , 1 ] \alpha \in [0,1] α∈[0,1]作为修正步长,于是修正 V ( S t ) V(S_t) V(St)估计的方法变为
V ( S t ) = V ( S t ) + α [ ( R t + 1 + γ V ( S t + 1 ) ) − V ( S t ) ] , α ∈ [ 0 , 1 ] V(S_t) = V(S_t) +\alpha[(R_{t+1} + \gamma V(S_{t+1}) )-V(S_t)],\alpha \in [0,1] V(St)=V(St)+α[(Rt+1+γV(St+1))−V(St)],α∈[0,1]
类似的,修正 q ( S t , A t ) q(S_t,A_t) q(St,At)估计的方法如下
q ( S t , A t ) = q ( S t , A t ) + α [ ( R t + 1 + γ q ( S t + 1 , A t + 1 ) ) − q ( S t , A t ) ] , α ∈ [ 0 , 1 ] q(S_t,A_t) = q(S_t,A_t) +\alpha[(R_{t+1} + \gamma q(S_{t+1},A_{t+1}) )-q(S_t,A_t)],\alpha \in [0,1] q(St,At)=q(St,At)+α[(Rt+1+γq(St+1,At+1))−q(St,At)],α∈[0,1]
用这两个代替MC方法中的式子,我们就得到了TD(0)方法,也叫单步TD
在TD(0)中,定义
TD target
: R t + 1 + γ V ( S t + 1 ) R_{t+1} + \gamma V(S_{t+1}) Rt+1+γV(St+1)TD error
: δ t = R t + 1 + γ V ( S t + 1 ) − V ( S t ) \delta_t = R_{t+1} + \gamma V(S_{t+1})-V(S_t) δt=Rt+1+γV(St+1)−V(St) 我们利用它修正 V ( S t ) V(S_t) V(St)TD方法是从一个猜测中计算另一个猜测,它没有等待实际的结果。这看起来有一点不可靠,幸运的是,我们已经证明了,对于任何策略 π \pi π ,TD(0)都可以收敛到 V π ( s ) V_{\pi}(s) Vπ(s) 或 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)。
大致来说
注意到每次的TD error δ t \delta_t δt 是当时所做估计的误差。因为TD误差取决于 S t + 1 S_{t+1} St+1 和 R t + 1 R_{t+1} Rt+1,所以它实际上要到一个时间步骤之后才能得到。也就是说 δ t \delta_t δt 是 V ( S t ) V(S_t) V(St) 中的误差,在时间t+1时可用。另外要注意的是,如果价值数组 V 在一个episode中不发生变化(比如MC方法中就是如此),那么蒙特卡洛误差可以写成TD误差之和
如果价值函数V在周期中被更新了(就像TD(0)中那样),那么这个等式就不准确,但是如果更新时的修正步长 α \alpha α 很小,那么它仍然可以近似成立。这个等式的泛化在在推广在TD学习的理论和算法中起着重要作用
本例子出自 Richard S.Sutton 《Reinforce Learning》 第二版
每天当你下班开车回家时,你会估计一下回家需要多长时间。假设在这个星期五,你正好在6点钟离开,估计需要30分钟才能到家。当你到达你的车时,已经是6:05,你注意到开始下雨了。交通状况在雨中的速度往往比较慢,所以你重新估计从那时起需要35分钟,也就是总共40分钟。15分钟后,你按时完成了高速公路部分的行程。当你驶入一条二级公路时,你将你估计的总行程时间缩短到35分钟。不幸的是,此时你被一辆缓慢的卡车卡在后面,而且道路太窄,无法通过。最后你不得不跟着卡车走,直到6点40分转入你住的小街。三分钟后你到家了。这一条episode总结如下
在这个例子中,reward是每一段行程消耗的时间(如果这是一个求最短行程时间的控制问题,则我们会使用负的收益,但这里我们只考虑prediction问题,为了简单,我们使用正收益)。使用表格中 “经过的时间” 这一列中相邻两个值做差来计算R。比如下高速这个状态的奖励就是30-20=10
过程的衰减系数 γ = 1 \gamma = 1 γ=1,即每个状态的return G t G_t Gt是从此到家的剩余时间,可以用总时间43和第一列 “已经过时间” 做差计算。
每个状态的价值是从此到家的剩余时间的期望。
表格中 “估计剩余时间” 这一列即是刚进入此状态时获得的对 V ( s ) V(s) V(s)的估计值,用作TD中的 V ( S t + 1 ) V(S_{t+1}) V(St+1)、MC中的 V ( S t ) V(S_t) V(St)
表格中 “估计总时间” 为同一行前两列的值相加,做差代表MC和TD方法的target error
。这一点比较重要,不然下面的图可能会看不懂。请看下面的分析
现在分别使用1-MC
方法和TD(0)
方法对这个episode进行prediction,如下
图中左边是1-MC方法,右边是TD(0)方法。红色箭头表示两算法给出的对每个状态的价值修正值。
这个图画的有点难看懂,下面以 “下高速” 时刻为例进行解释。设 “下高速” 为状态 S t S_t St,下一个状态 “被卡车挡住” 为状态 S t + 1 S_{t+1} St+1,最后到家为终态 S e n d S_{end} Send。有 R t + 1 = 30 − 20 = 10 R_{t+1} = 30-20=10 Rt+1=30−20=10, G t = 43 − 20 = 23 G_t = 43-20=23 Gt=43−20=23。另外根据使用的方法, α = γ = 1 \alpha = \gamma = 1 α=γ=1
1-MC方法:
V ( S t ) = V ( S t ) + α ( G t − V ( S t ) ) = 15 + [ ( 43 − 20 ) − 15 ] = 23 \begin{aligned} V(S_t) &= V(S_t) + \alpha(G_t-V(S_t)) \\ &=15+[(43-20)-15] \\ &=23 \end{aligned} V(St)=V(St)+α(Gt−V(St))=15+[(43−20)−15]=23
可见由于仅有一个episode,状态价值直接变为了这个episode中此状态的return G t G_t Gt。图里的红色线,表现的是表格中状态 S t S_t St和 S e n d S_{end} Send 的第三列 “预测总时间” 的差值,而第三列又是前两列的和,把这个差转换为 (经过的时间+估计剩余时间 V ( s ) V(s) V(s)) 的差,两个 “经过的时间” 做差算出的是 G t G_t Gt,而终止状态 S e n d S_{end} Send的 “估计剩余时间” V ( S e n d ) = 0 V(S_{end}) = 0 V(Send)=0,于是红线代表的就是 G t − V ( s ) G_t - V(s) Gt−V(s) 这个差值了,这正是MC方法的target error,即 “状态的价值修正值”
TD(0) 方法:
V ( S t ) = V ( S t ) + α [ ( R t + 1 + γ V ( S t + 1 ) ) − V ( S t ) ] = 15 + 1 ∗ [ 10 + 1 ∗ 10 − 15 ] = 20 \begin{aligned} V(S_t) &= V(S_t) +\alpha[(R_{t+1} + \gamma V(S_{t+1}) )-V(S_t)] \\ &=15+1*[10+1*10-15] \\ &=20 \end{aligned} V(St)=V(St)+α[(Rt+1+γV(St+1))−V(St)]=15+1∗[10+1∗10−15]=20
图里的红色线,表现的是表格中状态 S t S_t St和 S t + 1 S_{t+1} St+1 的第三列 “预测总时间” 的差值,而第三列又是前两列的和,同样把这个差转换为 (经过的时间+估计剩余时间 V ( s ) V(s) V(s)) 的差,两个 “经过的时间” 做差算出的是 R t + 1 R_{t+1} Rt+1,于是红线代表的就是 R t + 1 + V ( S t + 1 ) − V ( s ) R_{t+1} + V(S_{t+1})- V(s) Rt+1+V(St+1)−V(s) 这个差值了,这正是TD方法的target error,即 “状态的价值修正值”
emmmm这个例子感觉真的不怎么好,尤其这个折线图画的不直观。不过我认为理解以下几个重点即可
这个例子啰啰嗦嗦讲的有点多,希望能给大家更多的观察角度
偏差(bias)对比
方差(variance)对比
小结
MC和TD哪个收敛更快?这还是一个开放性问题,没有人从数学上证明了某种方法比另一种更快地收敛,事实上我们甚至还不清楚如何恰当地形式化描述这个问题,不过在实际应用上,TD
在随机任务上一般比α-MC
更快收敛
下面看一个例子:随机游走
本例子出自 Richard S.Sutton 《Reinforce Learning》 第二版
我们在关注prediction问题时,因为不需要区分变化是环境引起的还是Agent动作引起的,所以经常会用到MRP。下面给出一个MRP,所有的事件都从中心状态C开始,然后在每一步上以相等的概率向左或向右移动一个状态。事件在极左或极右终止。当一个事件在右边终止时,会发生+1的奖励,其他奖励都是零。另外,这里衰减系数 γ = 1 \gamma = 1 γ=1,不进行折扣。现在对这个MRP进行prediction任务
易知,从A到E的价值分别是 1 6 , 2 6 , 3 6 , 4 6 , 5 6 , 6 6 \frac{1}{6},\frac{2}{6},\frac{3}{6},\frac{4}{6},\frac{5}{6},\frac{6}{6} 61,62,63,64,65,66
从右边的试验图可以看出
批量更新(batch training)
示例:批量更新的随机游走
这是4.2.3节讨论的随机游走示例的批量更新版本。每经过一个新的episode,所有到目前为止看到的episode都被视为一个批次。TD(0)和α-MC不断地使用这些批次来更新,这里把 α \alpha α 设定得足够小,保证二者都能收敛。下图绘制了两种方法求出的五个状态价值的均方根误差的均值(以整个实验的100次独立重复试验为基础)的学习曲线
可以看到TD(0)方法的偏差值始终比MC方法更小
这个结果很奇怪,根据我们4.2.2节的分析,MC方法的修正完全基于训练数据,它最小化了与训练集中实际return的均方根误差,可以认为MC的结果是最优估计,但是图中批量TD方法居然在均方根误差上比MC表现得更好。
事实上,MC只是从某些有限的方面来说最优,TD方法的优越性某种程度上与prediction这个任务更相关。 这样说还是有点不清楚,先来看下面的这个例子
示例:You are the Predictor
现在假设你观察到某个MRP的八个episode:
A, 0, B, 0 B, 1
B, 1 B, 1
B, 1 B, 1
B, 1 B, 0
解释一下,第1个episode从状态A开始,过渡到B,奖励为0,然后从B终止,奖励为0,其他7个情节更短,从B开始就立即终止并获得奖励了。给定这批数据,你认为V(A)和V(B) 的最优估计值是多少 ?
每个人都应该同意V(B)的最优估计是0.75,因为这批数据在B结束了8次,其中6次return = 1,2次return = 0
但是对于V(A)的估计值可以有两种看法
分析两个方法计算的V(A)估计值,不难看出MC的结果是在这批数据上均方误差最小的答案(实际上误差为0)。尽管如此,对于马尔可夫过程,我们仍然认为使用批量TD(0)得到的答案会在未来的数据上产生更小的误差
分析
事实上,批量MC总是找出最小化训练集上均方误差的估计,而批量TD(0)总是找出完全符合马尔可夫过程模型的最大似然估计参数(使得生成的episode概率最大的参数)
在批量更新时,马尔可夫模型的最大似然估计参数可以从多个episode中通过频率推测出来
如果在某批episode中估计出的model是正确的,则这一批的估计也就完全正确,这种估计称为 “完全等价估计”,因为它等价于假设潜在过程参数的估计是确定性的而不是近似的,批量TD(0)的收敛结果就是确定性等价估计
这一点也有助于理解为何TD比MC收敛得更快,在以批量形式学习的时候,TD(0)比MC更快收敛是因为它计算的是真正的确定性等价估计。对于非批量TD,尽管它不能通过频率推测出模型参数,不能达到确定性等价估计或最小均方误差估计,但它仍然大致地朝着这些方向在更新,因此它也往往比 α-MC 更快。
最后还要说明一点,尽管确定性等价估计在某种程度上是一个最优答案,但是直接计算它的复杂度太大了。如果有n个状态,仅仅建立最大似然估计就需要 n 2 n^2 n2的内存,按照传统方法计算V的复杂度达到 o ( n 3 ) o(n^3) o(n3)。相比之下,TD方法可以用不超过n的内存,通过在训练集上反复计算逼近同样的答案,这一优势是惊人的。对于状态空间巨大的任务,TD方法可能是唯一可行的逼近确定性等价解的方法
总之,如果面对一个马尔可夫环境,由于TD方法的特殊的TD target设计,利用到相邻的状态价值 V ( S t + 1 ) V(S_{t+1}) V(St+1)和 R t + 1 R_{t+1} Rt+1,它可以充分挖掘环境的马尔可夫性并加以利用,因此TD在马尔可夫环境中更有效(more efficient)。但相应的,如果环境中马尔可夫性不成立,TD受到的性能损失比MC大
TD(0) / 单步TD 是一种最简单的特殊情况,它可以在两个方向扩展
关于这两种扩展内容也比较多,后面再单独开写文章说明吧
假如我们现在对 V ( s ) V(s) V(s)进行评估并得到了最优价值函数 V ∗ ( s ) V^*(s) V∗(s),如何从中得到最优策略 π ∗ \pi^* π∗呢
上一篇文章中我们在model-based情况下讨论了这个问题,这正是Policy iteration算法的最后一步。见:强化学习笔记(3)—— MDP中的prediction和control问题:在MDP已知时,我们可以往前看一步找到 q ∗ ( s , a ) q^*(s,a) q∗(s,a),然后对它进行贪心找到使 q ∗ ( s , a ) q^*(s,a) q∗(s,a)最大的动作,即为状态s下的最优策略。即
q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V ∗ ( s ′ ) π ∗ ( s ) = arg max a ∈ A q ∗ ( s , a ) \begin{aligned} q^*(s,a) &= R(s,a)+\gamma \sum_{s' \in S}P(s'|s,a)V^*(s') \\ \pi^*(s) &= \argmax_{a \in A} q^*(s,a) \end{aligned} q∗(s,a)π∗(s)=R(s,a)+γs′∈S∑P(s′∣s,a)V∗(s′)=a∈Aargmaxq∗(s,a)
然而,这里用到了MDP的转移矩阵P和奖励函数R,在model-free的情况下没法用这个方法
根据上述分析,在model-free的情况下,评估 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) 往往比评估 V π ( s ) V_{\pi}(s) Vπ(s) 更有用一些,这样我们就可以直接收敛到 q ∗ ( s , a ) q^*(s,a) q∗(s,a),并在其上贪心得到最优策略 π ∗ ( s ) \pi^*(s) π∗(s),这在下一篇文章讨论的 model-free control 问题中非常重要
确定性
策略,那么遵循 π \pi π 意味着在每一个状态s中只能观测到一个动作a的回报,这个状态对应状态集中的其他动作始终不能被选取,因而无法采样求平均。这个问题非常严重,因为学习q(s,a)就是为了帮助在每个动作的所有可用动作间进行选择,进而为提升策略 π \pi π 打下基础。试探性出发
:将指定的 (s,a) 二元组作为起点开始一个episode的采样,并且保证所有 (s,a) 二元组都有非零的概率可以被选为起点。这保证了episode数量趋于无穷时,每个 (s,a) 二元组都会被访问到无数次。这个方法通常很有效,但是在从真实环境中学习时,这个假设往往难以满足