公式及图片正常显示的精美排版版请移步http://lanbing510.info/2015/11/17/Master-Reinforcement-Learning-MDP.html

写在前面


现有的机器学习算法根据模型的学习过程大致可以分为四类:监督式学习,无监督式学习,半监督式学习和增强学习。

① 监督式学习:从标记好的训练数据中进行模型的训练,常用来做分类和回归,例如逻辑回归、反向神经网络;

② 无监督式学习:根据数据的特征直接对数据的结构和数值进行归纳,常用来做聚类,例如周知的K-均值,谱聚类;

③ 半监督式学习:根据部分标记的和部分没有标记的训练数据进行模型的学习,常用来做回归和分类;

④ 增强式学习:作为今天要讨论的主角,是机器学习中最酷的分支之一,其通过不断的试错、反馈进行学习,常用来做序列决策或者控制问题,算法例子有Q-Learning、TD-Learning(Tempora Difference Learning)。

增强学习和人类学习的机制非常相近,在实际应用中也有这很Cool的表现,如直升机自动飞行、各种通过增强学习实现的打败人类最强选手的棋牌博弈机器,包括最近非常火的DeepMind将深度学习和增强学习融合实现的玩Atari游戏的超强程序。下面将结合一个实例,从增强学习的数学本质——马尔科夫决策过程进行阐述。

一个栗子



下面是摘自《人工智能:一种现代方法》中的一个例子:

假设一个智能体处于下图(a)中所示的4x3的环境中。从初始状态开始,它需要每个时间选择一个行动(上、下、左、右)。在智能体到达标有+1或-1的目标状态时与环境的交互终止。如果环境是确定的,很容易得到一个解:[上,上,右,右,右]。可惜智能体的行动不是可靠的(类似现实中对机器人的控制不可能完全精确),环境不一定沿这个解发展。下图(b)是一个环境转移模型的示意,每一步行动以0.8的概率达到预期,0.2的概率会垂直于运动方向移动,撞到(a)图中黑色模块后会无法移动。两个终止状态分别有+1和-1的回报,其他状态有-0.4的回报。现在智能体要解决的是通过增强学习(不断的试错、反馈、学习)找到最优的策略(得到最大的回报)。

上述问题可以看作为一个马尔科夫决策过程,最终的目标是通过一步步决策使整体的回报函数期望最优。下面介绍马尔科夫决策过程。

马尔科夫决策过程


一个马尔科夫决策过程(Markov Decision Processes, MDP)有一个五个关键元素组成 {S,A,{Psa},γ,R} \{S,A,\{P_{sa}\},\gamma,R\},其中:

S S:表示状态集合,例如上例中4x3的每个环境{(i,j)|i=1,2,3,4,j=1,2,3}\{(i,j)|i=1,2,3,4,j=1,2,3\}。自动直升机系统中的所有可能的位置、方向等。

A A:表示一组动作集合,例如上例中的(上、下、左、右),自动直升机系统中的让飞机向前,向后等。

PsaP_{sa}:状态转移概率,表示在当前 s∈S s \in S状态下,通过执行动作 a∈A a \in A后转移到其他状态的概率分布。例如上例中, P(1,1)上 P_{(1,1) 上}表示智能体在状态(1,1)执行向上的动作后转移到状态(1,2),(2,1)的概率分布。

γ∈[0,1) \gamma \in [0,1):阻尼系数,表示的是随着时间的推移回报率的折扣。

R:S×A↦R R:S \times A \mapsto \mathbb{R}:回报函数,有时回报函数是只与 S S有关的函数,RR重写为 R:S↦R R:S \mapsto \mathbb{R}。相当于上例中对每个状态上赋予的回报值。

MDP的动态过程如下:智能体在状态 s0 s_{0}选择某个动作 a0∈A a_{0} \in A,智能体根据概率 Ps0a0 P_{s_{0}a_{0}}转移到状态 s1 s_{1},然后执行动作 a1 a_{1},…如此下去我们可以得到这样的过程:

s0⟶a0s1⟶a1s2⟶a2s3⟶a3⋅⋅⋅

s_{0} \stackrel{a_{0}}{\longrightarrow} s_{1} \stackrel{a_{1}}{\longrightarrow} s_{2} \stackrel{a_{2}}{\longrightarrow} s_{3} \stackrel{a_{3}}{\longrightarrow} ···

经过上面的转移路径,我们可以得到相应的回报函数和如下:

R(s0,a0)+γR(s1,a1)+γ2R(s2,a2)+⋅⋅⋅

R(s_{0},a_{0})+\gamma R(s_{1},a_{1})+\gamma^{2}R(s_{2},a_{2})+···

如果回报函数 R R只与SS有关,我们上式可重新写作

R(s0)+γR(s1)+γ2R(s2)+⋅⋅⋅

R(s_{0})+\gamma R(s_{1})+\gamma^{2}R(s_{2})+···

我们的目标是选择一组最佳的动作,使得全部的回报加权和期望最大:

Reward=E[R(s0)+γR(s1)+γ2R(s2)+⋅⋅⋅]

Reward=E[R(s_{0})+\gamma R(s_{1})+\gamma^{2}R(s_{2})+···]

从上式可以发现,在t时刻的回报值是被打了 γt \gamma^{t}倍折扣的,注意到 γ<1 \gamma ,则越靠后的状态对回报和影响越小,为了得到最大期望回报,智能体将会尽量最先拿最大回报。

下图是上述内容的一个直观示意

下一部分将对上述过程进行进一步数学表示,以方便求解。

进一步数学表示


首先我们来定义策略,一个策略 π \pi就是一个从状态到动作的映射函数 π:S↦A \pi:S \mapsto A。也就是,给定了当前状态 s s,根据策略π\pi,也就确定了下一步应该执行的动作 a=π(s) a=\pi(s)。

为每一个策略 π \pi我们顶一个相应的值函数(Value Function)

Vπ(s)=E[R(s0)+γR(s1)+γ2R(s2)+⋅⋅⋅|s0=s,π]

V^{\pi}(s)=E[R(s_{0})+\gamma R(s_{1})+\gamma^{2}R(s_{2})+···|s_{0}=s,\pi]

即给定初始状态 s0 s_{0}和策略 π \pi后的累积折扣回报期望(Expected Sum Of Discounted Rewards)。

对于一个固定的策略,它的值函数 Vπ V^{\pi}满足贝尔曼等式(Bellman Equations):

Vπ(s)=R(s)+γ∑s′∈SPsπ(s)(s′)Vπ(s′)

V^{\pi}(s)=R(s)+\gamma \sum_{s' \in S}P_{s\pi(s)}(s')V^{\pi}(s')

其中 s′ s'表示状态 s s执行动作π(s)\pi(s)后的下一个可能状态,其服从 Psπ(s) P_{s\pi(s)}分布。上式由两部分构成:即时回报 R(s) R(s)及未来累积折扣回报期望 Es′∼Psπ(s)[Vπ(s′)] E_{s' \sim P_{s\pi(s)}}[V^{\pi}(s')]。

利用贝尔曼等式能够有效的解出 Vπ V^{\pi}(给定的策略 π \pi的回报值)。尤其,对于一个有限状态的MDP( |S|<∞ |S| ),对每一个状态 s s我们都能写出这样的等式Vπ(s)V^{\pi}(s),求解变为了解一个 |S| |S|个方程, |S| |S|个未知数的线性方程组。

当然,我们求解 Vπ V^{\pi}的目的是为找到一个当前状态 s s下最优的行动策略π\pi服务的(最优的策略下得到最优的值函数)。定义最优的值函数为:

V∗(s)=maxπVπ(s)

V^{*}(s)=\max_{\pi}V^{\pi}(s)

其贝尔曼等式的形式为:

V∗(s)=R(s)+maxa∈Aγ∑s′∈SPsa(s′)V∗(s′)

V^{*}(s)=R(s)+\max_{a \in A}\gamma\sum_{s' \in S}P_{sa}(s')V^{*}(s')

也可表示为增强学习中的Q函数形式:

V∗(s)=maxaQ(s,a)

V^{*}(s)=\max_{a}Q(s,a)

其中 Q(s,a)≡R(S)+γPsa(s′)V∗(s′) Q(s,a) \equiv R(S)+\gamma P_{sa}(s')V^{*}(s'),表示在 s s状态下执行动作aa作为第一个动作时的最大累计折扣回报。

对应最优值函数的最优的策略为:

π∗(s)=argmaxa∈A∑s′∈SPsa(s′)V∗(s′)

\pi^{*}(s)=arg\max_{a \in A}\sum_{s' \in S}P_{sa}(s')V^{*}(s')

需要注意的是, π∗ \pi^{*}有一个有趣的特性,即 π∗ \pi^{*}是针对的是所有的状态 s s的,确定了每一个状态ss的下一个动作 a a,不管初始状态是哪一个状态,通过策略π∗\pi^{*}都会取得最大回报。

现在我们有了优化目标的数学表达(最优值函数,最优策略),下一部分讨论两种求解方法(针对有限状态、有限动作的MDP)。

值迭代方法和策略迭代方法


值迭代方法

算法步骤:

1 讲每一个状态 s s的值函数V(s)V(s)初始化为0

2 循环直至收敛{

对于每一个状态 s s,对V(s)V(s)做更新

V(s):=R(s)+maxa∈Aγ∑s′V(s′) V(s):=R(s)+\max_{a \in A}\gamma\sum_{s'}V(s')

}

值迭代方法里面的内循环又有两种策略:同步迭代,异步迭代。同步迭代就是得到 V(s) V(s)后不立即更新,等所有的状态 s s的V(s)V(s)都完成计算后统一更新。异步迭代就是对每个状态 s s得到新的V(s)V(s)后立即更新。两种都会使得 V(s) V(s)收敛于 V∗(s) V^{*}(s)。求得最优的 V∗(s) V^{*}(s)后,可使用公式 π∗(s)=argmaxa∈A∑s′∈SPsa(s′)V∗(s′) \pi^{*}(s)=arg\max_{a \in A}\sum_{s' \in S}P_{sa}(s')V^{*}(s')来求出相应的最优策略 π∗ \pi^{*}。

策略迭代方法

于值迭代方法不同,策略迭代法之间关注 π \pi,使 π \pi收敛到 π∗ \pi^{*}。

算法步骤:

1 随机初始化话一个 S S到AA的映射 π \pi

2 循环直至收敛{

2.1 令 V:=Vπ V:=V^{\pi}

2.2 对每一个状态s,对 π(s) \pi(s)做更新

π(s):=argmaxa∈A∑s′Psa(s′)V(s′) \pi(s):=arg\max_{a \in A}\sum_{s'}P_{sa}(s')V(s')

}

其中2.1步即为上述对于一个给定策略 π \pi利用贝尔曼等式求解 Vπ V^{\pi}的过程(求解 |S| |S|个方程, |S| |S|个未知数的线性方程组)。

2.2是根据2.1步的结果,挑选出当前状态 s s下最优的动作aa来更新 π(s) \pi(s)。

两者比较

对于规模较小的MDP,策略迭代一般能够更快的收敛;但对于规模较大的MDP(状态多),值迭代更容易些(没有线性方程组的计算)。

MDP中的参数估计


到目前为止,我们讨论的MDP和MDP求解算法都是在已知状态转移概率 Psa P_{sa}和回报函数 R(s) R(s)的。在许多实际问题中,状态转移概率和回报函数不能显式的得到,本部分讲如何从数据中估计这些参数(通常 S,A,γ S,A,\gamma是已知的)。

假设我们已知很多条状态转移路径如下:

s(1)0⟶a(1)0s(1)1⟶a(1)1s(1)2⟶a(1)2s(1)3⟶a(1)3⋅⋅⋅

s_{0}^{(1)} \stackrel{a_{0}^{(1)}}{\longrightarrow} s_{1}^{(1)} \stackrel{a_{1}^{(1)}}{\longrightarrow} s_{2}^{(1)} \stackrel{a_{2}^{(1)}}{\longrightarrow} s_{3}^{(1)} \stackrel{a_{3}^{(1)}}{\longrightarrow} ···

s(2)0⟶a(2)0s(2)1⟶a(2)1s(2)2⟶a(2)2s(2)3⟶a(2)3⋅⋅⋅

s_{0}^{(2)} \stackrel{a_{0}^{(2)}}{\longrightarrow} s_{1}^{(2)} \stackrel{a_{1}^{(2)}}{\longrightarrow} s_{2}^{(2)} \stackrel{a_{2}^{(2)}}{\longrightarrow} s_{3}^{(2)} \stackrel{a_{3}^{(2)}}{\longrightarrow} ···

⋅⋅⋅

···

其中 s(j)i s_{i}^{(j)}是 i i时刻第jj条转移路径对应的状态, aji a_{i}^{j}是 sji s_{i}^{j}状态要执行的动作。每条转移路径中的状态数都是有限的,在实际操作中每个转移路径要么进入终结状态,要不达到规定的步数后终结。

当我们获得了很多类似上面的转移路径后(样本),我们可以用最大似然估计来估计状态转移概率。

Psa(s′)=#times took we action a in state s and got to s′#times we took action a in state s

P_{sa}(s')=\frac{\#times\ took\ we\ action\ a\ in\ state\ s\ and\ got\ to\ s'}{\#times\ we\ took\ action\ a\ in\ state\ s}

上式分子表示在状态 s s通过执行动作aa后到达状态 s′ s'的次数,分母表示在状态 s s我们执行动作的次数。为避免分母为0的情况,当分母为0使,令Psa(s′)=1|S|P_{sa}(s')=\frac{1}{|S|}。

对于未知的回报函数,我们令 R(s) R(s)为在状态 s s下观察到的回报均值。

得到状态转移概率和回报函数的估值后,就简化为了前面部分讲述的问题,用第三部分将的值迭代或者策略迭代方法即可解决。例如我们将值迭代和参数估计结合到一块:

算法流程如下:

1 随机初始化话一个SS到 A A的映射π\pi

2 循环直至收敛{

2.1 在MDP中执行策略 π \pi一定次数

2.2 通过2.1得到的样本估计 Psa P_{sa}(和 R R,需要的话)

2.3 使用上一节提到的值迭代方法和估计得到的参数来更新VV

2.4 对于得到的 V V更新得到更优的策略π\pi

}

其中2.3步,是一个循环迭代的过程。上一节中我们通过将 V V初始化为0然后进行迭代,当嵌套上述过程中后,如果每次都将VV初始化为0然后迭代更新,速度回很慢。一个加速的方法是将 V V初始化我上次大循环中得到的VV。

小结


至此我们讨论完了增强学习的数学本质————马尔科夫决策过程(MDP)的数学表示及求解过程(这里的MDP是非确定的MDP,即状态转移函数和回报函数是有概率的,,对于确定性的,求解会更简单些,感兴趣可参考[3]最后一章:增强学习)。全文很大部分是对Andrew Ng讲义[1]的翻译,加上了部分自己的理解。推荐大家根据参考文献进行进一步理解和学习。

参考文献


[1] 机器学习公开课-讲义-马尔科夫决策过程.Andrew Ng

[2] 机器学习公开课-视频-马尔科夫决策过程.Andrew Ng

[3] 人工智能:一种现代方法

[4] 机器学习.Tom M.Mitchell

[5] 看DeepMind如何用Reinforcement learning玩游戏

漫谈机器学习经典算法—增强学习与马尔科夫决策过程相关推荐

  1. 机器学习笔记 增强学习与马尔科夫模型(1)

    本文根据博客以及课堂老师讲授内容整理而来. 吐槽: 继上周介绍了Minimax和Expectimax后,外教这周又给我们介绍了马尔科夫模型,上周兴高采烈的感觉对Optimal Policy有点理解了但 ...

  2. 【机器学习】强化学习:马尔科夫决策过程(Markov decision process)

    本章是强化学习的基础,主要讲的就是马尔科夫决策过程,以后的内容都是以这一节为基础的,所以对本节的相关概念的理解是很重要的. 这一节的概念比较多,也是后面章节的基础,一开始笔者也是一头雾水,只有多看几遍 ...

  3. 强化学习——day13 马尔科夫决策过程MDP

    马尔科夫决策过程 简介 马尔可夫过程 随机过程 马尔可夫性质 马尔可夫过程 马尔可夫奖励过程 回报 价值函数 马尔可夫决策过程 策略 状态价值函数 动作价值函数 贝尔曼期望方程 蒙特卡洛方法 占用度量 ...

  4. 强化学习——day11 马尔科夫决策过程MDP

    第 3 章 马尔可夫决策过程 3.1 简介 马尔可夫决策过程(Markov decision process,MDP)是强化学习的重要概念.要学好强化学习,我们首先要掌握马尔可夫决策过程的基础知识.前 ...

  5. 深度强化学习-马尔科夫决策过程和表格型方法

    深度强化学习-马尔科夫决策过程和表格型方法-笔记(二)_wield_jjz的博客-CSDN博客 深度强化学习2--马尔科夫决策过程(MDP)_谢宜廷的博客-CSDN博客 (零基础可以看懂)强化学习中的 ...

  6. 机器学习算法 10 —— HMM模型(马尔科夫链、前向后向算法、维特比算法解码、hmmlearn)

    文章目录 系列文章 隐马尔科夫模型 HMM 1 马尔科夫链 1.1 简介 1.2 经典举例 2 HMM简介 2.1 简单案例 2.2 案例进阶 问题二解决 问题一解决 问题三解决 3 HMM模型基础 ...

  7. 增强学习(一)——马尔科夫决策过程(MDP)

    最近因为研究需要,要开始学习机器学习了.之前只是懂些CNN什么的皮毛,对机器学习的整体认识都比较缺乏,后面我会从头开始一点点打基础,正好也用博客把自己的学习历程记录一下,如果有大牛看到博文中有错误,欢 ...

  8. 【强化学习入门】马尔科夫决策过程

    本文介绍了马尔可夫决策过程,首先给出了马尔可夫决策过程的定义形式 ,其核心是在时序上的各种状态下如何选择最优决策得到最大回报的决策序列,通过贝尔曼方程得到累积回报函数:然后介绍两种基本的求解最优决策的 ...

  9. 机器学习基础 HMM模型(隐马尔科夫)

    文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...

最新文章

  1. linux网卡钩子,linux-Netfilter钩子注册与网络子系统
  2. python画人脸关键点
  3. 2017百度之星程序设计大赛 - 初赛(A)数据分割
  4. 循环序列模型 —— 1.1 为什么选择序列模型
  5. php isinstance,Python issubclass和isinstance
  6. 如何在 GitHub 上大显身手?
  7. 交叉学习验证 西瓜书_机器学习:数据划分与交叉验证
  8. java数组使用实验报告_Java课程实验报告实验六——异常处理
  9. QT学习之文件读写操作
  10. 初中生物教师资格证经验贴
  11. uni-app 点击生成海报
  12. Java多线程学习笔记
  13. 苹果手机闹钟声音大小怎么调_偷偷安利5款让手机体验到爆的app,乐趣满满
  14. 502粘到手上变硬了怎么办_502胶水把手黏住了怎么办
  15. 关于树莓派(四):安装树莓派时遇见的错误
  16. RHEL 5下iSCSI Initiator软件安装配置指导
  17. 这100 个网络基础知识 看完成半个网络高手
  18. 无符号数运算相减/有符号数表示运算问题(一)
  19. Flutter技术调研报告
  20. python和cc哪个适合做游戏的背景音乐_(转)CocosCreator零基础制作游戏《极限跳跃》九、为游戏添加声音音效功能...

热门文章

  1. UVC webcam驱动添加分辨率
  2. ABP WEBAPI 跨域问题
  3. 【洛谷4996】咕咕咕
  4. 网络设备构成及管理方式
  5. Vue3在当前h5界面禁用移动端物理返回键代码
  6. 一文搞定bp神经网络,bp神经网络的实现
  7. 用户登录验证程序的实现
  8. 2021ICPC网络赛第二场The 2021 ICPC Asia Regionals Online Contest (II) 【L Euler Function】
  9. EOS - 常用命令(获取余额、创建账户、发送EOS Token)
  10. js从零开始实现堆叠图