强化学习入门
1.基本概念
PDF(概率密度函数):连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。
PMF(概率质量函数):概率质量函数是离散随机变量在各特定取值上的概率。
随机采样:根据事物出现的概率进行采样。
为了方便理解,下面都将采用超级马里奥进行说明
State:状态
当前帧的画面就可以用来表示一个状态,通常情况下不同时间点具有不同的状态。
Action:动作
Agent:做动作的人或事物等
从上图我们可以看出马里奥有三个动作分别是向上跳、向左走和向右走,即Action a
∈
\in
∈{top,left,right},Agent就是马里奥。
Policy
π
π
π:根据观测到的状态来控制Agent运动
在给定某种状态s下,Agent马里奥分别向上跳、向左走和向右走这三个动作的可能性,公式化表示:
π
(
a
∣
s
)
=
P
(
A
=
a
∣
S
=
s
)
π(a|s)= P(A = a | S = s)
π(a∣s)=P(A=a∣S=s),值域为[0,1]。
Reward R:奖励
Collect a coin: 𝑅 = +1
Win the game: 𝑅 = +10000
Touch a Goomba: 𝑅 = −10000(game over)
Nothing happens: 𝑅 = 0
State transition:状态转移
从上图我们可以看出,马里奥通过向上跳这个动作改变了当前帧,即发生了状态转移。
然而状态转移具有随机性,从上图我们可以看出在得知当前状态和向上跳的动作后,野怪的动作具有随机性,这也导致了状态转移的随机性,公式化表示为:
p
(
s
′
∣
s
,
a
)
=
P
(
S
′
=
s
′
∣
S
=
s
,
A
=
a
)
p(s'|s,a)=P(S' = s' | S = s,A = a)
p(s′∣s,a)=P(S′=s′∣S=s,A=a)。
Return:回报(计算未来的奖励)
公式表示为:
U
t
=
R
t
+
R
t
+
1
+
R
t
+
2
+
.
.
.
U_t=R_t+R_{t+1}+R_{t+2}+...
Ut=Rt+Rt+1+Rt+2+...
Discounted Return:折扣回报
从时间角度来看,同样的奖励在不同的时间点应该是不一样的,因此推出了折扣回报。
公式表示为:
U
t
=
R
t
+
γ
R
t
+
1
+
γ
2
R
t
+
2
+
γ
3
R
t
+
3
+
.
.
.
U_t=R_t+\gamma R_{t+1}+\gamma^2 R_{t+2}+\gamma^3 R_{t+3}+...
Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+... ;
γ
\gamma
γ为折扣率
由于
R
i
与
S
i
和
A
i
有
关
R_i与S_i和A_i有关
Ri与Si和Ai有关,因此
U
t
与
A
t
,
S
t
,
A
t
+
1
,
S
t
+
1
,
A
t
+
2
,
S
t
+
2
.
.
.
.
U_t与A_t,S_t,A_{t+1},S_{t+1},A_{t+2},S_{t+2}....
Ut与At,St,At+1,St+1,At+2,St+2....都有关,因此A和S都是随机变量,因此U也是随机变量,即Return和Discounted Return都具有随机性。
Action-Value Function
Q
π
(
s
,
a
)
Q_π(s,a)
Qπ(s,a):动作价值函数
由于
U
t
U_t
Ut是一个变量,在t时刻我们并不知道
U
t
U_t
Ut是什么,因此可以对
U
t
U_t
Ut求期望,将其中的随机性都用积分给积掉,得到一个实数。
公式表示为:
Q
π
(
s
t
,
a
t
)
=
E
[
U
t
∣
S
t
=
s
t
,
A
t
=
a
t
]
Q_π(s_t,a_t)=E[U_t|S_t=s_t,A_t=a_t]
Qπ(st,at)=E[Ut∣St=st,At=at]
Optimal Action-value function
Q
∗
(
s
t
,
a
t
)
Q^*(s_t,a_t)
Q∗(st,at):最优动作价值函数
公式表示为:
Q
∗
(
s
t
,
a
t
)
=
m
a
x
π
Q
π
(
s
t
,
a
t
)
Q^*(s_t,a_t)=max_π Q_π(s_t,a_t)
Q∗(st,at)=maxπQπ(st,at)
State-value function
V
π
(
s
t
)
V_π(s_t)
Vπ(st):状态价值函数
离散情况下,公式表示为:
V
π
(
s
t
)
=
E
A
[
Q
π
(
s
t
,
A
)
]
=
∑
a
π
(
a
∣
s
t
)
∗
Q
π
(
s
t
,
a
)
V_π(s_t)=E_A[Q_π(s_t,A)]=\sum_a π(a|s_t)*Q_π(s_t,a)
Vπ(st)=EA[Qπ(st,A)]=∑aπ(a∣st)∗Qπ(st,a)
连续情况下,公式表示为:
V
π
(
s
t
)
=
∫
π
(
a
∣
s
t
)
∗
Q
π
(
s
t
,
a
)
d
a
V_π(s_t)=\int π(a|s_t)*Q_π(s_t,a)da
Vπ(st)=∫π(a∣st)∗Qπ(st,a)da
通常情况下,用
E
s
[
V
π
(
s
t
)
]
E_s[V_π(s_t)]
Es[Vπ(st)]来评价Policy的好坏。
综上可知,有两种方式可以控制AI play game:
(1)Policy
π
(
a
∣
s
)
π(a|s)
π(a∣s);给定状态
s
t
,
a
t
由
π
(
.
∣
s
)
决
定
s_t,a_t由π(.|s)决定
st,at由π(.∣s)决定。
(2)
Q
∗
(
s
,
a
)
Q^*(s,a)
Q∗(s,a);给定
s
t
,
a
t
=
a
r
g
m
a
x
a
Q
∗
(
s
t
,
a
)
s_t,a_t=argmax_a Q^*(s_t,a)
st,at=argmaxaQ∗(st,a)。
2.Deep Q-Network(DQN)
2.1 基本思想
我们使用神经网络Q(s,a;w)来近似
Q
∗
(
s
,
a
)
Q^*(s,a)
Q∗(s,a),还是以超级马里奥的例子构建神经网络如下所示:
DQN的执行流程大致如下所示:
2.2 TD算法
TD算法的目标就是即使没有打完游戏也可以更新模型的参数。
举个简单的例子:
因此通过上图,我们可以推出
T
N
Y
C
−
>
A
T
L
≈
T
N
Y
C
−
>
D
C
+
T
D
C
−
>
A
T
L
T_{NYC->ATL} \approx T_{NYC->DC} + T_{DC->ATL}
TNYC−>ATL≈TNYC−>DC+TDC−>ATL,其中
T
N
Y
C
−
>
A
T
L
和
T
D
C
−
>
A
T
L
T_{NYC->ATL}和T_{DC->ATL}
TNYC−>ATL和TDC−>ATL是模型预测时间,
T
N
Y
C
−
>
D
C
T_{NYC->DC}
TNYC−>DC是实际时间。
通过上面一个小例子,我们可以很自然的给出TD算法的公式:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
∗
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_t,a_t;w) \approx r_t + \gamma*Q(s_{t+1},a_{t+1};w)
Q(st,at;w)≈rt+γ∗Q(st+1,at+1;w)
简单推导:
然后,针对上式两端加期望得到,
模型训练的目的就是让上式左右两者无限近似,通过梯度下降方法来更新网络参数,
TD算法步骤:
网络模型在训练的时候,每次迭代中都包含这六个步骤,经过多次迭代后使得网络模型
Q
(
s
,
a
;
w
)
Q(s,a;w)
Q(s,a;w)的泛化性能更好。
3.Policy Network
3.1 基本思想
用Policy network
π
(
a
∣
s
t
;
θ
)
π(a|s_t;\theta)
π(a∣st;θ)来近似Policy function
π
(
a
∣
s
t
)
π(a|s_t)
π(a∣st),以超级马里奥的例子构建网络模型如下:
通过上面的学习,我们可以知道评价策略函数的好坏是通过
J
(
θ
)
=
E
S
[
V
(
S
;
θ
)
]
J(\theta)=E_S[V(S;\theta)]
J(θ)=ES[V(S;θ)]公式,由于网络模型的目的就是使
J
(
θ
)
J(\theta)
J(θ)尽可能的大,因此在这里不在使用梯度下降而是使用了梯度增长来尽可能的满足要求。
通常情况下,
J
(
θ
)
J(\theta)
J(θ)作为监督信号,我们应该对它求梯度来更新网络模型的参数,为了简化,这里对
V
(
s
;
θ
)
V(s;\theta)
V(s;θ)求梯度。
梯度增长公式如下:
3.2 Policy gradient
公式如下:
公式推导:
其中第一步和第二步的转换如下所示:
通过上面的学习,我们不难发现有两种方式可以得到Policy gradient:
Form1:
Form2:
对于离散的动作 A={“left”,“right”,“up”},我们可以使用Form1来计算Policy gradient,
步骤:
(1)计算
f
(
a
,
θ
)
=
δ
π
(
a
∣
s
;
θ
)
δ
θ
∗
Q
π
(
s
,
a
)
,
a
∈
A
f(a,\theta) = \frac{\delta \pi(a|s;\theta)}{\delta\theta}*Q_\pi(s,a),a \in A
f(a,θ)=δθδπ(a∣s;θ)∗Qπ(s,a),a∈A
(2)Policy gradient:
δ
v
(
s
;
θ
)
δ
θ
=
f
(
"
l
e
f
t
"
,
θ
)
+
f
(
"
r
i
g
h
t
"
,
θ
)
+
f
(
"
u
p
"
,
θ
)
\frac{\delta v(s;\theta)}{\delta\theta}=f("left",\theta)+f("right",\theta)+f("up",\theta)
δθδv(s;θ)=f("left",θ)+f("right",θ)+f("up",θ)
对于连续的动作
A
∈
[
0
,
1
]
A\in[0,1]
A∈[0,1],我们可以使用Form2来计算Policy gradient,
如果使用积分来计算Form2的公式,我们会发现
π
(
A
∣
S
;
θ
)
\pi(A|S;\theta)
π(A∣S;θ)神经网络过于复杂,无法通过数学公式计算出,因此这里使用蒙特卡洛近似,
步骤:
使用Policy gradient来更新Policy network参数整体流程:
从上图我们可以发现,现在整个算法的关键就是如何得到
q
t
q_t
qt,这里提供两种方法,
Option1:Reinforce
Option2:使用神经网络来近似
q
t
q_t
qt,即actor-critic方法
该方法其实就是将我们上面学习到的DQN和Policy network进行结合,训练两个神经网络
π
(
a
∣
s
;
θ
)
和
q
(
s
,
a
;
w
)
来
近
似
π
(
a
∣
s
)
、
Q
π
(
s
,
a
)
\pi(a|s;\theta)和q(s,a;w)来近似\pi(a|s)、Q_\pi(s,a)
π(a∣s;θ)和q(s,a;w)来近似π(a∣s)、Qπ(s,a),公式表示为
V
(
s
;
θ
,
w
)
=
∑
a
π
(
a
∣
s
;
θ
)
∗
q
(
s
,
a
;
w
)
V(s;\theta,w)=\sum_a \pi(a|s;\theta)*q(s,a;w)
V(s;θ,w)=∑aπ(a∣s;θ)∗q(s,a;w)。
更新Actor:
更新Critic:
步骤:
4.AlphaGo实例
4.1 基础概念
棋盘通常是19×19的,总共361个点,state为black、write和space,因此使用19×19×2个包含0和1元素的tensor来表示,action space A ⊂ A \subset A⊂{1,2,3,…,361}。
训练步骤:
(1)通过一种模仿学习来初始化策略网络,这种模仿学习实际上就是一个有监督的多分类学习。
(2)使用策略梯度来训练策略网络,通过让策略网络进行自我博弈,拿胜负结果来训练策略网络。
(3)在策略网络训练完成后,使用它去训练价值网络。
考虑到围棋的复杂性,AlphaGo在下棋的并不是直接使用策略网络,而是在策略网络和价值网络的指导下使用蒙特卡洛树搜索去优化搜索过程。
4.2 Policy Network
这里是最新的论文AlphaGo Zero的state以及网络结构:
围棋的state用19×19×17的tensor来表示,如下图所示:
17可以划分为8+8+1,其中第一个8表示用8个矩阵分别表示黑棋当前位置和前7步位置,第二个8表示用8个矩阵分别表示白棋当前位置和前7步位置,矩阵为1的位置就表示该位置对应有对应颜色的棋子,为0则反之。而最后一个1表示用一个矩阵,矩阵全为1则表示该下黑子了,矩阵全为0表示该下白子了。
网络结构:
下面介绍另外一篇AlphaGo的论文的state以及网络结构,这里不做详细介绍:
AlphaGo的state的维度改为了48
网络结构:
4.3 Initialize Policy Network by Behavior Cloning
首先,强化学习和模仿学习的本质区别在于rewards,其中前者需要环境产生的rewards作为监督信号,而模仿学习是以专家的actions作为监督信号。这里的Behavior Cloning就是一种模仿学习,主要包含分类和回归。
Behavior Cloning步骤:
(1)Observe this state
s
t
s_t
st
(2)Policy network makes a prediction :
p
t
=
[
π
(
1
∣
s
t
,
θ
)
,
.
.
.
,
π
(
361
∣
s
t
,
θ
)
]
∈
(
0
,
1
)
361
p_t=[\pi(1|s_t,\theta),...,\pi(361|s_t,\theta)] \in(0,1)^{361}
pt=[π(1∣st,θ),...,π(361∣st,θ)]∈(0,1)361
(3)The expert’s action is
a
t
∗
a_t^*
at∗=281
(4)Let
y
t
∈
(
0
,
1
)
361
y_t\in(0,1)^{361}
yt∈(0,1)361 be the one-hot encode of
a
t
∗
=
281
a_t^*=281
at∗=281
(5)Loss = CrossEntropy(
y
t
,
a
t
y_t,a_t
yt,at)
(6)Use gradient descent to update policy network
这时候会引出一个问题,为什么还要在模仿学习的基础上做强化学习?
因为如果状态
s
t
s_t
st没有出现在训练数据中,那么基于当前状态,策略网络的预测动作
a
t
a_t
at将不会很好。经过实验证明,Behavior Cloning + RL有80%的几率可以击败Behavior Cloning。
4.4 Train Policy Network Using Policy Gradient
通过上面的学习,策略网络是通过自我博弈,拿胜负结果来训练的,如下图所示:
需要注意的是Player使用的是最新的策略网络的参数,而Opponent使用的是先前迭代的策略网络的参数。
还有就是增强学习中的奖励机制如下定义,
策略梯度步骤:
网络训练步骤:
通过多次迭代这几个步骤,来不断的更新网络模型的参数。
4.5 Train the Value Network
这里状态价值函数与之前的不同,新的状态价值函数表示为
V
π
(
s
)
=
E
[
U
t
∣
S
t
=
s
]
V_\pi(s)=E[U_t|S_t=s]
Vπ(s)=E[Ut∣St=s],其中如果游戏胜利则
U
t
=
+
1
U_t=+1
Ut=+1,失败则
U
t
=
−
1
U_t=-1
Ut=−1。
使用价值网络
v
(
s
;
w
)
v(s;w)
v(s;w)来近似状态价值函数
V
π
(
s
)
V_\pi(s)
Vπ(s)。
而在AlphaGo Zero论文中将策略网络和价值网络结合起来如下图所示:
价值网络训练步骤:
通过多次迭代这3个步骤来更新价值网络参数。
4.6 Monte Carlo Tree Search
主要思想:
AlphaGo每下一步棋都要将下面四个步骤重复很多次:
下面将分别对这四个步骤进行展开:
(1)Selection
由于在当前状态下去探索每一个动作,这样的计算量就太大了,动作有的好有的坏,我们应该根据这些动作的好坏程度来做选择,优先探索好的动作,忽略不好的动作。
Q(a)是由蒙特卡洛树计算得到的动作价值函数,初始值为0。
(2)Expansion
(3)Evaluation
因此,得到Record,
(4)Backup
最后,我们取
a
t
=
a
r
g
m
a
x
a
N
(
a
)
a_t = argmax_aN(a)
at=argmaxaN(a)作为最终的动作。
4.7 AlphaGo与AlphaGo Zero的对比
AlphaGo Zero比AlphaGo更加强大。
区别:
(1)AlphaGo Zero不在使用人为经验。
(2)使用MCTS去训练策略网络。
使用MCTS去训练策略网络的步骤:
5.TD算法的几种常见形式
5.1 Sarsa
在介绍它之前,先给出TD target的算术推导,
下面使用蒙特卡洛来近似得到TD target,
Sarsa有表示形式有两种,即表格形式和神经网络形式,
(1)表格形式
更新步骤:
其中
Q
π
Q_\pi
Qπ都是通过查询表格得到的。
(2)神经网络形式
网络模型:
更新步骤:
5.2 Q-Learning
在介绍Q-Learning之前,我们将它与Sarsa进行对比,
Sarsa:
Q-Learning:
由于Sarsa是用的动作价值函数,而Q-Learning则是用的最优价值函数,通过Sarsa中提到的TD Target,我们不难推到Q-Learning的TD Target,
考虑到
Q
∗
Q^*
Q∗是最优动作价值函数,因此这里不仅考虑到策略函数,还考虑了最优动作,因此得到以下公式,
最后通过蒙特卡洛近似得到最终的TD Target,
同样Q-Learning也有两种形式,
(1)表格形式
更新步骤:
需要注意的是这里的
m
a
x
a
Q
∗
(
s
t
+
1
,
a
)
max_aQ^*(s_{t+1},a)
maxaQ∗(st+1,a)不再是查询表格中的一个值,而是在表格的对应行中的最大值。
(2)神经网络形式
网络模型:
更新步骤:
5.3 Multi-Step TD target
考虑到TD target中只有t时刻的奖励,这个算法通过给更多时刻的奖励来增加TD target的可靠性。
推导如下:
和上面的推导的方法一样,进一步可以得到Multi-Step TD Target:
(1)Sarsa
(2)Q-Learning
6.价值学习的高级技巧
6.1 Experience Replay
原始的梯度下降的缺陷:
(1)经验浪费
每一个transition都称为经验,即
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
,
t
=
1
,
2
,
.
.
.
(s_t,a_t,r_t,s_{t+1}),t=1,2,...
(st,at,rt,st+1),t=1,2,...,这是因为梯度下降在每使用完一条transition更新完参数后,都会丢弃这个transition,这很明显是不好的。
(2)transition之间的相关性
相邻的transition之间是及其相似的,实验证明这种相关性是不好的。
解决方法:
设置一个Replay Buffer,里面存放了n个transition,更新时候默认删除一条最老的transition。
带有Experience Replay的TD算法参数更新:
为了更好的解决第一个缺陷,每次从Replay Buffer中随机选取多个transition求梯度,然后求平均来更新网络的参数。
6.2 Prioritized Experience Replay
由于上面的抽样是均匀抽样,即每一个transition都是同等重要的,这很明显是不合适的,因此这个算法提出了用非均匀抽样来替换均匀抽样。
该算法提供了两种非均匀抽样,分别如下所示,
从上面的两种概率,我们可以发现TD error越大,我们的抽样概率就越大。
由于不同的transition具有不同的抽样概率,会导致DQN的预测有偏差,应该相应的调整学习率,抵消不同抽样概率造成的偏差。
下面通过一张表的形式来展示每一个transition对应的抽样概率和学习率,
初始情况下,TD error设置为maximum。
6.3 Target Network & Double DQN
TD Learning使得DQN高估行动价值的原因:
下面分别介绍这两个因素造成高估的原因,
(1)The maximization
(2)Bootstrapping
为什么高估是有害的?
因为高估是非均匀的,有的action被高估一点,有的会被高估很多,这样就会造成最终决策的错误。
如何解决?
因此下面将分别介绍Target Network和Double DQN。
(1)Target Network
为了解决bootstrapping,我们使用和DQN相同结构不同参数的Target network来计算TD Target。
更新步骤:
从上图,我们不难发现DQN的参数得到了更新,而Target network的参数并没有更新,该网络参数的更新是隔一段时间更新一次,更新方式有如下两种:
(2)Double DQN
原始的TD Target:
使用Target network的:
Double DQN:
为什么Double DQN的效果最好:
6.4 Dueling Network
前面几种都是通过修改TD target来进行改进,而这个算法是通过修改DQN网络来进行改进。
首先给出最优优势函数,
通过以下推导,
我们得出下面公式,
而Dueling Network就是针对上面推出的这个公式来改进DQN的网络模型,
我们分别使用两个神经网络来近似
V
∗
V^*
V∗和
A
∗
A^*
A∗,得到网络模型如下,
这里简单说一下为什么用下式的第二个,而不使用第一个,那是由于式1存在不唯一性。
不唯一性举个例子如下所示,
而公式2就是可以很好的解决这个问题。
最后通过实验,我们发现用mean来偷换公式中的max结果会更好,如下所示,