六、价值函数的近似表示
对于状态数量较多/连续状态很难用离散形式表示,所以需要找到一个函数(线性函数,神经网络等)来近似表示价值函数:
使得, v ( s ) ≈ v ( s , w ) v(s) \approx v(s, w) v(s)≈v(s,w) or q ( s , a ) ≈ q ( s , a , w ) q(s, a) \approx q(s, a, w) q(s,a)≈q(s,a,w)
ω \omega ω表示引入的参数,通常是一个矩阵或至少是一个向量。
价值函数的近似表示主要有两种方法:递增方法和批处理。“递增方法”,针对每一步,近似函数得到一些信息,立即优化近似函数,主要用于在线学习;“批方法”,针对一批历史数据集中进行近似。
递增方法:
目标:找到参数向量
ω
\omega
ω, 最小化近似函数
v
^
(
S
,
w
)
\hat{v}(S, w)
v^(S,w) 与实际函数
v
π
(
S
)
v_{\pi}(S)
vπ(S)的均方差(最小化代价函数):
J
(
w
)
=
E
π
[
(
v
π
(
S
)
−
v
^
(
S
,
w
)
)
2
]
Δ
w
=
−
1
2
α
∇
w
J
(
w
)
w
t
+
1
=
w
t
+
Δ
w
J(\mathbf{w})=\mathbb{E}_{\pi}\left[\left(v_{\pi}(S)-\hat{v}(S, \mathbf{w})\right)^{2}\right]\\ \begin{aligned} \Delta \mathbf{w} &=-\frac{1}{2} \alpha \nabla_{\mathbf{w}} J(\mathbf{w}) \\ \mathbf{w}_{t+1} &=\mathbf{w}_{t}+\Delta \mathbf{w} \end{aligned}
J(w)=Eπ[(vπ(S)−v^(S,w))2]Δwwt+1=−21α∇wJ(w)=wt+Δw
方法:通过梯度下降进行求解
用特征向量x(s)表示状态,向量的元素表示不同维度的特征
x
(
S
)
=
(
x
1
(
S
)
⋮
x
n
(
S
)
)
\mathbf{x}(S)=\left(\begin{array}{c} \mathbf{x}_{1}(S) \\ \vdots \\ \mathbf{x}_{n}(S) \end{array}\right)
x(S)=⎝⎜⎛x1(S)⋮xn(S)⎠⎟⎞
- 线性近似函数:
通过对特征向量中的元素线性求和表示价值函数:
v
^
(
S
,
w
)
=
x
(
S
)
⊤
w
=
∑
j
=
1
n
x
j
(
S
)
w
j
\hat{v}(S, \mathbf{w})=\mathbf{x}(S)^{\top} \mathbf{w}=\sum_{j=1}^{n} \mathbf{x}_{j}(S) \mathbf{w}_{j}
v^(S,w)=x(S)⊤w=j=1∑nxj(S)wj
因此,代价函数为:
J
(
w
)
=
E
π
[
(
v
π
(
S
)
−
x
(
S
)
⊤
w
)
2
]
Δ
w
=
α
(
v
π
(
s
)
−
v
^
(
s
,
w
)
)
x
(
s
)
J(\mathbf{w})=\mathbb{E}_{\pi}\left[\left(v_{\pi}(S)-\mathbf{x}(S)^{\top} \mathbf{w}\right)^{2}\right]\\ \Delta \mathbf{w}= \alpha(v^\pi(s) - \hat{v}(s,w))x(s)
J(w)=Eπ[(vπ(S)−x(S)⊤w)2]Δw=α(vπ(s)−v^(s,w))x(s)
Update (
Δ
w
\Delta w
Δw)= StepSize × PredictionError × FeatureValue
通过SGD可以求得全局最优,因为在线性近似函数中只可能有一个最优值,因此局部最优一定能收敛到全局最优
比如查表可以转化为线性函数近似
model-free policy evaluation策略评估中,一般没有实际真实的价值,只能通过预估得到的目标值表示收获,
对于MC, 目标值就是收获:
Δ
w
=
α
(
G
t
−
v
^
(
S
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(G_{t}-\hat{v}\left(S_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Gt−v^(St,w))∇wv^(St,w)
对于
T
D
(
0
)
\mathrm{TD}(0)
TD(0), 目标值就是TD目标值:
Δ
w
=
α
(
R
t
+
1
+
γ
v
^
(
S
t
+
1
,
w
)
−
v
^
(
S
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(R_{t+1}+\gamma \hat{v}\left(S_{t+1}, \mathbf{w}\right)-\hat{v}\left(S_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Rt+1+γv^(St+1,w)−v^(St,w))∇wv^(St,w)
对于
T
D
(
λ
)
\mathrm{TD}(\lambda)
TD(λ), 目标值是 $\lambda $收获 :
Δ
w
=
α
(
G
t
λ
−
v
^
(
S
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(G_{t}^{\lambda}-\hat{v}\left(S_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Gtλ−v^(St,w))∇wv^(St,w)
MC使用的数据是有噪声、无偏采样,近似价值函数得到局部最优,在线性和非线性近似函数中都收敛
TD(0)和TD( λ \lambda λ)使用的是有噪声、有偏采样,得到全局最优。
model-free policy improvement 策略迭代:采用 ϵ − \epsilon- ϵ−贪婪策略
- 近似价值函数控制算法:
行为价值近似函数: q ^ ( S , A , w ) ≈ q π ( S , A ) \hat{q}(S, A, \mathbf{w}) \approx q_{\pi}(S, A) q^(S,A,w)≈qπ(S,A)
通过均方差来优化:
J
(
w
)
=
E
π
[
(
q
π
(
s
,
a
)
−
q
^
(
s
,
a
,
w
)
)
2
]
Δ
w
=
α
(
q
π
(
s
,
a
)
−
a
^
(
s
,
a
,
w
)
)
∇
w
q
^
(
s
,
a
,
w
)
J(\mathbf{w})=\mathbb{E}_{\pi}\left[\left(q_{\pi}(s,a)-\hat{q}(s,a,w)\right)^{2}\right]\\ \Delta \mathbf{w}= \alpha(q^\pi(s,a) - \hat{a}(s,a,w))\nabla_w\hat{q}(s,a,w)
J(w)=Eπ[(qπ(s,a)−q^(s,a,w))2]Δw=α(qπ(s,a)−a^(s,a,w))∇wq^(s,a,w)
**递增控制算法:**每输入一个样本就优化更新一次
线性近似函数: Δ w = α ( q π ( s , a ) − a ^ ( s , a , w ) ) x ( s , a ) \Delta \mathbf{w}= \alpha(q^\pi(s,a) - \hat{a}(s,a,w))x(s,a) Δw=α(qπ(s,a)−a^(s,a,w))x(s,a)
对于MC, 目标值就是收获:
Δ
w
=
α
(
G
t
−
v
^
(
S
t
,
A
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(G_{t}-\hat{v}\left(S_{t}, A_{t},\mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Gt−v^(St,At,w))∇wv^(St,w)
对于
T
D
(
0
)
\mathrm{TD}(0)
TD(0), 目标值就是TD目标值:
Δ
w
=
α
(
R
t
+
1
+
γ
v
^
(
S
t
+
1
,
A
t
+
1
,
w
)
−
v
^
(
S
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(R_{t+1}+\gamma \hat{v}\left(S_{t+1},A_{t+1}, \mathbf{w}\right)-\hat{v}\left(S_{t}, \mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Rt+1+γv^(St+1,At+1,w)−v^(St,w))∇wv^(St,w)
对于
T
D
(
λ
)
\mathrm{TD}(\lambda)
TD(λ), 目标值是 $\lambda $收获 :
Δ
w
=
α
(
G
t
λ
−
v
^
(
S
t
,
A
t
,
w
)
)
∇
w
v
^
(
S
t
,
w
)
\Delta \mathbf{w}=\alpha\left(G_{t}^{\lambda}-\hat{v}\left(S_{t}, A_{t},\mathbf{w}\right)\right) \nabla_{\mathbf{w}} \hat{v}\left(S_{t}, \mathbf{w}\right)
Δw=α(Gtλ−v^(St,At,w))∇wv^(St,w)
基于TD学习方式(Sarsa, Q-learning)的近似函数在非线形情况下或者离线策略学习很容易发散,因为在计算目标值时进行预测(此时还包含没有训练完成的参数w),所以参数w和目标值都是不确定的。
批方法:
批方法则是把一段时期内的数据集中起来,通过学习来使得参数能较好地符合这段时期内所有的数据。
近似价值函数: v ^ ( s , w ) ≈ v π ( s ) \hat{v}(s, \mathbf{w}) \approx v_\pi(s) v^(s,w)≈vπ(s)
最小均方差的预测和控制:
最小平方差:
L
S
(
w
)
=
a
r
g
m
i
n
∑
t
=
1
T
(
v
t
π
−
v
^
(
s
t
,
w
)
)
2
LS(\mathbf{w} )=argmin\sum_{t=1}^{T}(v_t^\pi - \hat{v}(s_{t}, \mathbf{w}))^2
LS(w)=argmint=1∑T(vtπ−v^(st,w))2
采用了经历重现(experience replay):随机从一段时期内的经历采样一个mini-batch作为数据,使用SGD进行训练更新参数。
- DQN
TD在非线性近似函数中使用可能不会收敛,但DQN可以。
DQN(深度Q网络):使用了经历重现 和 固定的q目标值,可以收敛并具有鲁棒性。
步骤:
-
依据Ɛ-greedy执行策略决定t时刻的行为;
-
将大量经历序列 ( s t , a t , r t + 1 , s t + 1 ) (s_t, a_t, r_{t+1}, s_{t+1}) (st,at,rt+1,st+1)存储在记忆D里
-
再从记忆中随机抽取部分数据存储在replay buffer中作为批数据(mini-batch),
-
计算Q-learning目标值
-
最小化Q网络和Q目标值之间的均方差:
L i ( w i ) = E s , a , r , s ′ ∼ D i [ ( r + γ max a ′ Q ( s ′ , a ′ ; w i − ) − Q ( s , a ; w i ) ) 2 ] \mathcal{L}_{i}\left(w_{i}\right)=\mathbb{E}_{s, a, r, s^{\prime} \sim \mathcal{D}_{i}}\left[\left(r+\gamma \max _{a^{\prime}} Q\left(s^{\prime}, a^{\prime} ; w_{i}^{-}\right)-Q\left(s, a ; w_{i}\right)\right)^{2}\right] Li(wi)=Es,a,r,s′∼Di[(r+γa′maxQ(s′,a′;wi−)−Q(s,a;wi))2]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwDAFmnx-1636285184765)(https://www.zhihu.com/equation?tex=w%5E-)] 在批学习过程中是固定的, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5G11ASS-1636285184767)(https://www.zhihu.com/equation?tex=w_i)] 则是动态更新的参数。 -
使用随机梯度下降(SGD)更新参数
采用experience replay的好处:
经验是可以重复利用的,而如果不使用经验回放则每个片段transition ( s t , a t , r t + 1 , s t + 1 ) (s_t, a_t, r_{t+1}, s_{t+1}) (st,at,rt+1,st+1)只使用一次,造成经验浪费。
从以往的记忆中随机采样批处理的数据打破了状态之间的联系,因为 s t s_t st和 s t + 1 s_{t+1} st+1的状态序列非常相似,这种相关性是有害的(可以理解为样本不够多样化,容易导致过拟合);
replay buffer:
在buffer内数据达到设定值后才会开始学习。
当buffer存满后,每进入一条新的数据,就删除一条最老的数据。
在DQN中可以理解为有2个网络:
Behavior_Q网络:决定下一步采取的动作和target_Q网络:求解收获的目标值
Behavior_Q网络的参数根据训练不断更新参数(优化策略)
target_Q网络的参数在训练时冻结,当训练一段时间后再更新(如训练完一个mini-batch后)
这样可以充分发挥off-policy的优势,behavior policy 用来搜集经验数据,而 target policy 只专注于价值最大化。
神经网络会暂时冻结参数,我们从冻结参数的网络而不是从正在更新参数的网络中获取目标值,这样增加了算法的稳定性。
经过一次批计算后,把冻结参数的网络换成更新的参数后再次冻结,从而计算新一次迭代时要用的目标值。
DQN的缺点:对Q目标值过高估计
基于DQN的改进:
- Doubel DQN
- Dueling DQN
- Prioritized Replay:主要学习TD error较大的数据
DDQN:
DDQN和DQN的网络结构基本一样
DDQN和DQN的区别就是在计算Q-target时,在寻找后续状态的下一步动作时,直接利用Behavior_Q网络找到后续状态的最大价值行为,然后再带入到target_Q中计算目标值。
DQN:在target_Q网络中找后续状态的最大价值的动作
Q
target
(
S
t
,
A
t
)
=
R
t
+
γ
max
Q
(
S
t
′
,
A
t
′
;
θ
−
)
Q_{\text {target }}\left(S_{t}, A_{t}\right)=R_{t}+\gamma \max Q\left(S_{t}^{\prime},A_{t}^{\prime} ; \theta^{-}\right)
Qtarget (St,At)=Rt+γmaxQ(St′,At′;θ−)
DDQN:在behavior_Q网络中找后续状态的最大价值的动作
Q
target
(
S
t
,
A
t
)
=
R
t
+
γ
Q
(
S
t
′
,
max
a
′
Q
(
S
t
′
,
a
′
;
θ
)
;
θ
−
)
Q_{\text {target }}\left(S_{t}, A_{t}\right)=R_{t}+\gamma Q\left(S_{t}^{\prime}, \max _{a^{\prime}} Q\left(S_{t}^{\prime}, a^{\prime} ; \theta\right) ; \theta^{-}\right)
Qtarget (St,At)=Rt+γQ(St′,a′maxQ(St′,a′;θ);θ−)