之前介绍的Bellman方程实际上是状态价值函数,
V
(
s
)
V(s)
V(s)。除此之外我们还可以定义动作价值函数
Q
(
s
,
a
)
Q(s, a)
Q(s,a),即在状态s执行动作a所获得的总奖励,
Q
(
s
,
a
)
Q(s, a)
Q(s,a)可以通过
V
(
s
)
V(s)
V(s)来定义,同时也是Q-learning的基础。我们的主要目标是获得每对state和action的Q值。
Q
(
s
,
a
)
=
E
s
′
∼
S
[
r
(
s
,
a
)
+
γ
V
(
s
′
)
]
=
∑
s
′
∈
S
p
a
,
s
→
s
′
(
r
(
s
,
a
)
+
γ
V
(
s
′
)
)
Q\left( s,a \right) =\mathbb{E}_{s'\sim S}\left[ r\left( s,a \right) +\gamma V\left( s' \right) \right] =\sum_{s'\in S}{p_{a,s\rightarrow s'}\left( r\left( s,a \right) +\gamma V\left( s' \right) \right)}
Q(s,a)=Es′∼S[r(s,a)+γV(s′)]=s′∈S∑pa,s→s′(r(s,a)+γV(s′))
根据状态价值函数的定义我们可以用
Q
(
s
,
a
)
Q(s, a)
Q(s,a)表示
V
(
s
)
V(s)
V(s)
V
(
s
)
=
max
a
∈
A
Q
(
s
,
a
)
V(s)=\max_{a\in A}Q(s,a)
V(s)=a∈AmaxQ(s,a)
同时我们也可得到
Q
(
s
,
a
)
Q(s, a)
Q(s,a)的递推式,在DQN中有用
Q
(
s
,
a
)
=
r
(
s
,
a
)
+
γ
max
a
′
∈
A
Q
(
s
′
,
a
′
)
Q(s,a)=r(s,a)+\gamma\max_{a'\in A}Q(s',a')
Q(s,a)=r(s,a)+γa′∈AmaxQ(s′,a′)
(
s
,
a
)
(s,a)
(s,a)和
(
s
′
,
a
′
)
(s',a')
(s′,a′)从形式上来看是一样的,但表达的含义不同,前者表示的是已经发生的事情,即在状态
s
s
s采取动作
a
a
a,而后者表示的是还未发生的事情,即,为了到状态
s
′
s'
s′而采取动作
a
′
a'
a′,二者在具体实现上也有较大区别。
下面举一个类似于FrozenLake的网格地图例子。初始状态
s
0
s_0
s0,上下左右分别为四个目标状态
s
1
,
s
2
,
s
3
,
s
4
s_1,s_2,s_3,s_4
s1,s2,s3,s4,并带有不同的奖励。
这个环境是非确定性环境,即作出一个动作后有33%的概率动作成功执行,33%的概率向指定动作左边的动作移动,33%的概率向指定动作右边的动作移动。为了简单起见,取折扣因子为
γ
=
1
\gamma=1
γ=1
先计算动作价值。假设末状态
s
1
,
s
2
,
s
3
,
s
4
s_1,s_2,s_3,s_4
s1,s2,s3,s4没有后续状态,所以这些状态的Q值都是0。因此
V
1
=
1
,
V
2
=
2
,
V
3
=
3
,
V
4
=
4
V_1 = 1, V_2 = 2, V_3 = 3, V_4 = 4
V1=1,V2=2,V3=3,V4=4。
Q
(
s
0
,
向
上
)
=
0.33
⋅
V
1
+
0.33
⋅
V
2
+
0.33
⋅
V
4
=
0.33
⋅
1
+
0.33
⋅
2
+
0.33
⋅
4
=
2.31
Q(s_0,向上)=0.33\cdot V_1+0.33\cdot V_2+0.33 \cdot V_4 = 0.33\cdot 1+0.33 \cdot 2 + 0.33 \cdot 4=2.31
Q(s0,向上)=0.33⋅V1+0.33⋅V2+0.33⋅V4=0.33⋅1+0.33⋅2+0.33⋅4=2.31
Q
(
s
0
,
向
左
)
=
0.33
⋅
V
1
+
0.33
⋅
V
2
+
0.33
⋅
V
3
=
0.33
⋅
1
+
0.33
⋅
2
+
0.33
⋅
3
=
1.98
Q(s_0,向左)=0.33\cdot V_1+0.33\cdot V_2+0.33 \cdot V_3 = 0.33\cdot 1+0.33 \cdot 2 + 0.33 \cdot 3=1.98
Q(s0,向左)=0.33⋅V1+0.33⋅V2+0.33⋅V3=0.33⋅1+0.33⋅2+0.33⋅3=1.98
Q
(
s
0
,
向
右
)
=
0.33
⋅
V
4
+
0.33
⋅
V
1
+
0.33
⋅
V
3
=
0.33
⋅
4
+
0.33
⋅
1
+
0.33
⋅
3
=
2.64
Q(s_0,向右)=0.33\cdot V_4+0.33\cdot V_1+0.33 \cdot V_3 = 0.33\cdot 4+0.33 \cdot 1 + 0.33 \cdot 3=2.64
Q(s0,向右)=0.33⋅V4+0.33⋅V1+0.33⋅V3=0.33⋅4+0.33⋅1+0.33⋅3=2.64
Q
(
s
0
,
向
下
)
=
0.33
⋅
V
3
+
0.33
⋅
V
2
+
0.33
⋅
V
4
=
0.33
⋅
3
+
0.33
⋅
2
+
0.33
⋅
4
=
2.97
Q(s_0,向下)=0.33\cdot V_3+0.33\cdot V_2+0.33 \cdot V_4 = 0.33\cdot 3+0.33 \cdot 2 + 0.33 \cdot 4=2.97
Q(s0,向下)=0.33⋅V3+0.33⋅V2+0.33⋅V4=0.33⋅3+0.33⋅2+0.33⋅4=2.97
状态
s
0
s_0
s0的价值是这些动作价值的最大值,即
2.97
2.97
2.97。
Q值非常实用,对于agent来说,基于Q做出行动决定要比基于V简单得多。在Q的情况下,根据状态选择行动,agent只需要计算当前状态下所有可用动作的Q值,并选择Q值最大的动作。如果使用V值做同样的操作,agent不仅需要知道价值,还需要知道转移的概率,而我们很少有这方面的先验知识,agent需要估计每个动作和状态对的转移概率。说是说的简单,我们仍然缺少一个重要的东西:计算V和Q的一般方法。