【强化学习入门笔记】 2.4 时序差分算法

发布于:2025-02-11 ⋅ 阅读:(95) ⋅ 点赞:(0)

本系列为学习赵世钰老师的《强化学习的数学原理》所作的学习笔记.

本节我们将介绍强化学习中的蒙特卡洛方法.

2.4.1 Robbins-Monro算法

Robbins-Monro算法是一种随机近似方法,通过迭代的方式求解非线性方程。

假设我们要求解: g ( w ) = 0 g(w)=0 g(w)=0, 但是我们没有 g ( w ) g(w) g(w)的具体函数形式, 只有它的观测数据:

g ~ ( w , η ) = g ( w ) + η , \begin{aligned} \tilde{g}(w, \eta)&=g(w)+\eta, \end{aligned} g~(w,η)=g(w)+η,

其中 η \eta η是观测误差, 那么我们可以利用观测数据, 迭代式的逼近 g ( w ) g(w) g(w)的根:

w k + 1 = w k − a k g ~ ( w k , η k ) , w_{k+1}=w_k-a_k \tilde{g}\left(w_k, \eta_k\right), wk+1=wkakg~(wk,ηk),

其中 a k a_k ak是一个大于0的参数, 迭代过程如下图, 这种方法就是Robbins-Monro算法. 它的收敛性证明可以前往书中查看.

2.4.2 TD learning 时序差分算法

2.4.2.1 推导

时序差分算法用来计算给定策略 π \pi π和其状态 s s s的状态值期望 v π ( s ) v_\pi(s) vπ(s), 即贝尔曼公式:

v π ( s ) = E [ R t + 1 + γ G t + 1 ∣ S t = s ] , s ∈ S v_\pi(s)=\mathbb{E}\left[R_{t+1}+\gamma G_{t+1} \mid S_t=s\right], \quad s \in \mathcal{S} vπ(s)=E[Rt+1+γGt+1St=s],sS

因为 t + 1 t+1 t+1的discounted return实际上就是其状态值的期望:

E [ G t + 1 ∣ S t = s ] = ∑ a π ( a ∣ s ) ∑ s ′ p ( s ′ ∣ s , a ) v π ( s ′ ) = E [ v π ( S t + 1 ) ∣ S t = s ] \mathbb{E}\left[G_{t+1} \mid S_t=s\right]=\sum_a \pi(a \mid s) \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_\pi\left(s^{\prime}\right)=\mathbb{E}\left[v_\pi\left(S_{t+1}\right) \mid S_t=s\right] E[Gt+1St=s]=aπ(as)sp(ss,a)vπ(s)=E[vπ(St+1)St=s]

因此贝尔曼公式也可以写作, 也叫做贝尔曼期望公式:

v π ( s ) = E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] , s ∈ S . v_\pi(s)=\mathbb{E}\left[R_{t+1}+\gamma v_\pi\left(S_{t+1}\right) \mid S_t=s\right], \quad s \in \mathcal{S} . vπ(s)=E[Rt+1+γvπ(St+1)St=s],sS.

TD算法就是利用RM算法迭代求解贝尔曼公式, 首先我们定义求解目标:

g ( v π ( s t ) ) ≐ v π ( s t ) − E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s t ] = 0 g\left(v_\pi\left(s_t\right)\right) \doteq v_\pi\left(s_t\right)-\mathbb{E}\left[R_{t+1}+\gamma v_\pi\left(S_{t+1}\right) \mid S_t=s_t\right] =0 g(vπ(st))vπ(st)E[Rt+1+γvπ(St+1)St=st]=0

接着我们写出它的采样 g ~ ( v ( s ) ) \tilde{g}(v(s)) g~(v(s)):

g ~ ( v ( s ) ) = v π ( s t ) − [ r t + 1 + γ v π ( s t + 1 ) ] = ( v π ( s t ) − E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s t ] ) ⏟ g ( v π ( s t ) ) + ( E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s t ] − [ r t + 1 + γ v π ( s t + 1 ) ] ) ⏟ η . \begin{aligned}\tilde{g}(v(s)) & =v_\pi\left(s_t\right)-\left[r_{t+1}+\gamma v_\pi\left(s_{t+1}\right)\right]\\ & =\underbrace{\left(v_\pi\left(s_t\right)-\mathbb{E}\left[R_{t+1}+\gamma v_\pi\left(S_{t+1}\right) \mid S_t=s_t\right]\right)}_{g\left(v_\pi\left(s_t\right)\right)} \\ &+ \underbrace{\left(\mathbb{E}\left[R_{t+1}+\gamma v_\pi\left(S_{t+1}\right) \mid S_t=s_t\right]-\left[r_{t+1}+\gamma v_\pi\left(s_{t+1}\right)\right]\right)}_\eta . \end{aligned} g~(v(s))=vπ(st)[rt+1+γvπ(st+1)]=g(vπ(st)) (vπ(st)E[Rt+1+γvπ(St+1)St=st])+η (E[Rt+1+γvπ(St+1)St=st][rt+1+γvπ(st+1)]).

然后根据RM算法, 写出更新方程:

v t + 1 ( s t ) = v t ( s t ) − α t ( s t ) g ~ ( v t ( s t ) ) = v t ( s t ) − α t ( s t ) ( v t ( s t ) − [ r t + 1 + γ v π ( s t + 1 ) ] ) \begin{aligned}v_{t+1}\left(s_t\right) & =v_t\left(s_t\right)-\alpha_t\left(s_t\right) \tilde{g}\left(v_t\left(s_t\right)\right) \\& =v_t\left(s_t\right)-\alpha_t\left(s_t\right)\left(v_t\left(s_t\right)-\left[r_{t+1}+\gamma v_\pi\left(s_{t+1}\right)\right]\right)\end{aligned} vt+1(st)=vt(st)αt(st)g~(vt(st))=vt(st)αt(st)(vt(st)[rt+1+γvπ(st+1)])

实际上, 上式就是TD learning算法更新公式

2.4.2.2 定义

假设我们基于一个策略 π \pi π, 按时间步顺序生成了一组状态和奖励: ( s 0 , r 1 , s 1 , … , s t , r t + 1 , s t + 1 , … ) \left(s_0, r_1, s_1, \ldots, s_t, r_{t+1}, s_{t+1}, \ldots\right) (s0,r1,s1,,st,rt+1,st+1,), 用下式更新 v t + 1 v_{t+1} vt+1, 就是时序差分算法:

v t + 1 ( s t ) ⏟ new estimate  = v t ( s t ) ⏟ current estimate  − α t ( s t ) [ v t ( s t ) − ( r t + 1 + γ v t ( s t + 1 ) ⏟ TD target  v ˉ t ) ⏞ TD error  δ t ] , \underbrace{v_{t+1}\left(s_t\right)}_{\text {new estimate }}=\underbrace{v_t\left(s_t\right)}_{\text {current estimate }}-\alpha_t\left(s_t\right)[\overbrace{v_t\left(s_t\right)-(\underbrace{r_{t+1}+\gamma v_t\left(s_{t+1}\right)}_{\text {TD target } \bar{v}_t})}^{\text {TD error } \delta_t}], new estimate  vt+1(st)=current estimate  vt(st)αt(st)[vt(st)(TD target vˉt rt+1+γvt(st+1)) TD error δt],

  • v ˉ t \bar{v}_t vˉt是TD target, 代表 v t v_t vt更新的目标
  • δ t \delta_t δt是TD error, 代表 v t v_t vt更新的目标与 v t v_t vt之间的误差

我们可以简写成如下形式, 显然这符合Robbins-Monro算法的形式:

v t + 1 ( s t ) = v t ( s t ) − α t ( s t ) [ v t ( s t ) − v ˉ t ] v_{t+1}\left(s_t\right)=v_t\left(s_t\right)-\alpha_t\left(s_t\right)\left[v_t\left(s_t\right)-\bar{v}_t\right] vt+1(st)=vt(st)αt(st)[vt(st)vˉt]

2.4.2.3 TD target 和 TD error

为了理解为什么 v ˉ t \bar{v}_t vˉt是更新的目标, 并做推导:

v t + 1 ( s t ) = v t ( s t ) − α t ( s t ) [ v t ( s t ) − v ˉ t ] ⟹ v t + 1 ( s t ) − v ˉ t = v t ( s t ) − v ˉ t − α t ( s t ) [ v t ( s t ) − v ˉ t ] ⟹ v t + 1 ( s t ) − v ˉ t = [ 1 − α t ( s t ) ] [ v t ( s t ) − v ˉ t ] ⟹ ∣ v t + 1 ( s t ) − v ˉ t ∣ = ∣ 1 − α t ( s t ) ∣ ∣ v t ( s t ) − v ˉ t ∣ \begin{aligned}& v_{t+1}\left(s_t\right)=v_t\left(s_t\right)-\alpha_t\left(s_t\right)\left[v_t\left(s_t\right)-\bar{v}_t\right] \\\Longrightarrow & v_{t+1}\left(s_t\right)-\bar{v}_t=v_t\left(s_t\right)-\bar{v}_t-\alpha_t\left(s_t\right)\left[v_t\left(s_t\right)-\bar{v}_t\right] \\\Longrightarrow & v_{t+1}\left(s_t\right)-\bar{v}_t=\left[1-\alpha_t\left(s_t\right)\right]\left[v_t\left(s_t\right)-\bar{v}_t\right] \\\Longrightarrow & \left|v_{t+1}\left(s_t\right)-\bar{v}_t\right|=\left|1-\alpha_t\left(s_t\right)\right|\left|v_t\left(s_t\right)-\bar{v}_t\right|\end{aligned} vt+1(st)=vt(st)αt(st)[vt(st)vˉt]vt+1(st)vˉt=vt(st)vˉtαt(st)[vt(st)vˉt]vt+1(st)vˉt=[1αt(st)][vt(st)vˉt]vt+1(st)vˉt=1αt(st)vt(st)vˉt

因为 α t ( s t ) \alpha_t\left(s_t\right) αt(st)是一个小的正数, 因此 0 < 1 − α t ( s t ) < 1 0<1-\alpha_t\left(s_t\right)<1 0<1αt(st)<1, 所以:

∣ v t + 1 ( s t ) − v ˉ t ∣ < ∣ v t ( s t ) − v ˉ t ∣ . \left|v_{t+1}\left(s_t\right)-\bar{v}_t\right|<\left|v_t\left(s_t\right)-\bar{v}_t\right| . vt+1(st)vˉt<vt(st)vˉt.

这说明了: v t + 1 v_{t+1} vt+1 v t v_{t} vt v ˉ t \bar{v}_t vˉt更近, 代表这算法是在朝着目标 v ˉ t \bar{v}_t vˉt迭代更新 v t v_{t} vt.

那么 δ t \delta_t δt代表误差就很容易理解了, 当 δ t = 0 \delta_t=0 δt=0时, 代表 v t v_{t} vt已经达到了目标.

2.4.3 TD learning 和 MC learning对比

2.4.3.1 在线/离线

  • TD learning: 是在线算法, 每迭代一步(从 k k k k + 1 k+1 k+1)就可以在线更新;
  • MC learning: 是离线算法, 也就是它必须等到episode采样结束, 才能更新

2.4.3.2 持续任务/片段任务

  • TD learning: 可以处理持续和片段任务, 因为它是在线更新的, 所以不需要等到采样完整结束;
  • MC learning: 只能处理持续和片段任务,因为它必须要等到此案有完整结束才能更新

2.4.3.3 Bootstrapping

  • TD learning: Bootstrapping, 它在初始猜测策略的基础上, 不需要完整的episode就能更新策略; 但是相应的, 差的初始猜测会让他更难接近最优解.
  • MC learning: none Bootstrapping, 它不需要初始猜测, 可以直接估计状态/动作值.

2.4.3.4 估计方差

  • TD learning: 估计方差小, 因为它涉及的随机变量较少, 只需要一步的数据;
  • MC learning: 估计方差大, 因为涉及许多随机变量。例如,要估计 q π ( s t , a t ) q_\pi\left(s_t, a_t\right) qπ(st,at),我们需要 R t + 1 + γ R t + 2 + γ 2 R t + 3 + … R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+\ldots Rt+1+γRt+2+γ2Rt+3+的样本。假设每个片段的长度是 L L L。假设每个状态有相同数量的动作,即 ∣ A |\mathcal{A} A。那么,按照软策略,一共有 ∣ A ∣ L |\mathcal{A}|^L AL种可能的片段。但是MC只使用部分片段来估计整体,所以估计方差较高.

网站公告

今日签到

点亮在社区的每一天
去签到