赞
踩
到目前为止,我们都是使用tables表示state和action values。例如,下表是action value的表示:
举个例子:假定有一个one-dimensional states
s
1
,
.
.
.
,
s
∣
S
∣
s_1,...,s_{|S|}
s1,...,s∣S∣,当
π
\pi
π是给定策略的时候,它们的state values是
v
π
(
s
1
)
,
.
.
.
,
v
π
(
s
∣
S
∣
)
v_\pi(s_1),...,v_\pi(s_{|S|})
vπ(s1),...,vπ(s∣S∣)。假设
∣
S
∣
|S|
∣S∣非常大,因此我们希望用一个简单的曲线近似它们的点以降低内存:
答案是可以的。
首先我们使用简单的straight line去拟合这些点。假设straight line的方程为
其中:
这样表示的好处是:
既然直线不够准确,那么是否可以使用高阶的曲线呢?当然可以。第二,我们使用一个second-order curve去拟合这些点:
在这种情况下:
当然,还可以继续增加阶数。第三,使用一个更加high-order polynomial curves(多项式曲线)或者其他复杂的曲线来拟合这些点:
小结一下:
首先,用一种更正式的方式:
The objective function is: J ( w ) = E [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] J(w)=\mathbb{E}[(v_\pi(S)-\hat{v}(S,w))^2] J(w)=E[(vπ(S)−v^(S,w))2]
第一种方式是使用一个uniform distribution.
第二种方式是使用stationary distribution
对于stationary distribution更多的介绍:
需要强调的是:
举个例子:如图所示,给定一个探索性的策略。让agent从一个状态出发然后跑很多次,根据这个策略,然后看一下会发生什么事情。
当我们有了目标函数,下一步就是优化它。为了最小化目标函数
J
(
w
)
J(w)
J(w),我们可以使用gradient-descent算法:
w
k
+
1
=
w
k
−
α
k
∇
w
J
(
w
k
)
w_{k+1}=w_k-\alpha_k\nabla_w J(w_k)
wk+1=wk−αk∇wJ(wk)它的true gradient是:
这个true gradient需要计算一个expectation。我们可以使用stochastic gradient替代the true gradient:
w
t
+
1
=
w
t
+
α
t
(
v
π
(
s
t
)
−
v
^
(
s
t
,
w
t
)
)
∇
w
v
^
(
s
t
,
w
t
)
w_{t+1}=w_t+\alpha_t (v_\pi(s_t)-\hat{v}(s_t,w_t))\nabla_w \hat{v}(s_t, w_t)
wt+1=wt+αt(vπ(st)−v^(st,wt))∇wv^(st,wt)其中
s
t
s_t
st是
S
\mathcal{S}
S的一个采样。这里
2
α
k
2\alpha_k
2αk合并到了
α
k
\alpha_k
αk。
那么如何进行代替呢?有两种方法:
TD learning with function approximation的伪代码:
该方法仅能估计在给定policy情况下的state values,但是对于后面的算法的理解是非常重要的。
如何选取函数 v ^ ( s , w ) \hat{v}(s,w) v^(s,w)?
在线性的情况中
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
\hat{v}(s,w)=\phi^T(s)w
v^(s,w)=ϕT(s)w,我们有
∇
w
v
^
(
s
t
,
w
t
)
=
ϕ
(
s
)
\nabla_w \hat{v}(s_t, w_t)=\phi(s)
∇wv^(st,wt)=ϕ(s)将这个带入到TD算法
w
t
+
1
=
w
t
+
α
t
[
r
t
+
1
+
γ
v
^
(
s
t
+
1
,
w
t
)
−
v
^
(
s
t
,
w
t
)
]
∇
w
v
^
(
s
t
,
w
t
)
w_{t+1}=w_t+\alpha_t[r_{t+1}+\gamma \hat{v}(s_{t+1}, w_t)-\hat{v}(s_t,w_t)]\nabla_w \hat{v}(s_t, w_t)
wt+1=wt+αt[rt+1+γv^(st+1,wt)−v^(st,wt)]∇wv^(st,wt)就变成了
w
t
+
1
=
w
t
+
α
t
[
r
t
+
1
+
γ
ϕ
T
(
s
t
+
1
)
w
t
−
ϕ
T
(
s
t
)
w
t
]
ϕ
(
s
t
)
w_{t+1}=w_t+\alpha_t[r_{t+1}+\gamma \phi^T(s_{t+1})w_t-\phi^T(s_t)w_t]\phi(s_t)
wt+1=wt+αt[rt+1+γϕT(st+1)wt−ϕT(st)wt]ϕ(st)这个具有线性函数近似的TD learning算法称为TD-Linear
。
线性函数近似的劣势是:
那么为什么tabular representation是linear function approximation的一种少见的特殊情况?
回顾TD-Linear算法: w t + 1 = w t + α t [ r t + 1 + γ ϕ T ( s t + 1 ) w t − ϕ T ( s t ) w t ] ϕ ( s t ) w_{t+1}=w_t+\alpha_t[r_{t+1}+\gamma \phi^T(s_{t+1})w_t-\phi^T(s_t)w_t]\phi(s_t) wt+1=wt+αt[rt+1+γϕT(st+1)wt−ϕT(st)wt]ϕ(st)
考虑一个5×5的网格世界示例:
Ground truth:
Experience samples:
为了对比,首先给出表格形式的TD算法(TD-Table)的结果:
那么看一下TD-Linear是否也能很好估计出来state value呢?
第一步就是要建立feature vector。要建立一个函数,这个函数也对应一个曲面,这个曲面能很好地拟合真实的state value对应的曲面。那么函数对应的曲面最简单的情况是什么呢?就是平面,所以这时候选择feature vector等于
ϕ
(
s
)
=
[
1
x
y
]
∈
R
3
\phi(s)=[1xy]\in \mathbb{R}^3
ϕ(s)=
1xy
∈R3在这种情况下,近似的state value是
v
^
(
s
,
w
)
=
ϕ
T
(
s
)
w
=
[
1
,
x
,
y
]
[
w
1
w
2
w
3
]
=
w
1
+
w
2
x
+
w
3
y
\hat{v}(s,w)=\phi^T(s)w=[1, x, y][w1w2w3] =w_1+w_2x+w_3y
v^(s,w)=ϕT(s)w=[1,x,y]
w1w2w3
=w1+w2x+w3y注意,
ϕ
(
s
)
\phi(s)
ϕ(s)也可以定义为
ϕ
(
s
)
=
[
x
,
y
,
1
]
T
\phi(s)=[x, y, 1]^T
ϕ(s)=[x,y,1]T,其中这里边的顺序是不重要的。
将刚才的feature vector带入TD-Linear算法中,得到:
为了提高近似能力,可以使用high-order feature vectors,这样也就有更多的参数。
通过higher-order feature vectors的TD-Linear算法的结果:
1)首先从一个objective function出发
J
(
w
)
=
E
[
(
v
π
(
S
)
−
v
^
(
S
,
w
)
)
2
]
J(w)=\mathbb{E}[(v_\pi(S)-\hat{v}(S, w))^2]
J(w)=E[(vπ(S)−v^(S,w))2]这个目标函数表明这是一个policy evaluation问题.
2)然后对这个objective function进行优化,优化方法使用gradient-descent algorithm:
w
t
+
1
=
w
t
+
α
t
(
v
π
(
s
t
)
−
v
^
(
s
t
,
w
t
)
)
∇
w
v
^
(
s
t
,
w
t
)
w_{t+1}=w_t+\alpha_t (v_\pi(s_t)-\hat{v}(s_t,w_t))\nabla_w \hat{v}(s_t, w_t)
wt+1=wt+αt(vπ(st)−v^(st,wt))∇wv^(st,wt)但是问题是里边有一个
v
π
(
s
t
)
v_\pi(s_t)
vπ(st)是不知道的。
3)第三,使用一个近似替代算法中的true value function
v
π
(
s
t
)
v_\pi(s_t)
vπ(st),得到下面算法:
w
t
+
1
=
w
t
+
α
t
[
r
t
+
1
+
γ
v
^
(
s
t
+
1
,
w
t
)
−
v
^
(
s
t
,
w
t
)
]
∇
w
v
^
(
s
t
,
w
t
)
w_{t+1}=w_t+\alpha_t[r_{t+1}+\gamma \hat{v}(s_{t+1}, w_t)-\hat{v}(s_t,w_t)]\nabla_w \hat{v}(s_t, w_t)
wt+1=wt+αt[rt+1+γv^(st+1,wt)−v^(st,wt)]∇wv^(st,wt)
尽管上面的思路对于理解基本思想是非常有帮助的,但是它在数学上是不严谨的,因为做了替换操作。
一个基本的结论,这个算法 w t + 1 = w t + α t [ r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ] ∇ w v ^ ( s t , w t ) w_{t+1}=w_t+\alpha_t[r_{t+1}+\gamma \hat{v}(s_{t+1}, w_t)-\hat{v}(s_t,w_t)]\nabla_w \hat{v}(s_t, w_t) wt+1=wt+αt[rt+1+γv^(st+1,wt)−v^(st,wt)]∇wv^(st,wt)不是去minimize下面的objective function: J ( w ) = E [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] J(w)=\mathbb{E}[(v_\pi(S)-\hat{v}(S, w))^2] J(w)=E[(vπ(S)−v^(S,w))2]
实际上,有多种objective functions:
简而言之,上面提到的TD-Linear算法在最小化projected Bellman error。
到目前为止,我们仅仅是考虑state value estimation的问题,也就是我们希望 v ^ ≈ v π \hat{v}\approx v_\pi v^≈vπ。为了搜索最优策略,我们需要估计action values。
The Sarsa algorithm with value function approximation是:
这个上一节介绍的TD算法是一样的,只不过将
v
^
\hat{v}
v^换成了
q
^
\hat{q}
q^
为了寻找最优策略,我们将policy evaluation(上面算法做的事儿)和policy improvement结合。下面给出Sarsa with function approximation的伪代码:
举个例子:
类似地,tabular Q-learning也可以扩展到value function approximation的情况。
The q-value更新规则是:
这与上面的Sarsa算法相同,除了
q
^
(
s
t
+
1
,
a
t
+
1
,
w
t
)
\hat{q}(s_{t+1}, a_{t+1}, w_t)
q^(st+1,at+1,wt)被替换为
max
a
∈
A
(
s
t
+
1
)
q
^
(
s
t
+
1
,
a
,
w
t
)
\max_{a\in \mathcal{A}(s_{t+1})}\hat{q}(s_{t+1}, a, w_t)
maxa∈A(st+1)q^(st+1,a,wt)。
Q-learning with function approximation伪代码(on-policy version):
举个例子:
Deep Q-learning算法又被称为deep Q-network (DQN):
为了简单起见,我们可以假设 w w w在 y y y中是固定的(至少一定时间内),当我们计算梯度的时候。为了这样做,我们引入两个network。
用这两个network吧上面目标函数中的两个
q
^
\hat{q}
q^区分开来,就得到了如下式子:
其中
w
T
w_T
wT是target network parameter。
当
w
T
w_T
wT是固定的,可以计算出来
J
J
J的梯度如下:
第一个技巧:使用了两个网络,一个是main network,另一个是target network。
为什么要使用两个网络呢?在数学上来说因为计算梯度的时候会非常的复杂,所以先去固定一个,然后再去计算另一个,这样就需要两个网络来实现。
具体实现的细节:
replay buffer
中draw一个mini-batch样本
{
(
s
,
a
,
r
,
s
′
)
}
\{(s,a,r,s')\}
{(s,a,r,s′)}另一个技巧:Experience replay
(经验回放)
问题:什么是Experience replay?
回答:
问题:为什么在deep Q-learning中要用experience replay?为什么replay必须要按照一个uniform distribution的方式?
回答:这个回答依赖于下面的objective function
回顾tabular的情况:
再次给出Deep Q-learning的伪代码(off-policy version):
需要澄清的几个问题:
举个例子:目标是learn optimal action values for every state-action pair。一旦得到最优策略,最优greedy策略可以立即得到。
问题设置:
仿真结果:
如果我们仅仅使用100步的一个single episode将会发生什么?也就是数据不充分的情况
可以看出,好的算法是需要充分的数据才能体现效果的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。