蒙特卡洛与时序差分
动态规划算法建立在已知或习得的环境模型的基础上,而对于大部分强化学习环境来说其环境模型未知并且难以学习,也就无法通过动态规划求解,此时智能体只能通过环境交互数据来直接或间接学习到最优策略。
蒙特卡洛方法(Monte-Carlo)
蒙特卡洛算法是一大类随机算法的总称,在后续的强化学习算法中被广泛应用,例如:
近似期望
为了估计随机变量函数 f(x):Ω↦r 关于服从分布 p(x) 的随机变量 x 的数学期望:
Ex∼p(x)[f(x)]=∫Ωf(x)p(x)dx
可以通过分布 p(x) 进行独立非均匀采样得到 Xn={x1, x2, ⋯, xn},通过样本函数值的均值来近似期望:
qn=n1i=1∑nf(xi)≈Ex∼p(x)[f(x)]
在实际中通常使用增量更新的方式进行计算:
qn=n1i=1∑nf(xi)=n1[(n−1)qn−1+f(xn)]=qn−1+n1(f(xn)−qn−1)
进一步使用学习率 αn 来替换式中的 n1 得到 qn=qn−1+αn(f(xn)−qn−1),其中 α 需要满足以下性质:
n→∞limt=1∑nαt=∞n→∞limt=1∑nαt2<∞
随机梯度
当 x 服从分布 p(x) 时,为了求解以下形式的优化问题(例如神经网络):
θminEx∼p(x)[ℓ(x; θ)]
在损失函数 ℓ 可微时,可以利用梯度下降对模型参数 θ 进行更新,其中对参数 θ 的梯度为:
g=∇θEx∼p(x)[ℓ(x; θ)]=Ex∼p(x)[∇θℓ(x; θ)]
利用蒙特卡洛近似期望的方法,通过一个批次的样本集合 Xb={x1, x2, ⋯, xb} 即可对梯度进行估计
g^=b1i=1∑b∇θℓ(xi; θ)
蒙特卡洛策略评估
为了评估一个策略 π 的状态价值函数 vπ(s),可以通过 π 采样若干条序列:
s0(i)⟶a0(i)r1(i), s1(i)⟶a1(i)r2(i), s2(i)⟶a2(i)⋯⟶aT−1(i)rT(i), sT(i)
通过采样的序列中以状态 st 为初始状态的局部子序列获得的局部回报 gt 来估计回报的期望:
n(st)←n(st)+1v(st)←v(st)+n(st)1(gt−v(st))
同样地可以使用超参数 α 来代替 n1,α 也可以取做常数,此时更新方式不再严格遵循蒙特卡洛估计方法:
v(st)←v(st)+α(gt−v(st))
时序差分方法(Temporal Difference)
单步时序差分
在使用蒙特卡洛方法估计某个策略 π 的状态价值函数时需要等待序列采样完毕才能够进行计算,而通过时序差分方法可以在每次状态转移时通过转移四元组 (st, at, rt+1, st+1) 进行自举并在线更新:
v(st)←v(st)+α[rt+1+γv(st+1)−v(st)]
式中的 δt(1)=rt+1+γv(st+1)−v(st) 为 TD 误差项,gt(1)=rt+1+γv(st+1) 被称为 TD 目标,由于:
vπ(st)=Eat∼π(⋅∣st)r(st, at)+γEat∼π(⋅∣st)Est+1∼p(⋅∣st, at)vπ(st+1)=Eat∼π(⋅∣st)Ert+1∼r(⋅∣st, at)Est+1∼p(⋅∣st, at)[rt+1+γvπ(st+1)]
因此可以使用自举的 gt(1)=rt+1+γv(st+1) 来近似 gt=rt+1+γvπ(st+1),在未收敛到 vπ 前这种自举估计是有偏的,但是相对于蒙特卡洛方法降低了估计的方差,进而降低了估计的偏差:
多步时序差分
类似地,通过多步信息可以得到多步的 TD 目标 g(k)=rt+1+γrt+2+⋯+γk−1rt+k+γkv(st+k)
vπ(st)=EatErt+1Est+1Eat+1Ert+2⋯Est+k[rt+1+γrt+2+⋯+γk−1rt+k+γkvπ(st+k)]
以及多步 TD 误差 δt(k)=rt+1+γrt+2+⋯+γk−1rt+k+γkv(st+1)−v(st),基于此可以实现多步 TD 方法:
v(st)←v(st)+αδt(k)
相较于单步 TD 方法,降低了估计的偏差,而相较于蒙特卡洛方法(T−t 步 TD)又可以降低估计的方差。
TD(λ)
TD(λ) 方法对不同时间步的 TD 目标 gt(k) 进行加权求和来综合低偏差的短期 TD 和低方差的长期 TD:
gt(λ)=(1−λ)gt(1)+(1−λ)λgt(2)+⋯+(1−λ)λT−t−2gt(T−t−1)+λT−t−1gt(T−t)=(1−λ)k=1∑T−t−1λk−1gt(k)+λT−t−1gt(T−t)⟶T→∞(1−λ)k=1∑∞λk−1gt(k)
其中 (1−λ) 用于系数的归一化,即保证:
EatErt+1Est+1Eat+1Ert+2⋯Est+kgt(λ)=(1−λ)[1+λ+⋯+λT−t−2]vπ(st)+λT−t−1vπ(st)=vπ(st)
更新方式为 v(st)←v(st)+α[gtλ−v(st)]=v(st)+αδt(λ),其中:
δt(λ)=(1−λ)δt(1)+(1−λ)λδt(2)+⋯+(1−λ)λT−t−2δt(T−t−1)+λT−t−1δt(T−t)=(1−λ)k=1∑T−t−1λk−1δt(k)+λT−t−1δt(T−t)⟶T→∞(1−λ)k=1∑∞λk−1δt(k)
从 δt(λ) 的形式可以看出,当 λ=0 时 TD(λ) 退化为单步 TD 方法,当 λ=1 时 TD(λ) 退化为蒙特卡洛方法。考虑无限期或不确定期规划下,将 TD(λ) 误差 δt(λ) 展开得到:
δt(λ)=gt(λ)−v(st)=−v(st)⟶T→∞−v(st)=(γλ)0[rt+1+γv(st+1+(1−λ)λ0[rt+1+γv(st+1)]+(1−λ)λ1[rt+1+γrt+2+γ2v(st+2)]+(1−λ)λ2[rt+1+γrt+2+γ2rt+3+γ3v(st+3)]⋯+(γλ)0[rt+1+γv(st+1)(1−λ)]+(γλ)1[rt+2+γv(st+2)(1−λ)]+(γλ)2[rt+3+γv(st+3)(1−λ)]⋯)−v(st)]+(γλ)1[rt+2+γv(st+2)−v(st+1)]+⋯=k=0∑∞(γλ)kδt+k(1)
基于此可以实现 TD(λ) 的在线更新,与离线更新方式相比更加高效,但二者的更新结果具有一定的差异。在线算法的实现需要使用资格迹来计算信度的分配 e(s),其初始值 e0(s)=0,每个时间步的更新方式如下:
et(s)=γλet−1(s)+1(st=s)
从而得到对状态价值函数的在每个时间步的更新 v(s)←v(s)+αδt(1)et(s),资格迹实质上在收集每个状态的每次访问后的系数总和,同时每个分量可以看做在单独进行衰减,衰减因子为 γλ。