学习目标:
深入了解马尔科夫决策过程(MDP),包含TD算法、Q学习算法、SARSA算法、多步TD目标、经验回放、高估问题、对决网络、噪声网络。基础部分见:强化学习 马尔科夫决策过程(价值迭代、策略迭代、雅克比迭代、蒙特卡洛)
学习内容:
0.基础符号
奖励:一局游戏中从开始到结束的所有奖励
R
1
,
.
.
.
,
R
t
,
.
.
.
,
R
n
.
R_1,...,R_t,...,R_n.
R1,...,Rt,...,Rn.
折扣率:
γ
∈
[
0
,
1
]
\gamma ∈[0,1]
γ∈[0,1]
折扣回报:
U
t
=
R
t
+
γ
⋅
R
t
+
1
+
γ
2
⋅
R
t
+
2
+
.
.
.
+
γ
n
−
t
⋅
R
n
U_t=R_t+\gamma \cdot R_{t+1}+\gamma^2\cdot R_{t+2}+...+\gamma^{n-t}\cdot R_{n}
Ut=Rt+γ⋅Rt+1+γ2⋅Rt+2+...+γn−t⋅Rn
动作价值函数:
Q
π
(
s
t
,
a
t
)
=
E
[
U
t
∣
S
t
=
s
t
,
A
t
=
a
t
]
Q_\pi(s_t,a_t)=\mathbb{E}[U_t|S_t=s_t,A_t=a_t]
Qπ(st,at)=E[Ut∣St=st,At=at]
最有动作价值函数:已知
s
t
s_t
st和
a
t
a_t
at,不论未来采取什么样的策略
π
\pi
π,回报
U
t
U_t
Ut都不可能超过
Q
⋆
Q_\star
Q⋆
Q
⋆
(
s
t
,
a
t
)
=
max
π
Q
π
(
s
t
,
a
t
)
,
∀
s
t
∈
S
,
a
t
∈
A
Q_\star(s_t,a_t)=\max_\pi Q_\pi (s_t,a_t), \forall s_t \in \mathcal{S}, a_t \in \mathcal{A}
Q⋆(st,at)=πmaxQπ(st,at),∀st∈S,at∈A
1.时间差分(TD)算法
(1)基础
利用TD训练深度Q网络(DQN),已有四元组
<
s
t
,
a
t
,
r
t
,
s
t
+
1
>
<s_t,a_t,r_t,s_{t+1}>
<st,at,rt,st+1>。
已知贝尔曼(Bellman)最优方程:
Q
⋆
(
s
t
,
a
t
)
⏟
U
t
的期望
=
E
S
t
+
1
∼
p
(
⋅
∣
s
t
,
a
t
)
[
R
t
+
γ
⋅
max
A
∈
A
Q
⋆
(
S
t
+
1
,
A
)
⏟
U
t
+
1
的期望
∣
S
t
=
s
t
,
A
t
=
a
t
]
\underbrace{Q_{\star}\left(s_t, a_t\right)}_{U_t \text { 的期望 }}=\mathbb{E}_{S_{t+1} \sim p\left(\cdot \mid s_t, a_t\right)}[R_t+\gamma \cdot \underbrace{\max _{A \in \mathcal{A}} Q_{\star}\left(S_{t+1}, A\right)}_{U_{t+1} \text { 的期望 }} \mid S_t=s_t, A_t=a_t]
Ut 的期望
Q⋆(st,at)=ESt+1∼p(⋅∣st,at)[Rt+γ⋅Ut+1 的期望
A∈AmaxQ⋆(St+1,A)∣St=st,At=at]
得到蒙特卡洛近似:
Q
⋆
(
s
t
,
a
t
)
≈
r
t
+
γ
⋅
max
a
∈
A
Q
⋆
(
s
t
+
1
,
a
)
.
Q_{\star}\left(s_t, a_t\right) \approx r_t+\gamma \cdot \max _{a \in \mathcal{A}} Q_{\star}\left(s_{t+1}, a\right) .
Q⋆(st,at)≈rt+γ⋅a∈AmaxQ⋆(st+1,a).
带入神经网络参数:
Q
⋆
(
s
t
,
a
t
;
w
)
≈
r
t
+
γ
⋅
max
a
∈
A
Q
⋆
(
s
t
+
1
,
a
;
w
)
.
Q_{\star}\left(s_t, a_t;\boldsymbol{w}\right) \approx r_t+\gamma \cdot \max _{a \in \mathcal{A}} Q_{\star}\left(s_{t+1}, a;\boldsymbol{w}\right) .
Q⋆(st,at;w)≈rt+γ⋅a∈AmaxQ⋆(st+1,a;w).
(2)流程
收集训练数据:我们可以用任何策略函数
π
\pi
π 去控制智能体与环境交互, 这个
π
\pi
π 就叫做行为策略 (Behavior Policy)。比较常用的是
ϵ
\epsilon
ϵ-greedy 策略:
a
t
=
{
argmax
a
Q
(
s
t
,
a
;
w
)
,
以概率
(
1
−
ϵ
)
;
均匀抽取
A
中的一个动作,
以概率
ϵ
.
a_t= \begin{cases}\operatorname{argmax}_a Q\left(s_t, a ; \boldsymbol{w}\right), & \text { 以概率 }(1-\epsilon) ; \\ \text { 均匀抽取 } \mathcal{A} \text { 中的一个动作, } & \text { 以概率 } \epsilon .\end{cases}
at={argmaxaQ(st,a;w), 均匀抽取 A 中的一个动作, 以概率 (1−ϵ); 以概率 ϵ.
把智能体在一局游戏中的轨迹记作:
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
⋯
s
n
,
a
n
,
r
n
.
s_1, a_1, r_1, s_2, a_2, r_2, \cdots s_n, a_n, r_n .
s1,a1,r1,s2,a2,r2,⋯sn,an,rn.
把一条轨迹划分成
n
n
n 个
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
\left(s_t, a_t, r_t, s_{t+1}\right)
(st,at,rt,st+1) 这种四元组, 存入数组, 这个数组叫做经验回放数组 (Replay Buffer)。
更新 DQN 参数
w
w
w : 随机从经验回放数组中取出一个四元组, 记作
(
s
j
,
a
j
,
r
j
,
s
j
+
1
)
\left(s_j, a_j, r_j, s_{j+1}\right)
(sj,aj,rj,sj+1) 。 设 DQN 当前的参数为
w
now
\boldsymbol{w}_{\text {now }}
wnow , 执行下面的步骤对参数做一次更新, 得到新的参数
w
new
\boldsymbol{w}_{\text {new }}
wnew 。
- 对DQN做正向传播, 得到
Q
\mathrm{Q}
Q 值:
q ^ j = Q ( s j , a j ; w now ) 和 q ^ j + 1 = max a ∈ A Q ( s j + 1 , a ; w now ) . \widehat{q}_j=Q\left(s_j, a_j ; \boldsymbol{w}_{\text {now }}\right) \quad \text { 和 } \quad \widehat{q}_{j+1}=\max _{a \in \mathcal{A}} Q\left(s_{j+1}, a ; \boldsymbol{w}_{\text {now }}\right) . q j=Q(sj,aj;wnow ) 和 q j+1=a∈AmaxQ(sj+1,a;wnow ). - 计算TD目标和TD误差:
y ^ j = r j + γ ⋅ q ^ j + 1 和 δ j = q ^ j − y ^ j . \widehat{y}_j=r_j+\gamma \cdot \widehat{q}_{j+1} \text { 和 } \delta_j=\widehat{q}_j-\widehat{y}_j . y j=rj+γ⋅q j+1 和 δj=q j−y j. - 对DQN做反向传播, 得到梯度:
g j = ∇ w Q ( s j , a j ; w n o w ) . \boldsymbol{g}_j=\nabla_{\boldsymbol{w}} Q\left(s_j, a_j ; \boldsymbol{w}_{\mathrm{now}}\right) . gj=∇wQ(sj,aj;wnow). - 做梯度下降更新DQN的参数:
w new ← w now − α ⋅ δ j ⋅ g j . \boldsymbol{w}_{\text {new }} \leftarrow \boldsymbol{w}_{\text {now }}-\alpha \cdot \delta_j \cdot \boldsymbol{g}_j . wnew ←wnow −α⋅δj⋅gj.
智能体收集数据、更新DQN参数这两者可以同时进行。可以在智能体每执行一个动作 之后, 对 w \boldsymbol{w} w 做几次更新。也可以在每完成一局游戏之后, 对 w \boldsymbol{w} w 做几次更新。
2.Q学习算法
(1)基础
利用Q学习(TD的一种)训练深度Q网络(DQN),已有四元组
<
s
t
,
a
t
,
r
t
,
s
t
+
1
>
<s_t,a_t,r_t,s_{t+1}>
<st,at,rt,st+1>。
已知贝尔曼(Bellman)最优方程:
Q
⋆
(
s
t
,
a
t
)
⏟
U
t
的期望
=
E
S
t
+
1
∼
p
(
⋅
∣
s
t
,
a
t
)
[
R
t
+
γ
⋅
max
A
∈
A
Q
⋆
(
S
t
+
1
,
A
)
⏟
U
t
+
1
的期望
∣
S
t
=
s
t
,
A
t
=
a
t
]
\underbrace{Q_{\star}\left(s_t, a_t\right)}_{U_t \text { 的期望 }}=\mathbb{E}_{S_{t+1} \sim p\left(\cdot \mid s_t, a_t\right)}[R_t+\gamma \cdot \underbrace{\max _{A \in \mathcal{A}} Q_{\star}\left(S_{t+1}, A\right)}_{U_{t+1} \text { 的期望 }} \mid S_t=s_t, A_t=a_t]
Ut 的期望
Q⋆(st,at)=ESt+1∼p(⋅∣st,at)[Rt+γ⋅Ut+1 的期望
A∈AmaxQ⋆(St+1,A)∣St=st,At=at]
公式左侧等效为:
Q
~
(
s
t
,
a
t
)
\widetilde{Q}{(s_t, a_t)}
Q
(st,at)
公式右侧蒙特卡洛近似等效为:
y
t
^
≜
r
t
+
γ
⋅
max
a
∈
A
Q
~
(
s
t
+
1
,
a
)
\hat{y_t}\triangleq r_t +\gamma \cdot \max_{a \in \mathcal{A} }\widetilde{Q}{(s_{t+1}, a)}
yt^≜rt+γ⋅a∈AmaxQ
(st+1,a)
更新表格
Q
~
\widetilde{Q}
Q
中
(
s
t
,
a
t
)
(s_t,a_t)
(st,at)位置上的元素:
Q
~
(
s
t
,
a
t
)
←
(
1
−
α
)
⋅
Q
~
(
s
t
,
a
t
)
+
α
⋅
y
t
^
\widetilde{Q}{(s_t, a_t)} \leftarrow (1-\alpha) \cdot \widetilde{Q}{(s_t, a_t)}+\alpha \cdot \hat{y_t}
Q
(st,at)←(1−α)⋅Q
(st,at)+α⋅yt^
(2)流程
收集训练数据:同TD算法。
a
t
=
{
argmax
a
Q
~
(
s
t
,
a
)
,
以概率
(
1
−
ϵ
)
;
均匀抽取
A
中的一个动作,
以概率
ϵ
.
a_t= \begin{cases}\operatorname{argmax}_a \widetilde{Q}\left(s_t, a \right), & \text { 以概率 }(1-\epsilon) ; \\ \text {均匀抽取 } \mathcal{A} \text { 中的一个动作, } & \text { 以概率 } \epsilon .\end{cases}
at={argmaxaQ
(st,a),均匀抽取 A 中的一个动作, 以概率 (1−ϵ); 以概率 ϵ.
把一条轨迹划分成
n
n
n 个
(
s
t
,
a
t
,
r
t
,
s
t
+
1
)
\left(s_t, a_t, r_t, s_{t+1}\right)
(st,at,rt,st+1) 这种四元组, 存入数组。
经验回放更新表格
Q
~
\tilde{Q}
Q~ : 随机从经验回放数组中抽取一个四元组, 记作
(
s
j
,
a
j
,
r
j
,
s
j
+
1
)
\left(s_j, a_j, r_j, s_{j+1}\right)
(sj,aj,rj,sj+1) 。
- 把当前表格
Q
~
now
\widetilde{Q}_{\text {now }}
Q
now 中第
(
s
j
,
a
j
)
\left(s_j, a_j\right)
(sj,aj) 位置上的元素记作:
q ^ j = Q ~ now ( s j , a j ) . \widehat{q}_j=\tilde{Q}_{\text {now }}\left(s_j, a_j\right) . q j=Q~now (sj,aj). - 查看表格
Q
~
now
\widetilde{Q}_{\text {now }}
Q
now 的第
s
j
+
1
s_{j+1}
sj+1 行, 把该行的最大值记作:
q ^ j + 1 = max a Q ~ now ( s j + 1 , a ) . \widehat{q}_{j+1}=\max _a \widetilde{Q}_{\text {now }}\left(s_{j+1}, a\right) . q j+1=amaxQ now (sj+1,a). - 计算TD目标和TD误差:
y ^ j = r j + γ ⋅ q ^ j + 1 , δ j = q ^ j − y ^ j . \widehat{y}_j=r_j+\gamma \cdot \widehat{q}_{j+1}, \quad \delta_j=\widehat{q}_j-\widehat{y}_j . y j=rj+γ⋅q j+1,δj=q j−y j. - 更新表格中
(
s
j
,
a
j
)
\left(s_j, a_j\right)
(sj,aj) 位置上的元素,得到更新后的表格:
Q ~ new ( s j , a j ) ← Q ~ now ( s j , a j ) − α ⋅ δ j . \tilde{Q}_{\text {new }}\left(s_j, a_j\right) \leftarrow \tilde{Q}_{\text {now }}\left(s_j, a_j\right)-\alpha \cdot \delta_j . Q~new (sj,aj)←Q~now (sj,aj)−α⋅δj.
收集经验与更新表格 Q ~ \widetilde{Q} Q 可以同时进行。每当智能体执行一次动作, 我们可以用经验回放 对 Q ~ \widetilde{Q} Q 做几次更新。也可以当完成一局游戏, 对 Q ~ \widetilde{Q} Q 做几次更新。
3.SARSA算法
(1)基础
已知贝尔曼方程:
Q
π
(
s
t
,
a
t
)
=
E
S
t
+
1
,
A
t
+
1
[
R
t
+
γ
⋅
Q
π
(
S
t
+
1
,
A
t
+
1
)
∣
S
t
=
s
t
,
A
t
=
a
t
]
Q_\pi\left(s_t, a_t\right)=\mathbb{E}_{S_{t+1}, A_{t+1}}\left[R_t+\gamma \cdot Q_\pi\left(S_{t+1}, A_{t+1}\right) \mid S_t=s_t, A_t=a_t\right]
Qπ(st,at)=ESt+1,At+1[Rt+γ⋅Qπ(St+1,At+1)∣St=st,At=at]
左侧等效为:
q
(
s
t
,
a
t
)
q\left(s_t, a_t\right)
q(st,at)
右侧根据蒙特卡洛近似为:
y
^
t
≜
r
t
+
γ
⋅
q
(
s
t
+
1
,
a
~
t
+
1
)
\widehat{y}_t \triangleq r_t+\gamma \cdot q\left(s_{t+1}, \tilde{a}_{t+1}\right)
y
t≜rt+γ⋅q(st+1,a~t+1)
更新表格
q
q
q中
(
s
t
,
a
t
)
(s_t,a_t)
(st,at)位置上的元素:
q
(
s
t
,
a
t
)
←
(
1
−
α
)
⋅
q
(
s
t
,
a
t
)
+
α
⋅
y
^
t
q\left(s_t, a_t\right) \leftarrow(1-\alpha) \cdot q\left(s_t, a_t\right)+\alpha \cdot \widehat{y}_t
q(st,at)←(1−α)⋅q(st,at)+α⋅y
t
(2)流程
五元组:
(
s
t
,
a
t
,
r
t
,
s
t
+
1
,
a
~
t
+
1
)
\left(s_t, a_t, r_t, s_{t+1}, \tilde{a}_{t+1}\right)
(st,at,rt,st+1,a~t+1) 。SARSA算法学到的
q
q
q 依赖于策略
π
\pi
π, 这是因为五元组中的
a
~
t
+
1
\tilde{a}_{t+1}
a~t+1 是根据
π
(
⋅
∣
s
t
+
1
)
\pi\left(\cdot \mid s_{t+1}\right)
π(⋅∣st+1) 抽样得到的。
训练流程:设当前表格为
q
now
q_{\text{now }}
qnow , 当前策略为
π
now
\pi_{\text {now }}
πnow 。 每一轮更新表格中的一个元素,把更新之后的表格记作
q
new
q_{\text {new}}
qnew 。
- 观测到当前状态 s t s_t st, 根据当前策略做抽样: a t ∼ π now ( ⋅ ∣ s t ) a_t \sim \pi_{\text {now }}\left(\cdot \mid s_t\right) at∼πnow (⋅∣st) 。
- 把表格
q
now
q_{\text {now }}
qnow 中第
(
s
t
,
a
t
)
\left(s_t, a_t\right)
(st,at) 位置上的元素记作:
q ^ t = q now ( s t , a t ) . \widehat{q}_t=q_{\text {now }}\left(s_t, a_t\right) . q t=qnow (st,at). - 智能体执行动作 a t a_t at 之后, 观测到奖励 r t r_t rt 和新的状态 s t + 1 s_{t+1} st+1 。
- 根据当前策略做抽样: a ~ t + 1 ∼ π now ( ⋅ ∣ s t + 1 ) \tilde{a}_{t+1} \sim \pi_{\text {now }}\left(\cdot \mid s_{t+1}\right) a~t+1∼πnow (⋅∣st+1) 。注意, a ~ t + 1 \tilde{a}_{t+1} a~t+1 只是假想的动作,智能体不予执行。
- 把表格
q
now
q_{\text {now }}
qnow 中第
(
s
t
+
1
,
a
~
t
+
1
)
\left(s_{t+1}, \tilde{a}_{t+1}\right)
(st+1,a~t+1) 位置上的元素记作:
q ^ t + 1 = q now ( s t + 1 , a ~ t + 1 ) . \widehat{q}_{t+1}=q_{\text {now }}\left(s_{t+1}, \tilde{a}_{t+1}\right) . q t+1=qnow (st+1,a~t+1). - 计算 TD 目标和 TD 误差:
y ^ t = r t + γ ⋅ q ^ t + 1 , δ t = q ^ t − y ^ t . \widehat{y}_t=r_t+\gamma \cdot \widehat{q}_{t+1}, \quad \delta_t=\widehat{q}_t-\widehat{y}_t . y t=rt+γ⋅q t+1,δt=q t−y t. - 更新表格中
(
s
t
,
a
t
)
\left(s_t, a_t\right)
(st,at) 位置上的元素:
q new ( s t , a t ) ← q now ( s t , a t ) − α ⋅ δ t . q_{\text {new }}\left(s_t, a_t\right) \leftarrow q_{\text {now }}\left(s_t, a_t\right)-\alpha \cdot \delta_t . qnew (st,at)←qnow (st,at)−α⋅δt. - 用某种算法更新策略函数。该算法与 SARSA算法无关。
(3)对比
Q 学习 近似 Q ⋆ 异策略 可以使用 经验回放 SARSA 近似 Q π 同策略 不能使用 经验回放 \begin{array}{|c|c|c|c|} \hline \mathrm{Q} \text { 学习 } & \text { 近似 } Q_{\star} & \text { 异策略 } & \begin{array}{c} \text { 可以使用 } \\ \text { 经验回放 } \end{array} \\ \hline \text { SARSA } & \text { 近似 } Q_\pi & \text { 同策略 } & \begin{array}{l} \text { 不能使用 } \\ \text { 经验回放 } \end{array} \\ \hline \end{array} Q 学习 SARSA 近似 Q⋆ 近似 Qπ 异策略 同策略 可以使用 经验回放 不能使用 经验回放
至于神经网络形式的SARSA:在状态空间 S \mathcal{S} S为无限集的情况下适用。只需将上述流程中的q函数增加一个神经网络的参数 w w w,同时第七步更改为反向传播和梯度下降的求解过程,此处不再赘述。
4.多步TD目标
(1)基础
此时回报可以写作如下形式:
U
t
=
(
∑
i
=
0
m
−
1
γ
i
R
t
+
i
)
+
γ
m
U
t
+
m
U_t=\left(\sum_{i=0}^{m-1} \gamma^i R_{t+i}\right)+\gamma^m U_{t+m}
Ut=(i=0∑m−1γiRt+i)+γmUt+m
由此可得动作值函数为:
Q
π
(
s
t
,
a
t
)
⏟
U
t
的期望
=
E
[
(
∑
i
=
0
m
−
1
γ
i
R
t
+
i
)
+
γ
m
⋅
Q
π
(
S
t
+
m
,
A
t
+
m
)
⏟
U
t
+
m
的期望
∣
S
t
=
s
t
,
A
t
=
a
t
]
\underbrace{Q_\pi\left(s_t, a_t\right)}_{U_t \text { 的期望 }}=\mathbb{E}[\left(\sum_{i=0}^{m-1} \gamma^i R_{t+i}\right)+\gamma^m \cdot \underbrace{Q_\pi\left(S_{t+m}, A_{t+m}\right)}_{U_{t+m} \text { 的期望 }} \mid S_t=s_t, A_t=a_t]
Ut 的期望
Qπ(st,at)=E[(i=0∑m−1γiRt+i)+γm⋅Ut+m 的期望
Qπ(St+m,At+m)∣St=st,At=at]
左侧等效为:
q
t
^
=
q
(
s
t
,
a
t
;
w
)
\widehat{q_t}=q\left(s_t, a_t ; \boldsymbol{w}\right)
qt
=q(st,at;w)
右侧根据蒙特卡洛近似等效为:
y
^
t
=
(
∑
i
=
0
m
−
1
γ
i
r
t
+
i
)
+
γ
m
⋅
q
(
s
t
+
m
,
a
t
+
m
;
w
)
\widehat{y}_t=\left(\sum_{i=0}^{m-1} \gamma^i r_{t+i}\right)+\gamma^m \cdot q\left(s_{t+m}, a_{t+m} ; \boldsymbol{w}\right)
y
t=(i=0∑m−1γirt+i)+γm⋅q(st+m,at+m;w)
损失函数设置为:
L
(
w
)
≜
1
2
[
q
(
s
t
,
a
t
;
w
)
−
y
^
t
]
2
L(\boldsymbol{w}) \triangleq \frac{1}{2}\left[q\left(s_t, a_t ; \boldsymbol{w}\right)-\widehat{y}_t\right]^2
L(w)≜21[q(st,at;w)−y
t]2
梯度下降为:
w
←
w
−
α
⋅
(
q
^
t
−
y
^
t
)
⋅
∇
w
q
(
s
t
,
a
t
;
w
)
\boldsymbol{w} \leftarrow \boldsymbol{w}-\alpha \cdot\left(\widehat{q}_t-\widehat{y}_t\right) \cdot \nabla_{\boldsymbol{w}} q\left(s_t, a_t ; \boldsymbol{w}\right)
w←w−α⋅(q
t−y
t)⋅∇wq(st,at;w)
流程与SARAS同理,略。
5.经验回放
(1)基础
定义:把智能体与环境交互的记录(即经验)储存到一个数组,事后反复利用这些经验训练智能体。这个数组被称为经验回放数组 (Replay Buffer)
优点:打破序列相关性。
局限:经验回放数组中的经验通常是过时的行为策略收集的,而我们真正想要学的目标策略不同于过时的行为策略。
(2)扩展
优先经验回放 (Prioritized Experience Replay) 是一种特殊的经验回放方法,它比普通的经验回放效果更好:既能让收敛更快,也能让收敛时的平均回报更高。优先经验回放给每个四元组一个权重,然后根据权重做非均匀随机抽样。
6.高估问题
(1)基础
Q 学习算法有一个缺陷:用 Q 学习训练出的 DQN 会高估真实的价值,而且高估通常是非均匀的。来源有两个:(1)自举导致的误差积累。(2)最大化导致高估。
(2)目标网络(缓和自举高估)
目标网络记作:
Q
(
s
,
a
;
w
−
)
Q\left(s, a ; \boldsymbol{w}^{-}\right)
Q(s,a;w−)
其神经网络结构与DQN完全相同,但
w
−
w^-
w−与
w
w
w的值并不完全相同。
- 对DQN做正向传播,得到:
q ^ j = Q ( s j , a j ; w now ) . \widehat{q}_j=Q\left(s_j, a_j ; \boldsymbol{w}_{\text {now }}\right) . q j=Q(sj,aj;wnow ). - 对目标网络做正向传播,得到
q ^ j + 1 − = max a ∈ A Q ( s j + 1 , a ; w n o w − ) . \hat{q}_{j+1}^{-}=\max _{a \in \mathcal{A}} Q\left(s_{j+1}, a ; \boldsymbol{w}_{\mathrm{now}}^{-}\right) . q^j+1−=a∈AmaxQ(sj+1,a;wnow−). - 计算TD目标和TD误差:
y ^ j − = r j + γ ⋅ q ^ j + 1 和 δ j = q ^ j − y ^ j . \widehat{y}_j^{-}=r_j+\gamma \cdot \widehat{q}_{j+1} \quad \text { 和 } \quad \delta_j=\widehat{q}_j-\widehat{y}_j . y j−=rj+γ⋅q j+1 和 δj=q j−y j. - 对DQN做反向传播,得到梯度 ∇ w Q ( s j , a j ; w now ) \nabla_{\boldsymbol{w}} Q\left(s_j, a_j ; \boldsymbol{w}_{\text {now }}\right) ∇wQ(sj,aj;wnow ) 。
- 做梯度下降更新DQN的参数:
w new ← w now − α ⋅ δ j ⋅ ∇ w Q ( s j , a j ; w now ) . \boldsymbol{w}_{\text {new }} \leftarrow \boldsymbol{w}_{\text {now }}-\alpha \cdot \delta_j \cdot \nabla_{\boldsymbol{w}} Q\left(s_j, a_j ; \boldsymbol{w}_{\text {now }}\right) . wnew ←wnow −α⋅δj⋅∇wQ(sj,aj;wnow ). - 设
τ
∈
(
0
,
1
)
\tau \in(0,1)
τ∈(0,1) 是需要手动调的超参数。做加权平均更新目标网络的参数:
w new − ← τ ⋅ w new + ( 1 − τ ) ⋅ w now − \boldsymbol{w}_{\text {new }}^{-} \leftarrow \tau \cdot \boldsymbol{w}_{\text {new }}+(1-\tau) \cdot \boldsymbol{w}_{\text {now }}^{-} wnew −←τ⋅wnew +(1−τ)⋅wnow −
(3)双Q学习法(解决最大化高估)
此处对比Q学习、目标网络、双Q学习法的区别,流程与上文(2)中类似:
Q学习算法:
选择:即基于状态
s
j
+
1
s_{j+1}
sj+1, 选出一个动作使得 DQN 的输出最大化:
a
⋆
=
argmax
a
∈
A
Q
(
s
j
+
1
,
a
;
w
)
.
a^{\star}=\underset{a \in \mathcal{A}}{\operatorname{argmax}} Q\left(s_{j+1}, a ; \boldsymbol{w}\right) .
a⋆=a∈AargmaxQ(sj+1,a;w).
求值:即计算
(
s
j
+
1
,
a
⋆
)
\left(s_{j+1}, a^{\star}\right)
(sj+1,a⋆) 的价值, 从而算出 TD 目标:
y
^
j
=
r
j
+
Q
(
s
j
+
1
,
a
⋆
;
w
)
.
\widehat{y}_j=r_j+Q\left(s_{j+1}, a^{\star} ; \boldsymbol{w}\right) .
y
j=rj+Q(sj+1,a⋆;w).
目标网络:
选择:
a
−
=
argmax
a
∈
A
Q
(
s
j
+
1
,
a
;
w
−
)
\quad a^{-}=\underset{a \in \mathcal{A}}{\operatorname{argmax}} Q\left(s_{j+1}, a ; \boldsymbol{w}^{-}\right)
a−=a∈AargmaxQ(sj+1,a;w−),
求值:
y
t
−
^
=
r
t
+
Q
(
s
j
+
1
,
a
−
;
w
−
)
\quad \widehat{y_t^{-}}=r_t+Q\left(s_{j+1}, a^{-} ; \boldsymbol{w}^{-}\right)
yt−
=rt+Q(sj+1,a−;w−).
双Q学习, 第一步的选择用DQN, 第二步的求值用目标网络:
选择:
a
⋆
=
argmax
a
∈
A
Q
(
s
j
+
1
,
a
;
w
)
\quad a^{\star}=\underset{a \in \mathcal{A}}{\operatorname{argmax}} Q\left(s_{j+1}, a ; \boldsymbol{w}\right)
a⋆=a∈AargmaxQ(sj+1,a;w),
求值:
y
~
t
=
r
t
+
Q
(
s
j
+
1
,
a
⋆
;
w
−
)
\quad \widetilde{y}_t=r_t+Q\left(s_{j+1}, a^{\star} ; \boldsymbol{w}^{-}\right)
y
t=rt+Q(sj+1,a⋆;w−).
对比
选择
求值
自举造成偏差
最大化造成偏差
Q学习
DQN
DQN
严重
严重
Q学习+目标网络
目标网络
目标网络
不严重
严重
双Q学习
DQN
目标网络
不严重
不严重
\begin{array}{|l|l|l|l|l|} \hline & \text { 选择 } & \text { 求值 } & \text { 自举造成偏差 } & \text { 最大化造成偏差 } \\ \hline \text { Q学习 } & \text { DQN } & \text { DQN } & \text { 严重 } & \text { 严重 } \\ \hline \text { Q学习+目标网络}& \text {目标网络 } & \text { 目标网络 } & \text { 不严重 } & \text { 严重 } \\ \hline \text { 双Q学习 } & \text { DQN } & \text { 目标网络 } & \text { 不严重 } & \text { 不严重 } \\ \hline \end{array}
Q学习 Q学习+目标网络 双Q学习 选择 DQN 目标网络 DQN 求值 DQN 目标网络 目标网络 自举造成偏差 严重 不严重 不严重 最大化造成偏差 严重 严重 不严重