强化学习系列学习笔记,结合《UCL强化学习公开课》、《白话强化学习与PyTorch》、网络内容,如有错误请指正,一起学习!
强化学习基本介绍
强化学习的中心思想是让智能体在环境中自我学习和迭代优化。
强化学习流程
强化学习的过程是一个反馈控制系统,其大概的一个流程图如下所示:
结合这张图,我们进行相关的概念解释和流程说明。首先图中涉及了几个概念,我们依次来看下是什么意思。
- Agent:或者称为“Brain”、大脑、智能体,是机器人的智能主体部分,也即我们要操控的对象
- Environment:指机器人所处的环境,客观存在的状态
- State:当前时刻下Agent所处的状态
- Reward:Agent在执行某个动作后获得的奖励
- Action:要执行的动作,Agent在结合当前所处的状态(State)和上一次执行动作(Action)之后获得的奖励(Reward)要在当前时刻下执行的动作
接着我们再去理解这个图,所表达的意思是:在当前状态(State, S t S_t St)下,智能体(Agent)做了动作(Action, A t A_t At)之后获得了奖励(Reward, R t R_t Rt),其串行的流程为上图的下边部分。
强化学习与监督学习
机器学习从其学习方式上大体可以分为三类:
- 监督学习(supervised learning)
- 无监督学习(unsupervised learning)
- 强化学习(reinforcement learning)
监督学习是从有标签的数据集中进行模式和特征的学习,从而对新的样本进行预测,比如常见的分类、回归问题,还有推荐系统中的CTR预估。这种场景下label都是固定的,我们需要研究出一种固定的映射关系 y = f ( x ∣ θ ) y = f(x|\theta) y=f(x∣θ),以便于在新样本上发挥作用。
无监督学习则是对无标签的数据进行学习,比如常见的聚类就是典型的无监督学习算法。对比有监督学习,我们只知道样本即 x x x,并不知道 也不需要知道 y y y。
强化学习相较于监督学习和无监督学习,区别在于其是以不同建模方式或思考角度来解决问题,是一种方法论,其拥有了一套比较完整的处理数据、建模、训练、调优的套路。但是通过对强化学习流程的了解,你会发现强化学习和监督学习的思路有点类似,但是其标签(即 y y y)是有时间上的延迟的,即先产生动作,再得到反馈。
强化学习的应用
对于强化学习大家印象最深的莫过于2016年AlphaGo击败 九段的围棋选手李在石,但其实强化学习也应用于社会中的各个场景,比如:
- 自动机器学习AutoML
- 决策服务(Decision Service)
- 推荐系统、广告系统
- 智能交通
- 机器人
- 计算机视觉
- 计算机系统
- 教育
- 金融
- 游戏
- 自动驾驶
- … …
在每年的各类计算机大会上发表的论文中,其实都可以看到强化学习的身影,由于笔者是专注于推荐系统的,所以主要关注的是:强化学习与推荐系统。
后续会在《结合论文看Youtube推荐系统中召回和排序的演进之路(下)篇》中介绍Youtube推荐系统与强化学习的结合应用,欢迎关注,目前已经更新(上)篇。
另外从事推荐系统相关工作的朋友,应该知道「多臂*」,即Bandit类算法,其本质上也是一种自我博弈和反馈决策的过程,算是强化学习中比较好理解的算法和内容了,感兴趣的朋友可以看下面的2篇关于多臂*的文章:
马尔科夫决策过程
在前边的内容中提到了强化学习的决策过程,依赖于当前的状态的环境,但是实际的场景是非常复杂的,难以进行建模,因此对其进行了简化,即假设状态的转化是马尔科夫性,即转化到到下一个时刻的状态 s t + 1 s_{t+1} st+1 仅仅和上一个状态 s t s_t st有关,与之前的状态无关。
因此我们先来了解一下马尔科夫的相关知识,再去了解马尔科夫决策过程(Markov Decision Process,MDP)。
马尔科夫链
什么是马尔科夫链呢?一个比较正式的定义为:设
x
t
x_t
xt表示随机变量
X
X
X在离散时间
t
t
t时刻的取值,若该变量随时间变化的转移概率仅依赖于它的当前值,即:
P
(
X
t
+
1
=
s
j
+
1
∣
X
0
=
s
0
,
X
1
=
s
1
,
.
.
.
,
X
t
=
s
j
)
=
P
(
X
t
+
1
=
s
j
+
1
∣
X
t
=
s
t
)
P(X_{t+1} = s_{j+1} | X_0=s_0, X_1 = s_1, ..., X_t = s_j) = P(X_{t+1} = s_{j+1} | X_t = s_t)
P(Xt+1=sj+1∣X0=s0,X1=s1,...,Xt=sj)=P(Xt+1=sj+1∣Xt=st)
也就是状态转移概率仅依赖于前一个状态,称这个变量为马尔科夫变量,其中
s
0
,
s
1
,
.
.
.
,
s
j
s_0, s_1, ..., s_j
s0,s1,...,sj为随机遍历
X
X
X的可能状态,这个性质称为马尔科夫性质,具有马尔科夫性质的随机过程称为马尔科夫过程。
马尔科夫链则是满足马尔科夫性质的随机过程,在一段时间内随机变量 X X X的取值序列( X 0 , X 1 , . . . , X n X_0, X_1, ..., X_n X0,X1,...,Xn)满足上述性质。
比如:一只青蛙呆在井底(
q
=
1
q=1
q=1),一层一层的向上跳,到达第
i
i
i层之后,它能跳上去的概率和跳不上去的概率(直接回到底层的概率)为:
{
q
i
,
i
+
1
=
a
i
q
i
,
1
=
1
−
a
i
\left\{\begin{matrix} q_{i,i+1} = a_i \\ q_{i,1} = 1-a_i \end{matrix}\right.
{qi,i+1=aiqi,1=1−ai
也就是说,每一次这只青蛙站在比如第5层,下一次尝试能跳到第6层的概率都是一样的,跟这只青蛙历史上掉回底层多少次之类都是没有关系的,这就是一个马尔科夫过程。
马尔科夫过程是一个无记忆的随机过程,例如满足马尔科夫性质的状态一系列序列为: S 1 , S 2 , S 3 , . . . S_1, S_2, S_3, ... S1,S2,S3,...
马尔科夫过程(Markov Process)的定义为:一个马尔科夫过程或者马尔科夫链由一个二元组构成: ( S , P ) (S,P) (S,P)
- S S S为有限的状态空间集, s i s_i si表示时间步 i i i的状态,其中 S = { s 1 , s 2 , . . . , s n } S=\{ s_1, s_2, ..., s_n \} S={s1,s2,...,sn}
- P P P为状态转移矩阵, P s ′ = P [ S s + 1 = s ′ ∣ S t = s ] P_{s'} = P[S_{s+1} = s' | S_t = s] Ps′=P[Ss+1=s′∣St=s]
又比如把一个人的上课学习过程当作是一个简单的马尔科夫过程(例子来源:https://www.jianshu.com/p/fb33231ac3a8 ),如下图所示:
这个任务中有7个状态 ( F a c e b o o k , C l a s s 1 , C l a s s 2 , C l a s s 3 , P a s s , P u b , S l e e p ) (Facebook, Class 1, Class 2, Class 3, Pass, Pub, Sleep) (Facebook,Class1,Class2,Class3,Pass,Pub,Sleep)。在每个状态对应着响应的转移概率,比如在 C l a s s 1 Class1 Class1状态下,有0.5概率继续转移到 C l a s s 2 Class2 Class2以及0.5的概率转移到 F a c e b o o k Facebook Facebook,这里可以注意到每个状态转移概率之和为1。
在这里我们如果对这个马尔科夫过程,从 C l a s s 1 Class1 Class1状态开始采样,将会得到很多幕(episode)的采样数据。其中每一幕序列可能为:
- C l a s s 1 , C l a s s 2 , C l a s s 3 , P a s s , S l e e p Class 1, Class 2, Class 3, Pass, Sleep Class1,Class2,Class3,Pass,Sleep
- C l a s s 1 , F a c e b o o k , F a c e b o o k , C l a s s 1 , C l a s s 2 , S l e e p Class 1, Facebook, Facebook, Class 1, Class 2, Sleep Class1,Facebook,Facebook,Class1,Class2,Sleep
- C l a s s 1 , C l a s s 2 , C l a s s 3 , P u b , C l a s s 2 , C l a s s 3 , P a s s , S l e e p Class 1, Class 2, Class 3, Pub, Class 2, Class 3, Pass, Sleep Class1,Class2,Class3,Pub,Class2,Class3,Pass,Sleep
这里的每一幕数据都会有个终点状态(这里为Sleeep)
转移概率矩阵
转移概率矩阵,是事物体在不同状态下的转换的概率,比如上边提到的青蛙跳台阶的例子中,其对应的转移概率矩阵为:
[
0
a
i
1
−
a
i
0
]
\begin{bmatrix} 0 & a_i \\ 1-a_i & 0 \end{bmatrix}
[01−aiai0]
其中0表示的是不会停留在本层。
我们再看另外一个例子,来说明一下状态更加多的情况下的事物体的状态转移(以下例子来自于:https://zhuanlan.zhihu.com/p/26453269 )
某村有一个智商为0的王二狗,人傻不拉几的,见人就傻笑,每天中午12点的标配,仨状态:吃,玩,睡。这就是传说中的状态分布。
你想知道他 n n n天后中午12点的状态么?是在吃,还是在玩,还是在睡?这些状态发生的概率分别都是多少?
先看个假设,他每个状态的转移都是有概率的,比如今天玩,明天睡的概率是几,今天玩,明天也玩的概率是几几,看图更清楚一点。
这个矩阵就是转移概率矩阵 P P P,并且它是保持不变的,就是说第一天到第二天的转移概率矩阵跟第二天到第三天的转移概率矩阵是一样的。(这个叫时齐,不细说了,有兴趣的同学自行百度)。
有了这个矩阵,再加上已知的第一天的状态分布,就可以计算出第 N N N天的状态分布了。
S 1 S1 S1 是4月1号中午12点的的状态分布矩阵 [0.6, 0.2, 0.2],里面的数字分别代表吃的概率,玩的概率,睡的概率。
那么
4月2号的状态分布矩阵 S 2 = S 1 ∗ P S2 = S1 * P S2=S1∗P (俩矩阵相乘)。
4月3号的状态分布矩阵 S 3 = S 2 ∗ P S3 = S2 * P S3=S2∗P (看见没,跟 S 1 S1 S1无关,只跟 S 2 S2 S2有关)。
4月4号的状态分布矩阵 S 4 = S 3 ∗ P S4 = S3 * P S4=S3∗P (看见没,跟 S 1 S1 S1, S 2 S2 S2无关,只跟 S 3 S3 S3有关)。
…
4月 n n n号的状态分布矩阵 S n = S n − 1 ∗ P Sn = S_{n-1} * P Sn=Sn−1∗P (看见没,只跟它前面一个状态 S n − 1 S_{n-1} Sn−1有关)。
转移概率矩阵在Google著名的网页排名算法 PageRank 算法中也有体现,感兴趣的可以参考:https://thinkgamer.blog.csdn.net/article/details/47443877
马尔科夫奖励过程
上面介绍到了马尔科夫过程,这部分内容来学习一下马尔科夫奖励过程(Markov Reward Process)
定义
原来的马尔科夫过程加上奖励值之后就变成了马尔科夫奖励过程,元素由$ <S, P> 变 为 变为 变为 <S,P,R,\gamma> , 其 中 ,其中 ,其中R 就 是 奖 励 , 就是奖励, 就是奖励,\gamma$是折扣因子
马尔科夫奖励过程(Markov Reward Process)定义:一个马尔科夫奖励过程由一个四元组构成:$ <S,P,R,\gamma> $,其中:
- S S S为有限的状态空间集, s i s_i si表示时间步 i i i的状态,其中 S = { s 1 , s 2 , . . . , s n } S=\{ s_1, s_2, ..., s_n \} S={s1,s2,...,sn}
- P P P为状态转移矩阵, P s s ′ = P [ S s + 1 = s ′ ∣ S t = s ] P_{ss'} = P[S_{s+1} = s' | S_t = s] Pss′=P[Ss+1=s′∣St=s]
- R R R为奖励函数, R s = E [ R t + 1 ∣ S t = s ] R_s = E[R_{t+1} | S_t = s] Rs=E[Rt+1∣St=s]
- γ \gamma γ 为折扣因子, γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1]
可以将「马尔科夫链」中的例子变成如下的马尔科夫奖励过程:
红色标注的值就是奖励,注意的是,这里的奖励是即时奖励,也就是脱离状态时立刻得到的奖励,这里没有考虑下个状态可能转移到哪里。
累积奖励(Return)与折扣因子 γ \gamma γ
为了找到长期的累积奖励,不仅要考虑当前时间步
t
t
t的奖励,还需要考虑到未来的奖励,总奖励(Total Reward)
R
R
R的计算公式如下:
R
=
r
1
+
r
2
+
.
.
.
+
r
n
R = r_1 + r_2 + ... + r_n
R=r1+r2+...+rn
根据总奖励
R
R
R的计算公式可知,长期累积奖励从当前时间步
t
t
t开始,直到最终状态的奖励
r
n
r_n
rn,得到未来累积奖励(Future Cumulative Reward)
R
t
R_t
Rt。
R
=
r
t
+
1
+
r
t
+
2
+
.
.
.
+
r
n
R = r_{t+1} + r_{t+2} + ... + r_{n}
R=rt+1+rt+2+...+rn
一般而言,环境是随机的或者未知的,这意味着下一个状态可能也是随机的。即由于所处的环境是随机的,所以无法确定下一次执行相同的动作,以及是否能够获得相同的奖励。向未来探索得越多,可能产生的分歧(不确定性)就越多。因此,在实际任务中,通常用折扣未来累积奖励(Discounted Future Cumulative Reward) G t G_t Gt 来代替未来累积奖励。
G t = R t + 1 + γ R t + 2 + . . . + γ k R n G_t = R_{t+1} + \gamma R_{t+2} + ... + \gamma ^k R_n Gt=Rt+1+γRt+2+...+γkRn
如果考虑到无限时间的场景,更加通用的表示为(当前获得的奖励表示为
R
t
+
1
R_{t+1}
Rt+1):
G
t
=
∑
t
=
0
∞
γ
k
R
t
+
k
+
1
G_t = \sum_{t=0}^{\infty} \gamma ^ k R_{t+k+1}
Gt=t=0∑∞γkRt+k+1
其中
γ
\gamma
γ为折扣因子(Discount Factor),是介于
[
0
,
1
]
[0,1]
[0,1]的常数,对于距离当前时间步越远的奖励,其重要性就越低。假设折扣因子
γ
=
0
\gamma = 0
γ=0,可以认为该策略“目光短浅”,只考虑当前的及时奖励
r
t
+
1
r_{t+1}
rt+1(注释:因为当
γ
=
0
,
k
=
0
\gamma =0,k = 0
γ=0,k=0时,
0
0
=
1
0^0=1
00=1,所以只关注眼前的收益。)。倘若想平衡当前时间的奖励与未来的奖励,可设置
γ
\gamma
γ为一个较大的值,比如
γ
=
0.9
\gamma = 0.9
γ=0.9。如果环境是恒定的,或者说环境的所有状态是已知的(Model-based),那么未来累积奖励可以提前获得并不需要进行折扣计算,这时候可以简单的将折扣因子
γ
\gamma
γ设置为1,看起来就像非常“有远见”。
大多数的马尔科夫奖励过程(MRP)与马尔科夫决策过程(MDP)都会使用折扣因子 γ \gamma γ。主要基于如下几点考虑:
- 数学上计算的便利性
- 避免未来进入循环马尔科夫过程带来的无限大回报
- 未来的不可靠性
- 类比经济学中,眼前的利益比未来的利益更加有意义
- 人类的行为也更加倾向于眼前利益
- 退一步来说,令 γ \gamma γ为1,也可以简单的转化成没有折扣因子的状态
价值函数
价值函数是状态
s
s
s的长期价值表示,它是上面说的回报的期望。
v
(
s
)
=
E
[
G
t
∣
S
t
=
s
]
v(s) = E[G_t | S_t = s]
v(s)=E[Gt∣St=s]
在概率论和统计学中,数学期望是试验中每次可能的结果的概率乘以结果值的总和。这里回报的期望,即价值函数会随着折扣因子的变化而取不同的值,因为回报会因为
γ
\gamma
γ的值而改变,期望自然也就会改变。
下面三张图分别为
γ
=
0
,
γ
=
0.9
,
γ
=
1
\gamma=0, \gamma=0.9, \gamma=1
γ=0,γ=0.9,γ=1时的奖励过程:
其红色的状态价值的计算方式为:遍历得到以某个状态开始的所有可能的采样数据,分别计算某个采样数据下的最终返回的期望值,进行累加可得到起始状态的最终状态值。
在UCL的讲义上给了一个例子,如下图所示:
我们可以看下当 γ = 0 \gamma=0 γ=0时的状态值, γ = 0 \gamma=0 γ=0,则 G 1 = R 2 G_1 = R_2 G1=R2,所有某状态的价值为离开该状态获得的奖励 R R R的值。
当 γ = 1 \gamma = 1 γ=1时,通过价值函数的公式我们可以知道,要想求解一个状态的状态价值, 需要根据马尔科夫链把所有的可能列出来。每个可能都在终点终止,但是上面这个马尔科夫过程其实是有环的, 可能陷入无限循环的局面。因为折扣因子还是1,所以会导致回报 G G G无限大,期望也就无限大,状态价值 V V V也就无限大。下面引入贝尔曼方程就是为了更好的求解价值函数的。
马尔科夫奖励过程的贝尔曼方程
贝尔曼方程(Bellman Equation)可以用来方便的表示和计算马尔科夫奖励过程,价值函数可以分为两个部分:
- 即时奖励 R t + 1 R_{t+1} Rt+1
- 下一状态的折扣状态价值 γ v ( S t + 1 ) \gamma v(S_{t+1}) γv(St+1)
马尔科夫奖励过程的贝尔曼方程可以进行如下简单的推导:
v
(
s
)
=
E
[
G
t
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
R
t
+
2
+
γ
2
R
t
+
3
+
.
.
.
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
(
R
t
+
2
+
γ
R
t
+
3
+
.
.
.
)
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
G
t
+
1
∣
S
t
=
s
]
=
E
[
R
t
+
1
+
γ
v
(
S
t
+
1
)
∣
S
t
=
s
]
\begin{aligned} v(s) & =\mathbb E[G_t|S_t=s]{} \\\\ &=\mathbb E[R_{t+1}+\gamma R_{t+2} + \gamma ^2R_{t+3}+ ...|S_t=s] \\\\ &=\mathbb E[R_{t+1}+\gamma (R_{t+2} + \gamma R_{t+3}+ ...)|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{aligned}
v(s)=E[Gt∣St=s]=E[Rt+1+γRt+2+γ2Rt+3+...∣St=s]=E[Rt+1+γ(Rt+2+γRt+3+...)∣St=s]=E[Rt+1+γGt+1∣St=s]=E[Rt+1+γv(St+1)∣St=s]
贝尔曼方程的推导过程中只是简单的使用了累积回报 G t G_t Gt,以及状态价值函数 v ( s ) v(s) v(s)的基本定义。最后即可得出当前状态价值函数 v ( s ) v(s) v(s)的值为,在当前状态 s s s下,即时奖励 R t + 1 R_{t+1} Rt+1与下一状态的折扣状态价 γ v ( S t + 1 ) \gamma v(S_{t+1}) γv(St+1)值的期望之和。
其核心即阻碍与表示当前状态价值函数 v ( s ) v(s) v(s)与下一刻状态价值函数 v ( s t + 1 ) v(s_{t+1}) v(st+1)之间的递归关系。
我们可以回溯树的方式更好的理解贝尔曼方程的计算。因回溯图中的关系是回溯运算的基础,也是强化学习的核心内容。通俗的讲,回溯操作就是讲后续状态的价值信息回传给当前时刻的状态。
其中空心圆表示一个状态,以状态
s
s
s作为根节点,智能体依据状态转移概率,可能会到达两个后续状态
s
′
s'
s′,以及在离开状态
s
s
s时获得的奖励。贝尔曼方程对所有可能性采用其出现概率进行了加权平均。这也就说明了起始状态的价值一定等于后续状态的(折扣)期望值加上对应收益的期望值。
$$
\begin{aligned} v(s)= \mathbb E[R_{t+1} + \gamma v(S_{t+1})|S_t=s] \end{aligned}
\begin{aligned} v(s)= \mathbb R_s+ \gamma \sum_{s’ \in S} \mathbb P_{ss’}v(s’) \end{aligned}
$$
这里通过之前的实例可以进行直观的验证。这里主要观测图中Class3状态下的状态值函数4.3的计算过程。
Class3状态下的即时奖励为
R
=
−
2
R=-2
R=−2,并有两个后续状态(0.6的概率转移到pass状态,0.4的概率转移到pub状态),同时设定了折扣系数
γ
\gamma
γ为1。所以可以计算得出:
v
(
C
l
a
s
s
3
)
=
即
时
奖
励
R
+
P
转
移
到
p
a
s
s
∗
v
(
p
a
s
s
)
+
P
转
移
到
p
u
b
∗
v
(
p
u
b
)
=
−
2
+
0.6
∗
10
+
0.4
∗
0.8
=
4.32
≈
4.3
\begin{aligned} v(Class3) &=即时奖励R +P_{转移到pass}*v(pass) +P_{转移到pub}*v(pub) \\\\ &= -2 + 0.6 * 10+0.4* 0.8 \\\\&=4.32 \\\\& \approx 4.3 \end{aligned}
v(Class3)=即时奖励R+P转移到pass∗v(pass)+P转移到pub∗v(pub)=−2+0.6∗10+0.4∗0.8=4.32≈4.3
贝尔曼方程的矩阵形式
贝尔曼方程 也可以简单的表示为矩阵的形式:
v
=
R
+
γ
P
v
v = R + \gamma P_v
v=R+γPv
这里的价值函数
v
v
v是关于每个状态的价值函数的列向量,矩阵形式展开后的表达如下:
∣
v
1
.
v
n
∣
=
∣
R
1
.
R
n
∣
+
γ
∣
P
11
.
.
.
P
1
n
.
.
P
n
1
.
.
.
P
n
n
∣
∣
v
1
.
v
n
∣
\left|\begin{matrix}v_{1}\\\\.\\\\v_{n}\end{matrix}\right| = \left|\begin{matrix}R_{1}\\\\.\\\\R_{n}\end{matrix}\right|+ \gamma \left|\begin{matrix}P_{11} & ...&P_{1n}\\\\. & &.\\\\P_{n1} &... &P_{nn}\end{matrix}\right|\left|\begin{matrix}v_{1}\\\\.\\\\v_{n}\end{matrix}\right|
∣∣∣∣∣∣∣∣∣∣v1.vn∣∣∣∣∣∣∣∣∣∣=∣∣∣∣∣∣∣∣∣∣R1.Rn∣∣∣∣∣∣∣∣∣∣+γ∣∣∣∣∣∣∣∣∣∣P11.Pn1......P1n.Pnn∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣∣v1.vn∣∣∣∣∣∣∣∣∣∣
贝尔曼方程的求解
既然已经能够将贝尔曼方程表示为矩阵形式,并且其为线性方程,那么就可以直接进行求解:
v
=
R
+
γ
P
v
(
1
−
γ
P
)
v
=
R
v
=
(
1
−
γ
P
)
−
1
R
v=R + \gamma Pv \\ (1-\gamma P)v=R \\ v=(1- \gamma P)^{-1}R
v=R+γPv(1−γP)v=Rv=(1−γP)−1R
对于一些低复杂度的MRP问题,这样直接计算解析解是非常快的,但是由于要计算矩阵的逆,其计算复杂度为 O ( n 3 ) O(n^3) O(n3)。所以并不适用与复杂的计算场景,针对复杂MRP问题,一般用迭代的方式求解贝尔曼方程,例如:
- 动态规划(Dynamic programming)
- 蒙特卡洛方法(Monte-Carlo evaluation)
- 差分学习法(Temporal-Difference learning)
这三种方法在强化学习笔记的第二篇文章中会进行介绍,敬请期待!
马尔科夫决策过程
定义
上面的内容主要介绍的是马尔科夫的奖励过程以及涉及的知识点,但强化学习是一个包含决策的过程,因此在上面的基础上我们再引入一个因子,就是动作(Action),从而将MRP问题变成了马尔科夫决策过程(Markov Decision Processes,MDP)。此时才能算得上是强化学习。MDP是一个环境,里面的每个状态都满足马尔科夫性质(Markov Property)。
MDP定义:一个马尔科夫决策过程由一个五元组构成: < S , A , P , R , γ > <S, A, P, R, \gamma> <S,A,P,R,γ>,其中
- S S S为有限的状态空间集, s i s_i si表示时间步 i i i的状态,其中 S = { s 1 , s 2 , . . . , s n } S=\{ s_1, s_2, ..., s_n \} S={s1,s2,...,sn}
- A A A 为动作空间集, a i a_i ai表示时间步 t t t的动作,其中 A = { a 1 , a 2 , . . . , a n } A = \{a_1, a_2, ..., a_n \} A={a1,a2,...,an}
- P P P为状态转移矩阵, P s s ′ = P [ S s + 1 = s ′ ∣ S t = s ] P_{ss'} = P[S_{s+1} = s' | S_t = s] Pss′=P[Ss+1=s′∣St=s]
- R R R为奖励函数, R s = E [ R t + 1 ∣ S t = s ] R_s = E[R_{t+1} | S_t = s] Rs=E[Rt+1∣St=s]
- γ \gamma γ 为折扣因子, γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1]
为了直观理解MDP过程,还是以之前的例子为例,图中红色的部分就是动作(Action)。
这里需要注意的是,因为有了动作的加入,奖励不再只和状态相关,还和动作有关。之前的奖励是离开状态就获取的即时奖励,现在是:在某个状态下采取特定动作后获取的即时奖励。
接下来我们将介绍在MDP的框架之下的一些基本要素。
策略(Policy)
策略是状态到动作的映射,在某个状态下采取什么样的动作,可以是确定的策略,也可以是一个随机策略(概率事件)。其定义如下:
π
(
a
∣
s
)
=
P
[
A
t
=
a
∣
S
t
=
s
]
\pi(a|s) =P[A_t=a|S_t=s]
π(a∣s)=P[At=a∣St=s]
- 策略完整定义了智能体的所有行为方式
- MDP的策略只依赖于当前的状态,不依赖于历史状态
- 策略是稳态的,不受时间约束。 即 A t ∼ π ( . ∣ S t ) , ∀ t > 0 A_t \sim \pi(.|S_t),\forall t\gt 0 At∼π(.∣St),∀t>0
- 在给定一个MDP,$M= <S,A,P,R,\gamma> 以 及 一 个 策 略 以及一个策略 以及一个策略\pi , 那 么 状 态 序 列 ,那么状态序列 ,那么状态序列S_1,S_2,… , 可 以 表 示 的 前 面 章 节 描 述 的 马 尔 科 夫 过 程 ( M P ) 为 ,可以表示的前面章节描述的马尔科夫过程(MP)为 ,可以表示的前面章节描述的马尔科夫过程(MP)为 <S,P^{\pi}>$
- 在给定一个MDP,$M= <S,A,P,R,\gamma> 以 及 一 个 策 略 以及一个策略 以及一个策略\pi , 那 么 状 态 与 奖 励 序 列 ,那么状态与奖励序列 ,那么状态与奖励序列S_1,R_2,S_2,R_3… , 可 以 表 示 前 面 章 节 描 述 的 的 马 尔 科 夫 奖 励 过 程 ( M R P ) 为 ,可以表示前面章节描述的的马尔科夫奖励过程(MRP)为 ,可以表示前面章节描述的的马尔科夫奖励过程(MRP)为 <S,P{\pi},R{\pi},\gamma> $
上述中的状态转移矩阵与奖励函数定义为:
$$
P_{s,s’}^{\pi} = \sum_{a \in A}\pi (a|s)P_{ss’}^a
R_{s}^{\pi} = \sum_{a \in A}\pi (a|s)R_{s}^a
$$
价值函数(Value Function)
MDP的价值函数和MRP的有一些不同,与策略相关。正因为有了策略,价值函数不再单纯的只和状态 s s s相关了。采取不同的策略,价值函数也会不同。因为从贝尔曼方程中我们也能看出,价值的计算和动作相关,而动作的选择就是策略。但是这里不得不提一下,这里的价值函数只是策略的价值函数,它的好坏不一定代表真正的状态的好坏,它只是根据你提供的这个策略计算出来的,提供的这个策略不一定是一个好策略,那么自然计算出来的价值不一定具有很强的参考性。
当执行到某一步时,如果需要评估当前智能体在该时间步状态的好坏程度,主要由价值函数(Value Function)来完成。由于价值函数的输入分为状态 s s s和<状态,价值>对 < s , a > <s, a> <s,a>,所以通常,当输入状态时统称为状态值函数,输入<状态,价值>对 < s , a > <s, a> <s,a>时统称为动作值函数,当不讨论其输入时,统称为价值函数。
一个马尔科夫决策过程的状态值函数
v
π
(
s
)
v_{\pi}(s)
vπ(s)是对未来奖励的预测,表示在状态
s
s
s下,跟随给定的策略
π
\pi
π会得到的奖励期望。
v
π
(
s
)
=
E
π
[
G
t
∣
S
t
=
s
]
v_{\pi}(s) = E_{\pi}[G_t|S_t=s]
vπ(s)=Eπ[Gt∣St=s]
一个马尔科夫决策过程的动作值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a),表示在状态 s s s下,执行动作 a a a,并跟随给定的策略 π \pi π会得到的奖励期望。
q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] q_{\pi}(s,a) = E_{\pi}[G_t|S_t=s,A_t=a] qπ(s,a)=Eπ[Gt∣St=s,At=a]
MDP的贝尔曼方程
与在马尔科夫奖励过程的贝尔曼方程思想相同,状态值函数可以分解为即时奖励
R
t
+
1
R_{t+1}
Rt+1与下一状态的折扣状态价值
γ
v
(
S
t
+
1
)
\gamma v(S_{t+1})
γv(St+1)的期望之和。
v
π
(
s
)
=
E
π
[
R
t
+
1
+
γ
v
π
(
S
t
+
1
)
∣
S
t
=
s
]
v_{\pi}(s) = E_{\pi}[R_{t+1}+\gamma v_{\pi}(S_{t+1})|S_t=s]
vπ(s)=Eπ[Rt+1+γvπ(St+1)∣St=s]
同时动作值函数也可以进行类似的分解:
q
π
(
s
,
a
)
=
E
π
[
R
t
+
1
+
γ
q
π
(
S
t
+
1
,
A
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
q_{\pi}(s,a) = E_{\pi}[R_{t+1}+\gamma q_{\pi}(S_{t+1},A_{t+1})|S_t=s,A_t=a]
qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)∣St=s,At=a]
最终动作值函数可以表示为:
q
π
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
∑
a
′
∈
A
π
(
a
′
∣
s
′
)
q
π
(
s
′
,
a
′
)
q_{\pi}(s,a)=R_s^a+\gamma \sum _{s' \in S}P_{ss'}^a\sum _{a' \in A}\pi(a'|s')q_{\pi}(s',a')
qπ(s,a)=Rsa+γs′∈S∑Pss′aa′∈A∑π(a′∣s′)qπ(s′,a′)
贝尔曼方程求解示例
下面我们顺着之前的例子,看看贝尔曼方程的求解过程:
这里我们需要求解Class3状态下的状态值函数
v
(
c
l
a
s
s
3
)
v(class3)
v(class3)。
v
(
C
l
a
s
s
3
)
=
∑
a
∈
A
π
(
a
∣
s
)
q
π
(
s
,
a
)
=
P
p
u
b
∗
q
π
(
C
l
a
s
s
3
,
p
u
b
)
+
P
s
t
u
d
y
∗
q
π
(
C
l
a
s
s
3
,
s
l
e
e
p
)
=
P
p
u
b
∗
(
R
p
u
b
+
v
(
p
u
b
)
)
+
P
s
t
u
d
y
∗
(
R
s
t
u
d
y
+
v
(
s
l
e
e
p
)
)
=
P
p
u
b
∗
(
R
p
u
b
+
P
p
u
b
−
c
l
a
s
s
1
∗
v
(
c
l
a
s
s
1
)
+
P
p
u
b
−
c
l
a
s
s
2
∗
v
(
c
l
a
s
s
2
)
+
P
p
u
b
−
c
l
a
s
s
3
∗
v
(
c
l
a
s
s
3
)
)
+
P
s
t
u
d
y
∗
(
R
s
t
u
d
y
+
v
(
s
l
e
e
p
)
)
=
0.5
∗
(
1
+
0.2
∗
(
−
1.3
)
+
0.4
∗
2.7
+
0.4
∗
7.4
)
+
0.5
∗
(
10
+
0
)
=
7.4
\begin{aligned} v(Class3) &=\sum _{a \in A}\pi(a|s)q_{\pi}(s,a) \\\\ &=P_{pub}*q_{\pi}(Class3,pub)+P_{study}*q_{\pi}(Class3,sleep) \\\\ &=P_{pub}*(R_{pub}+v(pub))+P_{study}*(R_{study}+v(sleep)) \\\\ &=P_{pub}*(R_{pub}+P_{pub-class1}*v(class1)+P_{pub-class2}*v(class2)+P_{pub-class3}*v(class3))+P_{study}*(R_{study}+v(sleep)) \\\\ &=0.5*(1+0.2*(-1.3)+0.4*2.7+0.4*7.4)+0.5*(10+0) \\\\ &=7.4 \end{aligned}
v(Class3)=a∈A∑π(a∣s)qπ(s,a)=Ppub∗qπ(Class3,pub)+Pstudy∗qπ(Class3,sleep)=Ppub∗(Rpub+v(pub))+Pstudy∗(Rstudy+v(sleep))=Ppub∗(Rpub+Ppub−class1∗v(class1)+Ppub−class2∗v(class2)+Ppub−class3∗v(class3))+Pstudy∗(Rstudy+v(sleep))=0.5∗(1+0.2∗(−1.3)+0.4∗2.7+0.4∗7.4)+0.5∗(10+0)=7.4
MDP下贝尔曼方程的矩阵形式
在马尔科夫决策过程下的贝尔曼方程的矩阵形式与在马尔科夫奖励过程下的矩阵形式类似,只是考虑了策略
π
\pi
π。
v
π
=
R
π
+
γ
P
π
v
π
v_{\pi}= R^{\pi} + \gamma P^{\pi}v_{\pi}
vπ=Rπ+γPπvπ
其直接的解析解为:
v
π
=
(
1
−
γ
P
π
)
−
1
R
π
v_{\pi}=(1- \gamma P^{\pi})^{-1}R^{\pi}
vπ=(1−γPπ)−1Rπ
计算复杂度为 O ( n 3 ) O(n^3) O(n3)。所以并不适用于复杂的计算场景,针对复杂MRP问题,一般用迭代的方式求解贝尔曼方程。
最优值函数
由之前的介绍可知,强化学习的目标就是求解马尔科夫决策过程的最优策略,而值函数是对最优策略 π ∗ \pi ^* π∗的表达。
最优值函数(Optimal Value Function)分为最优状态值函数(optimal state-value function)与最优动作值函数(optimal action_value function),他们的定义如下:
最优状态值函数(optimal state-value function) v ∗ ( s ) v_* (s) v∗(s)就是在所有策略 π \pi π当中,最大的状态值函数:
v ∗ ( s ) = max π v π ( s ) v_*(s)=\max_{\pi}v_{\pi}(s) v∗(s)=πmaxvπ(s)
最优动作值函数(optimal action_value function) q ∗ ( s , a ) q_*(s,a) q∗(s,a)就是在所有策略当中,最大的动作值函数:
q ∗ ( s , a ) = max π q π ( s , a ) q_*(s,a)=\max_{\pi}q_{\pi}(s,a) q∗(s,a)=πmaxqπ(s,a)
我们更希望的是最优值函数,最优值函数是与策略无关的,根据最优值函数可以直接得到最优策略。只需要沿着状态价值函数大的方向移动就行,这其实也就是强化学习中的一个流派,基于值学习的(相对于基于策略学习)。值比较大的状态就是好,比如终点前的一个状态值一般就比较大,因为下一刻就可以结束。此处用"一般"是因为考量的是状态值,如果这个状态不仅和终点相连并且还和几个失败点相连,状态值不一定大。参考贝尔曼方程计算公式,如果我们使用另一种动作值函数,代表状态 s s s下采取特定动作 a a a的价值。那么我们就可以说,终点前一个状态,采取动作 a a a可以直接到终点,这个 a ( s , a ) a(s,a) a(s,a)一定是一个大值。这也提示了使用 q ( s , a ) q(s,a) q(s,a)值一般比使用状态价值 v ( s ) v(s) v(s)更好,因为考虑了动作。
最优值函数确定了马尔科夫决策过程中智能体的最优的可能表现。获得了最优值函数,也就获得了状态的最有价值,那么此时马尔科夫决策过程的所有变量都为已知的,接下来便能够很好的求解马尔科夫决策过程的问题。
在上图中,比如红色10的节点状态,可以选取Study 或者 Pub,选择去Study获得的奖励是10,选择去Pub获得的奖励是1,所以该节点的最大状态价值为10,如果是红色8的节点状态,有两种选择分别为Study和Sleep,Sleep的奖励是0,Study的奖励是-2,但是因为到达10后能获得的最大奖励是10,所以为 10 -2=8。依次类推其他状态节点的最大状态价值。
v ∗ v_* v∗会告诉你每一步获得的最大状态价值,但是不会告诉你怎么做,因此需要 p ∗ p_* p∗的辅助,继而告诉你怎么去执行动作(Action)。下图中的弧上的 q ∗ q_* q∗表明了执行该action可以获得的价值,有了这些价值之后,就可以选择最大价值的路线了。
从10 开始的Pub动作获得价值为8.4,是因为该状态平均了6、8、10三个状态价值的结果,0.2 * 6 + 0.4 * 8 + 0.4 * 10 = 8.4/
最优策略
最优策略(Optimal Policy)的定义为:
π
≥
π
’
i
f
v
π
(
s
)
≥
v
π
′
(
s
)
,
∀
s
\pi \ge \pi ’ \ \ \ if \ \ \ v_{\pi}(s) \ge v_{\pi'}(s),\forall s
π≥π’ if vπ(s)≥vπ′(s),∀s
在状态
s
s
s下,当策略
π
\pi
π的价值函数优于任何其他策略
π
′
\pi'
π′的价值函数时,策略
π
\pi
π即为状态
s
s
s下的最优策略。关于马尔科夫决策过程的最优策略,有如下3个定理:
- 1、对于任何马尔科夫决策过程问题,存在一个最优策略 π ∗ \pi^* π∗,其优于(至少等于)任何其他策略,即 π ∗ ≥ π \pi^* \ge \pi π∗≥π。
- 2、所有最优策略下都有最优状态值函数,即 v π ∗ ( s ) = v ∗ ( s ) v_{\pi^*}(s) = v^*(s) vπ∗(s)=v∗(s)
- 3、所有最优策略下都有最优动作值函数,即 q π ∗ ( s , a ) = q ∗ ( s , a ) q_{\pi^*}(s,a) = q^*(s,a) qπ∗(s,a)=q∗(s,a)
基于上述三个定理,寻找最优策略可以通过最优状态值函数 v π ∗ ( s ) v_{\pi^*}(s) vπ∗(s)或者最优动作值函数 q π ∗ ( s , a ) q_{\pi^*}(s,a) qπ∗(s,a)来得到。也就是说如果最优值函数已知,则可以获得马尔科夫决策过程的最优策略。
因此,可以通过最大化
q
∗
(
s
,
a
)
q^*(s,a)
q∗(s,a)得到最优策略
π
∗
\pi^*
π∗,具体的定义如下:
π
∗
(
a
∣
s
)
=
{
1
,
i
f
a
=
max
a
∈
A
q
(
s
,
a
)
0
,
其
他
\pi_{*}(a|s)=\begin{cases} 1,\quad if \ \ a= \max_{a \in A}\ q(s,a) \\\\ 0,\quad 其他 \end{cases}
π∗(a∣s)=⎩⎪⎨⎪⎧1,if a=maxa∈A q(s,a)0,其他
上式中,
a
=
max
a
∈
A
q
(
s
,
a
)
a= \max_{a \in A}\ q(s,a)
a=maxa∈A q(s,a)时,
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)为1,表明如果动作值函数的最大值为最优策略所选择的动作,那么智能体已经找到最优策略
π
∗
\pi^*
π∗。只要最优动作值函数
q
∗
(
s
,
a
)
q^*(s,a)
q∗(s,a)已知,就可以立即获得最优策略。综上所述,最优策略
π
∗
\pi^*
π∗对于任何马尔科夫决策过程都会有一个对应的确定性最优策略
π
∗
(
a
∣
s
)
\pi_*(a|s)
π∗(a∣s)。
到目前为止,最优策略的求解问题事实上已经转换成为了最优值函数的求解问题。如果已经求出最优值函数,那么最优策略是非常容易得到的,反之同理。通过最优策略求解问题的转换,可以将鼓励的最优策略 π ∗ \pi^* π∗、最优值函数 v ∗ ( s ) v^*(s) v∗(s)、最优动作值函数 q ∗ ( s , a ) q^*(s,a) q∗(s,a)连为一体。需要注意的是,在实际工作中,也可以不求最优值函数,而使用其他方法直接求解最优策略。
比如下图中的最优策略路线为: 6 − > 6 − > 8 − > 10 6->6->8->10 6−>6−>8−>10
求解贝尔曼最优方程
上面描述的回溯图过程中已经给出了贝尔曼最优方程的基本形式,其阐述的一个事实是:最优策略下各个状态的价值一定等于这个状态下最优动作的期望回报。我们已经知道:
- 求解强化学习问题实际上是求解最优策略。
- 最优策略可以通过求解最优值函数得到。
- 最优值函数的求解就是优化贝尔曼方程。
简而言之,强化学习的求解最后演化成了优化贝尔曼方程。贝尔曼最优方程实际上是一个方程组,每个状态对应一个方程等式。也就是说,如果有 n n n个状态,那么有 n n n个含有 n n n个未知量的方程。如果环境的动态变化特性 p p p是已知的,那么原则上可以用解非线性方程组的求方法来求解 v ∗ v_* v∗方程组。类似地,我们也可以求得 q ∗ q_* q∗的一组解。对于小规模的马尔科夫决策过程,可以直接求解价值函数,对于大规模的马尔科夫决策过程,通常非常难以获得解析解,必须采用迭代的方法优化贝尔曼方程。比如:
- Value Iteration算法
- Policy Iteration算法
- Q-learning算法
- Sarsa算法
同样会在第二篇进行介绍。
鸣谢
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!