本文主要学习资料为B站视频、相关GitHub代码以及有心人的学习笔记,相关链接如下:
- 【王树森】深度强化学习(DRL)
- 王树森深度强化学习GitHub仓库
- 李宏毅深度强化学习(国语)课程(2018)
- jessie_weiqing的李宏毅DRL学习笔记
一、专业术语
Agent: 一个嵌入在环境中的能够通过Action改变环境State的系统。例如:在游戏中的马里奥。
State(S): State可以看作是Agent过去的所有Action对环境影响的集合。未来的State取决于当前的State。State空间(S)包含从过去(已知)到未来(可能)所有的State。 如果当前为时间节点为t,则从现在到过去的State均为已观测值,用小写字母表示:
s
1
,
?
?
,
s
t
s_1,\cdots,s_{t}
s1?,?,st?;未来的State因为尚未发生,因此为随机变量,用大写字母表示:
S
t
+
1
,
S
t
+
2
,
?
S_{t+1},S_{t+2},\cdots
St+1?,St+2?,?。
Action(A): Action是Agent的动作。Action空间(A)包含Agent所有可能的Action,Action的构成可以是离散集,如{上,下,左,右},也可以是连续集,如[1,100]。 如果当前为时间节点为t,则从现在到过去的Action均为已观测值,用小写字母表示:
a
1
,
?
?
,
a
t
a_1,\cdots,a_{t}
a1?,?,at?;未来的Action因为尚未发生,因此为随机变量,用大写字母表示:
A
t
+
1
,
A
t
+
2
,
?
A_{t+1},A_{t+2},\cdots
At+1?,At+2?,?。
Reward(R): Reward是Agent在特定环境下做出Action的奖励值。强化学习的目标就是让获得的Reward尽量高。 如果当前为时间节点为t,则从现在到过去的Reward均为已观测值,用小写字母表示:
r
1
,
?
?
,
r
t
r_1,\cdots,r_{t}
r1?,?,rt?;未来的Reward取决于未来的State和Action,因此为随机变量,用大写字母表示:
R
t
+
1
,
R
t
+
2
,
?
R_{t+1},R_{t+2},\cdots
Rt+1?,Rt+2?,?。
Policy function(π): 是一个条件概率函数:
π
(
a
∣
s
)
=
P
(
A
=
a
∣
S
=
s
)
π(a|s)=P(A=a|S=s)
π(a∣s)=P(A=a∣S=s)表示当观察到State为s时,做出Action为a的概率。 注:强化学习学习的就是Policy。AI可以通过Policy函数来控制Agent的Action。Policy最好是随机的。
State transition(p): 在特定环境中,通过Action(A=a)将State(S=s)转化为State(S’)。状态转移函数是一个条件概率密度函数:
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)。状态转移可以是确定的也可以是随机的,通常为随机的。状态转移的随机性来源于环境。
Environment与Agent的交互:在t时,环境会告诉Agent处于一个State(
S
=
s
t
S=s_t
S=st?),Agent做出相应的Action(
A
=
a
t
A=a_t
A=at?),环境根据Action给Agent相应的Reward(
R
=
r
t
R=r_t
R=rt?),同时环境会更新State(
S
=
s
t
+
1
S=s_{t+1}
S=st+1?),以此类推。
随机性的来源: 1.Action有随机性。通过Policy对Action进行随机抽样。 2.State transition有随机性。环境通过状态转移函数得到转移到下一状态的概率并进行随机抽取。
Trajectory: 轨迹,表示每一步的(State,Action,Reward)。
以下为重要概念:
Return(U): aka cumulative future reward. 表示未来的累计奖励:
U
t
=
R
t
+
R
t
+
1
+
R
t
+
2
+
R
t
+
3
+
?
U_t=R_t+R_{t+1}+R_{t+2}+R_{t+3}+\cdots
Ut?=Rt?+Rt+1?+Rt+2?+Rt+3?+?由于未来的奖励的重要性低于当前的奖励,因此强化学习中一般会使用Discounted return(aka cumulative discounted future reward)。定义discounted rate(γ∈[0,1],超参数),若未来的奖励与现在同等重要则γ=1。Discounted return表示为:
U
t
=
R
t
+
γ
R
t
+
1
+
γ
2
R
t
+
2
+
γ
3
R
t
+
3
+
?
U_t=R_t+γR_{t+1}+γ^2R_{t+2}+γ^3R_{t+3}+\cdots
Ut?=Rt?+γRt+1?+γ2Rt+2?+γ3Rt+3?+?
Action-value function(
Q
π
Q_π
Qπ?):
Q
π
(
s
t
,
a
t
)
Q_π(s_t,a_t)
Qπ?(st?,at?)测量了,在给定Policy(π)与State(
s
t
s_t
st?)的情况下,Action(
a
t
a_t
at?)的价值。用于比较不同Action的优劣。通过求期望的运算可以将未来的随机变量消除,则可以通过给定的π与当前的状态
s
t
s_t
st?决定动作
a
t
a_t
at?的价值。
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
?
Q^*
Q?): 最优动作价值函数是使得
Q
π
(
s
t
,
a
t
)
Q_π(s_t,a_t)
Qπ?(st?,at?)最大的
Q
π
Q_π
Qπ?。主要用于判断动作的好坏。
Q
?
(
s
t
,
a
t
)
=
max
?
π
Q
π
(
s
t
,
a
t
)
Q^*(s_t,a_t)=\max \limits_{π}Q_π(s_t,a_t)
Q?(st?,at?)=πmax?Qπ?(st?,at?)
State-value function(
V
π
V_π
Vπ?): 状态价值函数测量了,在给定Policy(π)情况下,State(
s
t
s_t
st?)的价值(好坏程度)。可用于判断当前局势的好坏。通过求期望的运算可以将未来的动作(随机变量A)消除,则可以通过给定的π决定当前状态
s
t
s_t
st?的价值。
V
π
(
s
t
)
=
E
A
[
Q
π
(
s
t
,
A
)
]
V_π(s_t)=E_A[Q_π(s_t,A)]
Vπ?(st?)=EA?[Qπ?(st?,A)]注:
V
π
V_π
Vπ?能够评价π的好坏,如果π越好
E
S
[
V
π
(
S
)
]
E_S[V_π(S)]
ES?[Vπ?(S)]越大。
小结:
强化学习的目的就是如何控制Agent,让Agent怎么基于当前状态s做出最优的动作a,争取最终得到最多的奖励r。强化学习通常让AI学习Policy function(
π
(
a
∣
s
)
π(a|s)
π(a∣s))或者学习Optimal action-value function(
Q
?
(
s
,
a
)
Q^*(s,a)
Q?(s,a))。前者通过输入当前状态s,算出每一个动作的概率π,进而进行抽样得到动作a;后者则可直接判断当前状态s下所有动作的好坏,进而选出最优的动作a。
二、Value-based learning 价值学习
Deep Q-Network(DQN)
目标:最大化未来的Reward 问题:根据
Q
?
Q^*
Q?得到每一个动作的平均回报,选择平均汇报最高的动作a 挑战:
Q
?
Q^*
Q?难以直接得到,因此价值学习的目的就是获得近似的
Q
?
Q^*
Q?函数 DQN:用神经网络
Q
(
s
,
a
;
w
)
Q(s,a;\bm{w})
Q(s,a;w)近似
Q
?
(
s
,
a
)
Q^*(s,a)
Q?(s,a)函数。DQN的输出是对每一个动作的打分。 训练: TD算法,无需完成全部任务也能够更新模型的参数。核心思想就是让TD error尽可能等于0。在深度强化学习中, 有如下的公式:
Q
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
?
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
Q(s_t,a_t;\bm{w})≈r_t+γ \cdot Q(s_{t+1},a_{t+1};\bm{w})
Q(st?,at?;w)≈rt?+γ?Q(st+1?,at+1?;w)其中,左式是从t时刻看的,右式是从t+1时刻看的。 具体步骤:
- 已知预测(DQN):
Q
(
s
t
,
a
t
;
w
)
Q(s_t,a_t;\bm{w})
Q(st?,at?;w)
- TD target:
y
t
=
r
t
+
γ
?
Q
(
s
t
+
1
,
a
t
+
1
;
w
)
=
r
t
+
γ
?
max
?
a
Q
(
s
t
+
1
,
a
;
w
)
y_t=r_t+γ \cdot Q(s_{t+1},a_{t+1};\bm{w})=r_t+γ \cdot \max \limits_{a} Q(s_{t+1},a_{};\bm{w})
yt?=rt?+γ?Q(st+1?,at+1?;w)=rt?+γ?amax?Q(st+1?,a?;w)
- Loss:
L
t
=
1
2
[
Q
(
s
t
,
a
t
;
w
)
?
y
t
]
2
L_t=\frac{1}{2} [Q(s_t,a_t;\bm{w})-y_t]^2
Lt?=21?[Q(st?,at?;w)?yt?]2
- 梯度下降:
w
t
+
1
=
w
t
?
α
?
?
L
t
?
w
∣
w
=
w
t
\bm{w_{t+1}}=\bm{w_t}-α \cdot \frac{?L_t}{?\bm{w}} |\bm{w}=\bm{w_t}
wt+1?=wt??α??w?Lt??∣w=wt?
三、Policy-based learning 策略学习
Policy函数π会根据输入的状态s输出每一个可能动作的概率值。Agent就可以根据概率对动作进行抽样。只要有一个好的Policy函数,就可以自动控制Agent的动作了。但Policy函数有时很难直接得到,因此仍然可以选择使用神经网络去近似Policy函数。 用神经网络
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ)近似
π
(
a
∣
s
)
π(a|s)
π(a∣s)函数。其中,
θ
\bm{θ}
θ为神经网络的参数,随机初始化,通过不断学习进行改进。 将
V
π
(
s
t
)
V_π(s_t)
Vπ?(st?)中的
π
π
π替换成神经网络
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ),则
V
π
(
s
t
)
V_π(s_t)
Vπ?(st?)可以近似写成:$
V
π
(
s
;
θ
)
=
∑
a
π
(
a
∣
s
;
θ
)
?
Q
π
(
s
,
a
)
V_π(s;\bm{θ})=\sum_{a} π(a|s;\bm{θ}) \cdot Q_π(s,a)
Vπ?(s;θ)=a∑?π(a∣s;θ)?Qπ?(s,a)该函数可用于评价状态s与策略网络的好坏。给定状态s,策略网络越好则
V
π
(
s
;
θ
)
V_π(s;\bm{θ})
Vπ?(s;θ)的值越大。优化策略网络的方法为改进
θ
\bm{θ}
θ。因此,可以通过对状态S求期望进而消除随机变量S,得到关于
θ
\bm{θ}
θ的函数:
J
(
θ
)
=
E
S
[
V
(
S
;
θ
)
]
J(\bm{θ})=E_S[V(S;\bm{θ})]
J(θ)=ES?[V(S;θ)]该函数只用于评价策略网络的好坏。
Policy gradient ascent
策略梯度上升法是改进
θ
\bm{θ}
θ的方法之一,其主要步骤如下:
- 观测到状态s
- 梯度上升更新:
θ
←
θ
+
β
?
?
V
(
s
;
θ
)
?
θ
\bm{θ} \gets \bm{θ}+β \cdot \frac{?V(s;\bm{θ})}{?\bm{θ}}
θ←θ+β??θ?V(s;θ)?,其中
?
V
(
s
;
θ
)
?
θ
\frac{?V(s;\bm{θ})}{?\bm{θ}}
?θ?V(s;θ)?为策略梯度(Policy gradient)
Policy gradient 策略梯度
策略梯度的两种近似形式:
Form 1:
?
V
(
s
;
θ
)
?
θ
=
∑
a
?
π
(
a
∣
s
;
θ
)
?
θ
?
Q
π
(
s
,
a
)
\frac{?V(s;\bm{θ})}{?\bm{θ}}=\sum_{a} \frac{?π(a|s;\bm{θ})}{?\bm{θ}} \cdot Q_π(s,a)
?θ?V(s;θ)?=∑a??θ?π(a∣s;θ)??Qπ?(s,a)
Form 2:
?
V
(
s
;
θ
)
?
θ
=
E
A
[
?
l
o
g
π
(
A
∣
s
,
θ
)
?
θ
?
Q
π
(
s
,
A
)
]
\frac{?V(s;\bm{θ})}{?\bm{θ}}=E_A[\frac{? log π(A|s,\bm{θ})}{?\bm{θ}} \cdot Q_π(s,A)]
?θ?V(s;θ)?=EA?[?θ?logπ(A∣s,θ)??Qπ?(s,A)]
Form 1适合action space A为离散的;Form 2适合连续的动作。 Form 2的期望是通过蒙特卡洛近似计算出来的,具体步骤如下:
- 随机抽样得到一个动作
a
^
\hat{a}
a^,这是根据概率函数
π
(
a
∣
s
;
θ
)
π(a|s;\bm{θ})
π(a∣s;θ)抽取的。
- 将需要求期望的式子记为
g
(
a
^
,
θ
)
=
?
l
o
g
π
(
a
^
∣
s
,
θ
)
?
θ
?
Q
π
(
s
,
a
^
)
g(\hat{a},\bm{θ})=\frac{? log π(\hat{a}|s,\bm{θ})}{?\bm{θ}} \cdot Q_π(s,\hat{a})
g(a^,θ)=?θ?logπ(a^∣s,θ)??Qπ?(s,a^) ,由于
a
^
\hat{a}
a^是一个确定的数,因此直接带入计算即可。
由于
E
[
g
(
A
,
θ
)
]
=
?
V
(
s
;
θ
)
?
θ
E[g(A,\bm{θ})]=\frac{?V(s;\bm{θ})}{?\bm{θ}}
E[g(A,θ)]=?θ?V(s;θ)?,因此
g
(
a
^
,
θ
)
g(\hat{a},\bm{θ})
g(a^,θ)是
?
V
(
s
;
θ
)
?
θ
\frac{?V(s;\bm{θ})}{?\bm{θ}}
?θ?V(s;θ)?的无偏估计。 - 蒙特卡洛近似,即使用
g
(
a
^
,
θ
)
g(\hat{a},\bm{θ})
g(a^,θ)近似
?
V
(
s
;
θ
)
?
θ
\frac{?V(s;\bm{θ})}{?\bm{θ}}
?θ?V(s;θ)?
- 这个近似也可以用于离散的动作
算法
- 观察到当前状态
s
t
s_t
st?
- 根据
π
(
?
∣
s
t
;
θ
t
)
π(\cdot|s_t;\bm{θ_t})
π(?∣st?;θt?),随机抽样得到一个动作
a
t
a_t
at?
- 计算动作价值函数的值,结果记作:
q
t
≈
Q
π
(
s
t
,
a
t
)
q_t≈Q_π(s_t,a_t)
qt?≈Qπ?(st?,at?)
- 计算策略网络的梯度:
d
θ
,
t
=
?
l
o
g
π
(
a
t
∣
s
t
,
θ
)
?
θ
∣
θ
=
θ
t
\bm{d}_{\bm{θ},t}=\frac{? log π(a_t|s_t,\bm{θ})}{?\bm{θ}} |\bm{θ}=\bm{θ_t}
dθ,t?=?θ?logπ(at?∣st?,θ)?∣θ=θt?
- 蒙特卡洛近似策略梯度:
g
(
a
t
,
θ
t
)
=
q
t
?
d
θ
,
t
\bm{g}(a_t,\bm{θ}_t)=q_t \cdot \bm{d}_{\bm{θ},t}
g(at?,θt?)=qt??dθ,t?
- 更新策略网络参数:
θ
t
+
1
←
θ
t
+
β
?
g
(
a
t
,
θ
t
)
\bm{θ}_{t+1} \gets \bm{θ}_t+β \cdot \bm{g}(a_t,\bm{θ}_t)
θt+1?←θt?+β?g(at?,θt?)
算法第三步,近似计算
q
t
q_t
qt?的方法有两个:
- Reinforce算法:记录一轮游戏的Trajectory,得到
u
t
u_t
ut?,去近似
Q
π
(
s
t
,
a
t
)
Q_π(s_t,a_t)
Qπ?(st?,at?),则
q
t
=
u
t
q_t=u_t
qt?=ut?
- 用过另一个神经网络近似
Q
π
(
s
t
,
a
t
)
Q_π(s_t,a_t)
Qπ?(st?,at?)
三、
|