我的强化学习代码仓库
https://github.com/ZiyiLiubird/MyRLcodes
首先,什么是强化学习?笔者的理解是,强化学习是一种半监督学习方式,系统与环境产生交互,做出一系列的行为,环境状态系统状态因此发生改变,环境最终给予系统一个反馈信号,也就是一个reward或punish。系统通过反馈信号来调整自己的行为,使其更加适应这个环境(接受更多的reward)。
强化学习的一个特点之一是,它每一次产生的行为不一定是当前最优的,但若算法收敛的情况下,将是一个全局最优解。每一步只选择当前最优,这属于贪心算法,例如梯度下降算法就属于这种类型,它很容易陷入局部最优解而难以跳出。人生又何尝不是如此呢?许多人往往重视眼前的利益而忽视了长远的发展,这从全局来看,自然对一个人的发展是不良的。
下面归结一下强化学习的特点:
- 没有监督数据,只有奖励信号;
- 奖励信号不一定是实时的,而很可能是延后的,有时甚至延后很- 多。比如下围棋,系统在游戏结束时候收到最终奖励/惩罚信号,当然,中间过程也可能会收到许多反馈信号。
- 时间(序列)是一个很重要的因素。
- 当前的行为影响后续接收到的数据。
强化学习主要基于这样的”奖励假设”:所有问题解决的目标都可以被描述成最大化累积奖励。
不过这个假设是否足够合理,或者是否足够优秀,笔者是存疑的。这儿涉及到现实社会中关于AI伦理问题的讨论。举一个比较接地气的例子,在自动驾驶系统的开发中,一个问题是,当汽车在大桥上行驶,前面出现了一批行人,车祸即将发生,而汽车此时无法立即停车,那么系统应该是选择保护驾驶员,还是前方的行人呢?这取决于强化学习中价值函数的选择。
马尔可夫决策过程
本篇文章的主要内容:
- 马尔科夫过程(Markov Process)
- 马尔科夫奖励过程(Markov Reward Process),贝尔曼方程(Bellman Equation)
- 马尔科夫决策过程(Markov Decision Process),贝尔曼期望方程(Bellman Expectation Equation)
- 贝尔曼最优性方程(Bellman Optimality Equation),回溯图
马尔科夫过程
首先介绍马尔科夫性:
简单说,马尔科夫性意味着给定现在的状态,过去的状态与将来的状态独立;也可以理解为过去所有的状态信息都蕴含在了现在的状态信息中。
数学表达:状态
S
t
S_t
St 具有马尔科夫性当且仅当:
P
[
S
t
+
1
∣
S
t
]
=
P
[
S
t
+
1
∣
S
1
,
…
,
S
t
]
P[S_{t+1}|S_t]=P[S_{t+1}|S_1,\ldots,S_t]
P[St+1∣St]=P[St+1∣S1,…,St]
接下来介绍状态转移概率和状态转移矩阵的概念,一下我们默认所有的状态均具有马尔科夫性,特殊情况会单独说明:
对状态
s
s
s和后继状态
s
′
s^{'}
s′ ,状态转移概率定义为:
P
s
s
′
=
P
[
S
t
+
1
=
s
′
∣
S
t
=
s
]
P_{ss^{'}}=P[S_{t+1}=s'|S_t=s]
Pss′=P[St+1=s′∣St=s]
状态转移矩阵
P
\mathbf{P}
P 定义了从状态
s
s
s 转移到所有后继状态
s
′
s'
s′的概率:
马尔科夫过程(马尔科夫链)是一个二元组 < S , P > <S,P> <S,P> ,其中:
- S S S 是状态的集合
- P P P是状态转移概率矩阵, P s s ′ = P [ S t + 1 = s ′ ∣ S t = s ] P_{ss^{'}}=P[S_{t+1}=s'|S_t=s] Pss′=P[St+1=s′∣St=s]
- 马尔科夫过程具有时间齐次性,也就是状态转移概率只与前驱和后继状态有关,与时间
t
t
t 无关。
详细数学定义可以参考随机过程中有关马尔科夫过程的定义。
马尔科夫过程满足马尔科夫性。
马尔科夫奖励过程
马尔科夫奖励过程与马尔科夫过程的区别是加入了奖励函数 R 和折扣因子
γ
\gamma
γ。于是我们可以定义每一个状态的价值。具体定义如下:
马尔科夫奖励过程是四元组
<
S
,
P
,
R
,
γ
>
<S,P,R,\gamma>
<S,P,R,γ>,
S
,
P
S,P
S,P的定义与马尔科夫过程中的定义相同。
- 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的定义:
回报
G
t
G_t
Gt是从时间步 t 开始一直到结束这一条轨迹上所获得的累积奖励之和。
G
t
=
R
t
+
1
+
γ
R
t
+
2
+
…
=
∑
k
=
0
∞
γ
k
R
t
+
k
+
1
G_t=R_{t+1}+\gamma R_{t+2}+\ldots=\sum_{k=0}^{\infty}\gamma^{k}R_{t+k+1}
Gt=Rt+1+γRt+2+…=∑k=0∞γkRt+k+1
注意,这里的
G
t
G_t
Gt是采样出的一条轨迹的累积奖励函数,并不是一个期望回报奖励。使我们从全部可能的轨迹当中抽出了一条单独来看时的值。
折扣因子
γ
\gamma
γ对未来的奖励打折扣,代表了未来的奖励在当下的价值。
- γ \gamma γ越靠近 0 说明我们越看重当下的利益
- γ \gamma γ越靠近 1 说明我们越看重未来的回报
为什么要引入 γ \gamma γ?主要原因有一下几条:
- 从数学角度考虑,为了防止回报 G t G_t Gt是一个无穷级数的时候会发散到无穷大,不收敛。
- 受到经济学或者心理学的启发,例如投资人可能更看重眼前的利益,或者说未来的利益会有较大的不确定性,例如股票市场的波动等等。
- 当轨迹在有限步终止时,我们有时也考虑采用无折扣形式,即 γ = 1 \gamma=1 γ=1
价值函数
价值函数
v
(
s
)
v(s)
v(s)给出了状态 s 下累积回报
G
t
G_t
Gt的期望。前面我们提到,
G
t
G_t
Gt是采样出来的一条轨迹上的累积回报,因此它具有随机性,会随着轨迹的不同而发生变化,无法完整刻画状态 s 的价值大小。而
v
(
s
)
v(s)
v(s)便是通过求期望消除了这种随机性。
v
(
s
)
=
E
[
G
t
∣
S
t
=
s
]
v(s)=E[G_t|S_t=s]
v(s)=E[Gt∣St=s]
例如从状态
s
1
s_1
s1出发我们可以到达
s
2
,
s
3
,
s
4
s_2,s_3,s_4
s2,s3,s4,而从状态
s
2
,
s
3
,
s
4
s_2,s_3,s_4
s2,s3,s4我们又可以到达其他状态,所有状态之间的连接构成了一张图,
s
1
→
s
2
→
…
s_1\rightarrow s_2\rightarrow\ldots
s1→s2→… 便构成了一条轨迹,我们可以计算这条轨迹的累积回报
G
t
G_t
Gt,而从
s
1
s_1
s1出发这样的轨迹有许多条,将它们求期望即可得到消除了随机性的累积回报,能够准确衡量状态
s
1
s_1
s1处的价值。
MRPs的贝尔曼期望方程
我们可以将
v
(
s
)
v(s)
v(s)分为两部分:
一部分是转移一步得到的即时奖励
r
r
r
另一部分是转移到新状态后的价值函数
v
(
s
′
)
v(s')
v(s′)
根据这个思想我们可以将价值函数做递归分解,得到贝尔曼期望方程:
用矩阵形式表示为:
V
=
R
+
γ
P
V
\mathbf{V}=\mathbf{R}+\gamma\mathbf{PV}
V=R+γPV,其中
V
,
R
,
P
\mathbf{V,R,P}
V,R,P均为列向量,
P
\mathbf{P}
P是状态转移矩阵。
在环境转移状态矩阵完全可知的情况下,理论上我们可以通过求解线性方程组的形式求解价值函数,但是计算的时间复杂度过高,并且大多数情况下我们都无法获取环境的动态信息。因此衍生出了一系列迭代求解算法:例如Monte-Carlo evaluation,Temporal-Difference learning等等。
马尔可夫决策过程
马尔可夫决策过程(Markov Decision Process)在马尔可夫奖励过程的定义之上,增加了动作空间 A ,也因此具有了决策能力,即选择做出哪一个动作。具体定义如下:
马尔可夫决策过程可以由五元组
<
S
,
A
,
P
,
R
,
γ
>
<S,A,P,R,\gamma>
<S,A,P,R,γ>描述。其中
S
,
P
,
R
,
γ
S,P,R,\gamma
S,P,R,γ的定义与马尔可夫奖励过程相同,不再赘述。下面解释一下 A :
A 代表了动作的集合,也就是智能体agent的动作空间,能够在每一步决策时选择哪些动作。
有了动作以后,我们还需要定义根据什么样的准则选择动作,也就是所谓的策略:
策略
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)是给定状态之后在动作空间上的一个条件概率分布函数:
π
(
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]
策略完全定义了agent的行为
策略只与当前的状态
S
t
S_t
St有关,与历史信息无关,这是由马尔科夫性决定的
策略具有时间齐次性
P
s
s
′
π
=
∑
a
∈
A
π
(
a
∣
s
)
P
s
s
′
a
P_{ss'}^{\pi}=\sum_{a\in A}\pi(a|s)P_{ss'}^{a}
Pss′π=∑a∈Aπ(a∣s)Pss′a
R
s
π
=
∑
a
∈
A
π
(
a
∣
s
)
R
s
a
R_{s}^{\pi}=\sum_{a\in A}\pi(a|s)R_{s}^{a}
Rsπ=∑a∈Aπ(a∣s)Rsa
价值函数
-
状态价值函数
MDP的状态价值函数是从当前的状态 s 出发,follow当前的policy π \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] -
动作价值函数
MDP的动作价值函数是从当前的状态 s 出发,采取动作 a ,然后follow当前的policy \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 加上一部状态转移之后后继状态或状态-动作的价值函数之和。
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]
下面给出状态价值函数与动作价值函数之间的关系:
将状态-动作行为树和动作-状态行为树合并展开,我们就得到了两个递归方程:
状态价值函数的贝尔曼期望方程:
v
π
(
s
)
=
∑
a
∈
A
π
(
a
∣
s
)
(
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
v
π
(
s
′
)
)
v_{\pi}(s)=\sum_{a\in A}\pi(a|s)(R_{s}^{a}+\gamma \sum_{s'\in S}P_{ss'}^{a}v_{\pi}(s'))
vπ(s)=∑a∈Aπ(a∣s)(Rsa+γ∑s′∈SPss′avπ(s′))
合并后的行为树如下图所示:
动作价值函数的贝尔曼期望方程:
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′∈SPss′a∑a′∈Aπ(a′∣s′)qπ(s′,a′)
行为树:
最优价值函数
最优状态价值函数
v
⋆
(
s
)
v_{\star}(s)
v⋆(s)是遍历策略空间的所有状态后值最大的价值函数
v
⋆
=
max
π
v
π
(
s
)
v_{\star}=\max_{\pi} v_{\pi}(s)
v⋆=maxπvπ(s)
最优动作价值函数
q
⋆
(
s
,
a
)
q_{\star}(s,a)
q⋆(s,a)是遍历策略空间的所有状态后值最大的动作价值函数
q
⋆
(
s
,
a
)
=
max
π
q
π
(
s
,
a
)
q_{\star}(s,a)=\max_{\pi} q_{\pi}(s,a)
q⋆(s,a)=maxπqπ(s,a)
对于一个MDP问题,如果我们求得了最优q函数,那么这个MDP问题也就被解决了。
最优策略
首先定义一个偏序关系:
π
≥
π
′
i
f
v
π
(
s
)
≥
v
π
′
(
s
)
,
∀
s
\pi\geq\pi' if v_{\pi}(s)\geq v_{\pi'}(s),\forall s
π≥π′ifvπ(s)≥vπ′(s),∀s
定理:对于任意一个马尔科夫决策过程:
总存在一个最优策略
π
⋆
\pi_{\star}
π⋆不差于其他策略:
π
⋆
≥
π
,
∀
π
\pi_{\star}\geq\pi,\forall \pi
π⋆≥π,∀π
所有的最优策略都能取得最优价值函数:
v
π
⋆
(
s
)
=
v
⋆
(
s
)
v_{\pi_{\star}}(s)=v_{\star}(s)
vπ⋆(s)=v⋆(s)
所有的最优策略都能取得最优动作价值函数:
q
π
⋆
(
s
,
a
)
=
q
⋆
(
s
,
a
)
q_{\pi_{\star}}(s,a)=q_{\star}(s,a)
qπ⋆(s,a)=q⋆(s,a)
如何求解最优策略
最优策略可以通过对
q
⋆
(
s
,
a
)
q_{\star}(s,a)
q⋆(s,a)在已知状态求最大值下的动作 a 得到:
π
⋆
(
x
)
=
{
1
i
f
a
=
arg
max
a
∈
A
q
⋆
(
s
,
a
)
0
o
t
h
e
r
w
i
s
e
\pi_{\star}(x)=\left\{ \begin{aligned} &1\qquad if\quad a=\arg\max_{a\in A}q_{\star}(s,a)\\ &0 \qquad otherwise \end{aligned} \right.
π⋆(x)=⎩⎨⎧1ifa=arga∈Amaxq⋆(s,a)0otherwise
因此如果我们知道
q
⋆
(
s
,
a
)
q_{\star}(s,a)
q⋆(s,a) 我们就可以立即得到最优策略
利用贝尔曼最优方程
v
⋆
(
s
)
=
max
a
q
⋆
(
s
,
a
)
v_{\star}(s)=\max_{a}q_{\star}(s,a)
v⋆(s)=maxaq⋆(s,a)
q
⋆
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
v
⋆
(
s
′
)
q_{\star}(s,a)=R_s^a+\gamma\sum_{s'\in S}P_{ss'}^{a}v_{\star}(s')
q⋆(s,a)=Rsa+γ∑s′∈SPss′av⋆(s′)
综合上述两式我们有:
v
⋆
(
s
)
=
max
a
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
v
⋆
(
s
′
)
v_{\star}(s)=\max_{a}R_s^a+\gamma\sum_{s'\in S}P_{ss'}^av_{\star}(s')
v⋆(s)=maxaRsa+γ∑s′∈SPss′av⋆(s′)
q
⋆
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
s
s
′
a
max
a
′
q
⋆
(
s
′
,
a
′
)
q_{\star}(s,a)=R_s^a+\gamma\sum_{s'\in S}P_{ss'}^{a}\max_{a'}q_{\star}(s',a')
q⋆(s,a)=Rsa+γ∑s′∈SPss′amaxa′q⋆(s′,a′)
贝尔曼最优方程是一个非线性方程,没有闭式解,但可用迭代法求解:
- 值迭代
- 策略迭代
- Q-learning
- Sarsa
以上算法我将在后面内容中继续介绍