资格迹#
前面我们学习了 TD 算法,它只根据眼前的即时奖励 R t + 1 R_{t+1} R t + 1 和下一状态的价值 V ( S t + 1 ) V(S_{t+1}) V ( S t + 1 ) 来调整自己的估计.
而我们的问题是,能不能再保留 TD 算法在线、低方差优点的同时,也拥有类似蒙特卡洛方法那样高效分配奖励的能力——资格迹
1. 回顾与动机:一步更新的局限#
我们将之前所学习的 TD 算法记为 TD ( 0 ) \text{TD}(0) TD ( 0 ) ,后面大家会明白这一符号的含义.在状态序列中,我们执行更新:
V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] , V(S_t) \leftarrow V(S_t) + \alpha \big[ R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \big], V ( S t ) ← V ( S t ) + α [ R t + 1 + γ V ( S t + 1 ) − V ( S t ) ] ,
它只利用紧接着的一步 奖励来更新前一个状态的价值.这带来两个问题:
信息传播速度慢 .当一个 episode 末尾才出现明显的奖励信号(比如走到终点获得 +1),TD ( 0 ) \text{TD}(0) TD ( 0 ) 需要沿着经历的顺序,一个状态一个状态地把奖励信息往回“倒灌”,这个过程可能极其漫长.
信用分配的偏差 .如果某一步的状态变动触发了后来一系列好的结果,但 TD ( 0 ) \text{TD}(0) TD ( 0 ) 只把功劳或责任归给前一个状态,更早的状态需要多次重复经历才能获得公平的分配.
Monte Carlo 方法,需要等到 episode 结束后,用全部剩余奖励的折扣和 G t G_t G t 来更新沿途的每一个 状态:
V ( S t ) ← V ( S t ) + α [ G t − V ( S t ) ] , V(S_t) \leftarrow V(S_t) + \alpha \big[ G_t - V(S_t) \big], V ( S t ) ← V ( S t ) + α [ G t − V ( S t ) ] ,
其信息传播是“瞬间”的,整个轨迹上的所有状态同时获得更新.但它的代价是高方差 ——因为必须走完一个完整的 episode,奖励序列中的随机噪声全部累积了起来,且必须等 episode 结束才能学习,无法在线更新.
信息传播速度慢
假设一个简单状态序列 s 0 s_0 s 0 → s 1 s_1 s 1 → s 2 s_2 s 2 → s 3 = Goal s_3=\text{Goal} s 3 = Goal ,r 1 = r 2 = 0 r_1=r_2=0 r 1 = r 2 = 0 , r 3 = 1 r_3=1 r 3 = 1 . 终点状态 V ( s 3 ) = 0 V(s_3)=0 V ( s 3 ) = 0 ,折扣因子 γ \gamma γ ,学习率 α \alpha α .
1)TD ( 0 ) \text{TD}(0) TD ( 0 )
目的:对 π \pi π 评估.初始化 V ( s ) = 0 , ∀ s V(s)=0,\forall s V ( s ) = 0 , ∀ s .
根据 TD 更新公式
episode 1:
V ( s 0 ) = V ( s 1 ) = 0 , V ( s 2 ) = 0 + α [ 1 + 0 ⋅ 0 ] = α . \begin{aligned}& V(s_0)=V(s_1)=0,\\& V(s_2)=0+\alpha[1+0\cdot 0]=\alpha.\end{aligned} V ( s 0 ) = V ( s 1 ) = 0 , V ( s 2 ) = 0 + α [ 1 + 0 ⋅ 0 ] = α .
episode 2:
V ( s 0 ) = 0 , V ( s 1 ) = 0 + α [ 0 + γ V ( s 2 ) − 0 ] = α 2 γ , V ( s 2 ) = α + α [ 1 − α ] = 2 α − α 2 . \begin{aligned}& V(s_0)=0,\ V(s_1)=0+\alpha[0+\gamma V(s_2)-0]=\alpha^2\gamma,\\ & V(s_2)=\alpha+\alpha [1-\alpha]=2\alpha-\alpha^2.\end{aligned} V ( s 0 ) = 0 , V ( s 1 ) = 0 + α [ 0 + γ V ( s 2 ) − 0 ] = α 2 γ , V ( s 2 ) = α + α [ 1 − α ] = 2 α − α 2 .
episode 3:
V ( s 0 ) = 0 + α [ 0 + γ V ( s 1 ) − 0 ] = α 3 γ 2 , V ( s 1 ) = α 2 γ + α [ γ ( 2 α − α 2 ) − α 2 γ ] = 3 α 2 γ − 2 α 3 γ , V ( s 2 ) = … . \begin{aligned}& V(s_0)=0+\alpha[0+\gamma V(s_1)-0]=\alpha^3\gamma^2, \\& V(s_1)=\alpha^2\gamma+\alpha[\gamma(2\alpha-\alpha^2)-\alpha^2\gamma]=3\alpha^2\gamma-2\alpha^3 \gamma, \\& V(s_2)=\ldots. \\\end{aligned} V ( s 0 ) = 0 + α [ 0 + γ V ( s 1 ) − 0 ] = α 3 γ 2 , V ( s 1 ) = α 2 γ + α [ γ ( 2 α − α 2 ) − α 2 γ ] = 3 α 2 γ − 2 α 3 γ , V ( s 2 ) = … .
可以看到,每一个 episode 只传播一点.在 episode 1 中,想要更新 s 0 , s 1 s_0,s_1 s 0 , s 1 的价值,只能等下一个 episode. 由于 TD ( 0 ) \text{TD}(0) TD ( 0 ) 一次更新只看一步,它并不知道后面还有多远,因此 TD ( 0 ) \text{TD}(0) TD ( 0 ) 的信息传播速度慢.
2)Monte Carlo
Monte Carlo 在一次 episode 结束后,知道整条轨迹的最终回报,其看到了每一步的奖励.针对上述序列问题,已知 r 1 , r 2 , r 3 r_1,r_2,r_3 r 1 , r 2 , r 3 ,那么可直接计算得到 G 0 , G 1 , G 2 G_0,G_1,G_2 G 0 , G 1 , G 2 ,从而得到各状态的价值,即 Monte Carlo 能更快地传播奖励信息
【注】信息传播速度快 ≠ \neq = 收敛速度快:TD ( 0 ) \text{TD}(0) TD ( 0 ) 只利用一步信息,若环境随机,则更新时只受一步随机性的影响;而 Monte Carlo 依赖整条轨迹,任何一步随机变化都会影响,每次更新存在较大方差,使得更新可能一直剧烈震荡.TD 由于单步地逐步学习,后续状态价值会越来越稳定,更新波动会小很多,因而一般情况下收敛更稳定,收敛速度更快.但若为确定性环境,如上述的确定状态序列,明显 Monte Carlo 的收敛速度更快.
信用分配的偏差
偏差: 指代作用权重、资格分配不完整.
假设一个简单状态序列 s 0 s_0 s 0 → s 1 s_1 s 1 → s 2 s_2 s 2 → s 3 = Goal s_3=\text{Goal} s 3 = Goal ,r 1 = r 2 = 0 r_1=r_2=0 r 1 = r 2 = 0 , r 3 = 1 r_3=1 r 3 = 1 . 终点状态 V ( s 3 ) = 0 V(s_3)=0 V ( s 3 ) = 0 ,折扣因子 γ \gamma γ ,学习率 α \alpha α .
episode 1: V ( s 0 ) = V ( s 1 ) = 0 , V ( s 2 ) = α V(s_0)=V(s_1)=0,V(s_2)=\alpha V ( s 0 ) = V ( s 1 ) = 0 , V ( s 2 ) = α ,即 s 0 , s 1 s_0,s_1 s 0 , s 1 没有奖励,没有贡献,s 2 s_2 s 2 得到奖励,有贡献.
但这样的表述明显不对:正是由 s 1 → s 2 s_1\to s_2 s 1 → s 2 ,s 2 s_2 s 2 才能到达 s 3 s_3 s 3 ,同样地有 s 0 → s 1 s_0\to s_1 s 0 → s 1 .由此出现了短暂的、不完整的分配.
原因: TD ( 0 ) \text{TD}(0) TD ( 0 ) 只看到了下一步,如对于 s 0 s_0 s 0 来说不知道再走两步便到达 Goal.
TD ( 0 ) \text{TD}(0) TD ( 0 ) :第一次只奖励 s 2 s_2 s 2 ,第二次奖励 s 1 s_1 s 1 ,第三次奖励 s 0 s_0 s 0 ,因此更早的状态需要多次重复经历才能获得更完整公平的信用分配.
整个 episode 结束后,知道最终到达 Goal(s 3 s_3 s 3 ),且知道每一步奖励,可以直接计算每个状态真正经历得到的回报.
对于 Monte Carlo 来说,其所谓的高效分配,即是对轨迹中的状态,按照之后真正获得的累计回报来分配
直观上,s 2 s_2 s 2 距 Goal(s 3 s_3 s 3 )最近,价值最大,s 1 s_1 s 1 可以到达距离 Goal 更近的 s 2 s_2 s 2 ,也有价值,而 s 0 s_0 s 0 虽然距 Goal 远,但最终还是可以到到 Goal,因此也分配一定的价值.
TD ( 0 ) \text{TD}(0) TD ( 0 ) Monte Carlo 优 在线,更新及时,低方差 高效分配奖励,信息传播快 劣 分配奖励低效,信息传播慢 需等待 Episode 结束,高方差,样本利用率低
于是,一个自然的想法出现了:能不能在每一步都进行更新,但更新的幅度不仅仅影响当前状态的前一个状态,而是根据某种“责任资格大小”,把当前观察到的 TD 误差扩散到之前访问过的多个状态上?
这就是资格迹要解决的核心问题.
2. 前向视角:λ回报——多步回报的加权融合#
在引入资格迹的机制之前,我们先从前向视角 (或称理论视角)来看理想的目标是什么.
我们已经知道 TD ( 0 ) \text{TD}(0) TD ( 0 ) 的目标是 1 步回报:
G t ( 1 ) = R t + 1 + γ V ( S t + 1 ) . G_t^{(1)} = R_{t+1} + \gamma V(S_{t+1}). G t ( 1 ) = R t + 1 + γ V ( S t + 1 ) .
蒙特卡洛的目标是无穷步回报 G t G_t G t ,即在终止前累积的真实奖励.那么,介于两者之间的便是 n n n 步回报 :
G t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n V ( S t + n ) . G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{n-1} R_{t+n} + \gamma^n V(S_{t+n}). G t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n V ( S t + n ) .
n n n 步回报既含有 n n n 步的真实奖励,又以 n n n 步后状态的当前价值作为剩余回报的估计.
n = 1 n=1 n = 1 时,方差小,有偏;
n = 2 n=2 n = 2 时,多了一步真实奖励;
n = 3 n=3 n = 3 时,真是奖励更多,估计值更少.
因此,随着 n n n 增加,一般情况下偏差减小,方差增大.
我们可以选择任何一个 n n n 作为更新的目标,但不一定只选一个固定的 n n n ,因此我们可以采用不同 n n n 值的线性组合对参数进行更新,并使它们的权重值和为 1 1 1 . 根据这样的思路,便产生一种特定权重的分配方式,即 TD ( λ ) \text{TD}(\lambda) TD ( λ ) 前向算法(λ-回报算法).
λ-回报 的做法是,对所有的 n n n 步回报做一个指数衰减的加权平均 :
G t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 G t ( n ) , G_t^\lambda = (1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_t^{(n)}, G t λ = ( 1 − λ ) n = 1 ∑ ∞ λ n − 1 G t ( n ) ,
此时中间的 λ \lambda λ 值让我们在偏差 和方差 之间连续调节:λ \lambda λ 越小,更多依赖有偏但低方差的 TD 估计;λ \lambda λ 越大,更多依赖无偏但高方差的实际奖励.
当轨迹为有限 T T T 步时,此时
G t λ = ( 1 − λ ) ∑ n = 1 T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t . G_t^{\lambda}=(1-\lambda)\sum_{n=1}^{T-t-1} \lambda^{n-1}G_t^{(n)}+\lambda^{T-t-1}G_t. G t λ = ( 1 − λ ) n = 1 ∑ T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t .
这里,λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ ∈ [ 0 , 1 ] .当 λ = 0 \lambda=0 λ = 0 时,G t λ = G t ( 1 ) G_t^\lambda = G_t^{(1)} G t λ = G t ( 1 ) ,退化为 TD ( 0 ) \text{TD}(0) TD ( 0 ) ;当 λ = 1 \lambda=1 λ = 1 时,为 Monte Carlo 回报 G t G_t G t (在 episodic 情况下,并假设对终止状态 V = 0 V=0 V = 0 ).最终我们得到 TD 目标,可以进行值函数更新:
V ( S t ) ← V ( S t ) + α ( G t λ − V ( S t ) ) . V(S_{t})\leftarrow V(S_t)+\alpha (G_t^{\lambda}-V(S_t)). V ( S t ) ← V ( S t ) + α ( G t λ − V ( S t )) .
前向视角对于每个访问到得状态 s s s ,从它开始向前看所有得未来状态,并决定如何结合未来状态得回报来更新当前状态 s s s 的值函数 V ( S t ) V(S_t) V ( S t ) .每更新完当前状态 s s s ,就转移至下一状态 s ′ s' s ′ ,且不再回头关心已更新的状态 s s s .也就是说,前向视角是通过观看未来状态的回报估计当前状态的值函数.
例 1:状态随机游走
想象一排 21个状态,从左端 -10 走到右端 +10,每步等概率向左或向右,到达两端 episode 终止,奖励只有到达 +10 时 +1,其他 0.
如果采用 TD ( 0 ) \text{TD}(0) TD ( 0 ) (λ=0),价值信息必须从终点逐步向相邻状态传播.在 100 个 episode 训练后,远离终点的状态价值依然接近 0.
如果采用 MC(λ=1),每个 episode 结束后,整条路径上的状态都根据最终奖励更新,信息瞬间传遍,但因每个 episode 路径长度差异大,方差很高,学习曲线震荡剧烈.
取一个中间值,如 λ=0.5 或 0.7,能用明显更少的 episode 达到更低的均方根误差.这就是 λ-回报的优势:结合两者优势,加速学习 .
然而,从实现角度看,λ回报要求我们在 episode 结束时才能计算 ,因为 G t λ G_t^\lambda G t λ 依赖于未来的奖励和状态价值,这显然不是一种在线、逐步更新的算法.那么,有没有一种方式能在每一步立即进行更新,却等价于前向的 λ-回报?答案就是资格迹.
3. 资格迹的引入:TD(λ) 后向视角#
由于前向视角在估计值函数时,每一个时间步都需要用到很多步之后的信息,在工程上十分不高效.我们需要一种无需等到实验结束就可以更新当前状态的值函数更新方法.
资格迹提供了一种后向视角 :我们不再等着未来回报再去平均,而是每经历一步,立即计算 TD 误差 δ t \delta_t δ t ,然后把这个误差分配给过去访问过的所有状态 ,分配的比例由一个称为资格迹 的变量 E t ( s ) E_t(s) E t ( s ) 决定.
直觉上,一个状态如果最近经常被访问,它就更“有资格”接受当前的 TD 误差的更新.资格迹更新方式如下 E 0 ( s ) = 0 E_0(s)=0 E 0 ( s ) = 0 :
E t ( s ) = { γ λ E t − 1 ( s ) + 1 , s = S t , γ λ E t − 1 ( s ) , s ≠ S t . E_t(s) =
\begin{cases}
\gamma \lambda E_{t-1}(s) + 1, & s = S_t, \\
\gamma \lambda E_{t-1}(s), & s \neq S_t. \\
\end{cases} E t ( s ) = { γ λ E t − 1 ( s ) + 1 , γ λ E t − 1 ( s ) , s = S t , s = S t .
其被称为 累积型资格迹 ,表示 t t t 时刻状态 s s s 对应的资格迹, 其含义是:
每当一个状态被访问,它的迹增加 1(“被访问则给它加上一份资格”).
之后,所有状态的迹都按原来 γ λ \gamma \lambda γ λ 的速率衰减(“随着时间的流逝,过去状态的资格逐渐消退”).
γ \gamma γ 是折扣因子;λ \lambda λ 控制衰减的速度,称迹退化参数 .λ \lambda λ 越小,迹消失得越快,更新就越集中在最近的状态;λ \lambda λ 越大,迹越持久,更新越接近均匀地分配给所有过去状态.
TD ( λ ) \text{TD}(\lambda) TD ( λ ) 的更新为:
δ t = R t + 1 + γ V t ( S t + 1 ) − V t ( S t ) , \delta_t = R_{t+1} + \gamma V_t(S_{t+1}) - V_t(S_t), δ t = R t + 1 + γ V t ( S t + 1 ) − V t ( S t ) ,
V t + 1 ( s ) = V t ( s ) + α δ t E t ( s ) , ∀ s . V_{t+1}(s) = V_t(s) + \alpha \delta_t E_t(s), \quad \forall s. V t + 1 ( s ) = V t ( s ) + α δ t E t ( s ) , ∀ s .
也就是说,每一步的 TD 误差,都按照当前每个状态的资格迹权重来,更新其价值 .那些最近被访问、且 λ \lambda λ 较大的状态,会获得较大的更新幅度;很久以前的状态迹已经衰减殆尽,几乎不会被更新.
特别地,λ = 0 \lambda=0 λ = 0 时,即 TD ( 0 ) \text{TD}(0) TD ( 0 ) ,此时资格迹为
E t ( s ) = { 1 , s = S t , 0 s ≠ S t . E_t(s) =
\begin{cases}
1, & s = S_t, \\
0 & s \neq S_t. \\
\end{cases} E t ( s ) = { 1 , 0 s = S t , s = S t .
更新变为
{ V t + 1 ( s ) = V t ( s ) + α δ t , s = S t , V t + 1 ( s ) = V t ( s ) , s ≠ S t , \begin{cases}
V_{t+1}(s) = V_t(s) + \alpha \delta_t, & s=S_t, \\
V_{t+1}(s)=V_t(s), & s\neq S_t, \\
\end{cases} { V t + 1 ( s ) = V t ( s ) + α δ t , V t + 1 ( s ) = V t ( s ) , s = S t , s = S t ,
即一个 TD 误差 δ t \delta_t δ t 只更新当前状态 S t S_t S t .
例 2:简单状态序列的迹演化
假设一个简单状态序列 s 0 s_0 s 0 → s 1 s_1 s 1 → s 2 s_2 s 2 → s 3 = Goal s_3=\text{Goal} s 3 = Goal .折扣因子 γ \gamma γ ,迹退化参数 λ \lambda λ ,初始化所有 V = 0 V=0 V = 0 ,迹为 0 0 0 .
从 s 0 s_0 s 0 到 s 1 s_1 s 1 ,迹 E ( s 0 ) E(s_0) E ( s 0 ) =1,其它为 0 0 0 .计算 δ 0 \delta_0 δ 0 ,此时仅更新 V ( s 0 ) V(s_0) V ( s 0 ) .
从 s 1 s_1 s 1 到 s 2 s_2 s 2 ,E ( s 0 ) E(s_0) E ( s 0 ) 衰减为 γ λ \gamma\lambda γ λ ,E ( s 1 ) = 1 E(s_1)=1 E ( s 1 ) = 1 ,计算 δ 1 \delta_1 δ 1 ,此时更新 V V V 会同时影响 s 0 s_0 s 0 和 s 1 s_1 s 1 ,但 s 0 s_0 s 0 的影响权重小于 s 1 s_1 s 1 .
从 s 2 s_2 s 2 到 s 3 s_3 s 3 ,E ( s 0 ) = ( γ λ ) 2 E(s_0)=(\gamma\lambda)^2 E ( s 0 ) = ( γ λ ) 2 ,E ( s 1 ) = γ λ E(s_1)=\gamma\lambda E ( s 1 ) = γ λ ,E ( s 2 ) = 1 E(s_2)=1 E ( s 2 ) = 1 .此时到达终点 s 3 s_3 s 3 获得 + 1 +1 + 1 奖励,误差 δ 2 \delta_2 δ 2 较大.该误差会依据迹的权重同时更新 s 0 , s 1 , s 2 s_0,s_1,s_2 s 0 , s 1 , s 2 ,s 0 s_0 s 0 因衰减系数得到较小的更新,s 2 s_2 s 2 得到较大的更新.
另一方面,在 TD ( 0 ) \text{TD}(0) TD ( 0 ) 中,每一步只更新当前 状态,到达终点时,得到 + 1 +1 + 1 奖励与误差 δ 2 \delta_2 δ 2 ,但只有 s 3 s_3 s 3 的前一个状态 s 2 s_2 s 2 被更新,而要更新 s 0 s_0 s 0 需要很多次重复经历.资格迹正好弥补了这一缺陷.
TD ( λ ) \text{TD}(\lambda) TD ( λ ) 资格迹分配:越近期的状态,对当前 TD 误差贡献越直接,因此获得更多更新;越早的状态,虽然贡献较小,但仍然能立即获得部分奖励,而不需要等待多个 episode.
4. 资格迹的变种:替换迹与其他#
累积型资格迹中
E t ( s ) = { γ λ E t − 1 ( s ) + 1 , s = S t , γ λ E t − 1 ( s ) , s ≠ S t . E_t(s) =
\begin{cases}
\gamma \lambda E_{t-1}(s) + 1, & s = S_t, \\
\gamma \lambda E_{t-1}(s), & s \neq S_t. \\
\end{cases} E t ( s ) = { γ λ E t − 1 ( s ) + 1 , γ λ E t − 1 ( s ) , s = S t , s = S t .
γ λ E t − 1 ( s ) \gamma \lambda E_{t-1}(s) γ λ E t − 1 ( s ) 代表频率启发式,指将资格分配给较频繁的状态;示性函数 I s S t I_{sS_t} I s S t 代表最近启发式
,指将资格分配个给最近的状态.在状态被反复快速访问时,可能会使得迹过大,导致更新过度.一种常用的改进是替代型资格迹 ,其更新规则变为:
E t ( s ) = { γ λ E t − 1 ( s ) , s ≠ S t , 1 , s = S t , E_t(s) =
\begin{cases}
\gamma \lambda E_{t-1}(s), & s \neq S_t, \\
1, & s = S_t,
\end{cases} E t ( s ) = { γ λ E t − 1 ( s ) , 1 , s = S t , s = S t ,
即每次进入一个状态时,直接将其迹重置为 1,而不是累加.这避免了某些被循环访问的状态迹值无限制增长,通常在部分可观测或频繁重复访问的状态空间中效果更优.
5. 前向算法与后向算法的统一#
前向视角与后向视角在更新值函数时采用的方式不同:前向视角需要等到一次 episode 结束后更新当前状态的值函数,更新完当前状态的值函数后,此状态的值函数就不再改变;后向视角不需要等到轨迹结束,在每个时间步计算完当前状态的 TD 误差后,其它状态的值函数需要利用当前状态的 TD 误差进行更新.它在每个时间步都在进行值函数更新,是增量式更新方法.
资格迹后向更新的 TD ( λ ) \text{TD}(\lambda) TD ( λ ) 为什么能做到与离线的前向 λ 回报等价?
设想我们把一个 episode 所有步的更新累加起来.后向视角的在线更新在每步使用该时刻的 V V V 值,而前向视角在所有数据已知后统一计算.当 α 足够小(或采取离线更新,即在 episode 结束后一次性应用所有 δ 但保持过程中 V 不变),两种视角在总量上完全等价.
等价的关键在于,每个奖励 R t + k R_{t+k} R t + k 对某个状态价值估计的贡献,通过迹机制恰好以权重 ( γ λ ) k − 1 (\gamma\lambda)^{k-1} ( γ λ ) k − 1 分配到 k 步之前的状态,这与 λ 回报中 n 步回报的加权系数完美匹配.因此:
∑ t α δ t E t ( s ) 等价于 α ( G s λ − V ( s ) ) . \sum_{t} \alpha \delta_t E_t(s) \quad \text{等价于} \quad \alpha \big( G_s^\lambda - V(s) \big). t ∑ α δ t E t ( s ) 等价于 α ( G s λ − V ( s ) ) .
这说明 TD ( λ ) \text{TD}(\lambda) TD ( λ ) 本质上就是在一步步实现对 λ 回报的逼近 ,但以一种真正的在线、增量式、内存高效的方式完成.这也是资格迹被称为强化学习“时间桥梁”的原因.
前向视角中
λ \lambda λ 权重的分配与前后向视角的统一
在 TD ( λ ) \text{TD}(\lambda) TD ( λ ) 的前向视角中,定义了 λ \lambda λ -回报为所有 n n n 步回报的加权平均
G t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 G t ( n ) , G_t^\lambda = (1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} G_t^{(n)}, G t λ = ( 1 − λ ) n = 1 ∑ ∞ λ n − 1 G t ( n ) ,
其中第 n n n 步回报的权重为
w n = ( 1 − λ ) λ n − 1 . w_n=(1-\lambda)\lambda^{n-1}. w n = ( 1 − λ ) λ n − 1 .
可能会问为什么要这样进行权重分配,实际上该权重呈几何级数(衰减).
权重需要构成一个概率分布 ,即权重之和为 1 1 1 :
∑ n = 1 ∞ ( 1 − λ ) λ n − 1 = ( 1 − λ ) ⋅ 1 1 − λ = 1. \sum_{n=1}^{\infty}(1-\lambda)\lambda^{n-1}=(1-\lambda)\cdot \frac{1}{1-\lambda}=1. n = 1 ∑ ∞ ( 1 − λ ) λ n − 1 = ( 1 − λ ) ⋅ 1 − λ 1 = 1.
几何分布
X ∼ G ( p ) ⇔ p k = P ( X = k ) = p ( 1 − p ) k − 1 , k = 1 , 2 , … . 0 < p < 1. X\sim G(p)\Leftrightarrow p_k=P(X=k)=p(1-p)^{k-1},k=1,2,\ldots.\quad 0<p<1. X ∼ G ( p ) ⇔ p k = P ( X = k ) = p ( 1 − p ) k − 1 , k = 1 , 2 , … . 0 < p < 1.
Thm. 若 X ∼ G ( p ) X\sim G(p) X ∼ G ( p ) ,则对任意正整数 m , n m,n m , n ,有
P ( X > m + n ∣ X > m ) = P ( X > n ) . P(X>m+n\mid X>m)=P(X>n). P ( X > m + n ∣ X > m ) = P ( X > n ) .
从直观上理解 λ \lambda λ - 回报的构造过程:站在时刻 t t t ,有两种选择:
以概率 ( 1 − λ ) (1-\lambda) ( 1 − λ ) 停下,使用 1 步回报 G t ( 1 ) G_t^{(1)} G t ( 1 )
以概率 λ \lambda λ 继续走,在时刻 t + 1 t+1 t + 1 ,面临相同的选择
这就产生了一个递归结构
G t λ = ( 1 − λ ) G t ( 1 ) + λ [ ( 1 − λ ) G t ( 2 ) + λ [ ( 1 − λ ) G t ( 3 ) + ⋯ ] ] . G_t^{\lambda}=(1-\lambda)G_t^{(1)}+\lambda[(1-\lambda)G_t^{(2)}+\lambda[(1-\lambda)G_t^{(3)}+\cdots]]. G t λ = ( 1 − λ ) G t ( 1 ) + λ [( 1 − λ ) G t ( 2 ) + λ [( 1 − λ ) G t ( 3 ) + ⋯ ]] .
最终展开后即得
G t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 G t ( n ) . G_t^{\lambda}=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}. G t λ = ( 1 − λ ) n = 1 ∑ ∞ λ n − 1 G t ( n ) .
从前向视角 λ \lambda λ -回报到后向视角资格迹
在终止型任务中
G t λ = ( 1 − λ ) ∑ n = 1 T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t , G_t^{\lambda}=(1-\lambda)\sum_{n=1}^{T-t-1} \lambda^{n-1}G_t^{(n)}+\lambda^{T-t-1}G_t, G t λ = ( 1 − λ ) n = 1 ∑ T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t ,
其中
G t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n V ( S t + n ) . G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{n-1} R_{t+n} + \gamma^n V(S_{t+n}). G t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n V ( S t + n ) .
TD误差
δ k = R k + 1 + γ V ( S k + 1 ) − V ( S k ) . \delta_k=R_{k+1}+\gamma V(S_{k+1})-V(S_k). δ k = R k + 1 + γ V ( S k + 1 ) − V ( S k ) .
考虑离线 TD ( λ ) \text{TD}(\lambda) TD ( λ ) ,即整个 episode 期间不改变状态价值,只记录所有 TD 误差和资格迹,等 episode 结束后一次性完成更新,此时在整个 episode 中,有
V 0 ( s ) = V 1 ( s ) = ⋯ = V T ( s ) . V_0(s)=V_1(s)=\cdots=V_T(s). V 0 ( s ) = V 1 ( s ) = ⋯ = V T ( s ) .
最后统一更新
V ( s ) ← V ( s ) + Δ ( s ) , V(s)\leftarrow V(s)+\Delta(s), V ( s ) ← V ( s ) + Δ ( s ) ,
则有式(1)
∑ k = t T − 1 ( λ γ ) k − t δ k = δ t + λ γ δ t + 1 + ( λ γ ) 2 δ t + 2 + ⋯ + ( λ γ ) T − t − 1 δ T − 1 = R t + 1 + γ V ( S t + 1 ) − V ( S t ) + λ γ ( R t + 2 + γ V ( S t + 2 ) − V ( S t + 1 ) ) + ( λ γ ) 2 ( R t + 3 + γ V ( S t + 3 ) − V ( S t + 2 ) ) + ⋯ + ( λ γ ) T − t − 1 ( R T + γ V ( S T ) − V ( S T − 1 ) ) = R t + 1 + λ γ R t + 2 + ( λ γ ) 2 R t + 3 + ⋯ − V ( S t ) + ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ( 1 − λ ) λ 2 γ 3 V ( S t + 3 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) + λ T − t − 1 γ T − t V ( S T ) . \begin{aligned}\sum_{k=t}^{T-1}(\lambda\gamma)^{k-t}\delta_k = & \delta_t+\lambda\gamma\delta_{t+1}+(\lambda\gamma)^2\delta_{t+2}+\cdots+(\lambda\gamma)^{T-t-1}\delta_{T-1} \\ = & R_{t+1} +\gamma V(S_{t+1})-V(S_t) + \\ & \lambda\gamma( R_{t+2} + \gamma V(S_{t+2})- V(S_{t+1})) + \\ & (\lambda\gamma)^2 (R_{t+3}+\gamma V(S_{t+3})-V(S_{t+2})) + \\ & \cdots + \\ & (\lambda\gamma)^{T-t-1}(R_T+\gamma V(S_T)-V(S_{T-1})) \\ = & R_{t+1}+\lambda\gamma R_{t+2}+(\lambda\gamma)^2 R_{t+3}+\cdots \\ & -V(S_t) + \\ & (1-\lambda)\gamma V(S_{t+1}) + \\ & (1-\lambda)\lambda\gamma^2 V(S_{t+2}) + \\ & (1-\lambda)\lambda^2\gamma^3 V(S_{t+3}) + \\ & \cdots + \\ & (1-\lambda)\lambda^{T-t-2}\gamma^{T-t-1}V(S_{T-1}) + \\ & \lambda^{T-t-1}\gamma^{T-t}V(S_T). \end{aligned} k = t ∑ T − 1 ( λγ ) k − t δ k = = = δ t + λγ δ t + 1 + ( λγ ) 2 δ t + 2 + ⋯ + ( λγ ) T − t − 1 δ T − 1 R t + 1 + γ V ( S t + 1 ) − V ( S t ) + λγ ( R t + 2 + γ V ( S t + 2 ) − V ( S t + 1 )) + ( λγ ) 2 ( R t + 3 + γ V ( S t + 3 ) − V ( S t + 2 )) + ⋯ + ( λγ ) T − t − 1 ( R T + γ V ( S T ) − V ( S T − 1 )) R t + 1 + λγ R t + 2 + ( λγ ) 2 R t + 3 + ⋯ − V ( S t ) + ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ( 1 − λ ) λ 2 γ 3 V ( S t + 3 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) + λ T − t − 1 γ T − t V ( S T ) .
终止状态 V ( S T ) = 0 V(S_T)=0 V ( S T ) = 0 .
另一方面,
G t ( 1 ) = R t + 1 + γ V ( S t + 1 ) G t ( 2 ) = R t + 1 + γ R t + 2 + γ 2 V ( S t + 2 ) G t ( 3 ) = R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 V ( S t + 3 ) ⋯ G t ( T − t − 1 ) = R t + 1 + γ R t + 2 + ⋯ + γ T − t − 2 R T − 1 + γ T − t − 1 V ( S T − 1 ) G t = R t + 1 + γ R t + 2 + ⋯ + γ T − t − 2 R T − 1 + γ T − t − 1 R T . \begin{aligned} G_t^{(1)} & =R_{t+1}+\gamma V(S_{t+1}) \\G_t^{(2)} & =R_{t+1}+\gamma R_{t+2}+\gamma^2 V(S_{t+2}) \\G_t^{(3)} & =R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 V(S_{t+3}) \\& \cdots \\G_t^{(T-t-1)} & =R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{T-t-2}R_{T-1}+\gamma^{T-t-1}V(S_{T-1})\\G_t & =R_{t+1}+\gamma R_{t+2}+\cdots+ \gamma^{T-t-2}R_{T-1}+\gamma^{T-t-1}R_{T}.\end{aligned} G t ( 1 ) G t ( 2 ) G t ( 3 ) G t ( T − t − 1 ) G t = R t + 1 + γ V ( S t + 1 ) = R t + 1 + γ R t + 2 + γ 2 V ( S t + 2 ) = R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 V ( S t + 3 ) ⋯ = R t + 1 + γ R t + 2 + ⋯ + γ T − t − 2 R T − 1 + γ T − t − 1 V ( S T − 1 ) = R t + 1 + γ R t + 2 + ⋯ + γ T − t − 2 R T − 1 + γ T − t − 1 R T .
有式(2)
G t λ = ( 1 − λ ) ∑ n = 1 T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t = ( 1 − λ ) ( 1 + λ + ⋯ + λ T − t − 2 ) R t + 1 + λ T − t − 1 R t + 1 + ( 1 − λ ) ( λ + λ 2 + ⋯ + λ T − t − 2 ) γ R t + 2 + λ T − t − 1 R t + 2 + ⋯ + ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) = R t + 1 + λ γ R t + 2 + ( λ γ ) 2 R t + 3 + ⋯ ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) . \begin{aligned} G_t^{\lambda}= & (1-\lambda)\sum_{n=1}^{T-t-1} \lambda^{n-1}G_t^{(n)}+\lambda^{T-t-1}G_t \\ = & (1-\lambda)(1+\lambda+\cdots+\lambda^{T-t-2})R_{t+1}+\lambda^{T-t-1}R_{t+1} + \\ & (1-\lambda)(\lambda+\lambda^2+\cdots+ \lambda^{T-t-2})\gamma R_{t+2} +\lambda^{T-t-1}R_{t+2} + \\ & \cdots + \\ & (1-\lambda)\gamma V(S_{t+1})+ \\ & (1-\lambda)\lambda\gamma^2 V(S_{t+2}) + \\ & \cdots + \\ & (1-\lambda)\lambda^{T-t-2}\gamma^{T-t-1} V(S_{T-1}) \\ = & R_{t+1}+\lambda\gamma R_{t+2}+(\lambda\gamma)^2 R_{t+3}+\cdots \\ & (1-\lambda)\gamma V(S_{t+1})+ \\ & (1-\lambda)\lambda\gamma^2 V(S_{t+2}) + \\ & \cdots + \\ & (1-\lambda)\lambda^{T-t-2}\gamma^{T-t-1} V(S_{T-1}). \end{aligned} G t λ = = = ( 1 − λ ) n = 1 ∑ T − t − 1 λ n − 1 G t ( n ) + λ T − t − 1 G t ( 1 − λ ) ( 1 + λ + ⋯ + λ T − t − 2 ) R t + 1 + λ T − t − 1 R t + 1 + ( 1 − λ ) ( λ + λ 2 + ⋯ + λ T − t − 2 ) γ R t + 2 + λ T − t − 1 R t + 2 + ⋯ + ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) R t + 1 + λγ R t + 2 + ( λγ ) 2 R t + 3 + ⋯ ( 1 − λ ) γ V ( S t + 1 ) + ( 1 − λ ) λ γ 2 V ( S t + 2 ) + ⋯ + ( 1 − λ ) λ T − t − 2 γ T − t − 1 V ( S T − 1 ) .
比较 ( 1 ) (1) ( 1 ) 和 ( 2 ) (2) ( 2 ) 得到
G t λ − V ( S t ) = ∑ k = t T − 1 ( λ γ ) k − t δ k . G_t^{\lambda}-V(S_t)=\sum_{k=t}^{T-1}(\lambda\gamma)^{k-t}\delta_k. G t λ − V ( S t ) = k = t ∑ T − 1 ( λγ ) k − t δ k .
这意味着对 V ( S t ) V(S_t) V ( S t ) 的更新可以表示为所有TD误差的加权和:
Δ V ( S t ) = α ∑ k = t T − 1 ( λ γ ) k − t δ k . \Delta V(S_t)=\alpha\sum_{k=t}^{T-1}(\lambda\gamma)^{k-t}\delta_k. Δ V ( S t ) = α k = t ∑ T − 1 ( λγ ) k − t δ k .
在后向视角中,每产生一个 δ k \delta_k δ k ,立即乘系数 ( λ γ ) k − t (\lambda\gamma)^{k-t} ( λγ ) k − t 传播给以前访问的状态,所有 TD 误差传播完成后,状态 S t S_t S t 得到的累计更新就是α ( G t λ − V ( S t ) ) \alpha(G_t^{\lambda}-V(S_t)) α ( G t λ − V ( S t )) .因此前向视角与后向视角两者在本质是统一的.
6. 资格迹与控制:Sarsa(λ)#
价值估计的资格迹很自然地能推广到动作价值函数的控制问题.将资格迹从状态扩展为状态-动作对 ,我们就得到了 Sarsa ( λ ) \text{Sarsa}(\lambda) Sarsa ( λ ) .
6.1 前向 Sarsa(λ)方法#
在 Sarsa(λ \lambda λ )前向视角中,通过对每个回报赋予权重 ( 1 − λ ) λ n − 1 (1-\lambda)\lambda^{n-1} ( 1 − λ ) λ n − 1 来平均多个不同的 Q Q Q -回报进行更新,其中 n n n 步 Sarsa 的 Q Q Q -回报为
Q t ( n ) = R t + 1 + γ R t + 1 + ⋯ + γ n − 1 R t + n + γ n Q ( S t + n , A t + n ) , Q_t^{(n)}=R_{t+1}+\gamma R^{t+1}+\cdots +\gamma^{n-1}R_{t+n}+\gamma^n Q(S_{t+n},A_{t+n}), Q t ( n ) = R t + 1 + γ R t + 1 + ⋯ + γ n − 1 R t + n + γ n Q ( S t + n , A t + n ) ,
则得到 λ \lambda λ -回报 Q t λ Q_t^{\lambda} Q t λ :
Q t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 Q t ( n ) . Q_t^{\lambda}=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}Q_t^{(n)}. Q t λ = ( 1 − λ ) n = 1 ∑ ∞ λ n − 1 Q t ( n ) .
结合 Sarsa 的更新公式,得到前向视角 Sarsa(λ \lambda λ )的更新公式为
Q ( S t , A t ) ← Q ( S t , A t ) + α ( Q t λ − Q ( S t , A t ) ) . Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha (Q_t^{\lambda}-Q(S_t,A_t)). Q ( S t , A t ) ← Q ( S t , A t ) + α ( Q t λ − Q ( S t , A t )) .
6.2 后向 Sarsa(λ)方法#
在 Sarsa(λ \lambda λ )后向视角中,通过引入资格迹,将当前行为值函数误差按权重进行分配更新,每执行一个动作,我们更新资格迹 E t ( s , a ) E_t(s,a) E t ( s , a ) :
E t ( s , a ) = { γ λ E t − 1 ( s , a ) + 1 如果 ( s , a ) = ( S t , A t ) , (累积迹情况) γ λ E t − 1 ( s , a ) 其他 , E_t(s,a) =
\begin{cases}
\gamma \lambda E_{t-1}(s,a) + 1 & \text{如果 } (s,a) = (S_t, A_t), \text{(累积迹情况)} \\
\gamma \lambda E_{t-1}(s,a) & \text{其他},
\end{cases} E t ( s , a ) = { γ λ E t − 1 ( s , a ) + 1 γ λ E t − 1 ( s , a ) 如果 ( s , a ) = ( S t , A t ) , (累积迹情况) 其他 ,
其中 E 0 ( s , a ) = 0 E_0(s,a)=0 E 0 ( s , a ) = 0 .TD 误差为:
δ t = R t + 1 + γ Q t ( S t + 1 , A t + 1 ) − Q t ( S t , A t ) . \delta_t = R_{t+1} + \gamma Q_t(S_{t+1}, A_{t+1}) - Q_t(S_t, A_t). δ t = R t + 1 + γ Q t ( S t + 1 , A t + 1 ) − Q t ( S t , A t ) .
然后更新所有状态-动作对:
Q t + 1 ( s , a ) = Q t ( s , a ) + α δ t E t ( s , a ) , ∀ s , a . Q_{t+1}(s,a) = Q_t(s,a) + \alpha \delta_t E_t(s,a),\ \forall s, a. Q t + 1 ( s , a ) = Q t ( s , a ) + α δ t E t ( s , a ) , ∀ s , a .
Sarsa ( λ ) \text{Sarsa}(\lambda) Sarsa ( λ ) 算法伪代码:
后向 Sarsa(λ) 算法
输入:环境 E,状态空间 S,动作空间 A,折扣回报 γ,初始化行为值函数 Q(s,a) = 0,
从 Q 导出的初始ε-greedy策略 π_0.
For k = 0, 1, ..., m do (针对每一条轨迹)
初始化所有状态行为对的资格迹:E(s,a) = 0
初始化状态 s 和行为 a,得到第一个状态行为对 (s, a)
For t = 0, 1, 2, 3, ... do (针对轨迹中的每一步)
r, s' ← 在 E 中执行动作 a 产生的回报和转移的状态;
基于 s',通过 ε-greedy 策略采取行为 a',得到第二个状态行为对 (s', a')
δ ← r + γ Q(s', a') − Q(s, a) // TD 误差
E(s, a) ← E(s, a) + 1 //更新当前状态行为对的资格迹
对于所有的状态行为对 (s, a):
Q(s, a) ← Q(s, a) + α δ E(s, a)
E(s, a) ← γ λ E(s, a)
s ← s', a ← a'
end for // s 是一个终止状态
end for
∀ s ∈ S:π*(s) = argmax_{a∈A} Q(s, a)
输出:最优策略 π* plaintext
code
7. 资格迹与控制:Q(λ)#
常规的 Q-Learning 的更新目标为 1 步回报,即
Q ( S t , A t ) ← Q ( S t , A t ) + α ( Q t − Q ( S t , A t ) ) , Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha (Q_t-Q(S_t,A_t)), Q ( S t , A t ) ← Q ( S t , A t ) + α ( Q t − Q ( S t , A t )) ,
其中
Q t = R t + 1 + γ max a ′ Q t ( S t + 1 , a ′ ) . Q_t=R_{t+1}+\gamma \max_{a'}Q_t(S_{t+1},a'). Q t = R t + 1 + γ a ′ max Q t ( S t + 1 , a ′ ) .
Q-Learning 估计的 π ∗ \pi^* π ∗ 是 greedy 策略,在计算 TD 目标 Q t Q_t Q t 时,对应的是 greedy 策略 π \pi π 生成的轨迹.由于 O-Learning 是 off-policy,行为策略 μ \mu μ (ϵ \epsilon ϵ -greedy) 与目标策略 π \pi π (greedy)不同,即采样生成的真实轨迹与 π \pi π 生成的可能不一致,因此在计算 n n n 步回报时,根据采样真实轨迹不一定可以得到 n n n 步对应的 TD 目标,由此在实际操作中,资格迹不能像 Sarsa(λ \lambda λ )那样传播到整个 episode,而需要在某些时候截断 .
为描述行为策略与目标策略对应轨迹的不同,并确定当前时间步选择的行为的性质,我们给出贪婪行为 和探索行为 的定义.
Def. 在当前状态 s s s 下,若选择的行为 a a a 满足
Q ( s , a ) = max a ′ Q ( s , a ′ ) Q(s,a)=\max_{a'} Q(s,a') Q ( s , a ) = a ′ max Q ( s , a ′ )
则称该行为是贪婪行为 ,反之则为探索行为 .
例 3:多步回报的限制
考虑轨迹
s 0 → a 0 R 1 , s 1 → a 1 R 2 , s 2 → a 2 R 3 , s 3 . s_0 \xrightarrow{a_0} R_1,s_1 \xrightarrow{a_1}R_2, s_2 \xrightarrow{a_2}R_3, s_3. s 0 a 0 R 1 , s 1 a 1 R 2 , s 2 a 2 R 3 , s 3 .
在常规 Q-Learning 的 1 步回报中,更新状态行为对 ( s 0 , a 0 ) (s_0,a_0) ( s 0 , a 0 ) 的 Q Q Q 值,所使用的是 max a ′ Q ( s 1 , a ′ ) \max_{a'}Q(s_1,a') max a ′ Q ( s 1 , a ′ ) ,而不是实际执行的 a 1 a_1 a 1 .并且由于只看到下一步,即使真实轨迹没有采取 greedy,我们仍然会认为从 s 1 s_1 s 1 开始以后是 greedy 策略生成的轨迹,即无论 a 1 a_1 a 1 是贪婪行为还是探索行为,不影响 Q ( s 0 , a 0 ) Q(s_0,a_0) Q ( s 0 , a 0 ) 的更新;
若考虑多步回报,如 3 步回报,且 a 1 a_1 a 1 为贪婪行为,a 2 a_2 a 2 为探索行为,则 TD 目标 Q ( 3 ) Q^{(3)} Q ( 3 ) 为
Q ( 3 ) = R 1 + γ R 2 + γ 2 R 3 + γ 3 max a Q ( s 3 , a ) . Q^{(3)}=R_{1}+\gamma R_{2}+\gamma^2 R_{3}+\gamma^3 \max_a Q(s_{3},a). Q ( 3 ) = R 1 + γ R 2 + γ 2 R 3 + γ 3 a max Q ( s 3 , a ) .
从 a 2 a_2 a 2 开始,后面的轨迹不是 greedy 策略产生的,对应经验奖励 R 3 … R_3\ldots R 3 … 不能再代表 Q ∗ Q^* Q ∗ ,因此不能使用 3 步回报作为 TD 目标,进而更新 Q ( s 0 , a 0 ) Q(s_0,a_0) Q ( s 0 , a 0 ) ^eg3
7.1 前向 Watkins’s Q(λ) 方法#
将 Q-Learning 的更新目标变为多步.假设正在求解贪心策略在状态行为对 ( s t , a t ) (s_t,a_t) ( s t , a t ) 的行为值函数,前两个时间步选择的行为是贪婪行为,但第三个时间步选择的行为是探索行为.
s t → greedy a t s t + 1 → greedy a t + 1 s t + 2 → explore a t + 2 s t + 3 s_t \xrightarrow[\text{greedy}]{a_t} s_{t+1} \xrightarrow[\text{greedy}]{a_{t+1}} s_{t+2} \xrightarrow[\text{explore}]{a_{t+2}} s_{t+3} s t a t greedy s t + 1 a t + 1 greedy s t + 2 a t + 2 explore s t + 3
对于 ( s t , a t ) (s_t,a_t) ( s t , a t ) ,可以利用哪些回报?从例 3 中,我们可以得到,1 步回报和 2 步回报可以利用.3 步回报中,在 s t + 2 → a t + 2 R t + 3 , s t + 3 s_{t+2}\xrightarrow{a_{t+2}} R_{t+3},s_{t+3} s t + 2 a t + 2 R t + 3 , s t + 3 中,a t + 2 a_{t+2} a t + 2 为探索行为,由于后续轨迹不是 greedy 策略产生,而是 ϵ \epsilon ϵ -greedy,因此 3 步回报不能使用.
R t + 1 + γ max a Q ( s t + 1 , a ) . R_{t+1}+\gamma \max_a Q(s_{t+1},a). R t + 1 + γ a max Q ( s t + 1 , a ) .
R t + 1 + γ R t + 2 + γ 2 max a Q ( s t + 2 , a ) . R_{t+1}+\gamma R_{t+2}+\gamma^2\max_a Q(s_{t+2},a). R t + 1 + γ R t + 2 + γ 2 a max Q ( s t + 2 , a ) .
R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 max a Q ( s t + 3 , a ) . R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\gamma^3 \max_a Q(s_{t+3},a). R t + 1 + γ R t + 2 + γ 2 R t + 3 + γ 3 a max Q ( s t + 3 , a ) .
结合上述对回报的利用, Watkins’s Q ( λ ) \text{Q}(\lambda) Q ( λ ) 使用的有效轨迹长度,最长就到第二个时间步,从第三个时间步往后的序列不再理会,即 Watkins’s Q ( λ ) \text{Q}(\lambda) Q ( λ ) 使用的有效轨迹长度最远到达第一个探索行为对应的时间步长 .因此,Watkins’s Q ( λ ) \text{Q}(\lambda) Q ( λ ) 的有效轨迹长的不是整个轨迹从开始到结束,它只考虑最近的探索行为,一旦探索行为发生,则轨迹结束.
对状态行为对 ( s t , a t ) (s_t,a_t) ( s t , a t ) ,第一个探索行为是 a t + n a_{t+n} a t + n ,轨迹以 s t + n s_{t+n} s t + n 为最后一个状态,则最长的 n n n 步 Q-回报为
Q t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n max a Q ( s t + n , a ) . Q_t^{(n)}=R_{t+1}+\gamma R_{t+2}+\cdots +\gamma^{n-1}R_{t+n}+\gamma^n \max_{a}Q(s_{t+n},a). Q t ( n ) = R t + 1 + γ R t + 2 + ⋯ + γ n − 1 R t + n + γ n a max Q ( s t + n , a ) .
对 Q-回报加权求和得到 Q 的 λ-回报 Q t λ Q_t^\lambda Q t λ :
Q t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 Q t ( n ) . Q_t^{\lambda}=(1-\lambda)\sum_{n=1}^\infty \lambda^{n-1}Q_t^{(n)}. Q t λ = ( 1 − λ ) n = 1 ∑ ∞ λ n − 1 Q t ( n ) .
Watkins’s Q ( λ ) \text{Q}(\lambda) Q ( λ ) 更新公式为
Q ( s t , a t ) ← Q ( s t , a t ) + α ( Q t λ − Q ( s t , a t ) ) . Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha(Q_t^\lambda - Q(s_t,a_t)). Q ( s t , a t ) ← Q ( s t , a t ) + α ( Q t λ − Q ( s t , a t )) .
7.2 后向 Watkins’s Q(λ) 方法#
对每个状态行为对 ( s , a ) (s,a) ( s , a ) ,我们更新资格迹 E t ( s , a ) E_t(s,a) E t ( s , a ) :
E t ( s , a ) = I s S t ⋅ I a A t + { γ λ E t − 1 ( s , a ) 如果 Q t − 1 ( S t , A t ) = max a ′ Q t − 1 ( S t , a ′ ) , 0 其他 , E_t(s,a) = I_{sS_t}\cdot I_{aA_t}+
\begin{cases}
\gamma \lambda E_{t-1}(s,a) & \text{如果 } Q_{t-1}(S_t,A_t) = \max_{a'} Q_{t-1}(S_t, a'), \\
0 & \text{其他},
\end{cases} E t ( s , a ) = I s S t ⋅ I a A t + { γ λ E t − 1 ( s , a ) 0 如果 Q t − 1 ( S t , A t ) = max a ′ Q t − 1 ( S t , a ′ ) , 其他 ,
其中
I s S t = { 1 , s = S t 0 , s ≠ S t , I a A t = { 1 , a = A t 0 , a ≠ A t I_{sS_t}=\begin{cases}1,\ s=S_t \\ 0,\ s\neq S_t\end{cases},\quad I_{aA_t}=\begin{cases}1,\ a=A_t \\ 0,\ a\neq A_t\end{cases} I s S t = { 1 , s = S t 0 , s = S t , I a A t = { 1 , a = A t 0 , a = A t
即若当前选择行为 a t a_t a t 是贪婪行为,则资格迹乘系数 γ λ \gamma\lambda γ λ ,否则资格迹截断为 0;其次,对于当前正在访问的 ( s t , a t ) (s_t,a_t) ( s t , a t ) ,其资格迹单独加 1.
Q ( s , a ) Q(s,a) Q ( s , a ) 的更新公式为
Q t + 1 ( s , a ) = Q t ( s , a ) + α δ t E t ( s , a ) , ∀ s , a , Q_{t+1}(s,a)= Q_t(s,a)+\alpha\delta_t E_t(s,a),\ \forall s,a, Q t + 1 ( s , a ) = Q t ( s , a ) + α δ t E t ( s , a ) , ∀ s , a ,
其中
δ t = R t + 1 + γ max a ′ Q t ( s t + 1 , a ′ ) − Q t ( s t , a t ) . \delta_t = R_{t+1}+\gamma \max_{a'} Q_t(s_{t+1},a')-Q_t(s_t,a_t). δ t = R t + 1 + γ a ′ max Q t ( s t + 1 , a ′ ) − Q t ( s t , a t ) .
后向 Watkins’s Q ( λ ) \text{Q}(\lambda) Q ( λ ) 算法伪代码:
后向 Watkins’s Q(λ) 算法
输入:环境 E,状态空间 S,动作空间 A,折扣回报 γ,初始化行为值函数 Q(s,a) = 0,
从 Q 导出的初始ε-greedy策略 π_0.
For k = 0, 1, ..., m do (针对每一条轨迹)
初始化所有状态行为对的资格迹:E(s,a) = 0
初始化状态 s 和行为 a,得到第一个状态行为对 (s, a)
For t = 0, 1, 2, 3, ... do (针对轨迹中的每一步)
r, s' ← 在 E 中执行动作 a 产生的回报和转移的状态;
基于 s',通过 ε-greedy 策略采取行为 a',得到第二个状态行为对 (s', a')
a* ← argmax_{b∈A} Q(s', b) // 贪心动作(用于资格迹衰减判断)
δ ← r + γ Q(s', a*) − Q(s, a) // TD误差 (使用贪心动作 a* 的Q值)
E(s, a) ← E(s, a) + 1 // 更新当前状态行为对的资格迹
对于所有的状态行为对 (s, a):
Q(s, a) ← Q(s, a) + α δ E(s, a)
// Watkins’s 修正:仅当 a' = a*(即实际采取的动作是贪心动作)时才衰减资格迹;
// 否则,将非贪心路径上的资格迹截断为0
如果 a' = a*,则有 E(s, a) ← γ λ E(s, a)
否则 E(s, a) ← 0
s ← s', a ← a'
end for // s 是一个终止状态
end for
∀ s ∈ S:π*(s) = argmax_{a∈A} Q(s, a)
输出:最优策略 π* plaintext
code
事实上,当存在多个贪婪行为时,即
# { a ′ ∣ Q ( s ′ , a ′ ) = max b Q ( s ′ , b ) } ≜ # A ∗ ( s ′ ) > 1 , \#\{a'\mid Q(s',a')=\max_{b}Q(s',b) \}\triangleq \# A^*(s')>1, # { a ′ ∣ Q ( s ′ , a ′ ) = b max Q ( s ′ , b )} ≜ # A ∗ ( s ′ ) > 1 ,
若上述算法中 a ′ ≠ a ∗ ∈ A ∗ ( s ′ ) a'\neq a^*\in A^*(s') a ′ = a ∗ ∈ A ∗ ( s ′ ) ,则会出现本来仍然符合贪婪策略的轨迹被错误截断.因此上述的贪心动作可更改为贪心动作集合 A ∗ ( s ′ ) A^*(s') A ∗ ( s ′ ) ,以及资格迹更新条件变为 a ′ ∈ A ∗ ( s ′ ) a'\in A^*(s') a ′ ∈ A ∗ ( s ′ ) .
例 4 资格迹更新
状态序列
s t → greedy a t s t + 1 → greedy a t + 1 s t + 2 → explore a t + 2 s t + 3 . s_t \xrightarrow[\text{greedy}]{a_t} s_{t+1} \xrightarrow[\text{greedy}]{a_{t+1}} s_{t+2} \xrightarrow[\text{explore}]{a_{t+2}} s_{t+3}. s t a t greedy s t + 1 a t + 1 greedy s t + 2 a t + 2 explore s t + 3 .
在 ( s t , a t ) (s_t,a_t) ( s t , a t ) 处,E ( s t , a t ) = 1 E(s_t,a_t)=1 E ( s t , a t ) = 1 ,a t a_t a t 是贪婪行为,则资格迹继续衰减并累计
E ( s t , a t ) = γ λ , E ( s t + 1 , a t + 1 ) = 1. \begin{aligned} & E(s_t,a_t)=\gamma\lambda, \\ &E(s_{t+1},a_{t+1})=1. \end{aligned} E ( s t , a t ) = γ λ , E ( s t + 1 , a t + 1 ) = 1.
再执行下一步 ( s t + 2 , a t + 2 ) (s_{t+2},a_{t+2}) ( s t + 2 , a t + 2 ) ,此时得到
E ( s t , a t ) = ( γ λ ) 2 , E ( s t + 1 , a t + 1 ) = γ λ , E ( s t + 2 , a t + 2 ) = 1. \begin{aligned} & E(s_t,a_t)=(\gamma\lambda)^2, \\ & E(s_{t+1},a_{t+1})=\gamma\lambda, \\ & E(s_{t+2},a_{t+2})=1. \end{aligned} E ( s t , a t ) = ( γ λ ) 2 , E ( s t + 1 , a t + 1 ) = γ λ , E ( s t + 2 , a t + 2 ) = 1.
在探索动作发生之前,各状态行为对的资格迹均保留,且当前 TD 误差能够传播给之前访问过的状态动作对.
而在 a t + 2 a_{t+2} a t + 2 不是贪婪动作,表明此后轨迹偏离目标策略,后续经验不能用于估计greedy策略的价值,因此,在计算完当前一步更新后,资格迹立即清理:
E ( s , a ) = 0 , ∀ s , a E(s,a)=0,\ \forall s,a E ( s , a ) = 0 , ∀ s , a
原来的资格迹 E ( s t , a t ) , E ( s t + 1 , a t + 1 ) , E ( s t + 2 , a t + 2 ) E(s_t,a_t),E(s_{t+1},a_{t+1}),E(s_{t+2},a_{t+2}) E ( s t , a t ) , E ( s t + 1 , a t + 1 ) , E ( s t + 2 , a t + 2 ) 均变为 0 0 0 .
若不清零,则随后计算得到的 TD 误差 δ t + 3 \delta_{t+3} δ t + 3 仍会更新 ( s t , a t ) (s_t,a_t) ( s t , a t ) , ( s t + 1 , a t + 1 ) (s_{t+1},a_{t+1}) ( s t + 1 , a t + 1 ) 和 ( s t + 2 , a t + 2 ) (s_{t+2},a_{t+2}) ( s t + 2 , a t + 2 ) 对应值,即探索行为后的经验影响了原本目标贪婪策略,因此此时需将资格迹截断清零.
例 5:悬崖行走任务
经典的悬崖行走网格中,智能体从起点到终点,途中某些格是悬崖,掉下去会获得 -100 奖励并回到起点.用 Sarsa(0) 学习,智能体学到的安全路径会远离悬崖(因为探索时有概率掉下悬崖,一步更新过于谨慎).若使用 Sarsa ( λ ) \text{Sarsa}(\lambda) Sarsa ( λ ) 并取较大的 λ,掉下悬崖的大负奖励会被迹传播到更早的状态-动作对,那些导致接近悬崖路径的动作会受到更强的惩罚,智能体可能更快地学会避开危险区域.同时,正奖励的传播也更快,使得成功路径的 Q 值提升更迅速.实验通常显示,在 λ≈0.7~0.9 时学习速度明显快于 λ=0.
8. 总结#
本节脉络:
动机 :一步更新的信息传播瓶颈与蒙特卡洛的高方差,促使我们寻找多步信息的在线融合方式.
前向 λ 回报 :对 n 步回报的指数加权平均,给予我们偏差-方差可调的理想更新目标.
后向资格迹 :通过“迹”来记录每个状态的访问新近度与频率,将每一步的 TD 误差按迹分配给历史状态,从而在在线更新中等价于前向 λ 回报.
Sarsa ( λ ) \text{Sarsa}(\lambda) Sarsa ( λ ) 与 Q ( λ ) \text{Q}(\lambda) Q ( λ ) :将迹扩展到动作值函数,实现多步同策略控制,显著加速学习.
教材参考
邹伟 - 强化学习 - 清华大学出版社.
Richard S. Sutton - Reinforcement Learning: An Introduction.