目录
简介
Q-learning的实现是比较简单的,但只能用在离散行为空间的情况下。在连续空间中该怎么操作?比较常见的方法是将连续空间离散化,从 A A A中采样,然后再用传统的方法运算。但这种方法是有限的,且效果一般。还有一种方法是gradient ascent。我们知道采取的行为a满足: a = a r g max a ∈ A Q ( s , a ) a=arg\max_{a\in A}Q(s,a) a=arga∈AmaxQ(s,a)
我们把a当做参数,利用梯度上升的方法最大化Q值,一样可以做。但是问题在于运算量过大,且可能陷入局部最优,因此也不太考虑。接下来讲第三个方法。
Design a Network
如图,我们设计一个网络:
通过以下公式计算Q值:
Q
(
s
,
a
)
=
−
(
a
−
μ
(
s
)
)
T
Σ
(
s
)
(
a
−
μ
(
s
)
)
+
V
(
s
)
(7.1)
Q(s,a)=-(a-\mu (s))^T \Sigma (s)(a-\mu (s))+V(s) \tag{7.1}
Q(s,a)=−(a−μ(s))TΣ(s)(a−μ(s))+V(s)(7.1)
最开始输入状态s,通过网络计算出三个变量之后,再将连续的行为向量a(比如要求输入右上方45°大小为8的力度,a就是向量
[
2
,
2
]
T
[2,2]^T
[2,2]T)代入,最后再计算出Q。
这个公式怎么来的?首先来看这个公式:
Q
(
s
,
a
)
=
A
(
s
,
a
)
+
V
(
s
)
Q(s,a)=A(s,a)+V(s)
Q(s,a)=A(s,a)+V(s)
Q值函数等于优势函数A加上V值函数。我们要选最优的动作,实际上就是最大化优势函数A。如果能限制优势函数A恒小于等于0,那么当A=0时,Q值函数就一定是最大值。
怎么限制呢?一瞬间能想到的公式是:
−
(
a
+
b
x
)
2
≤
0
-(a+bx)^2\le 0
−(a+bx)2≤0
为了便于计算,用矩阵的形式表示,再结合正定矩阵的相关知识,就有了以下公式:
−
z
T
Σ
z
≤
0
-z^T\Sigma z\le0
−zTΣz≤0
其中z是向量,
Σ
\Sigma
Σ是正定矩阵。这就是公式7.1的形成基础。而当
μ
(
s
)
=
a
\mu(s)=a
μ(s)=a的时候,7.1式的前一项必定为0,这也就能保证Q值为最大了。
那么如何令神经网络输出的
Σ
\Sigma
Σ正定?答案是先输出一个对角线元素都是正数的下三角矩阵
L
L
L,然后根据
L
L
L生成
Σ
\Sigma
Σ,这样
Σ
\Sigma
Σ就一定是正定矩阵了。
总结
实际上用Q-learning来处理连续行为问题是在是比较麻烦的,接下来讲Actor-critic,这个方法能比较好的处理连续空间上的问题,也是一个同时使用value-based和policy-based的算法。