zoukankan      html  css  js  c++  java
  • 机器学习 | 强化学习(1) | 马尔科夫决策过程(MDP)概论

    最近在搞强化学习(Reinforcement Learning),打算把之前写的笔记整理一下
    本文基于大卫 希尔维(David Silver)教授的强化学习概论课程,视频中所采用的样例学生马尔科夫链(Student MDPs)有时间再补上去
    出处:https://www.youtube.com/watch?v=lfHX2hHRMVQ&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ&index=2

    马尔科夫决策过程(MDP)概论

    马尔科夫过程(Markov Process)

    马尔科夫性(Markov Property)

    马尔科夫性的定义为:

    给定一个状态\(S_t\),当且仅当其满足条件

    \[\mathbb{P}[S_{t+1}|S_t]=\mathbb{P}[S_{s+1}|S_1,\dots,S_t] \]

    那么称状态\(S_t\)具有马尔科夫性。

    即当前状态包含了过去状态的一切影响与参数,无需知晓过去状态,通过当前状态即可描述出未来状态。

    对于一个具有马尔科夫状态\(s\)以及其后继状态\(s'\),其状态转移概率(State Transition Probability)描述为

    \[\mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s] \]

    状态转移矩概率矩阵\(\mathcal{P}\)描述了所有状态及其后继状态之间的状态转移概率

    \[\qquad \qquad to\\ \mathcal{P} = from \begin{bmatrix} \mathcal{P}_{11} & \dots & \mathcal{P}_{1n} \\ \vdots & & \vdots \\ \mathcal{P}_{n1} & \dots & \mathcal{P}_{nn} \end{bmatrix} \]

    注意,因为符合归一化条件,每一行的和都为1

    为此我们可以为马尔科夫过程给予定义

    马尔科夫过程(Markov Process)

    马尔科夫过程即是一个由一系列具有马尔科夫性的随机状态\(S_1,S_2,\dots\)所组成的序列,因此马尔科夫过程也被称为无后效性的随机过程。

    定义:

    一个马尔科夫过程(Markov Process),也被称为马尔科夫链(Markov Chain)为一个二元组\((\mathcal{S},\mathcal{P})\)

    • \(\mathcal{S}\)为一个有限状态集
    • \(\mathcal{P}\)为状态转移概率矩阵
      • \(\mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s]\)

    [这里是例子]

    马尔科夫回报过程(Markov Reward Process)

    马尔科夫回报过程基于马尔科夫过程,拓展了回报这一属性

    其定义为:

    一个马尔科夫回报过程(Markov Reward Process),为一个四元组\((\mathcal{S},\mathcal{P},\mathcal{R},\mathcal{\gamma})\)

    • \(\mathcal{S}\)为一个有限状态集

    • \(\mathcal{P}\)为状态转移概率矩阵

      • \(\mathcal{P}_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s]\)
    • \(\mathcal{R}\)为一个回报函数,\(\mathcal{R}_s=\mathbb{E}[R_{t+1}|S_t=s]\)

    • \(\mathcal{\gamma}\)为一个衰退因子,\(\mathcal{\gamma}\in[0,1]\)

    [这里是例子]

    给予指定一个时间\(t\),我们自然而然所关注的是取得的返回回报\(G_t\)

    对于时间\(t\)\(G_t\)的定义如下:

    \[G_t = R_{t+1} + \gamma R_{t+2} + \cdots=\sum_{k=0}^{\infty}R_{t+k+1} \]

    \(\mathcal{\gamma}\)作为一个衰退因子,\(\mathcal{\gamma}\in[0,1]\),决定了相对于目前的未来回报

    为何要引入衰退因子\(\gamma\)

    • 纯粹为了方便数学模型的计算
    • 避开循环马尔科夫链出现的无穷值
    • 模型对于未来的变化没有百分百的把握
    • 如果考虑经济学效益,那么时间更早的回报自然而然权重要高于晚来的回报
    • 如果考虑仿生学模型,决策应该更加注重眼前的利益
    • 当然并不排除使用无衰退因子的马尔科夫回报过程,即\(\mathcal{\gamma}=1\)来达到整个序列的边界

    价值函数(Value Function)

    价值函数\(v(s)\)揭示了状态\(s\)的长期回报

    定义:

    对于一个马尔科夫回报过程的价值函数\(v(s)\),即是从状态\(s\)开始的期望返回回报

    \[v(s)=\mathbb{E}[G_t|S_t=s] \]

    [总之这里是例子]

    马尔科夫回报过程的贝尔曼方程(Bellman Equation)

    价值函数\(v(s)\)可以分解为两个部分:

    • 当前回报\(R_{t+1}\)
    • 后续状态的衰退价值\(\mathcal{\gamma} v(S_{t+1})\)

    \[\begin{align} v(s) & =\mathbb{E}[G_t|S_t=s]\\ & =\mathbb{E}[R_{t+1}+\gamma R_{t+2} + \gamma^2R_{t+3}+\dots|S_t=s]\\ & =\mathbb{E}[R_{t+1}+\gamma (R_{t+2} + \gamma R_{t+3}+\dots)|S_t=s]\\ & =\mathbb{E}[R_{t+1}+\gamma G_{t+1}|S_t=s]\\ & =\mathbb{E}[R_{t+1}+\gamma v(S_{t+1})|S_t=s]\\ \end{align} \]

    最后我们得到的等式:

    \[v(s) =\mathbb{E}[G_t|S_t=s] =\mathbb{E}[R_{t+1}+\gamma v(S_{t+1})|S_t=s] \]

    就称为马尔科夫回报过程的贝尔曼方程(Bellman Equation)

    如果我们再把状态转移概率代入贝尔曼方程中,得到更加具体的贝尔曼方程形式

    \[v(s) = R_{s}+\gamma\sum_{s'\in S}\mathcal{P}_{ss'}v(s') \]

    同样地,贝尔曼方程还拥有一个更加简洁的矩阵形式

    \[v=\mathcal{R} + \gamma\mathcal{P}v \]

    其中\(v\)是一个排列着所有状态的列向量

    \[\begin{bmatrix} v(1) \\ \vdots \\ v(r) \end{bmatrix} = \begin{bmatrix} \mathcal{R}_1 \\ \vdots \\ \mathcal{R}_n \end{bmatrix} + \gamma \begin{bmatrix} \mathcal{P}_{11} & \dots & \mathcal{P}_{1n} \\ \vdots & & \vdots \\ \mathcal{P}_{n1} & \dots & \mathcal{P}_{nn} \end{bmatrix} \begin{bmatrix} v(1) \\ \vdots \\ v(r) \end{bmatrix} \]

    显然,马尔科夫回报过程的贝尔曼方程是一个线性方程。为此,我们可以直接写出它的闭式解:

    \[\begin{align} v & = \mathcal{R} + \gamma\mathcal{P}v \\ (1-\gamma\mathcal{P})v & = \mathcal{R} \\ v & = (1-\gamma\mathcal{P})^{-1}\mathcal{R} \end{align} \]

    • 时间复杂度:对于\(n\)个状态,\(O(n^3)\)
    • 适合用于直接解小规模的马尔科夫回报过程
    • 除此之外还有其他迭代式的方法去解大规模的马尔科夫回报过程
      • 动态规划
      • 蒙特卡洛规划
      • Temporal-Difference(TD)学习

    马尔科夫决策过程(Markov Decision Process)

    马尔科夫决策过程基于马尔科夫回报过程,拓展了决策这一属性

    其定义为:

    一个马尔科夫回报过程(Markov Reward Process),为一个五元组\((\mathcal{S},\mathcal{A},\mathcal{P},\mathcal{R},\mathcal{\gamma})\)

    • \(\mathcal{S}\)为一个有限状态集
    • \(\mathcal{A}\)为一个有限决策集​
    • \(\mathcal{P}\)为状态转移概率矩阵
      • \(\mathcal{P}^a_{ss'}=\mathbb{P}[S_{t+1}=s'|S_t=s,A_t=a]\)
    • \(\mathcal{R}\)为一个回报函数,\(\mathcal{R}^a_s=\mathbb{E}[R_{t+1}|S_t=s,A_t=a]\)
    • \(\mathcal{\gamma}\)为一个衰退因子,\(\mathcal{\gamma}\in[0,1]\)

    [这里是例子]·

    策略(Policies)

    策略的定义:

    一个策略\(\pi\)是指定动作决定状态的一个分布

    \[\pi(a|s) = \mathbb{P}[A_t=a|S_t=s] \]

    • 策略决定了我们agent(真心不知道怎么翻译)的行为

    • 显然马尔科夫决策过程的策略仅仅取决于当前状态

    • 马尔科夫决策过程是静态的(不随时间变化而变化)

      i.e \(A_t\sim\pi(\cdot|S_t)\quad\forall t\gt 0\)

    • 对于给定马尔科夫决策过程\(\mathcal{M} = \left \langle \mathcal{S,A,P,R,\gamma}\right \rangle\)以及策略\(\pi\)

    • 对于一个状态序列\(S_1,S_2,\dots\),为一个马尔科夫过程\(\left \langle \mathcal{S,P^\pi} \right \rangle\)

    • 对于一个状态与回报序列\(S_1,R_2,S_2,\dots\),为一个马尔科夫回报过程\(\left \langle \mathcal{S,P^\pi,R^\pi,\gamma} \right \rangle\)

    • 其中:

      \[\begin{align} \mathcal{P}^\pi_{s,s'} & = \sum_{a\in A}\pi(a|s)\mathcal{P^a_{s,s'}}\\ \mathcal{R}^\pi_{s} & = \sum_{a\in A}\pi(a|s)\mathcal{R^a_{s}} \end{align} \]

    价值函数(Value Function)

    定义:

    对于一个马尔科夫决策过程的状态-价值函数(state-value function)\(v_\pi(s)\),即是从状态\(s\)开始以及采用的策略\(\pi\)的期望返回回报

    \[v(s)_\pi=\mathbb{E}_\pi[G_t|S_t=s] \]

    定义:

    对于一个马尔科夫决策过程的动作-价值函数(action-value function)\(q_\pi(s,a)\),即是从状态\(s\)开始,采取动作\(a\)以及采用的策略\(\pi\)的期望返回回报

    \[q_\pi(s,a)=\mathbb{E}_\pi[G_t|S_t=s, A_t=a] \]

    [总之这里是例子]

    贝尔曼期望方程(Bellman Expectation Equation)

    一个状态-价值函数能够拆分为即时回报以及后续状态经过衰退的价值

    \[v_\pi(s) = \mathbb{E}_\pi[R_{t+1} + \gamma v_\pi(S_{t+1})|S_t=s] \]

    一个动作-价值函数同理

    \[q_\pi(s,a) = \mathbb{E}_\pi[R_{t+1} + \gamma q_\pi(S_{t+1},A_{t+1})|S_t=s,A_t=a] \]

    \(V^\pi\)

    \[v_\pi(s) = \sum_{a\in \mathcal{A}}\pi(a|s)q_\pi(s,a) \]

    \(Q^\pi\)

    \[q_\pi(s,a) = \mathcal{R^a_s + \gamma\sum_{s'\in S}P^a_{ss'}v_\pi(s')} \]

    \(v_\pi\)

    \(V\)\(Q\)结合起来,我们得到\(v_\pi\)的递归形式:

    \[v_\pi(s) = \sum_{a\in\mathcal{A}}\pi(a|s)\Big(\mathcal{R+ \gamma\sum_{s'\in S}P_{ss'}^a v_\pi(s')}\Big) \]

    $ q_\pi$

    \(V\)\(Q\)结合起来,我们得到\(q_\pi\)的递归形式:

    \[q_\pi(s,a) = \mathcal{R^a_s + \gamma\sum_{s'\in S}P^a_{ss'}\sum\pi(a'|s')q_\pi(s',a')} \]

    [总之这里是一个例子 ]

    贝尔曼期望方程的矩阵形式

    贝尔曼期望方程很容易就可以通过马尔科夫回报过程诱导出来

    \[v_\pi = \mathcal{R^\pi + \gamma P^\pi v_\pi} \]

    从而直接获得一个闭式解

    \[v_\pi = \mathcal{(1-\gamma P^\pi)^{-1}R^\pi} \]

    最优价值函数(Optimal State-action Function)

    对于一个最优状态-价值函数(optimal state-value function)\(v_*(s)\),即是一个在全部策略中选取最大的价值函数

    \[v_*(s) = \max_\pi v_\pi(s) \]

    而对于一个最优动作-价值函数(optimal action-value function)\(q_*(s, a)\),即是一个在全部策略中选取最大的动作-价值函数

    \[q_*(s, a) = \max_\pi q_\pi(s,a) \]

    最优价值函数是马尔科夫决策过程的最优可能表现

    • \(v_\pi\)是对长期回报的描述
    • \(q_\pi(s,a)\)是对下一步最优行动的描述

    如果我们知道最优值fn,那么马尔科夫决策过程就成功被“求解”了

    [总之这里又是一个例子]

    最优策略(Optimal Policy)

    我们定义一个策略的偏序关系,以表现策略之间的大小关系

    \[\pi\ge\pi'\quad if \quad v_\pi(s) \ge v_{\pi'},\forall s \]

    原理:

    对于一切马尔科夫决策过程

    • 必定存在一个策略\(\pi\)高于或者等于其他一切的策略,i.e. \(\pi_* \ge \pi,\forall \pi\)
    • 最优策略必定是最优状态-价值函数,i.e. \(v_{\pi_*}(s) = v_*(s)\)
    • 最优策略必定是最优动作-价值函数,i.e. \(q_{\pi_*}(s,a) = v_*(s,a)\)

    求解最优策略

    最大化\(q_*(s,a)\)可以找到一个最优策略

    \[\pi_8(a|s) = \Bigg \{ \begin{align} 1 & \quad if \quad a = \mathop{\arg\max}_{a\in A} q_*(s,a) \\ 0 & \quad otherwise \end{align} \]

    • 如何一个马尔科夫决策过程都必定具有一个确定的最优策略
    • 只要求解出了\(q_*(s,a)\),我们立即就能求出最优策略

    贝尔曼最优方程(Bellman Optimality Equation)

    \(v_*\)

    最优状态-价值函数之间通过贝尔曼最优方程递归地进行相关

    \[v_*(s) = \max_a q_*(s,a) \]

    \(q_*\)

    \[q_*(s,a)=\mathcal{R^a_s+\gamma\sum_{s'\in S} P^a_{ss'} v_*(s')} \]

    \(V^*\)

    我们把上述两个价值函数结合在一起,从而得到可解决的方程

    \[v_*(s) = \max_a \mathcal{R^a_s + \gamma \sum_{s'\in S} P^a_{ss'} v_*(s')} \]

    \(Q^*\)

    \[q_*(s,a) = \mathcal{R^a_s + \gamma \sum_{s'\in S}P^a_{ss'}\max_{a'}q_*(s',a')} \]

    求解贝尔曼最优方程

    必须指出:

    • 贝尔曼最优方程是非线性的
    • 一般情况下是不存在闭式解的
    • 存在许多迭代求解方式
      • 价值递归
      • 策略递归
      • Q-learning
      • Sarsa

    拓展

    • 无限/连续马尔科夫决策过程
    • 部分可测的马尔科夫决策过程
    • 不衰退,平均回报的马尔科夫决策过程
  • 相关阅读:
    js阻止事件冒泡和标签默认行为
    Sql server不同数据类型间拼接(+)
    win7 激活相关
    查找算法
    算法基础
    requests库使用
    python urllib和urllib3包使用
    爬虫工具fiddle在firefox浏览器中的使用
    爬虫抓包工具Fiddle设置
    爬虫抓包工具Charles设置
  • 原文地址:https://www.cnblogs.com/uzuki/p/13733950.html
Copyright © 2011-2022 走看看