参考资料:神经网络与深度学习
深度强化学习
1.4.深度 Q Q Q-网络
为在连续的状态和动作空间中计算值函数
Q
π
(
s
,
a
)
Q^\pi(s, a)
Qπ(s,a) ,我们可以用一个函数
Q
ϕ
(
s
,
a
)
Q_\phi(\boldsymbol{s}, \boldsymbol{a})
Qϕ(s,a) 来表示近似计算,称为值函数近似:
Q
ϕ
(
s
,
a
)
≈
Q
π
(
s
,
a
)
Q_\phi(\boldsymbol{s}, \boldsymbol{a}) \approx Q^\pi(s, a)
Qϕ(s,a)≈Qπ(s,a)
其中
s
,
a
\boldsymbol{s}, \boldsymbol{a}
s,a 分别是状态
s
s
s 和动作
a
a
a 的向量表示;函数
Q
ϕ
(
s
,
a
)
Q_\phi(\boldsymbol{s}, \boldsymbol{a})
Qϕ(s,a) 通常是一个参数为
ϕ
\phi
ϕ的函数,比如神经网络,输出为一个实数,称为 Q 网络。对于
M
M
M个离散动作而言,Q网络可相应输出相应的值函数的值:
Q
ϕ
(
s
)
=
[
Q
ϕ
(
s
,
a
1
)
⋮
Q
ϕ
(
s
,
a
M
)
]
≈
[
Q
π
(
s
,
a
1
)
⋮
Q
π
(
s
,
a
M
)
]
Q_\phi(\boldsymbol{s})=\left[\begin{array}{c} Q_\phi\left(\boldsymbol{s}, a_1\right) \\ \vdots \\ Q_\phi\left(\boldsymbol{s}, a_M\right) \end{array}\right] \approx\left[\begin{array}{c} Q^\pi\left(s, a_1\right) \\ \vdots \\ Q^\pi\left(s, a_M\right) \end{array}\right]
Qϕ(s)=
Qϕ(s,a1)⋮Qϕ(s,aM)
≈
Qπ(s,a1)⋮Qπ(s,aM)
为解决传统Q-learning在高维状态空间中无法保存完整Q表的问题,深度Q网络(Deep Q-Network,DQN)是将深度学习方法与Q-learning相结合,通过学习参数
ϕ
\phi
ϕ,利用深度神经网络来逼近Q函数。相应的损失函数为:
L
(
ϕ
)
=
E
(
s
,
a
,
r
,
s
′
)
∼
D
[
(
y
−
Q
ϕ
(
s
,
a
)
)
2
]
\mathcal{L}(\phi)=\mathbb{E}_{\left(s, a, r, s^{\prime}\right) \sim D}\left[(y-Q_{\phi}(s, a))^2\right]
L(ϕ)=E(s,a,r,s′)∼D[(y−Qϕ(s,a))2]
- ϕ \phi ϕ :当前 Q 网络参数;
- ϕ − \phi^{-} ϕ−:目标网络参数,每隔C步从 ϕ \phi ϕ 更新一次;
- D D D :经验回放缓冲池(replay buffer)。
具体执行过程为:
- 通过 ε \varepsilon ε-greedy 选择动作 a
- 执行动作 a a a ,观察 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s′)
- 将 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)存入经验回放池 D D D
- 从经验回放池 D 采样一批数据
- 计算目标值 y = r + γ max a ′ Q ( s ′ , a ′ ; ϕ − ) y=r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; \phi^{-}\right) y=r+γmaxa′Q(s′,a′;ϕ−)
- 通过梯度下降更新 Q Q Q 网络参数 ϕ \phi ϕ
- 定期更新目标网络 ϕ − \phi^{-} ϕ− (反向传播 梯度更新)
在基于值函数(即 Q Q Q-Function)的学习方法中,策略一般为确定性策略。策略优化通常都依赖于值函数(即策略被值函数的性质所决定),比如贪心策略 π ( s ) = arg max a Q ( s , a ) \pi(s)=\arg \max _a Q(s, a) π(s)=argmaxaQ(s,a) 。最优策略一般需要遍历当前状态 s 下的所有动作,并找出最优的 Q ( s , a ) Q(s, a) Q(s,a) 。当动作空间离散但是很大时,遍历求最大需要很高的时间复杂度;当动作空间是连续的并且 Q ( s , a ) Q(s, a) Q(s,a) 非凸时,也很难求解出最佳的策略.
2.基于策略函数的学习方法
强化学习的目标是学习到一个策略 π θ ( a ∣ s ) 来最大化期望回报,其中 θ 为网络参数 {\color{red}强化学习的目标是学习到一个策略 \pi_\theta(a \mid s) 来最大化期望回报,其中\theta为网络参数} 强化学习的目标是学习到一个策略πθ(a∣s)来最大化期望回报,其中θ为网络参数。一种直接的方法是在策略空间直接搜索来得到最佳策略,称为策略搜索(Policy Search)。策略搜索本质是一个优化问题,可以分为基于梯度的优化和无梯度优化。策略搜索和基于值函数的方法相比,策略搜索可以不需要值函数,直接优化策略。参数化的策略能够处理连续状态和动作,可以直接学出随机性策略。
基于梯度的策略优化,即根据策略梯度进行梯度上升以优化
π
θ
(
a
∣
s
)
\pi_\theta(a \mid s)
πθ(a∣s)中的
θ
\theta
θ(假定
π
\pi
π关于
θ
\theta
θ连续可微)。对于强化学习的目标函数:
J
(
θ
)
=
E
τ
∼
p
θ
(
τ
)
[
G
(
τ
)
]
=
E
τ
∼
p
θ
(
τ
)
[
∑
t
=
0
T
−
1
γ
t
r
t
+
1
]
\mathcal{J}(\theta)=\mathbb{E}_{\tau \sim p_\theta(\tau)}[G(\tau)]=\mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\sum_{t=0}^{T-1} \gamma^t r_{t+1}\right]
J(θ)=Eτ∼pθ(τ)[G(τ)]=Eτ∼pθ(τ)[t=0∑T−1γtrt+1]
其中
θ
\theta
θ 为策略函数的参数。
p
θ
(
τ
)
p_\theta(\tau)
pθ(τ) 为基于策略
π
θ
(
a
∣
s
)
\pi_\theta(a \mid s)
πθ(a∣s) 得到轨迹
τ
\tau
τ 的概率。其关于
θ
\theta
θ的导数为:
∂
J
(
θ
)
∂
θ
=
∂
∂
θ
∫
p
θ
(
τ
)
G
(
τ
)
d
τ
=
∫
(
∂
∂
θ
p
θ
(
τ
)
)
G
(
τ
)
d
τ
=
∫
p
θ
(
τ
)
(
1
p
θ
(
τ
)
∂
∂
θ
p
θ
(
τ
)
)
G
(
τ
)
d
τ
=
∫
p
θ
(
τ
)
[
(
∂
∂
θ
log
p
θ
(
τ
)
)
G
(
τ
)
]
d
τ
=
E
τ
∼
p
θ
(
τ
)
[
∂
∂
θ
log
p
θ
(
τ
)
G
(
τ
)
]
\begin{aligned} \frac{\partial \mathcal{J}(\theta)}{\partial \theta} & =\frac{\partial}{\partial \theta} \int p_\theta(\tau) G(\tau) \mathrm{d} \tau \\ & =\int\left(\frac{\partial}{\partial \theta} p_\theta(\tau)\right) G(\tau) \mathrm{d} \tau \\ & =\int p_\theta(\tau)\left(\frac{1}{p_\theta(\tau)} \frac{\partial}{\partial \theta} p_\theta(\tau)\right) G(\tau) \mathrm{d} \tau \\ & =\int p_\theta(\tau)\left[\left(\frac{\partial}{\partial \theta} \log p_\theta(\tau)\right) G(\tau) \right] \mathrm{d} \tau \\ & =\mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\frac{\partial}{\partial \theta} \log p_\theta(\tau) G(\tau)\right] \end{aligned}
∂θ∂J(θ)=∂θ∂∫pθ(τ)G(τ)dτ=∫(∂θ∂pθ(τ))G(τ)dτ=∫pθ(τ)(pθ(τ)1∂θ∂pθ(τ))G(τ)dτ=∫pθ(τ)[(∂θ∂logpθ(τ))G(τ)]dτ=Eτ∼pθ(τ)[∂θ∂logpθ(τ)G(τ)]
其中,第二行即莱布尼茨法则,第四行即链式法则。上式表明可通过采样轨迹(用当前策略执行多次)来估计梯度,而不需要知道轨迹分布的精确形式。参数
θ
\theta
θ 优化的方向是朝向使得
G
(
τ
)
G(\tau)
G(τ) 越大的轨迹
τ
\tau
τ 的概率
p
θ
(
τ
)
p_\theta(\tau)
pθ(τ) 也越大。
∂
∂
θ
log
p
θ
(
τ
)
\frac{\partial}{\partial \theta} \log p_\theta(\tau)
∂θ∂logpθ(τ) 可以进一步分解为:
∂
∂
θ
log
p
θ
(
τ
)
=
∂
∂
θ
log
(
p
(
s
0
)
∏
t
=
0
T
−
1
π
θ
(
a
t
∣
s
t
)
p
(
s
t
+
1
∣
s
t
,
a
t
)
)
=
∂
∂
θ
(
log
p
(
s
0
)
+
∑
t
=
0
T
−
1
log
π
θ
(
a
t
∣
s
t
)
+
∑
t
=
0
T
−
1
log
p
(
s
t
+
1
∣
s
t
,
a
t
)
)
=
∑
t
=
0
T
−
1
[
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
]
\begin{aligned} \frac{\partial}{\partial \theta} \log p_\theta(\tau) &=\frac{\partial}{\partial \theta} \log \left(p\left(s_0\right) \prod_{t=0}^{T-1} \pi_\theta\left(a_t \mid s_t\right) p\left(s_{t+1} \mid s_t, a_t\right)\right) \\ & \quad=\frac{\partial}{\partial \theta}\left(\log p\left(s_0\right)+\sum_{t=0}^{T-1} \log \pi_\theta\left(a_t \mid s_t\right)+\sum_{t=0}^{T-1} \log p\left(s_{t+1} \mid s_t, a_t\right)\right) \\ & \quad=\sum_{t=0}^{T-1} \left[ \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right) \right] \end{aligned}
∂θ∂logpθ(τ)=∂θ∂log(p(s0)t=0∏T−1πθ(at∣st)p(st+1∣st,at))=∂θ∂(logp(s0)+t=0∑T−1logπθ(at∣st)+t=0∑T−1logp(st+1∣st,at))=t=0∑T−1[∂θ∂logπθ(at∣st)]
可以看出,
∂
∂
θ
log
p
θ
(
τ
)
\frac{\partial}{\partial \theta} \log p_\theta(\tau)
∂θ∂logpθ(τ) 是和状态转移概率无关,只和策略函数相关。基于上式,策略梯度可进一步写为:
∂
J
(
θ
)
∂
θ
=
E
τ
∼
p
θ
(
τ
)
[
(
∑
t
=
0
T
−
1
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
)
G
(
τ
)
]
=
E
τ
∼
p
θ
(
τ
)
[
(
∑
t
=
0
T
−
1
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
)
(
G
(
τ
0
:
t
)
+
γ
t
G
(
τ
t
:
T
)
)
]
=
E
τ
∼
p
θ
(
τ
)
[
∑
t
=
0
T
−
1
(
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
γ
t
G
(
τ
t
:
T
)
)
]
,
\begin{aligned} \frac{\partial \mathcal{J}(\theta)}{\partial \theta} & =\mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\left(\sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right)\right) G(\tau)\right] \\ & =\mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\left(\sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right)\right)\left(G\left(\tau_{0: t}\right)+\gamma^t G\left(\tau_{t: T}\right)\right)\right] \\ & ={\color{red} \mathbb{E}_{\tau \sim p_\theta(\tau)}\left[\sum_{t=0}^{T-1}\left(\frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right) \gamma^t G\left(\tau_{t: T}\right)\right)\right] }, \end{aligned}
∂θ∂J(θ)=Eτ∼pθ(τ)[(t=0∑T−1∂θ∂logπθ(at∣st))G(τ)]=Eτ∼pθ(τ)[(t=0∑T−1∂θ∂logπθ(at∣st))(G(τ0:t)+γtG(τt:T))]=Eτ∼pθ(τ)[t=0∑T−1(∂θ∂logπθ(at∣st)γtG(τt:T))],
其中,
第二行是由于:
G
(
τ
)
=
∑
k
=
0
T
−
1
γ
k
r
k
=
(
∑
k
=
0
t
−
1
γ
k
r
k
)
+
(
∑
k
=
t
T
−
1
γ
k
r
k
)
G(\tau)=\sum_{k=0}^{T-1} \gamma^k r_k=\left(\sum_{k=0}^{t-1} \gamma^k r_k\right)+\left(\sum_{k=t}^{T-1} \gamma^k r_k\right)
G(τ)=∑k=0T−1γkrk=(∑k=0t−1γkrk)+(∑k=tT−1γkrk),其中
∑
k
=
t
T
−
1
γ
k
r
k
=
γ
t
⋅
∑
k
=
t
T
−
1
γ
k
−
t
r
k
=
γ
t
G
(
τ
t
:
T
)
\sum_{k=t}^{T-1} \gamma^k r_k=\gamma^t \cdot \sum_{k=t}^{T-1} \gamma^{k-t} r_k=\gamma^t G\left(\tau_{t: T}\right)
∑k=tT−1γkrk=γt⋅∑k=tT−1γk−trk=γtG(τt:T),故
G
(
τ
)
=
G
(
τ
0
:
t
)
+
γ
t
G
(
τ
t
:
T
)
G(\tau)=G\left(\tau_{0: t}\right)+\gamma^t G\left(\tau_{t: T}\right)
G(τ)=G(τ0:t)+γtG(τt:T)
第三行是由于:忽略
G
(
τ
0
:
t
)
G\left(\tau_{0: t}\right)
G(τ0:t) ,因为它不依赖当前动作
a
t
a_t
at ,而是和之前的动作有关。
2.1.REINFORCE算法
基于上述梯度形式(红色),期望可以通过采样的方法来近似.根据当前策略
π
θ
\pi_\theta
πθ ,通过随机游走的方式来采集多个轨迹
τ
(
1
)
,
τ
(
2
)
,
⋯
,
τ
(
N
)
\tau^{(1)}, \tau^{(2)}, \cdots, \tau^{(N)}
τ(1),τ(2),⋯,τ(N) ,其中每一条轨迹
τ
(
n
)
=
\tau^{(n)}=
τ(n)=
s
0
(
n
)
,
a
0
(
n
)
,
s
1
(
n
)
,
a
1
(
n
)
,
⋯
s_0^{(n)}, a_0^{(n)}, s_1^{(n)}, a_1^{(n)}, \cdots
s0(n),a0(n),s1(n),a1(n),⋯ 。这样,策略梯度
∂
G
(
θ
)
∂
θ
\frac{\partial \mathcal{G}(\theta)}{\partial \theta}
∂θ∂G(θ) 可以写为
∂
J
(
θ
)
∂
θ
≈
1
N
∑
n
=
1
N
(
∑
t
=
0
T
−
1
∂
∂
θ
log
π
θ
(
a
t
(
n
)
∣
s
t
(
n
)
)
γ
t
G
τ
t
:
T
(
n
)
)
\frac{\partial \mathcal{J}(\theta)}{\partial \theta} \approx \frac{1}{N} \sum_{n=1}^N\left(\sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t^{(n)} \mid s_t^{(n)}\right) \gamma^t G_{\tau_{t: T}^{(n)}}\right)
∂θ∂J(θ)≈N1n=1∑N(t=0∑T−1∂θ∂logπθ(at(n)∣st(n))γtGτt:T(n))
结合随机梯度上升算法,我们可以每次采集一条轨迹,计算每个时刻的梯度并更新参数,即REINFORCE 算法,梯度上升更新策略函数参数:
θ
←
θ
+
α
γ
t
G
(
τ
t
:
T
)
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
\theta \leftarrow \theta+\alpha \gamma^t G\left(\tau_{t: T}\right) \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right)
θ←θ+αγtG(τt:T)∂θ∂logπθ(at∣st)
2.2.带基准线的REINFORCE算法
在REINFORCE算法基础上,引入一个控制变量,减小不同采样路径间的方差。
2.3.演员-评论家算法
演员-评论家算法结合策略梯度和时序差分学习,演员是指策略函数
π
θ
(
a
∣
s
)
\pi_\theta(a \mid s)
πθ(a∣s) ,即学习一个策略来得到尽量高的回报,评论员(Critic)是指值函数
V
ϕ
(
s
)
V_\phi(s)
Vϕ(s) ,对当前策略的值函数进行估计,即评估演员的好坏。借助于值函数,演员-评论员算法可以进行单步更新参数,不需要等到回合结束才进行更新。在演员-评论员算法中的策略函数
π
θ
(
s
,
a
)
\pi_\theta(s, a)
πθ(s,a) 和值函数
V
ϕ
(
s
)
V_\phi(s)
Vϕ(s) 都是待学习的函数,需要在训练过程中同时学习。
假设从时刻
t
t
t 开始的回报
G
(
τ
t
:
T
)
G\left(\tau_{t: T}\right)
G(τt:T) 用以下公式近似计算:
G
^
(
τ
t
:
T
)
=
r
t
+
1
+
γ
V
ϕ
(
s
t
+
1
)
\hat{G}\left(\tau_{t: T}\right)=r_{t+1}+\gamma V_\phi\left(s_{t+1}\right)
G^(τt:T)=rt+1+γVϕ(st+1)
在每步更新中,分别进行策略函数
π
θ
(
s
,
a
)
\pi_\theta(s, a)
πθ(s,a) 和值函数
V
ϕ
(
s
)
V_\phi(s)
Vϕ(s) 的学习.一方面,更新参数
ϕ
\phi
ϕ 使得值函数
V
ϕ
(
s
t
)
V_\phi\left(s_t\right)
Vϕ(st) 接近于估计的真实回报
G
^
(
τ
t
:
T
)
\hat{G}\left(\tau_{t: T}\right)
G^(τt:T) ,即minimize MSE:
min
ϕ
(
G
^
(
τ
t
:
T
)
−
V
ϕ
(
s
t
)
)
2
\min _\phi\left(\hat{G}\left(\tau_{t: T}\right)-V_\phi\left(s_t\right)\right)^2
ϕmin(G^(τt:T)−Vϕ(st))2
另一方面,将值函数
V
ϕ
(
S
t
)
V_\phi\left(S_t\right)
Vϕ(St) 作为基线函数来更新参数
θ
\theta
θ ,减少策略梯度的方差,即
θ
←
θ
+
α
γ
t
(
G
^
(
τ
t
:
T
)
−
V
ϕ
(
s
t
)
)
∂
∂
θ
log
π
θ
(
a
t
∣
s
t
)
.
\theta \leftarrow \theta+\alpha \gamma^t {\color{red} \left(\hat{G}\left(\tau_{t: T}\right)-V_\phi\left(s_t\right)\right) } \frac{\partial}{\partial \theta} \log \pi_\theta\left(a_t \mid s_t\right) .
θ←θ+αγt(G^(τt:T)−Vϕ(st))∂θ∂logπθ(at∣st).
在每步更新中,演员根据当前的环境状态
s
s
s 和策略
π
θ
(
a
∣
s
)
\pi_\theta(a \mid s)
πθ(a∣s) 去执行动作
a
a
a ,环境状态变为
s
′
s^{\prime}
s′ ,并得到即时奖励
r
r
r .评论员(值函数
V
ϕ
(
s
)
V_\phi(s)
Vϕ(s) )根据环境给出的真实奖励和之前标准下的打分
(
r
+
γ
V
ϕ
(
s
′
)
)
\left(r+\gamma V_\phi\left(s^{\prime}\right)\right)
(r+γVϕ(s′)) ,来调整自己的打分标准,使得自己的评分更接近环境的真实回报.演员则跟据评论员的打分,调整自己的策略
π
θ
\pi_\theta
πθ ,争取下次做得更好.开始训练时,演员随机表演,评论员随机打分.通过不断的学习,评论员的评分越来越准,演员的动作越来越好。梯度上升更新策略函数参数与值函数参数:
在状态
s
,选择动作
a
=
π
θ
(
a
∣
s
)
执行动作
a
,得到即时奖励
r
和新状态
s
′
δ
←
r
+
γ
V
ϕ
(
s
′
)
−
V
ϕ
(
s
)
;
ϕ
←
ϕ
+
β
δ
∂
∂
ϕ
V
ϕ
(
s
)
;
−
更新值函数参数
θ
←
θ
+
α
λ
δ
∂
∂
θ
log
π
θ
(
a
∣
s
)
;
−
更新策略函数参数
λ
←
γ
λ
;
s
←
s
′
;
\begin{aligned} & 在状态 s ,选择动作 a=\pi_\theta(a \mid s) \\ & 执行动作 a,得到即时奖励 r 和新状态 s^{\prime} \\ & \delta \leftarrow r+\gamma V_\phi\left(s^{\prime}\right)-V_\phi(s) ;\\ & \phi \leftarrow \phi+\beta \delta \frac{\partial}{\partial \phi} V_\phi(s) ; -更新值函数参数\\ & \theta \leftarrow \theta+\alpha \lambda \delta \frac{\partial}{\partial \theta} \log \pi_\theta(a \mid s) ; -更新策略函数参数 \\ & \lambda \leftarrow \gamma \lambda ; \\ & s \leftarrow s^{\prime} ; \end{aligned}
在状态s,选择动作a=πθ(a∣s)执行动作a,得到即时奖励r和新状态s′δ←r+γVϕ(s′)−Vϕ(s);ϕ←ϕ+βδ∂ϕ∂Vϕ(s);−更新值函数参数θ←θ+αλδ∂θ∂logπθ(a∣s);−更新策略函数参数λ←γλ;s←s′;
算法中
λ
\lambda
λ的作用:
- 每次更新时,当前 λ \lambda λ 表示"资格迹":某个时间点策略对当前奖励的"责任";
- 初始化时 λ = 1 \lambda=1 λ=1(或其他初值),表示当前动作立即参与学习;
- 然后,随着时间推移, λ \lambda λ 会逐渐衰减;
- 这等价于对之前策略梯度的加权累加更新。