David Silver Lecture 6 | Value Function Approximation
参考:https://zhuanlan.zhihu.com/p/28223841
1. Introduction
我们之前的方法都是通过查表实现的。
- Every state s s s has an entry V(s)
- Or every state-action pair (s,a) has an entry Q(s,a)
为了避免在大规模数据上的复杂度过高,我们今天学习另外一种方法:Value Function Approximation。
即,用神经网络来拟合出这个Value Function和Q Function
v
^
(
s
,
w
)
≈
v
π
(
s
)
\hat{v}(s,w)\approx v_\pi(s)
v^(s,w)≈vπ(s)
q
^
(
s
,
a
,
w
)
≈
q
π
(
s
,
a
)
\hat{q}(s,a,w)\approx q_\pi(s,a)
q^(s,a,w)≈qπ(s,a)
我们也可以输入s,输出不同动作a的q值:
q
^
(
s
,
a
1
,
w
)
\hat{q}(s,a_1,w)
q^(s,a1,w)
- 其中w是用于拟合的参数。
- 这种方法的好处是可以对没有见过的状态能有一定的推测。
- 我们可以用MC或者TD learning来更新参数 w w w。
三种架构
- 针对状态本身,输出这个状态的近似价值;
- 针对状态行为对,输出状态行为对的近似价值;
- 针对状态本身,输出一个向量,向量中的每一个元素是该状态下采取一种可能行为的价值。
常见的Funcion Approximator的手段
- Linear combinations of features
- Neural network
- Decision tree
- Nearest neighbor
- Fourrier / wavelet basses
在本讲中,我们将考虑前两类,即用可导函数来做Approximation。
强化学习应用的场景其数据通常是非静态、非独立均匀分布的,因为一个状态数据是可能是持续流入的,而且下一个状态通常与前一个状态是高度相关的。因此,我们需要一个适用于非静态、非独立均匀分布的数据的训练方法来得到近似函数。
2. Incremental Methods
2.1 Value Function 预测 | Gradient Descent
J梯度的定义:(J是一个从空间V到
R
\mathbb{R}
R的函数)
调整参数超朝着负梯度的方向,寻找J(w)的局部最小值:
我们代价函数定义为找到参数向量
w
w
w,以最小化近似函数
v
^
(
S
,
w
)
\hat{v}(S,w)
v^(S,w)与实际函数
v
π
(
s
)
v_\pi(s)
vπ(s)之间的均方差。
由前两个公式可以得到
Δ
w
\Delta w
Δw具体的计算公式:
类似之前用平均值代替期望的方法,我们可以使用随机梯度下降对梯度进行更新,来近似差的期望:
其中
v
π
(
s
)
v_\pi(s)
vπ(s)是未知的
下面分别给出了计算 v ^ ( S , w ) \hat{v}(S,w) v^(S,w)和 v π ( S ) v_\pi(S) vπ(S)的方法。
2.1.1 v ^ ( S , w ) \hat{v}(S,w) v^(S,w): Feature Vectors | Linear Function Approximation
S -> x(S) -Linear Function-> v ^ ( S , w ) \hat{v}(S,w) v^(S,w)
Feature Vector:
用一个特征向量表示一个状态,每一个状态是由以w表示的不同强度的特征来线性组合得到:
现在假设我们已经有一个Feature Vector。
一种方法是通过线性函数来近似:
此时我们的目标函数可以写为:
优点:我们的目标是Quadratic的(Convex)。
此时,我们梯度下降的公式为
参数更新量 = 步长(
α
\alpha
α) × 预测误差 × 特征值
Table Lookup Features
查表(Table Lookup)也是一种特殊的线性函数近似,每一个状态对应一个参数(该状态的估计价值。)
2.1.2 v π ( S ) v_\pi(S) vπ(S): MC | TD 得到Target
在前面的课上,我们学过了利用MC和TD来估计
v
π
(
S
)
v_\pi(S)
vπ(S)
对于MC算法,目标值就是收获:
对于TD(0),目标值就是TD目标:
对于TD(λ),目标值是λ收获:
MC with Value Function Approximation
收获
G
t
G_t
Gt是真实价值
V
π
(
S
t
)
V_\pi(S_t)
Vπ(St)的有噪声、无偏采样,可以把它看成是监督学习的标签数据带入机器学习算法进行学习,这样训练数据集可以是:
此时,我们对参数更新的方法为:(第二个等号是假设我们的
v
^
(
S
t
,
w
)
\hat{v}(S_t,w)
v^(St,w)是线性的)
蒙特卡洛策略迭代即使使用线性函数近似时也是收敛至一个局部最优解。
TD Learning with Value Function Approximation
TD目标值是真实价值的有噪声、有偏采样。此时的训练数据集是:
如果使用线性TD(0)学习,则有:
我们引入了
δ = R + γ v ^ ( S ′ , w ) − v ^ ( S , w ) \delta = R + \gamma \hat{v}(S',w) - \hat{v}(S,w) δ=R+γv^(S′,w)−v^(S,w)
有人证明了:线性TD(0)近似收敛至全局最优解。
TD ( λ ) (\lambda) (λ)
TD(λ)目标值是真实价值的有噪声、有偏采样。此时的训练数据集是:
如果使用线性TD(λ)学习,从前向认识看,有:
如果使用线性TD(λ)学习,从反向认识看(用Eligibility Traces),有:
如果等到一个episode结束,即对于一个完整的Episode,TD(λ)的前向认识和反向认识对于w的改变是等效的。
2.2 Control with Value Function Approximation 控制
在2.1中,我们利用了梯度的方法解决了估计一个特定策略 π \pi π下的价值函数 v π ( S ) v_\pi(S) vπ(S)。在本节中,我们解决的问题是如果根据一个特定策略下的价值函数来优化我们的策略。
从一系列参数开始,得到一个近似的状态行为对价值函数,在Ɛ-greedy执行策略下产生一个行为,执行该行为得到一个即时奖励,以此数据计算目标值,进行近似函数参数的更新。再应用这个策略得到后续的状态和对应的目标值,每经历一次状态就更新依次参数,如此反复进行策略的优化,同时逼近最优价值函数。
因此,一种思路是:
- 策略评估:是一个近似策略评估 q ^ ( . , . , w ) ≈ q π \hat{q}(.,.,w)\approx q_\pi q^(.,.,w)≈qπ ,特别是早期误差会较大,而且这种近似无法最终收敛于最优策略对应的行为价值函数,只能在其周围震荡,后文将讲述改进方法。
- 策略改善:使用Ɛ-greedy执行。
2.2.1 q ^ ( S , A , w ) \hat{q}(S,A,w) q^(S,A,w) Action-Value Function Approximation
我们希望用一个待参数的方法(神经网络)来估计
q
π
(
S
,
A
)
q_\pi(S,A)
qπ(S,A)
类似前面Value Function估计的方法,我们定义损失函数:
我们依旧使用随机梯度下降:(下面的公式跟之前Value Function是一样的,就是把V换成了q)
线性函数近似
如此,线性特征组合的状态行为价值近似函数可以表示为:
随机梯度下降更新参数:
借用之前得到的梯度更新的公式
最后得到:
2.2.2 q π ( S , A ) q_\pi(S,A) qπ(S,A) | MC,TD
这里也和之前Value Function类似
对于MC算法,目标值就是收获:
对于TD(0),目标值就是TD目标:
对于前向认识TD(λ),目标值是λ收获:
对于后向认识TD(λ),对应的参数更新是:
例子:Linear Sarsa in Mountain Car
状态空间:小车的位置和速度。在这个例子中,行为空间是离散的,只能选则正向的最大油门和反向的最大油门两个离散值。
图上表示的是:小车位于某个位置同时具有某个速度的状态价值。
这个例子中应用了: Coarse Code来展示。
最后的结果:
V
π
(
S
)
V_\pi(S)
Vπ(S)
例子:需要Bootstrap吗?
下图显示了几种不同的任务,使用不同λ进行的强化学习算法分析结果。总的来说λ=1(MC)的时候通常算法表现是很差的,TD(0)是比MC好得多的方法,这说明了Bootstrap的重要性;不同的任务对应的最优λ值是不太容易确定的。
例子:Baird’s Counterexample
TD并不保证参数收敛。
不同Prediction算法的收敛性
- MC使用的是实际价值的有噪声无偏估计,虽然很多时候表现很差,但总能收敛至局部或全局最优解。
- TD性能通常更加优秀,是否意味着TD也是一直收敛的呢?答案是否定的。
Rq:
- 在不用函数近似的时候,各个算法都收敛
- 线性函数近似时on-policy策略学习可以收敛,但off-policy策略时仅有MC收敛
为此产生了Gradient TD这个算法,使得个情况下都收敛。(TD算法在更新参数时不遵循任何目标函数的梯度是导致它在离线策略或使用非线性近似函数可能会发散的原因,我们可以通过修改TD算法使得它遵循Projected Bellman Error的梯度进而收敛。)
不同Control算法的收敛性
- (√) 表示在最优价值函数附近震荡
针对控制学习算法,大多数都能得到较好的策略,但是理论上只要存在函数近似,就都不是严格收敛的,比较常见的是在最优策略上下震荡,逐渐逼近然后突然来一次发散,再逐渐逼近等。使用非线性函数近似的效果要比近似函数要差很多,实际也是如此。
3. Batch Methods
之前Incremental Methods的问题:
- Not sample efficient,我们每经历一步就马上更新,然后扔掉这步的数据。而Batch Methods则把一段时期内的数据集中起来,这里的训练数据集“块”相当于个体的一段经验。
- Batch methods seek to find the best fit function 如最小二乘法
3.1 Least Squares Prediction
目的:预测value function v ^ ( S , w ) ≈ v π ( s ) \hat{v}(S,w)\approx v_\pi(s) v^(S,w)≈vπ(s)
Experience
D
\mathcal{D}
D
包含了一段时间[1,T]的<State,V(S)>
,V(s)是在给定策略下的。
我们损失函数和目的:
L S ( w ) = ∑ t = 1 T ( v t π − v ^ ( s t , w ) ) 2 m i n w ( L S ( w ) ) LS(w)=\sum_{t=1}^T (v^\pi_t-\hat{v}(s_t,w))^2\\ min_w(LS(w)) LS(w)=t=1∑T(vtπ−v^(st,w))2minw(LS(w))
直觉上讲,我们的做法是把一段时期内的经历重新过一遍(Experience Replay),再找到最适合这一段经历的参数 w w w。
Experience Replay
我们存储过去的经验(state,V(s) under certain policy)
伪代码:
- Repeat:
- Sample state value from experience < s , v π > ∼ D <s,v^\pi> \sim \mathcal{D} <s,vπ>∼D
- 应用梯度下降: Δ w = α ( v π − v ^ ( s , w ) ) ∇ w v ^ ( s , w ) \Delta w = \alpha (v^\pi - \hat{v}(s,w)) \nabla_w \hat{v}(s,w) Δw=α(vπ−v^(s,w))∇wv^(s,w) (这里应该是一个Batch上的。)
- 最后收敛到 w π = a r g m i n w L S ( w ) w^\pi = argmin_w LS(w) wπ=argminwLS(w)
3.2 Deep Q-Networks (DQN)
此处提到DQN的目的是为了强调Experience Replay的重要性。
- Experience Replay和Fixed Q-targets使得神经网络变得更加稳定
- Experience Replay的作用是: Decorrelates the trajectories. 有可能是Episode 1中出现的动作和Episode 2中出现的动作放在一起进行训练。
- Fixed Q-targets, 冻结之前的Network。避免改变Q(s,a,w)同时导致优化目标的变化。经过一次批计算后,把冻结参数的网络换成更新的参数 w w w再次冻结产生新一次迭代时要用的目标值。
DQN算法要点:
- 依据Ɛ-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
- 从D中选取样本数据(如64个) ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s′)
- 维护两个神经网络DQN1,DQN2,一个网络固定参数专门用来产生目标值,目标值相当于标签数据。另一个网络专门用来评估策略,更新参数。
- 优化关于Q网络和Q目标值之间的最小平方差:
其中, w i − w_i^- wi−在学习过程中是固定的, w i w_i wi是动态更新的参数。 - 用随机梯度下降的方式更新参数。
具体作用:
3.3 Linear Least Squares Prediction
我们采用线性的方法估计 ∇ w v ^ ( s , w ) = x ( s ) T w \nabla_w \hat{v}(s,w)=x(s)^T w ∇wv^(s,w)=x(s)Tw
我们可以直接求解出
w
π
w^\pi
wπ要满足的必要条件:更新的期望为0。
这种方法直接求解的时间复杂度是 O ( N 3 ) O(N^3) O(N3),使用Shermann-Morrison法求解复杂度是 O ( N 2 ) O(N^2) O(N2),n是特征数量,这意味着求解该问题的难度与设计的特征数量多少有关,而与状态空间大小无关,因此适合应用与那些特征较少的问题。
将这种方法分别应用于MC, TD, 和TD()学习方法,就分别得到LSMC, LSTD, 和LSTD(λ)。 (LS = Linear Least Square)
各算法收敛性:
3.4 Least Squares Policy Iteration
策略评估:最小平方差Q学习
策略改善:Greedy 搜索策略。
如果使用最小平方差方法进行策略控制,我们必须要设计针对行为价值函数的线性近似:
q ^ ( s , a , w ) = x ( s , a ) T w ≈ q π ( s , a ) \hat{q}(s,a,w) = x(s,a)^T w \approx q_\pi(s,a) q^(s,a,w)=x(s,a)Tw≈qπ(s,a)
使用
最小化
q
^
(
s
,
a
,
w
)
\hat{q}(s,a,w)
q^(s,a,w)和
q
π
(
s
,
a
)
q_\pi(s,a)
qπ(s,a)的平方差。
Least Squares Control