核心思想
基于q-learning,用深度神经网络,评估当前state和action组合的q值
细节
q-learning,sarsa/sarsa lambda,都只能对有限、离散的state空间及动作空间生效,对连续空间无法做table,所以考虑使用神经网络,以便
f
(
S
)
=
[
V
(
A
1
)
,
V
(
A
2
)
,
…
]
f(S) = [V(A_1), V(A_2), \dots]
f(S)=[V(A1),V(A2),…],再按照q-learning的方式选择value最大的action
用神经网络去学习Q,即:
Q
∗
=
max
π
Q
π
(
s
t
,
a
t
)
,
∀
s
t
∈
S
,
a
t
∈
A
Q_* = \max_\pi Q_\pi (s_t, a_t), \forall s_t \in S, a_t \in A
Q∗=πmaxQπ(st,at),∀st∈S,at∈A
dqn还有2个特性,experience replay和fixed q-values
experience replay
experience replay:保存当前走过的action, state, reward, state_,用于学习
为什么叫off-policy?
experience replay/replay buffer,dqn是off-policy的,即先用当前的policy与env做交互,把结果存入replay buffer,然后满足一定条件后,再从replay buffer里取出来trajectory后学习,更新policy。注意更新后的policy,仍然是在以前的policy sample出的trajectory上学习的,所以叫off-policy
为什么要exprience replay?
因为improve policy后,做出的action是会改变的,希望agent能学到这个变化。同时存储的trajectory可以多次学习,在real-world中cost less
fixed q-values
fixed q-values:用2个网络分别对q-target和q-predict建模,q-predict的网络实时更新,q-target的网络落后q-predict的网络
fixed q-values,2个网络,一个target network,不及时更新,一个predict network及时更新
为什么要有two networks?
为了网络稳定性
注意到更新Q值时是基于预测值
Q
∗
Q^*
Q∗的:
Q
(
s
,
a
)
←
Q
(
s
,
a
)
+
α
δ
δ
=
r
+
γ
Q
∗
−
Q
\begin{aligned} Q(s,a) &\leftarrow Q(s,a) + \alpha \delta \\ \delta &= r + \gamma Q^* - Q \end{aligned}
Q(s,a)δ←Q(s,a)+αδ=r+γQ∗−Q
这会导致如果预测值偏离,会使得Q也偏,然后就会越训越偏。所以提出了two networks来避免这个问题。有3种常见的two networks
double Q-learning
2010年在nips上的double Q-learning,提出2个独立的网络,更新network A时,使用B的预测值,更新B时,使用A的预测值
TODO: 补充剩下的two network
ref: https://towardsdatascience.com/double-deep-q-networks-905dd8325412