赞
踩
对于Value迭代:不动点证明的思路
首先定义一个算子
B
:
B
V
=
max
a
r
a
+
γ
T
a
V
\mathcal{B}:\mathcal{B}V=\max_ar_a+\gamma\mathcal{T}_aV
B:BV=maxara+γTaV
接着有一个不动点
V
∗
(
s
)
=
max
a
r
(
s
,
a
)
+
γ
E
[
V
∗
(
s
′
)
]
V^*(s)=\max_{a}r(s,a)+\gamma E[V^*(s')]
V∗(s)=maxar(s,a)+γE[V∗(s′)],有
V
∗
=
B
V
∗
V^*=\mathcal{B}V^*
V∗=BV∗
每次使用算子都会,V离不动点的距离有收缩:
∣
∣
B
V
−
V
∗
∣
∣
∞
≤
γ
∣
∣
V
−
V
∗
∣
∣
∞
||\mathcal{B}V-V^*||_\infty\leq\gamma||V-V^*||_{\infty}
∣∣BV−V∗∣∣∞≤γ∣∣V−V∗∣∣∞
对于神经网络拟合的Value迭代:对于监督学习,也是得到一个
V
′
V'
V′使得距离
∣
∣
V
′
(
s
)
−
(
B
V
)
(
s
)
∣
∣
2
||V'(s)-(\mathcal{B}V)(s)||^2
∣∣V′(s)−(BV)(s)∣∣2最小——投影
V的迭代是这样的
V
←
Π
B
V
V\leftarrow \Pi\mathcal{B}V
V←ΠBV
定义一个新的算子
Π
:
Π
V
=
arg
max
V
′
∈
Ω
1
2
∑
∣
∣
V
′
(
s
)
−
V
(
s
)
∣
∣
2
\Pi:\Pi V=\arg\max_{V'\in\Omega}\frac{1}{2}\sum||V'(s)-V(s)||^2
Π:ΠV=argmaxV′∈Ω21∑∣∣V′(s)−V(s)∣∣2,
Π
\Pi
Π实际上是用l2范数对
Ω
\Omega
Ω的投影,也是收缩的
[!收缩:]
∣ ∣ Π V − Π V ˉ ∣ ∣ 2 ≤ ∣ ∣ V − V ˉ ∣ ∣ 2 ||\Pi V-\Pi \bar{V}||^2\leq||V-\bar{V}||^2 ∣∣ΠV−ΠVˉ∣∣2≤∣∣V−Vˉ∣∣2(注意这里用的是2范数而上面是无穷范数,两种算子都是再各自的范数上收缩的),但是把两个算子结合在一起就不会收缩了
所以就导致了使用Q-table能够保证收敛,而用神经网络拟合的V的Q-iteration不能够收敛
尽管理论上令人沮丧,但是实际中可以表现的很好!
这里面包含了replay buffer和target network,但是暂时不细说了。
Polyak averaging
:模型平均的问题
在实际的使用过程中,Q-Learning总是出现overestimate的问题:估计的价值比实际的价值高很多:
为什么会出现这样呢:
我们的target value是
y
i
=
r
i
+
γ
max
a
j
′
Q
ϕ
′
(
s
j
′
,
a
j
′
)
y_i=r_i+\gamma\max_{a'_j}Q_{\phi'}(s'_j,a'_j)
yi=ri+γmaxaj′Qϕ′(sj′,aj′),其中
ϕ
′
\phi'
ϕ′是当前的价值函数
imagine we have two random variables:
X
1
,
X
2
X_1,X_2
X1,X2,We have
E
[
max
(
X
1
,
X
2
)
]
≥
max
(
E
[
X
1
]
,
E
X
2
)
E[\max(X_1,X_2)]\ge\max(E[X_1],E{X_2})
E[max(X1,X2)]≥max(E[X1],EX2)
而对于
Q
ϕ
′
(
s
′
,
a
′
)
Q_{\phi'}(s',a')
Qϕ′(s′,a′),它是对真正Q函数的估计,也就是真正的Q函数加上一些“噪声”,所以当我们取
Q
ϕ
′
(
s
′
,
a
′
)
Q_{\phi'}(s',a')
Qϕ′(s′,a′)的最大值的时候,尽管“噪声”是无偏的,也会导致最后的值变大:
max
a
′
Q
ϕ
′
(
s
′
,
a
′
)
=
Q
ϕ
′
(
s
′
,
arg
max
a
′
Q
ϕ
′
(
s
′
,
a
′
)
)
\max_{a'}Q_{\phi'}(s',a')=Q_{\phi'}(s',\arg\max_{a'} Q_{\phi'}(s',a'))
a′maxQϕ′(s′,a′)=Qϕ′(s′,arga′maxQϕ′(s′,a′))
为什么有上面这个式子的写法? 别忘了遵循贪婪(没有”探索“)的策略,我们选择下一个action就是根据
Q
ϕ
′
Q_{\phi'}
Qϕ′的,因为是根据
arg
max
\arg\max
argmax选出来的,因此如果我们选择了正的噪声的action作为价值函数的输入,那么价值函数会基于同样的贪婪也会选择正的噪声,就会overestimate。
因此,提出了Double Q-Learning
,我们分别使用两个神经网络去产生动作和估计价值,这样两个神经网络拟合时产生的”噪声“就是不相关的!——这个操作非常像通信里面的啊!
Q
ϕ
A
(
s
,
a
)
=
r
+
γ
Q
ϕ
B
(
s
′
,
arg
max
a
′
Q
ϕ
A
(
s
′
,
a
′
)
)
Q_{\phi_A}(s,a)=r+\gamma Q_{\phi_B}(s',\arg\max_{a'} Q_{\phi_A}(s',a'))
QϕA(s,a)=r+γQϕB(s′,arga′maxQϕA(s′,a′))
Q
ϕ
B
(
s
,
a
)
=
r
+
γ
Q
ϕ
B
(
s
′
,
arg
max
a
′
Q
ϕ
B
(
s
′
,
a
′
)
)
Q_{\phi_B}(s,a)=r+\gamma Q_{\phi_B}(s',\arg\max_{a'} Q_{\phi_B}(s',a'))
QϕB(s,a)=r+γQϕB(s′,arga′maxQϕB(s′,a′))
实际上,我们不需要麻烦的创造一个动作选择神经网络,一个价值神经网络,而是直接利用现成的:
别忘了我们其实有两个
ϕ
\phi
ϕ和
ϕ
′
\phi'
ϕ′的,一个表示目标函数,另一个则是不断更新的,而目标函数会定期更新,因此我们直接借助这两个现成的:
y
i
=
r
i
+
γ
Q
ϕ
′
(
s
j
′
,
arg
max
a
′
Q
ϕ
(
s
′
,
a
′
)
)
y_i=r_i+\gamma Q_{\phi'}(s'_j,\arg\max_{a'}Q_{\phi}(s',a'))
yi=ri+γQϕ′(sj′,arga′maxQϕ(s′,a′))
上面利用当前的神经网络去确定动作action,而利用目标网络去确定价值value
回忆一下,我们的目标是
max
a
Q
ϕ
(
s
,
a
)
=
Q
ϕ
(
s
,
arg
max
a
Q
ϕ
(
s
,
a
)
)
\max_a Q_{\phi}(s,a)=Q_{\phi}(s,\arg\max_{a}Q_{\phi}(s,a))
maxaQϕ(s,a)=Qϕ(s,argmaxaQϕ(s,a))
因此,想办法训练另一个网络
μ
θ
≈
arg
max
a
Q
ϕ
(
s
,
a
)
\mu_\theta\approx\arg\max_a Q_\phi(s,a)
μθ≈argmaxaQϕ(s,a),它可以看作是一个状态-动作函数,用来模拟
arg
max
\arg\max
argmax的过程
怎么去寻找这个网络的参数呢?因为我们是寻找最大的Q,因此用梯度上升就可以
d
Q
ϕ
d
θ
=
d
a
d
θ
d
Q
ϕ
d
a
\frac{dQ_\phi}{d\theta}=\frac{da}{d\theta}\frac{dQ_\phi}{da}
dθdQϕ=dθdadadQϕ
新的target:
y
j
=
r
j
+
γ
Q
ϕ
′
(
s
j
′
,
μ
θ
(
s
j
′
)
)
≈
r
j
+
γ
Q
ϕ
′
(
s
j
′
,
arg
max
a
′
Q
ϕ
′
(
s
j
′
,
a
j
′
)
)
y_j=r_j+\gamma Q_{\phi'}(s'_j,\mu_\theta(s'_j))\approx r_j+\gamma Q_{\phi'}(s'_j,\arg\max_{a'}Q_{\phi'}(s'_j,a'_j))
yj=rj+γQϕ′(sj′,μθ(sj′))≈rj+γQϕ′(sj′,argmaxa′Qϕ′(sj′,aj′))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。