当前位置: 首页 > news >正文

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

强化学习笔记(三)——表格型方法(蒙特卡洛、时序差分)

  • 一、马尔可夫决策过程
  • 二、Q表格
  • 三、免模型预测
    • 1. 蒙特卡洛策略评估
      • 1) 动态规划方法和蒙特卡洛方法的差异
    • 2. 时序差分
      • 2.1 时序差分误差
      • 2.2 时序差分方法的推广
    • 3. 自举与采样

一、马尔可夫决策过程

状态转移概率:用 p [ s t + 1 , r t ∣ s t , a t ] p[s_{t+1}, r_t \vert s_t, a_t ] p[st+1,rtst,at]表示在状态 s t s_t st选择动作 a t a_t at时,转移到状态 s t + 1 s_{t+1} st+1,得到奖励 r t r_t rt概率
状态转移概率是具有马尔可夫性质的,系统下一时刻的状态仅有当前时刻的状态决定,不依赖于以往任何状态。

马尔可夫决策过程的四元组: ( S , A , P , R ) (S,A,P,R) (S,A,P,R)。加上折扣因子 γ \gamma γ组成五元组。

概率函数: P [ s t + 1 , r t ∣ s t , a t ] P[s_{t+1}, r_t \vert s_t, a_t] P[st+1,rtst,at]
奖励函数: R [ s t , a t ] R[s_t, a_t] R[st,at]
若知道概率函数和奖励函数,则马尔可夫决策过程就是已知的,可以通过策略迭代和价值迭代找到最佳策略。换句话说,如果知道环境的状态转移概率和奖励函数,则环境就是已知的,可以用这两个函数来描述环境。这种情况下的算法为有模型算法。

如果环境未知,则是免模型算法。

免模型强化学习方法没有获取环境的状态转移和奖励函数,而是让智能体与环境进行交互,采集大量的轨迹,从轨迹中获取信息改进策略。

二、Q表格

如下图所示,Q表格的行为所有状态,列为所有动作。最开始Q表格全部初始化为0。当交互足够多时,可以估算出每一个状态下,每个动作的平均总奖励,更新Q表格。

Q表格

强化:指可以用下一个状态的价值更新当前状态的价值,即自举

每走一步更新一次Q表格,用下一个状态的Q值更新当前状态的Q值,这种单步更新的方法称为时序差分方法(TD,Temporal Difference)。

三、免模型预测

在免模型状态下,可以通过蒙特卡洛方法时序差分方法估计某个给定策略的价值。

1. 蒙特卡洛策略评估

是基于采样的方法,给定策略 π \pi π,让智能体与环境交互,得到很多轨迹。每个轨迹都有回报:
G t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ G_t = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots Gt=rt+1+γrt+2+γ2rt+3+则某一个策略对应状态的价值,可以用所有轨迹的回报的平均值表示:
V π ( s ) = E τ ∼ π [ G t ∣ s t = s ] V_{\pi} (s ) = \mathbb{E}_{\tau \sim \pi} [G_t \vert s_t = s ] Vπ(s)=Eτπ[Gtst=s]蒙特卡洛仿真指:可以采样大量的轨迹,计算所有轨迹的真实回报,计算平均值。
其使用经验平均回报的方法进行估计,因此不需要状态转移函数和奖励函数,也不需要自举。
蒙特卡洛只能用在有终止的马尔可夫决策过程中。

写成增量式蒙特卡洛
N ( s t ) ← N ( s t ) + 1 V ( s t ) ← V ( s t ) + 1 N ( s t ) ( G t − V ( s t ) ) N(s_t) \leftarrow N(s_t) + 1 \\ V(s_t) \leftarrow V(s_t) + \frac{1}{N (s_t) } \left( G_t - V (s_t) \right) N(st)N(st)+1V(st)V(st)+N(st)1(GtV(st)) 1 N ( s t ) \frac{1}{N (s_t) } N(st)1看成学习率 α \alpha α,则
V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t - V (s_t) \right) V(st)V(st)+α(GtV(st))

1) 动态规划方法和蒙特卡洛方法的差异

动态规划中使用了自举的思想,即基于之前估计的量来估计一个量。同时使用了贝尔曼期望备份,通过上一时刻的 V i − 1 ( s ′ ) V_{i-1} (s') Vi1(s)来更新当前时刻的 V i ( s ) V_i (s) Vi(s),即
V i ( s ) ← ∑ a ∈ A π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V i − 1 ( s ′ ) ) V_i (s) \leftarrow \sum_{a \in A} \pi (a \vert s) \left( R(s,a) + \gamma \sum_{s' \in S} P \left( s' \vert s,a \right) V_{i-1} (s') \right) Vi(s)aAπ(as)(R(s,a)+γsSP(ss,a)Vi1(s)) 不停迭代后可以收敛。
贝尔曼期望备份有2层加和,内部和与外部和,计算两次期望,得到一个更新。

蒙特卡洛通过一个回合的经验平均回报来进行更新
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)V(st)+α(Gi,tV(st))蒙特卡洛方法得到的轨迹是已经决定的,采取的动作也是决定的,只更新该轨迹上的所有状态,与该轨迹无关的状态都不进行更新。

蒙特卡洛适用于环境未知的情况,动态规划是有模型的方法;
蒙特卡洛只需要更新一条轨迹的状态,动态规划需要更新所有状态。

2. 时序差分

是介于蒙特卡洛和动态规划之间的方法,免模型,可以从不完整的回合中学习,并结合了自举的思想。

目的:对某个给定的策略 π \pi π,在线计算出七价值函数 V π V_\pi Vπ,即一步一步的算。最简单的算法是一步时序差分,即TD(0)。每往前走一步,就做一步自举,用得到的估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V( s_{t+1}) rt+1+γV(st+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 ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V (s_t) \right) V(st)V(st)+α(rt+1+γV(st+1)V(st))其中估计回报 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1}) rt+1+γV(st+1)称为时序差分目标,是带衰减的未来奖励的总和

时序差分目标由2部分组成:

  1. 走了某一步之后得到的实际奖励 r t + 1 r_{t+1} rt+1
  2. 利用自举方法,通过之前的估计来估计 V ( s t + 1 ) V(s_{t+1}) V(st+1),且加了折扣因子 γ \gamma γ

时序差分目标之所以是估计,有2个原因:

  1. 时序差分方法对期望值进行采样;
  2. 时序差分方法使用当前的估计的V,而不是真实的 V π V_\pi Vπ

2.1 时序差分误差

δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)V(st)类比增量式蒙特卡洛:
V ( s t ) ← V ( s t ) + α ( G i , t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_{i,t} - V (s_t) \right) V(st)V(st)+α(Gi,tV(st))这里的 G i , t G_{i,t} Gi,t即为 r t + 1 + γ V ( s t + 1 ) r_{t+1} + \gamma V (s_{t+1} ) rt+1+γV(st+1) G i , t − V ( s t ) G_{i,t} - V (s_t) Gi,tV(st)即为 δ = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta = r_{t+1} + \gamma V (s_{t+1} ) - V (s_t) δ=rt+1+γV(st+1)V(st)。在蒙特卡洛里, G i , t G_{i,t} Gi,t是实际得到的值,因为它已经把一条轨迹跑完了。而时序差分不等轨迹结束,往前走一步,就可以更新价值函数。时序差分只执行一步,状态的值就更新。蒙特卡洛方法全部执行完之后,到了终止状态之后,再更新它的值。

蒙特卡洛和时序差分
对比:

  1. 时序差分可以在线学习,每走一步就更新,效率高。蒙特卡洛要等游戏结束才能学习。
  2. 时序差分可以从不完整序列上进行学习,蒙特卡洛只能从完整序列上学习。
  3. 时序差分可以再连续的环境下(没有终止)进行学习,蒙特卡洛只能在有终止的情况下学习。
  4. 时序差分李永乐马尔科夫性质,在马尔可夫环境下有更好的学习效率。蒙特卡洛没有假设具有该性质。

2.2 时序差分方法的推广

往前走一步为TD(0),可以调整步数,变成n步时序差分。如TD(2)即为往前走2步,利用2步得到的回报,使用自举来更新状态的价值。因此可以通过调整步数,来调整算法所需要的实际奖励和自举。
n = 1 ( T D ) G t ( 1 ) = r t + 1 + γ V ( s t + 1 ) n = 2 G t ( 2 ) = r t + 1 + γ r t + 2 + γ 2 V ( s t + 2 ) ⋮ n = ∞ ( M C ) G t ∞ = r t + 1 + γ r t + 2 + ⋯ + γ T − t − 1 r T \begin{aligned} n=1(TD) \qquad \qquad G_t^{(1)} &= r_{t+1} + \gamma V(s_{t+1}) \\ n = 2 \qquad \qquad \qquad G_t^{(2)} &= r_{t+1} + \gamma r_{t+2} + \gamma^2 V(s_{t+2}) \\ \vdots \\ n = \infty (MC) \qquad \qquad G_t^\infty &= r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^{T-t-1} r_T \end{aligned} n=1(TD)Gt(1)n=2Gt(2)n=(MC)Gt=rt+1+γV(st+1)=rt+1+γrt+2+γ2V(st+2)=rt+1+γrt+2++γTt1rT n = ∞ n=\infty n=时,则整个游戏结束后再进行更新,时序差分就变成了蒙特卡洛。

以上为时序差分目标。得到时序差分目标之后,用增量式学习的方法更新状态的价值:
V ( s t ) ← V ( s t ) + α ( G t n − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha \left( G_t^n - V (s_t) \right) V(st)V(st)+α(GtnV(st))

3. 自举与采样

自举是指更新时使用了估计
蒙特卡洛没有使用自举,它根据实际的回报进行更新,没有估计。动态规划和时序差分使用了自举。

采样是指更新时通过采样得到一个期望
蒙特卡洛是纯采样的方法。动态规划没有采样,根据贝尔曼期望方程进行更新状态价值。时序差分使用了采样,时序差分目标 G G G由2部分组成,采样与自举。

  • 动态规划:直接计算期望,把所有相关状态都加和
    V ( s t ) ← E π [ r t + 1 + γ V ( s t + 1 ) ] V(s_t) \leftarrow \mathbb{E}_\pi [ r_{t+1} + \gamma V(s_{t+1}) ] V(st)Eπ[rt+1+γV(st+1)]
    动态规划

  • 蒙特卡洛:在当前状态下,采取一条支路,在该路径上更新,即更新该路径上的所有状态
    V ( s t ) ← V ( s t ) + α ( G t − V ( s t ) ) V(s_t) \leftarrow V(s_t) + \alpha ( G_t - V (s_t) ) V(st)V(st)+α(GtV(st))
    蒙特卡洛

  • 时序差分:从当前状态开始,往前走1步,关注局部的步骤
    T D ( 0 ) : V ( s t ) ← V ( s t ) α ( r t + 1 + γ V ( s t + 1 ) − V ( s t ) ) TD(0): \quad V(s_t) \leftarrow V(s_t) _ \alpha \left( r_{t+1} + \gamma V (s_{t+1}) - V(s_t) \right) TD(0):V(st)V(st)α(rt+1+γV(st+1)V(st))
    时序差分
    如果时序差分进行广度的更新,就变成了动态规划;
    如果时序差分需要深度的更新,就变成了蒙特卡洛。

相关文章:

  • docker学习笔记2-最佳实践
  • # 05_Elastic Stack 从入门到实践(五)
  • 【图像变换】pytorch-CycleGAN-and-pix2pix的学习笔记
  • Linux系统编程 day7、8 信号(周日划水了)
  • LangChain + 文档处理:构建智能文档问答系统 RAG 的实战指南
  • Hyperlane:Rust Web框架的性能新标杆
  • 超详细mac上用nvm安装node环境,配置npm
  • 智慧能源安全新纪元:当能源监测遇上视频联网的无限可能
  • kafka监控kafka manager(CMAK)部署配置
  • Moritex大靶面远心镜头 助力晶圆外观检测
  • 榕壹云预约咨询系统:基于ThinkPHP+MySQL+UniApp打造的灵活预约小程序解决方案
  • 【日志体系】ELK Stack与云原生日志服务
  • 【计算机视觉】CV实战项目- CMU目标检测与跟踪系统 Object Detection Tracking for Surveillance Video
  • 24. git revert
  • Spring(第一章)
  • 11-DevOps-Jenkins Pipeline流水线作业
  • 剑指offer经典题目(五)
  • ORION:通过视觉-语言指令动作生成的一个整体端到端自动驾驶框架
  • WPF的发展历程
  • 人类行为的原动力是自我保存-来自ChatGPT
  • 特朗普“炮轰”美联储带崩美股!道指跌超900点,黄金再创新高
  • 中纪委驻中组部纪检监察组原组长李刚被捕
  • 隽逸不凡——北京画院藏近代篆刻家金城花鸟画赏析
  • 深一度|中国花样滑冰因何大滑坡
  • 第13届京都国际摄影节,14位艺术家展现东西方视角:人性
  • 纪念沈渭滨︱在恩师沈渭滨老师指导下走上学术研究之路