1283 字
6 分钟
马尔可夫决策过程

提要#

马尔科夫决策过程 是 马尔科夫奖励过程 加上 智能体 的动作得到的

马尔科夫决策过程#

具有 马尔科夫性质 的 随机过程

随机过程#

以我的理解,就是以条件概率描述一种状态,指当前状态受历史影响。

下一个状态取决于 tt 时刻之前的状态。我们将已知历史信息 (S1,…,St)(S_1, \ldots, S_t) 时,下一个时刻状态为 St+1S_{t+1} 的概率表示为 P(St+1∣S1,…,St)P(S_{t+1} \mid S_1, \ldots, S_t)。

马尔科夫性质#

一个随机过程某时刻的状态 只取决于 上一时刻的状态

P(St+1∣St)=P(St+1∣S1,…,St)P(S_{t+1} \mid S_t) = P(S_{t+1} \mid S_1, \ldots, S_t)

再回到马尔科夫过程#

马尔科夫过程也叫做马尔科夫链,可以由元组描述⟨S,P⟩\langle S, P \rangle描述。关于转移矩阵,感觉其实有点像有向图,跟那个思想很像,就是把边权重改成状态转移概率了,有关变换如下图 转移矩阵示例 注意啊,状态集合记为 S={s1,s2,…,sn}\mathcal{S} = \{s_1, s_2, \ldots, s_n\}。它是一个集合,不是指某一个状态。

有了这个过程,我们就可以进行从一个状态变到另一个状态了,从头变到尾就可以生成一个 序列 也叫 采样 。换个名字更熟悉episode/sampling(话说这两个单词在代码里面真的蛮常见的)

马尔科夫奖励过程#

马尔科夫奖励过程可以用元组 ⟨S,P,r,γ⟩\langle \mathcal{S}, \mathcal{P}, r, \gamma \rangle 描述,其中:

  • S\mathcal{S} 是有限状态的集合。
  • P\mathcal{P} 是状态转移矩阵。
  • rr 是奖励函数,某个状态 ss 的奖励 r(s)r(s) 指转移到该状态时可以获得奖励的期望。
  • γ\gamma 是折扣因子(discount factor),γ\gamma 的取值范围为 [0,1)[0, 1)。
    • 引入折扣因子的理由为远期利益具有一定不确定性,有时我们更希望能够尽快获得一些奖励,所以我们需要对远期利益打一些折扣。接近 11 的 γ\gamma 更关注长期的累计奖励,接近 00 的 γ\gamma 更考虑短期奖励。

回报#

在某一状态时,所有奖励的衰减之和称为回报 GtG_t(Return),公式如下:

Gt=Rt+γRt+1+γ2Rt+2+⋯=∑k=0∞γkRt+kG_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots = \sum_{k=0}^{\infty} \gamma^k R_{t+k}

这个不用纠结,知道是啥就好了,都是人为定义的。不过这个跟后面的状态价值函数有密切联系。还有这个公式本身也是个数列递推式,后面会有很奇特的展开来简化算法复杂度的。

状态价值函数#

有了回报 GtG_t 之后,就可以定义状态价值函数 V(s)V(s)。

我的理解是,状态价值函数就是在某个状态 ss 出发时,对未来回报的期待。也就是说,未来可能会采样出很多条不同的轨迹,每条轨迹都有自己的回报 GtG_t,而 V(s)V(s) 关心的是这些回报的期望值。

从这个角度看,V(s)V(s) 有点像回报 GtG_t 的某种统计学参数,更准确地说,它是“在当前状态为 ss 的条件下,回报的期望”:

V(s)=E[Gt∣St=s]V(s) = \mathbb{E}[G_t \mid S_t = s]

结合马尔科夫奖励过程,状态价值函数也可以写成下面的递推形式:

V(s)=r(s)+γ∑s′∈Sp(s′∣s)V(s′)V(s) = r(s) + \gamma \sum_{s' \in \mathcal{S}} p(s' \mid s) V(s')

这个公式对写代码很重要。它可以理解成:

  • 当前状态 ss 的价值,等于当前能获得的奖励 r(s)r(s);
  • 再加上从当前状态转移到所有可能的下一个状态 s′s' 后,那些状态价值的加权平均;
  • 权重就是状态转移概率 p(s′∣s)p(s' \mid s);
  • 未来价值还要乘上折扣因子 γ\gamma。

如果用代码思维来看,V(s)V(s) 可以理解成一个表:

V = {
s1: value1,
s2: value2,
s3: value3,
}

马尔科夫决策过程#

简单来说,马尔科夫决策过程(Markov Decision Process,MDP)本质上就是在马尔科夫奖励过程(MRP)的基础上,加上了智能体的动作。

也就是说,MRP 里状态怎么转移、得到什么奖励,基本是环境自己随机决定的;而 MDP 里多了一个智能体,智能体可以在某个状态下选择动作 aa,动作会影响后续的状态转移和奖励。

所以马尔科夫决策过程可以用下面这个元组描述:

⟨S,A,P,r,γ⟩\langle \mathcal{S}, \mathcal{A}, \mathcal{P}, r, \gamma \rangle

其中相比 MRP,多出来的就是动作集合 A\mathcal{A}:

策略#

策略 π\pi:给定状态 ss,决定选择哪个动作 aa。

π(a∣s)=P(At=a∣St=s)\pi(a \mid s) = P(A_t = a \mid S_t = s)

代码里可以理解成:

状态价值函数#

状态价值函数 Vπ(s)V^\pi(s):状态 ss 在策略 π\pi 下的长期价值。

Vπ(s)=Eπ[Gt∣St=s]V^\pi(s) = \mathbb{E}_\pi[G_t \mid S_t = s]

动作价值函数#

动作价值函数 Qπ(s,a)Q^\pi(s, a):在状态 ss 下执行动作 aa 的长期价值。

Qπ(s,a)=Eπ[Gt∣St=s,At=a]Q^\pi(s, a) = \mathbb{E}_\pi[G_t \mid S_t = s, A_t = a]

贝尔曼方程#

贝尔曼方程:用“当前奖励 + 折扣后的未来价值”更新当前价值。

V(s)=r(s)+γ∑s′p(s′∣s)V(s′)V(s) = r(s) + \gamma \sum_{s'} p(s' \mid s) V(s')
内容
评论区
期待你的第一条评论