如何估计 V π ( s ) V^{\pi}(s) Vπ(s)
V π ( s ) V^{\pi}(s) Vπ(s)代表我们的主体是 π \pi π在当前局面 s s s得分的期望值。
Monte-Carlo(MC) based approach
使用基于蒙特卡罗的方法,让我们的模型与环境做互动。我们输入一个
S
a
S_a
Sa得到一个估计值,我们希望我们的估计值与
G
a
G_a
Ga越接近越好,所以可以当做一个回归问题来训练我们的神经网络。
具体过程如下:
但是这个方法也有问题,这样必须等每局游戏结束,才能得到数据,如果游戏的时间特别长,使用这种方法是十分缓慢的。
Temporal-difference(TD) approach
Monte-Carlo的方法,比较把游戏进行到结束。而这种方式不需要将游戏玩到结束。
V
π
(
s
t
)
=
V
π
(
s
t
+
1
)
+
r
t
V^{\pi}\left(s_{t}\right)=V^{\pi}\left(s_{t+1}\right)+r_{t}
Vπ(st)=Vπ(st+1)+rt我们可以得到
V
π
(
s
t
)
V^{\pi}\left(s_{t}\right)
Vπ(st)已经
V
π
(
s
t
+
1
)
V^{\pi}\left(s_{t+1}\right)
Vπ(st+1)的值,然后把这两个值的差值丢入我们的神经网络中进行计算:
V
π
(
s
t
)
−
V
π
(
s
t
+
1
)
↔
r
t
V^{\pi}\left(s_{t}\right)-V^{\pi}\left(s_{t+1}\right) \leftrightarrow r_{t}
Vπ(st)−Vπ(st+1)↔rt
两种方式比较
MC: 使用这种方式的时候方差很大,因为一场完整的游戏过程中有很多的偶然因素影响。即使你使用完全一样的策略,最后得到的
G
a
G_a
Ga也会不一样。
TD: 因为这里训练的是
r
r
r的值,而
r
r
r只是单独的一步,所以它的方差会比较小。这里也有一个问题,就是你的
V
V
V值不一定能够估计的准,因此也会造成误差。
总体来说,两种方法各有优劣。
Q-learning
Q
π
(
s
,
a
)
Q^\pi (s,a)
Qπ(s,a)表示在状态
s
s
s下采取行动
a
a
a预计获得的收益。
Q-learning的思路就是通过与环境互动使用更好的
π
′
\pi'
π′来更新原来的
π
\pi
π。具体过程如下:
什么是更好的
π
\pi
π呢?定义如下:对于任意的状态
s
s
s
V
π
′
(
s
)
≥
V
π
(
s
)
V^{\pi^{\prime}}(s) \geq V^{\pi}(s)
Vπ′(s)≥Vπ(s)如何寻找
π
′
(
s
)
\pi^{\prime}(s)
π′(s)呢?
π
′
(
s
)
=
arg
max
a
Q
π
(
s
,
a
)
\pi^{\prime}(s)=\arg \max _{a} Q^{\pi}(s, a)
π′(s)=argamaxQπ(s,a)实际上,
π
′
\pi'
π′并没有额外的参数或者另一个神经网络去表示,它只是依靠
Q
Q
Q推导出来的。
注意: 如果动作是一个连续值的话则不适合使用这种方法。
为什么使用
Q
Q
Q决定出来的
π
′
\pi'
π′一定比
π
\pi
π好呢?具体的证明如下:
V
π
(
s
)
=
Q
π
(
s
,
π
(
s
)
)
≤
max
a
Q
π
(
s
,
a
)
=
Q
π
(
s
,
π
′
(
s
)
)
\begin{aligned} V^{\pi}(s)=Q^{\pi}(s, \pi(s)) \leq \max _{a} Q^{\pi}(s, a)=Q^{\pi}\left(s, \pi^{\prime}(s)\right) \end{aligned}
Vπ(s)=Qπ(s,π(s))≤amaxQπ(s,a)=Qπ(s,π′(s))我们可以看到对于某一步,这个规则成立,对于多步时,证明如下:
V
π
(
s
)
≤
Q
π
(
s
,
π
′
(
s
)
)
=
E
[
r
t
+
1
+
V
π
(
s
t
+
1
)
∣
s
t
=
s
,
a
t
=
π
′
(
s
t
)
]
≤
E
[
r
t
+
1
+
Q
π
(
s
t
+
1
,
π
′
(
s
t
+
1
)
)
∣
s
t
=
s
,
a
t
=
π
′
(
s
t
)
]
=
E
[
r
t
+
1
+
r
t
+
2
+
V
π
(
s
t
+
2
)
∣
…
]
≤
E
[
r
t
+
1
+
r
t
+
2
+
Q
π
(
s
t
+
2
,
π
′
(
s
t
+
2
)
)
∣
…
]
…
≤
V
π
′
(
s
)
\begin{array}{l} V^{\pi}(s) \leq Q^{\pi}\left(s, \pi^{\prime}(s)\right) \\ =E\left[r_{t+1}+V^{\pi}\left(s_{t+1}\right) \mid s_{t}=s, a_{t}=\pi^{\prime}\left(s_{t}\right)\right] \\ \leq E\left[r_{t+1}+Q^{\pi}\left(s_{t+1}, \pi^{\prime}\left(s_{t+1}\right)\right) \mid s_{t}=s, a_{t}=\pi^{\prime}\left(s_{t}\right)\right] \\ =E\left[r_{t+1}+r_{t+2}+V^{\pi}\left(s_{t+2}\right) \mid \ldots\right] \\ \leq E\left[r_{t+1}+r_{t+2}+Q^{\pi}\left(s_{t+2}, \pi^{\prime}\left(s_{t+2}\right)\right) \mid \ldots\right] \ldots \leq V^{\pi^{\prime}}(s) \end{array}
Vπ(s)≤Qπ(s,π′(s))=E[rt+1+Vπ(st+1)∣st=s,at=π′(st)]≤E[rt+1+Qπ(st+1,π′(st+1))∣st=s,at=π′(st)]=E[rt+1+rt+2+Vπ(st+2)∣…]≤E[rt+1+rt+2+Qπ(st+2,π′(st+2))∣…]…≤Vπ′(s)
Q-learning技巧
Target Network
我们使用Q-learning的时候,有一个部分
Q
π
(
s
t
,
a
t
)
=
r
t
+
Q
π
(
s
t
+
1
,
π
(
s
t
+
1
)
)
\begin{array}{l} \mathrm{Q}^{\pi}\left(s_{t}, a_{t}\right) =r_{t}+\mathrm{Q}^{\pi}\left(s_{t+1}, \pi\left(s_{t+1}\right)\right) \end{array}
Qπ(st,at)=rt+Qπ(st+1,π(st+1))这和之前的TD方法是类似的(同样都有
r
r
r值)。
因为我们训练的时候不希望改变我们的Target,因为我们要拟合一个不停变化的值是相当困难的。所以我们选择固定Target的值,不改变他的参数,在这种情况下进行训练。
具体过程如下:
Exploration
在我们搜索的时候,我们使用的是如下公式
a
=
arg
max
a
Q
(
s
,
a
)
a=\arg \max _{a} Q(s, a)
a=argamaxQ(s,a)所以没有探索到的位置的
Q
Q
Q值始终为0,因而一直不会被选中(如果使用的是神经网络这种现象较弱,但是依然存在)具体如下图所示:
所以为了避免每次都做出同样的选择,我们可以采用以下的方法:
Epsilon Greedy
a
=
{
arg
max
a
Q
(
s
,
a
)
,
with probability
1
−
ε
random,
otherwise
a=\left\{\begin{array}{cl} \arg \max _{a} Q(s, a), & \text { with probability } 1-\varepsilon \\ \text { random, } & \text { otherwise } \end{array}\right.
a={argmaxaQ(s,a), random, with probability 1−ε otherwise 其中
ε
\varepsilon
ε的值会随着学习的进行而衰减。
Boltzmann Exploration
P
(
a
∣
s
)
=
exp
(
Q
(
s
,
a
)
)
∑
a
exp
(
Q
(
s
,
a
)
)
P(a \mid s)=\frac{\exp (Q(s, a))}{\sum_{a} \exp (Q(s, a))}
P(a∣s)=∑aexp(Q(s,a))exp(Q(s,a))
Replay Buffer
这个方法把最近的与环境交互结果数据(不一定是同一个
π
\pi
π出来的数据)都放到缓存区里,利用这些数据进行训练。但是使用不同的
π
\pi
π值会不会影响我们的训练呢?结论是不会的。
算法执行过程
连续Q-learning
当动作是一个连续的向量
a
=
arg
max
a
Q
(
s
,
a
)
a=\arg \max _{a} Q(s, a)
a=argamaxQ(s,a)这个式子就不能通过穷举计算得出,所以我们要怎样进行选择呢。
方法一会丢失精度,方法二会大幅降低速度。
方法三实现起来十分复杂。
我们还可以使用别的方法。