一种critic:state value function
V
π
(
s
)
V^\pi(s)
Vπ(s)是给定一个policy
π
\pi
π,在遇到state
s
s
s之后累积的reward的期望值,以游戏举例也就是一个actor在看到某一个画面
s
s
s之后直到游戏结束预期可以获得多大的value,更直观的解释是到达游戏的某一个节点state
s
s
s,当前游戏还可以得多少分,critic需要和一个特定的actor绑定才可以得到evaluate;
如何衡量
V
π
(
s
)
V^\pi(s)
Vπ(s),有两种方法,其一是Monte-Carlo,给出一个state玩游戏到最后会得到一个value,收集多个
s
t
a
t
e
,
v
a
l
u
e
state,value
state,value对,然后将
V
π
(
s
)
V^\pi(s)
Vπ(s)看做一个network,当做一个回归问题进行训练;另一种方法是Temporal-difference(TD) based方法,基于的是
V
π
(
s
t
)
=
V
π
(
s
t
+
1
)
+
r
t
V^\pi(s_t) = V^\pi(s_{t + 1})+ r_t
Vπ(st)=Vπ(st+1)+rt,在这种方法之下就不需要玩完一整场游戏才能获得reward值,而是在当前state为
s
t
s_t
st的情况下,采取action
a
t
a_t
at,此时会转到
s
t
+
1
s_{t + 1}
st+1,并且会获得一个reward
r
t
r_t
rt,此时模型最后追求的不是像方法1一样输出一场游戏总的reward,而是要尽量保证
V
π
(
s
t
)
−
V
π
(
s
t
+
1
)
=
r
t
V^\pi(s_t) - V^\pi(s_{t + 1}) = r_t
Vπ(st)−Vπ(st+1)=rt,模型还是输出value,但是损失函数是根据差值和reward接近得到的;
两种方法的对比MC的variance比TD方法大;
另一种critic:state-action value function
Q
π
(
s
,
a
)
Q^\pi(s,a)
Qπ(s,a),当给定actor
π
\pi
π,在遇到state
s
s
s的时候采取action
a
a
a后reward的期望值,有两种network形式一种是输入
s
,
a
s,a
s,a输出一个常量代表value,另一种是输入
s
s
s输出在
a
a
a取不同值的时候的value值;
有了critic就可以进行Q-learning,过程,首先初始化一个policy
π
\pi
π,然后学习其对应的critic
Q
π
Q^\pi
Qπ,之后就可以更新policy
π
′
\pi'
π′,这个
π
′
\pi'
π′比
π
\pi
π好,得到的方式
π
′
(
s
)
=
a
r
g
m
a
x
a
Q
π
(
s
,
a
)
\pi'(s) = arg\ \underset{a}{max} Q^\pi(s,a)
π′(s)=argamaxQπ(s,a),可以看到
π
′
\pi'
π′是通过Q解优化方程得到的,这个过程反复迭代下去,这个优化在action是离散的时候可以比较好解,连续时候,更新之后的
π
′
\pi'
π′比之前的
π
\pi
π好,是有对于任意的state
s
s
s有
V
π
′
(
s
)
≥
V
π
(
s
)
V^{\pi'}(s)\geq V^\pi(s)
Vπ′(s)≥Vπ(s);
Target Network:在训练TD类critic的时候,有两个network,一个输入
(
s
t
,
a
t
)
(s_t,a_t)
(st,at),输出
Q
π
(
s
t
,
a
t
)
Q^\pi(s_t,a_t)
Qπ(st,at),另一个输入
(
s
t
+
1
,
π
(
s
t
+
1
)
)
(s_{t + 1},\pi(s_{t + 1}))
(st+1,π(st+1))输出
Q
π
(
s
t
+
1
,
π
(
s
t
+
1
)
)
Q^\pi(s_{t + 1},\pi(s_{t + 1}))
Qπ(st+1,π(st+1)),然后训练是通过计算两个输出的差值和
r
t
r_t
rt计算损失得到的,但是此时不好训练,所以将第二个network固定住,第二个网络也叫做Target Network,当然Target Network也不是完全不更新,一般是将第一个网络更新一定次数之后再直接用第一个network的参数更新Target Network的参数,只是不要两个network一起参与训练;
Exploration:在第二种critic中,更新
π
\pi
π的方式是
π
′
(
s
)
=
a
r
g
m
a
x
a
Q
π
(
s
,
a
)
\pi'(s) = arg\ \underset{a}{max} Q^\pi(s,a)
π′(s)=argamaxQπ(s,a),由于结果是sample来进行的,所以会出现偏差,而且偏差会持续下去,一个比较实际的例子是进一家吃饭,点到一个还可以的饭,之后就会一直点他,但是可能还有更好吃的;所以要给这个过程添加一些扰动,有两种方法,其一是Epsilon Greedy:
a
=
{
a
r
g
m
a
x
a
Q
(
s
,
a
)
,
w
i
t
h
p
r
o
b
a
b
i
l
i
t
y
1
−
ϵ
r
a
n
d
o
m
o
t
e
h
r
w
i
s
e
a = \begin{cases}arg\ \underset{a}{max}Q(s,a),&with\ probability\ 1-\epsilon\\random & otehrwise\end{cases}
a={argamaxQ(s,a),randomwithprobability1−ϵotehrwise;另一种方法是Boltzmann Exploration:
P
(
a
∣
s
)
=
e
x
p
(
Q
(
s
,
a
)
)
∑
a
e
x
p
(
Q
(
s
,
a
)
)
P(a|s) = \frac{exp(Q(s,a))}{\sum_aexp(Q(s,a))}
P(a∣s)=∑aexp(Q(s,a))exp(Q(s,a))以确保尽管几率小,但是行为还是有概率被取到;
Q value is usually over-estimated:因为原来回归的目标
Q
(
s
t
,
a
t
)
→
r
t
+
m
a
x
a
Q
(
s
t
+
1
,
a
)
Q(s_t,a_t)\rightarrow r_t + \underset{a}{max}Q(s_{t + 1},a)
Q(st,at)→rt+amaxQ(st+1,a),这样每次都偏向于选择被高估的action来作为目标,缓解办法:double DQN,回归目标换成
Q
(
s
t
,
a
t
)
→
r
t
+
Q
′
(
s
t
+
1
,
a
r
g
m
a
x
a
Q
(
s
t
+
1
,
a
)
)
Q(s_t,a_t)\rightarrow r_t + Q'(s_{t + 1}, arg\ \underset{a}{max}Q(s_{t + 1},a))
Q(st,at)→rt+Q′(st+1,argamaxQ(st+1,a)),这个
Q
′
Q'
Q′就是Target Network;
Dueling DQN:修改了Network的架构,原来是直接输出Q value,现在是分为两条支路,分别输出
V
(
s
)
,
A
(
s
,
a
)
V(s),A(s,a)
V(s),A(s,a),最后的Q value是两个输出的加和,好处,现在假设更新了state,那么
V
(
s
)
V(s)
V(s)变化了,得到的Q value的值在每个state下都会变化,而不是只有在sample到对于state的情况下才能变化,在训练的时候还会加上constraint,
A
(
s
,
a
)
A(s,a)
A(s,a)对于某个state的加和为0;
action
a
a
a是一个连续的vector,此时解
a
=
a
r
g
m
a
x
a
Q
(
s
,
a
)
a = arg\ \underset{a}{max}Q(s,a)
a=argamaxQ(s,a)比较难,此时没有办法枚举所有action来算出哪一个action的value最大;
方法1:sample一个action集合,之后计算看那个action的Q value最大;
方法2:用梯度下降的方法来解上面那个优化问题;
方法3:专门设计一个network来使得上面的优化容易,对于
Q
π
Q^\pi
Qπ,输入state
s
s
s,输出
μ
(
s
)
,
∑
(
s
)
,
V
(
s
)
\mu(s),\sum(s),V(s)
μ(s),∑(s),V(s),分别是vector,matrix,scalar,最后的Q value的计算是
Q
(
s
,
a
)
=
−
(
a
−
μ
(
s
)
)
T
∑
(
s
)
(
a
−
μ
(
s
)
)
+
V
(
s
)
Q(s,a) = -(a - \mu(s))^T\sum(s)(a - \mu(s)) + V(s)
Q(s,a)=−(a−μ(s))T∑(s)(a−μ(s))+V(s),此时
μ
(
s
)
=
a
r
g
m
a
x
a
Q
(
s
,
a
)
\mu(s) = arg\ \underset{a}{max}Q(s,a)
μ(s)=argamaxQ(s,a),因为上面
Q
(
s
,
a
)
Q(s,a)
Q(s,a)的第一项一定是负的,越靠近0越好;