深度强化学习基础
三种基本的机器学习方法。
- 监督学习:是从外部监督者提供的带标注训练集中进行学习。 (任务驱动型)
- 非监督学习:是一个典型的寻找未标注数据中隐含结构的过程。 (数据驱动型)
- 强化学习 更偏重于智能体与环境的交互, 这带来了一个独有的挑战 ——“试错(exploration)”与“开发(exploitation)”之间的折中权衡,智能体必须开发已有的经验来获取收益,同时也要进行试探,使得未来可以获得更好的动作选择空间。 (从错误中学习)
强化学习主要有以下几个特点:
- 试错学习:强化学习一般没有直接的指导信息,Agent 要以不断与 Environment 进行交互,通过试错的方式来获得最佳策略(Policy)。
- 延迟回报:强化学习的指导信息很少,而且往往是在事后(最后一个State)才给出的。比如 围棋中只有到了最后才能知道胜负。
基本概念
大写字母为观测量,小写字母表示观测量的值
-
Random Variable (X)
随机事件造成的结果。用大写字母表示随机变量,小写字母表示观测值 -
Probability Density Function
概率密度函数,随机变量在某个确定的取值点附近的可能性 -
state、action、agent
现在的状态state,动作action,动作主体agent, -
policy (π)
根据观测到状态做出决策来决定agent运动,是一个概率密度函数
Policy function π: π ( a ∣ s ) = P ( A = a ∣ S = s ) π(a|s)=P(A=a|S=s) π(a∣s)=P(A=a∣S=s) -
reward (R)
强化学习的目标是奖励总和尽量高 -
state transition
old state ——action——> new state
状态转移是随机的,随机性来源于环境
可以用一个条件概率密度函数表示: 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) 观测当前状态s以及动作a输出状态变成s’的概率
整个轨迹(state,action,reward)trajectory:s1,a1,r1,s2,a2,r2,……,sT,aT,rT
-
return
回报/未来的累计奖励: 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}+…… Ut=Rt+Rt+1+Rt+2+Rt+3+……
Ut是随机变量,依赖于未来的状态和动作,在t时刻不能预知Ut的值 -
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}+…… Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+……,因此其值与未来的action和state都有关但是不能预知,可以通过期望预测也就是Qπ -
Action-value function
动作价值函数: 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),对动作和状态求期望,可以判断处在状态s时动作a好不好。不同的policy π会使Qπ的值不同
最优动作价值函数:使得期望最大的policy π, 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),这样Q*也就与π无关了。选出的是Q值最高下的action -
State-value function
状态价值函数: 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),把A当变量对A求期望,判断当前局势是好是坏
还可以评价π函数好坏,π函数越好,Vπ的期望就越大
倒立摆示例
import gym
env = gym.make('CartPole-v1', render_mode = "human")
state = env.reset()
for t in range(100):
env.render()
print(state)
action = env.action_space.sample()
state, reward, done, info, _ = env.step(action)
action = env.action_space.sample()
if done:
print('Finished')
break
env.close()
注意新版gym改动较大,CartPole-v0已弃用,必须设置mode,以及step返回参数由四个变为五个等版本问题
价值学习
- Deep Q-Network (DQN)
价值学习目的是学习一个函数来近似Q*(s,a),DQN是一个神经网络函数,神经网络Q(s,a;w)来接近Q*(s,a)
state→卷积层→特征向量→全连接层→输出向量
- Temporal Different (TD) Learning
模型预测q=Q(w)和真实值y之前有损失,损失L= 1 2 ( q − y ) 2 \frac{1}{2}(q-y)^2 21(q−y)2,求导化简后得到梯度 ∂ L ∂ w = ( q − y ) ∂ Q ( w ) ∂ w \frac{\partial L}{\partial w}=(q-y)\frac{\partial Q(w)}{\partial w} ∂w∂L=(q−y)∂w∂Q(w),就可以利用梯度下降来更新模型参数了 w t + 1 = w t − α ∂ L ∂ w ∣ w = w t w_{t+1}=w_t-α\frac{\partial L}{\partial w}|_{w=w_t} wt+1=wt−α∂w∂L∣w=wt- TD target
模型最初给一个预测,在运行一段后有一个实际的值y,再此值基础上估计后半截的预测值Q(w),实际值再加上后半截的预测值就是TD target,TD error是L= 1 2 ( Q ( w ) − y ) 2 \frac{1}{2}(Q(w)-y)^2 21(Q(w)−y)2,TD算法尽量让TD error接近0。预测-TD traget=TD error - TD算法中需要Q(st,at;w)≈rt+Q(st+1,at+1;w),左边右边各一项是预测值,右边还有一项观测的实际值。 U t = R t + γ U t + 1 U_t=R_t+γU_{t+1} Ut=Rt+γUt+1也同理可以利用TD算法
- TD target
利用TD算法训练DQN
y
t
=
r
t
+
γ
m
a
x
a
Q
(
s
t
+
1
,
a
;
w
t
)
,
L
t
=
1
2
(
Q
(
s
t
,
a
t
;
w
)
−
y
t
)
2
,
w
t
+
1
=
w
t
−
α
∂
L
t
∂
w
∣
w
=
w
t
y_t=r_t+γmax_aQ(s_{t+1},a;w_t), L_t=\frac{1}{2}(Q(s_t,a_t;w)-y_t)^2 , w_{t+1}=w_t-α\frac{\partial L_t}{\partial w}|_{w=w_t}
yt=rt+γmaxaQ(st+1,a;wt),Lt=21(Q(st,at;w)−yt)2,wt+1=wt−α∂w∂Lt∣w=wt
整体过程:(1)观测到当前状态
S
t
=
s
t
S_t=s_t
St=st和动作
A
t
=
a
t
A_t=a_t
At=at
→(2)预测
q
t
=
Q
(
s
t
,
a
t
;
w
)
q_t=Q(s_t,a_t;w)
qt=Q(st,at;w)
→(3)求导得
d
t
=
∂
Q
(
s
t
,
a
t
;
w
)
∂
w
d_t=\frac{\partial Q(s_t,a_t;w)}{\partial w}
dt=∂w∂Q(st,at;w)→(4)获得st+1和rt→(5)求TD target
y
t
=
r
t
+
γ
m
a
x
a
Q
(
s
t
+
1
,
a
;
w
t
)
y_t=r_t+γmax_aQ(s_{t+1},a;w_t)
yt=rt+γmaxaQ(st+1,a;wt)→(6)梯度下降
w
t
+
1
=
w
t
−
α
(
q
t
−
y
t
)
d
t
w_{t+1}=w_t-α(q_t-y_t)d_t
wt+1=wt−α(qt−yt)dt
策略学习
利用一个神经网络来近似策略函数——policy network:π(a|s;θ),θ是神经网络的参数
π概率密度函数,因此所有的可能概率和为1。激活函数Softmax保证输出都是正数且加和为1
用神经网络替换π函数: V ( s ; θ ) = ∑ a π ( a ∣ s ; θ ) ⋅ Q π ( s , a ) V(s;θ)=\sum_aπ(a|s;θ)·Q_π(s,a) V(s;θ)=∑aπ(a∣s;θ)⋅Qπ(s,a)。V可以评价状态s和策略网络的好坏,越好V值越大,通过改进θ使得V值越大→定义 J ( θ ) = E S [ V ( S ; θ ) ] J(θ)=E_S[V(S;θ)] J(θ)=ES[V(S;θ)]
- policy gradient
梯度 ∂ V ( s ; θ ) ∂ θ \frac{\partial V(s;θ)}{\partial θ} ∂θ∂V(s;θ),梯度上升 θ = θ + β ⋅ ∂ V ( s ; θ ) ∂ θ θ=θ+β·\frac{\partial V(s;θ)}{\partial θ} θ=θ+β⋅∂θ∂V(s;θ)
简化梯度(假设Qπ不依赖于θ)→ F o r m 1 : ∂ V ( s ; θ ) ∂ θ = ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ) Form\ 1:\frac{\partial V(s;θ)}{\partial θ}=\sum_a\frac{\partial π(a|s;θ)}{\partial θ}·Q_π(s,a) Form 1:∂θ∂V(s;θ)=a∑∂θ∂π(a∣s;θ)⋅Qπ(s,a)适用于离散,利用蒙特卡洛近似→ F o r m 2 : = ∑ a π ( a ∣ s ; θ ) ⋅ ∂ l o g π ( a ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ) = E A [ ∂ l o g π ( A ∣ s ; θ ) ∂ θ ⋅ Q π ( s , A ) ] Form\ 2:=\sum_aπ(a|s;θ)·\frac{\partial log π(a|s;θ)}{\partial θ}·Q_π(s,a)=E_A[\frac{\partial log π(A|s;θ)}{\partial θ}·Q_π(s,A)] Form 2:=a∑π(a∣s;θ)⋅∂θ∂logπ(a∣s;θ)⋅Qπ(s,a)=EA[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]
使用Form 1:f(a,θ)= ∂ π ( a ∣ s ; θ ) ∂ θ ⋅ Q π ( s , a ) \frac{\partial π(a|s;θ)}{\partial θ}·Q_π(s,a) ∂θ∂π(a∣s;θ)⋅Qπ(s,a) 对f(a,θ)所有可能的a求和
对于连续的情况使用Form 2,神经网络无法积分,利用蒙特卡洛近似:随机抽一个 a ^ \hat a a^,然后计算 g ( a ^ , θ ) = ∂ l o g π ( A ∣ s ; θ ) ∂ θ ⋅ Q π ( s , A ) g(\hat a,θ)=\frac{\partial log π(A|s;θ)}{\partial θ}·Q_π(s,A) g(a^,θ)=∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)
整体过程:(1)观测到st,根据π(·|s;θ))随机抽样at
→(2)计算
q
t
≈
Q
π
(
s
t
,
a
t
)
q_t≈Q_π(s_t,a_t)
qt≈Qπ(st,at)
→(3)对策略网络求导
d
θ
,
t
=
∂
π
(
a
∣
s
;
θ
)
∂
θ
∣
θ
=
θ
t
d_{θ,t}=\frac{\partial π(a|s;θ)}{\partial θ}|θ=θ_t
dθ,t=∂θ∂π(a∣s;θ)∣θ=θt→(4)近似算策略梯度
g
(
a
t
,
θ
t
)
=
q
t
⋅
d
θ
,
t
g(a_t,θ_t)=q_t·d_{θ,t}
g(at,θt)=qt⋅dθ,t
→(5)更新θ:
θ
t
+
1
=
θ
t
+
β
⋅
g
(
a
t
,
θ
t
)
θ_{t+1}=θ_t+β·g(a_t,θ_t)
θt+1=θt+β⋅g(at,θt)
Qπ无法计算,所以需要近似来求qt
- reinforce:用策略网络控制先运行完整个游戏,然后记录轨迹s1,a1,r1,s2,a2,r2,……,sT,aT,rT ,利用 u t = ∑ k = t T γ k − t r k u_t=\sum^T_{k=t}γ^{k-t}r_k ut=∑k=tTγk−trk求所有奖励的加权求和,因为 Q π ( s t , a t ) = E [ U t ] Q_π(s_t,a_t)=E[U_t] Qπ(st,at)=E[Ut],利用Ut的观测值ut来近似qt。需要先玩完一遍更新策略网络后才能计算
- actor-critic:利用一个神经网络来求近似
Actor-Critic Methods
actor——用策略网络π(a|s;θ)来近似策略函数π(a|s),决策由策略网络做。
critic——用价值网络q(s,a;w)来近似价值函数Qπ(s,a),不做决策但是可以判断决策好坏
价值网络
-
V
(
s
;
θ
,
w
)
=
∑
a
π
(
a
∣
s
;
θ
)
⋅
q
(
s
,
a
;
w
)
V(s;θ,w)=\sum_aπ(a|s;θ)·q(s,a;w)
V(s;θ,w)=∑aπ(a∣s;θ)⋅q(s,a;w)
更新θ来让V的值增加,学习π时监督由q完成;学习q是为了让q的值更接近真实值
更新:state→根据π(·|st;θt)随机抽样at→根据at有st+1和rt→TD算法更新价值网络的w→policy gradient更新策略网络的θ- 利用TD更新q:计算 q ( s t , a t ; w t ) q(s_t,a_t;w_t) q(st,at;wt)和 q ( s t + 1 , a t + 1 ; w t + 1 ) q(s_{t+1},a_{t+1};w_{t+1}) q(st+1,at+1;wt+1) → TD target y t = r t + γ q ( s t + 1 , a t + 1 ; w t + 1 ) y_t=r_t+γq(s_{t+1},a_{t+1};w_{t+1}) yt=rt+γq(st+1,at+1;wt+1) → Loss L t = 1 2 ( Q ( s t , a t ; w ) − y t ) 2 L_t=\frac{1}{2}(Q(s_t,a_t;w)-y_t)^2 Lt=21(Q(st,at;w)−yt)2 → 梯度下降 w t + 1 = w t − α ∂ L t ∂ w ∣ w = w t w_{t+1}=w_t-α\frac{\partial L_t}{\partial w}|_{w=w_t} wt+1=wt−α∂w∂Lt∣w=wt
- 策略梯度更新π:根据π(·|st;θt)随机抽样a → θ t + 1 = θ t + β ⋅ g ( a t , θ t ) θ_{t+1}=θ_t+β·g(a_t,θ_t) θt+1=θt+β⋅g(at,θt)
整体过程:(1)观测到st,根据π(·|st;θt)随机抽样at
→(2)执行at后得到st+1和rt
→(3)随机抽样
a
^
t
+
1
\hat a_{t+1}
a^t+1~
π
(
⋅
∣
s
t
+
1
;
θ
t
)
π(·|s_{t+1};θ_t)
π(⋅∣st+1;θt) 这个
a
^
t
+
1
\hat a_{t+1}
a^t+1只是为了计算q不是真实做出的动作
→(4)
q
t
=
q
(
s
t
,
a
t
;
w
t
)
q_t=q(s_t,a_t;w_t)
qt=q(st,at;wt),
q
t
+
1
=
q
(
s
t
+
1
,
a
t
+
1
;
w
t
)
q_{t+1}=q(s_{t+1},a_{t+1};w_t)
qt+1=q(st+1,at+1;wt)
→(5)TD error
δ
t
=
q
t
−
(
r
t
+
γ
⋅
q
t
+
1
)
δ_t=q_t-(r_t+γ·q_{t+1})
δt=qt−(rt+γ⋅qt+1)
→(6)价值网络求导
d
w
,
t
=
∂
q
(
s
t
,
a
t
;
w
)
∂
w
∣
w
=
w
t
d_{w,t}=\frac{\partial q(s_t,a_t;w)}{\partial w}|w=w_t
dw,t=∂w∂q(st,at;w)∣w=wt→(7)更新
w
t
+
1
=
w
t
−
α
⋅
δ
t
⋅
d
w
,
t
w_{t+1}=w_t-α·δ_t·d_{w,t}
wt+1=wt−α⋅δt⋅dw,t
→(8)策略网络求导
d
θ
,
t
=
∂
l
o
g
π
(
a
t
∣
s
t
;
θ
)
∂
θ
∣
θ
=
θ
t
d_{θ,t}=\frac{\partial logπ(a_t|s_t;θ)}{\partial θ}|θ=θ_t
dθ,t=∂θ∂logπ(at∣st;θ)∣θ=θt→(9)更新θ:
θ
t
+
1
=
θ
t
+
β
⋅
q
t
⋅
d
θ
,
t
θ_{t+1}=θ_t+β·q_t·d_{θ,t}
θt+1=θt+β⋅qt⋅dθ,t 也可以用
θ
t
+
1
=
θ
t
+
β
⋅
δ
t
⋅
d
θ
,
t
θ_{t+1}=θ_t+β·δ_t·d_{θ,t}
θt+1=θt+β⋅δt⋅dθ,t (Policy Gradient with Baseline)
TD-Learning
Sarsa
学习Qπ用的
折扣回报
U
t
=
R
t
+
γ
R
t
+
1
+
γ
2
R
t
+
2
+
γ
3
R
t
+
3
+
…
…
→
U
t
=
R
t
+
γ
U
t
+
1
U_t=R_t+γR_{t+1}+γ^2R_{t+2}+γ^3R_{t+3}+……→U_t=R_t+γU_{t+1}
Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+……→Ut=Rt+γUt+1
Q
π
(
s
t
∣
a
t
)
=
E
[
R
t
+
γ
Q
π
(
S
t
+
1
∣
A
t
+
1
)
)
Q_π(s_t|a_t)=E[R_t+γQ_π(S_{t+1}|A_{t+1}))
Qπ(st∣at)=E[Rt+γQπ(St+1∣At+1)) 做蒙特卡洛近似
- 表格形式Sarsa
观测到一个transition ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) → a t + 1 a_{t+1} at+1~ π ( ⋅ ∣ s t + 1 ; θ t ) π(·|s_{t+1};θ_t) π(⋅∣st+1;θt) → TD target y t = r t + γ Q π ( S t + 1 ∣ A t + 1 ) y_t=r_t+γQ_π(S_{t+1}|A_{t+1}) yt=rt+γQπ(St+1∣At+1),查表格得到Qπ → TD error δ t = Q π ( s t ∣ a t ) − y t δ_t=Q_π(s_t|a_t)-y_t δt=Qπ(st∣at)−yt → 更新 Q π ( s t ∣ a t ) ← Q π ( s t ∣ a t ) − α ⋅ δ t Q_π(s_t|a_t) ← Q_π(s_t|a_t)-α·δ_t Qπ(st∣at)←Qπ(st∣at)−α⋅δt
Q-Learning
学习 Q* 用的
与Sarsa类似,TD target: y t = r t + γ ⋅ max a Q ∗ ( s t + 1 ∣ a ) y_t=r_t+γ·\max_a Q^*(s_{t+1}|a) yt=rt+γ⋅maxaQ∗(st+1∣a)
多智能体强化学习(MARL)
-
n agents
有四种关系:Fully cooperative、Fully competitive、Mixed cooperative & competitive、Self-interested -
state——S
-
Ai——i-th agents’ action
-
状态转移函数
p ( s ′ ∣ a 1 , ⋅ ⋅ ⋅ , a n ) = P ( S ′ = s ′ ∣ S = s , A 1 = a 1 , ⋅ ⋅ ⋅ , A n = a n ) p(s'|a^1,···,a^n)=P(S'=s'|S=s,A^1=a^1,···,A^n=a^n) p(s′∣a1,⋅⋅⋅,an)=P(S′=s′∣S=s,A1=a1,⋅⋅⋅,An=an) ,每一个agent的动作都会影响下一个状态S’。是一个概率密度函数 -
rewards
Ri——i-th agents’ reward。合作R相等,竞争 R 1 ∝ − R 2 R^1∝-R^2 R1∝−R2 -
returns R t i R^i_t Rti
Return: U t i = R t i + R t + 1 i + R t + 2 i + R t + 3 i + ⋅ ⋅ ⋅ U^i_t=R^i_t+R^i_{t+1}+R^i_{t+2}+R^i_{t+3}+··· Uti=Rti+Rt+1i+Rt+2i+Rt+3i+⋅⋅⋅
Discounted return: U t i = R t i + γ R t + 1 i + γ 2 R t + 2 i + γ 3 R t + 3 i + ⋅ ⋅ ⋅ U^i_t=R^i_t+γR^i_{t+1}+γ^2R^i_{t+2}+γ^3R^i_{t+3}+··· Uti=Rti+γRt+1i+γ2Rt+2i+γ3Rt+3i+⋅⋅⋅ ,因此依赖于t时刻开始所有的state和action -
Policy Network: π ( a i ∣ s ; θ i ) π(a^i|s;θ^i) π(ai∣s;θi)
-
State-value Function
V i ( s t ; θ 1 , ⋅ ⋅ ⋅ , θ n ) = E [ U t i ∣ S t = s t ] V^i(s_t;θ^1,···,θ^n)=E[U^i_t|S_t=s_t] Vi(st;θ1,⋅⋅⋅,θn)=E[Uti∣St=st]
Convergence
Nash Equilibrium:其它所有agent不改变策略,一个agent单独改变策略无法提高回报。Multi-Agent下每个agent以最优方式运行,形成Nash均衡就算收敛
Multi-Agent通信方式
Centralized & Decentralized
Partial observation:局部观测oi≠s
Full observation:o1=···=on=s
-
Fully decentralized
agent之间独立, π ( a i ∣ o i ; θ i ) π(a^i|o^i;θ^i) π(ai∣oi;θi)(actor), q ( o i , a i ; w i ) q(o^i,a^i;w^i) q(oi,ai;wi)(critic),利用single-agent来算 -
Fully centralized
central controller掌握所有agent信息并控制,agent自己无策略网络不做决策。中央训练出n个网络 π ( a i ∣ o 1 , ⋅ ⋅ ⋅ , o n ; θ i ) π(a^i|o^1,···,o^n;θ^i) π(ai∣o1,⋅⋅⋅,on;θi) ,每个策略网络结构可能相同,但参数不一定相同,运行时agent将 o i o^i oi传给中央,中央再传决策给agent
a= [ a 1 , a 2 , ⋅ ⋅ ⋅ , a n ] [a^1,a^2,···,a^n] [a1,a2,⋅⋅⋅,an],o= [ o 1 , o 2 , ⋅ ⋅ ⋅ , o n ] [o^1,o^2,···,o^n] [o1,o2,⋅⋅⋅,on], π ( a i ∣ o ; θ i ) π(a^i|o;θ^i) π(ai∣o;θi)(actor), q ( o i , a ; w i ) q(o^i,a;w^i) q(oi,a;wi)(critic) -
Centralized training with decentralized execution
central controller只在训练时起作用,训练结束后agent自己决策