目录
简述
深度强化学习(Deep Reinforcement Learning)分为深度和强化两个部分。深度学习的好处是更深,更抽象的学习;而强化学习则是通过与环境产生互动来采取行动。下面主要对强化学习作出概述。
强化学习
强化学习主要由两个主体、四个部分组成。
两个主体
Agent:代理人,即采取行动的个体,如玩家。
Environment:环境,能对行动产生反馈,如游戏规则。
四个部分
<A, S, R, P>
Action space : A
State space : S
Reward: R
Policy: P
- A:动作空间,即Agent采取行动的所有动作空间。如对于贪吃蛇游戏,就是上下左右的离散操作空间;而对于驾驶类游戏,则是向左向右和液氮加速等的连续空间。
- S:状态空间,对于Agent采取行动后的反馈状态。贪吃蛇的身体长度位置、卡丁车的速度位置等,都是State。
- R:奖励,实数值,顾名思义,就是奖赏或惩罚。
- P:策略,即Agent在状态 s ∈ S s\in S s∈S下会采取什么行动 a ∈ A a\in A a∈A。有时候会用Actor表示策略,这两者在语义上等价。
深度强化学习,就是在环境E下,由Agent根据状态S采取动作A,为了获得最大奖励R而不断训练生成策略P的过程。
稍进一步
在以上的描述中我们可以看出,我们研究的重点在于策略P。而生成策略P的方法大致可以分成两种,即基于策略的(Policy-based)和基于值的(Value-based)。
如图所示,这两种方法并非完全互斥,可以共同使用。
我知道乍一看这两个名词会感到不明所以,下面我会用我的语言大致介绍下这两个是什么东西。而在此之前,我需要先介绍一下相关符号。
符号
- π \pi π:函数符号,表示策略(Policy)函数,参数常为环境返回的状态,输出为一个具体的动作,可知 a = π ( s ) ∈ A a =\pi (s) \in A a=π(s)∈A。
- r r r:采取动作a后获得的即时奖励。
-
G
G
G:累积奖赏,
G
t
G_t
Gt表示从时刻t开始到游戏结束的累积奖赏。
G t = ∑ T = t ∞ r t G_t=\sum_{T=t}^{\infty}{r_t} Gt=T=t∑∞rt -
Q
π
(
s
,
a
)
Q_\pi (s,a)
Qπ(s,a):状态-动作值函数(state-action value function),有时也简称动作值函数。即在t时刻,状态s下,采取动作a,使用策略
π
\pi
π预计获得的累积奖赏的期望值。
Q π ( s , a ) = E [ G t ∣ S t = s , A t = a ] Q_\pi (s,a)=\mathbb{E}[G_t\vert S_t = s,A_t = a] Qπ(s,a)=E[Gt∣St=s,At=a] -
V
π
(
s
)
V_\pi (s)
Vπ(s):状态值函数(state value function),即在t时刻,状态s下使用策略
π
\pi
π预计获得的累积奖赏的期望值。
V π ( s ) = E [ G t ∣ S t = s ] V_\pi (s)=\mathbb{E}[G_t\vert S_t = s] Vπ(s)=E[Gt∣St=s]
Value-based(基于值)
先讲Value-based。
我们已经定义了两个value function,分别是
V
π
(
s
)
V_\pi (s)
Vπ(s)和
Q
π
(
s
,
a
)
Q_\pi (s,a)
Qπ(s,a)。Value-based方法就是根据这两个函数,求出最大化奖赏的策略
π
\pi
π。即:
π
∗
=
a
r
g
max
π
V
π
(
s
)
\pi_*=arg \max_\pi V_\pi (s)
π∗=argπmaxVπ(s)
或者:
π
∗
=
a
r
g
max
π
Q
π
(
s
,
a
)
\pi_*=arg \max_\pi Q_\pi (s,a)
π∗=argπmaxQπ(s,a)
也就是说,遍历所有的状态和动作,找到最大化值函数QV的策略。具体如何操作?有以下的方法:
- Dynamic Programming:动态规划
- Monte-Carlo Methods:蒙特卡洛算法
- Temporal-Difference Learning:时间差分学习
这里着重展开的是第三种,时间差分学习包括Q-learning,DQN,Sarsa,具体的优化方法我会在之后的学习中展开讨论。
总之,基于值的方法,就是基于值函数来学习策略的方法。
Policy-based(基于策略)
Value-based的所有方法,最终都是通过值函数来学习的,这些值函数可能和动作或状态有关。而Policy-based的方法则是用梯度的方法直接学习策略。
在V-B(Value-based,下同)的方法中,策略是
π
(
s
)
\pi(s)
π(s),只和状态相关,我们通过值函数的反馈修改策略,再根据性的策略来计算值函数。
在P-B(Policy-based,下同)的方法中,策略是
π
(
s
∣
a
,
θ
)
\pi(s\vert a,\theta)
π(s∣a,θ),添加了一组参数
θ
\theta
θ。我们的目的就不再是基于VQ函数去间接地优化
π
(
s
)
\pi(s)
π(s),而是通过优化参数
θ
\theta
θ直接对策略
π
θ
\pi_\theta
πθ进行优化。
而众所周知,想要优化学习目标,必须要有一个Loss function,下面我们介绍两种空间中的损失函数。
离散空间
离散状态下的Loss函数为:
J
(
θ
)
=
V
π
θ
(
S
1
)
=
E
[
V
1
]
J(\theta)=V_{\pi_\theta}(S_1)=\mathbb{E}[V_1]
J(θ)=Vπθ(S1)=E[V1]其中
S
1
S_1
S1代表的是初始状态,而
V
1
V_1
V1则是从初始状态开始到结束能得到的所有累积奖赏。换言之,Loss函数由于在每一盘游戏中都是固定
θ
\theta
θ的,因此只看看到初始的状态
S
1
S_1
S1,他就能知道在这组参数下的策略能获得多少奖励。但由于一些游戏对行动的采取并非确定性的,而是添加一些随机性(比如同样的state和action,游戏自身会生成一些噪音来阻碍出现相同的结果),因此这里的loss function是期望值。
我们要做的事情,就是通过学习这组参数
θ
\theta
θ,来最大化这个
J
(
θ
)
J(\theta)
J(θ),这就是基于策略的方法所要做的事情。
连续空间
而对于连续空间的Loss函数,有:
J
(
θ
)
=
∑
s
∈
S
d
π
θ
(
s
)
V
π
θ
(
s
)
=
∑
s
∈
S
(
d
π
θ
(
s
)
∑
a
∈
A
π
(
a
∣
s
,
θ
)
Q
π
(
s
,
a
)
)
J(\theta)=\sum_{s\in S}d_{\pi_\theta}(s)V_{\pi_\theta}(s)=\sum_{s\in S}(d_{\pi_\theta}(s)\sum_{a\in A}{\pi(a\vert s,\theta)Q_{\pi}(s,a)})
J(θ)=s∈S∑dπθ(s)Vπθ(s)=s∈S∑(dπθ(s)a∈A∑π(a∣s,θ)Qπ(s,a))
其中
d
π
θ
(
s
)
d_{\pi_\theta}(s)
dπθ(s)是马尔科夫链中关于
π
(
θ
)
\pi(\theta)
π(θ)的一个稳定分布(stationary distribution)。有关稳定分布的概念比较麻烦,这里就简单地理解为
J
(
θ
)
J(\theta)
J(θ)是各种状态下V值的期望值就行。
那么具体怎么实现呢?比较多的是采用policy gradient方法,这里就不展开了。
再形象一点
V-B方法是对每一个状态下的行为进行打分,像是在训练一个裁判员(critic),根据这个裁判员对状态行为的评分,选择最高分,从而达到优化的结果。
P-B方法则不去管什么状态动作的评分,专心于优化自身。P-B方法就像是一个演员(actor),他只要把自己的参数学习好,自然就知道了什么状态下该选择什么动作。
P-B和V-B的总结
实际的训练中,P-B方法也会运用到
V
(
s
)
V(s)
V(s)或者
Q
(
s
,
a
)
Q(s,a)
Q(s,a),但在真正选择动作的时候却不依赖于这两个函数,这就是P-B方法和V-B方法的区别。
那么有没有一种方法是结合两者的?当然有,就是Actor-Critic方法,在之后的学习中我会去展开讨论。
本文主要是概述,讲的有点浅,如果有说错的地方还请指正。