知识六:强化学习-价值函数的近似
6.1 介绍
6.1.1 大规模强化学习
- 我们希望用强化学习来解决一些大型问题,例如:
- Backgammon: 1 0 20 10^{20} 1020个状态
- Computer Go: 1 0 170 10^{170} 10170个状态
- Helicopter:连续状态空间
- 如何将强化学习应用到这类大型问题种,实现预测和控制呢?
6.1.2 价值函数逼近
-
大型 MDPs 的问题:
- 状态或者行动太多,无法全部存储在内存中
- 针对每一个状态学习得到价值也是一个很慢的过程
-
所以Q表方法用在大型 MDPs 方法是有问题的。
-
解决大型MDPs的方法:
-
用函数逼近来评估每个价值函数
-
v ^ ( s , w ) ≈ v π ( s ) o r q ^ ( s , a , w ) ≈ q π ( s , a ) \begin{aligned}\hat{v}(s,\mathbf{w})&\approx v_\pi(s)\\\mathrm{or~}\hat{q}(s,a,\mathbf{w})&\approx q_\pi(s,a)\end{aligned} v^(s,w)or q^(s,a,w)≈vπ(s)≈qπ(s,a)
-
可以用已知状态学到的价值函数插值出未见过状态的价值
-
用 MC 或 TD 学习来更新函数参数 w w w
-
解决了两个问题,是Q表过大的问题和所有状态和动作可见的问题。
-
6.1.3 价值函数逼近的类型
- 很多函数逼近方法可以被考虑,例如:
- 特征的线性组合
- 神经网络
- 决策树
- 最近邻法
- 傅里叶基/小波基
6.1.4 函数逼近器
- 考虑可微分函数逼近器,例如:
- 特征的线性组合
- 神经网络
- 决策树
- 最近邻法
- 傅里叶基/小波基
- 此外,我们需要一种适用于非平稳,非独立同分布数据的训练方法
6.2 增量式方法
- 一般使用梯度下降法求解非线性的最小二乘问题
6.2.1 用随机梯度下降进行价值函数逼近
- 目标:找到参数向量 w w w,最小化近似价值函数 v ^ ( S , W ) \hat{v}(S,W) v^(S,W)与真实价值函数 ν π ( s ) \nu_{\pi}(s) νπ(s)的均方差
J ( w ) = E π [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(v_\pi(S)-\hat{v}(S,\mathbf{w}))^2\right] J(w)=Eπ[(vπ(S)−v^(S,w))2]
- 通过梯度下降能够找到局部最小值
Δ w = − 1 2 α ∇ w J ( w ) = α E π [ ( v π ( S ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) ] \begin{aligned} \Delta w& =-\frac12\alpha\nabla_\mathbf{w}J(\mathbf{w}) \\ &=\alpha\mathbb{E}_\pi\left[(v_\pi(S)-\hat{v}(S,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(S,\mathbf{w})\right] \end{aligned} Δw=−21α∇wJ(w)=αEπ[(vπ(S)−v^(S,w))∇wv^(S,w)]
- 使用随机梯度下降对梯度进行采样
Δ w = α ( v π ( S ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) \Delta\mathbf{w}=\alpha(v_\pi(S)-\hat{v}(S,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(S,\mathbf{w}) Δw=α(vπ(S)−v^(S,w))∇wv^(S,w)
- 期望更新等于全部梯度更新
6.2.2 特征向量
- 用特征向量表示状态
x ( S ) = ( x 1 ( S ) ⋮ x n ( S ) ) \mathbf{x}(S)=\begin{pmatrix}\mathbf{x}_1(S)\\\vdots\\\mathbf{x}_n(S)\end{pmatrix} x(S)= x1(S)⋮xn(S)
- 以直升机控制问题为例:
- 3D位置
- 3D速度(位置的变化量)
- 3D加速度(速度的变化量)
6.2.3 线性价值函数逼近
- 通过特征的线性组合表示值函数
v ^ ( S , w ) = x ( S ) ⊤ w = ∑ i = 1 n x j ( S ) w j \hat{v}(S,\mathbf{w})=\mathbf{x}(S)^\top\mathbf{w}=\sum_{i=1}^n\mathbf{x}_j(S)\mathbf{w}_j v^(S,w)=x(S)⊤w=i=1∑nxj(S)wj
- 参数为 w w w的目标函数是二次函数
J ( w ) = E π [ ( v π ( S ) − x ( S ) ⊤ w ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(v_\pi(S)-\mathbf{x}(S)^\top\mathbf{w})^2\right] J(w)=Eπ[(vπ(S)−x(S)⊤w)2]
- 随机梯度下降收敛于全局最优
- 更新规则
∇ w v ^ ( S , w ) = x ( S ) Δ w = α ( v π ( S ) − v ^ ( S , w ) ) x ( S ) \begin{aligned}\nabla_{\mathbf{w}}\hat{v}(S,\mathbf{w})&=\mathbf{x}(S)\\\Delta\mathbf{w}&=\alpha(v_{\pi}(S)-\hat{v}(S,\mathbf{w}))\mathbf{x}(S)\end{aligned} ∇wv^(S,w)Δw=x(S)=α(vπ(S)−v^(S,w))x(S)
更新=步长 × \times ×预测误差 × \times ×特征
6.2.4 查表法
-
查表法是线性函数逼近的一种特殊情况
-
使用表查找特征
x t a b l e ( S ) = ( 1 ( S = s 1 ) ⋮ 1 ( S = s n ) ) \mathbf{x}^{table}(S)=\begin{pmatrix}\mathbf{1}(S=s_1)\\\vdots\\\mathbf{1}(S=s_n)\end{pmatrix} xtable(S)= 1(S=s1)⋮1(S=sn) -
参数向量 w w w给出每个状态的值
v ^ ( S , w ) = ( 1 ( S = s 1 ) ⋮ 1 ( S = s n ) ) ⋅ ( w 1 ⋮ w n ) \hat v(S,\mathbf{w})=\begin{pmatrix}\mathbf{1}(S=s_1)\\\vdots\\\mathbf{1}(S=s_n)\end{pmatrix}\cdot\begin{pmatrix}\mathbf{w}_1\\\vdots\\\mathbf{w}_n\end{pmatrix} v^(S,w)= 1(S=s1)⋮1(S=sn) ⋅ w1⋮wn
6.2.5 增量式预测算法
-
给定了真正的值函数 V π ( s ) V_\pi (s) Vπ(s) ,该问题可以建模为一个典型的有监督学习问题
-
但是在 RL 中没有监督,只有奖励
-
实际计算时,使用target代替 V π ( s ) V_\pi (s) Vπ(s)
-
在 MC 中,target是回报 G t G_{t} Gt(梯度更新方法)
-
Δ w = α ( G t − v ^ ( S t , w ) ) ∇ w v ^ ( S t , w ) \Delta\mathbf{w}=\alpha(G_t-\hat{v}(S_t,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(S_t,\mathbf{w}) Δw=α(Gt−v^(St,w))∇wv^(St,w)
-
在TD(0)中target是TD target(半梯度更新方法)
-
Δ w = α ( R t + 1 + γ v ^ ( S t + 1 , w ) − v ^ ( S t , w ) ) ∇ w v ^ ( S t , w ) \Delta\mathbf{w}=\alpha(R_{t+1}+\gamma\hat{v}(S_{t+1},\mathbf{w})-\hat{v}(S_t,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(S_t,\mathbf{w}) Δw=α(Rt+1+γv^(St+1,w)−v^(St,w))∇wv^(St,w)
-
6.2.6 蒙特卡洛学习的价值函数逼近
- 回报 G t G_{t} Gt实对真实价值 V π ( s ) V_\pi (s) Vπ(s)的无偏估计
- 因此,可以采用监督学习的方式使用“训练数据”
⟨ S 1 , G 1 ⟩ , ⟨ S 2 , G 2 ⟩ , . . . , ⟨ S T , G T ⟩ \langle S_1,G_1\rangle,\langle S_2,G_2\rangle,...,\langle S_T,G_T\rangle ⟨S1,G1⟩,⟨S2,G2⟩,...,⟨ST,GT⟩
- 例如,使用线性蒙特卡洛策略评估
Δ w = α ( G t − v ^ ( S t , w ) ) ∇ w v ^ ( S t , w ) = α ( G t − v ^ ( S t , w ) ) x ( S t ) \Delta\mathbf{w}=\alpha(G_{t}-\hat{v}(S_{t},\mathbf{w}))\nabla_{\mathbf{w}}\hat{v}(S_{t},\mathbf{w})\\=\alpha(G_{t}-\hat{v}(S_{t},\mathbf{w}))\mathbf{x}(S_{t}) Δw=α(Gt−v^(St,w))∇wv^(St,w)=α(Gt−v^(St,w))x(St)
- 蒙特卡洛评估收敛到局部最优(即使用非线性值函数逼近)
6.2.7 TD学习的价值函数逼近
- TD-target R t + 1 + γ V ^ ( S t + 1 , w ) R_{t+1}+\gamma\hat{V}(S_{t+1},w) Rt+1+γV^(St+1,w)是对真实价值 V π ( S t ) V_\pi (S_t) Vπ(St)的有偏采样
- 仍然可以将监督学习应用于“训练数据”
⟨ S 1 , R 2 + γ v ^ ( S 2 , w ) ⟩ , ⟨ S 2 , R 3 + γ v ^ ( S 3 , w ) ⟩ , . . . , ⟨ S T − 1 , R T ⟩ \langle S_1,R_2+\gamma\hat{v}(S_2,\mathbf{w})\rangle,\langle S_2,R_3+\gamma\hat{v}(S_3,\mathbf{w})\rangle,...,\langle S_{T-1},R_T\rangle ⟨S1,R2+γv^(S2,w)⟩,⟨S2,R3+γv^(S3,w)⟩,...,⟨ST−1,RT⟩
- 例如,使用线性TD(0)
Δ w = α ( R + γ v ^ ( S ′ , w ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) = α δ x ( S ) \begin{aligned} \Delta w& =\alpha(R+\gamma\hat{v}(S^{\prime},\mathbf{w})-\hat{v}(S,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(S,\mathbf{w}) \\ &=\alpha\delta\mathbf{x}(S) \end{aligned} Δw=α(R+γv^(S′,w)−v^(S,w))∇wv^(S,w)=αδx(S)
- 线性TD(0)收敛(close)到全局最优
6.2.8 价值函数近似的控制
- 策略评估 近似策略评估, q ^ ( ⋅ , ⋅ , w ) ≈ q π \hat{q}(\cdot,\cdot,w)\approx q_\pi q^(⋅,⋅,w)≈qπ
- 策略优化 ε − g r e e d y ε-greedy ε−greedy 策略优化
6.2.9 Action-value函数逼近
- 近似action-value函数
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)
- 最小化估计的动作价值函数 q ^ ( S , A , w ) \hat{q}(S,A,w) q^(S,A,w)与真实的动作价值函数 q π ( S , A ) q_{\pi}(S,A) qπ(S,A)之间的均方误差
J ( w ) = E π [ ( q π ( S , A ) − q ^ ( S , A , w ) ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(q_\pi(S,A)-\hat{q}(S,A,\mathbf{w}))^2\right] J(w)=Eπ[(qπ(S,A)−q^(S,A,w))2]
- 用随机梯度下降方法找到局部最小值:
− 1 2 ∇ w J ( w ) = ( q π ( S , A ) − q ^ ( S , A , w ) ) ∇ w q ^ ( S , A , w ) Δ w = α ( q π ( S , A ) − q ^ ( S , A , w ) ) ∇ w q ^ ( S , A , w ) \begin{aligned} -\frac{1}{2}\nabla_{\mathbf{w}}J(\mathbf{w})& =(q_\pi(S,A)-\hat{q}(S,A,\mathbf{w}))\nabla_\mathbf{w}\hat{q}(S,A,\mathbf{w}) \\ \Delta w& =\alpha(q_\pi(S,A)-\hat{q}(S,A,\mathbf{w}))\nabla_\mathbf{w}\hat{q}(S,A,\mathbf{w}) \end{aligned} −21∇wJ(w)Δw=(qπ(S,A)−q^(S,A,w))∇wq^(S,A,w)=α(qπ(S,A)−q^(S,A,w))∇wq^(S,A,w)
6.2.10 线性Action-Value函数逼近
- 状态行为可以用特征向量表示:
x ( S , A ) = ( x 1 ( S , A ) ⋮ x n ( S , A ) ) \mathbf{x}(S,A)=\begin{pmatrix}\mathbf{x}_1(S,A)\\\vdots\\\mathbf{x}_n(S,A)\end{pmatrix} x(S,A)= x1(S,A)⋮xn(S,A)
- 通过特征的线性组合表示动作价值函数
q ^ ( S , A , w ) = x ( S , A ) ⊤ w = ∑ j = 1 n x j ( S , A ) w j \hat{q}(S,A,\mathbf{w})=\mathbf{x}(S,A)^\top\mathbf{w}=\sum_{j=1}^n\mathbf{x}_j(S,A)\mathbf{w}_j q^(S,A,w)=x(S,A)⊤w=j=1∑nxj(S,A)wj
- 用随机梯度下降方法进行更新
∇ w q ^ ( S , A , w ) = x ( S , A ) Δ w = α ( q π ( S , A ) − q ^ ( S , A , w ) ) x ( S , A ) \begin{aligned} \nabla_{\mathbf{w}}\hat{q}(S,A,\mathbf{w})& =\mathbf{x}(S,A) \\ \Delta w& =\alpha(q_{\pi}(S,A)-\hat{q}(S,A,\mathbf{w}))\mathbf{x}(S,A) \end{aligned} ∇wq^(S,A,w)Δw=x(S,A)=α(qπ(S,A)−q^(S,A,w))x(S,A)
6.2.11 增量式控制算法
-
与预测算法类似,我们找到一个替代动作价值 q π ( S , A ) q_{\pi}(S,A) qπ(S,A)的target
-
对于MC,target是回报 G t G_t Gt
-
Δ w = α ( G t − q ^ ( S t , A t , w ) ) ∇ w q ^ ( S t , A t , w ) \Delta\mathbf{w}=\alpha(G_t-\hat q(S_t,A_t,\mathbf{w}))\nabla_\mathbf{w}\hat q(S_t,A_t,\mathbf{w}) Δw=α(Gt−q^(St,At,w))∇wq^(St,At,w)
-
对于TD(0),target是TD target R t + 1 + γ Q ( S t + 1 , A t + 1 ) R_{t+1}+\gamma Q(S_{t+1},A_{t+1}) Rt+1+γQ(St+1,At+1)
-
Δ w = α ( R t + 1 + γ q ^ ( S t + 1 , A t + 1 , w ) − q ^ ( S t , A t , w ) ) ∇ w q ^ ( S t , A t , w ) \Delta\mathbf{w}=\alpha(R_{t+1}+\gamma\hat{q}(S_{t+1},A_{t+1},\mathbf{w})-\hat{q}(S_t,A_t,\mathbf{w}))\nabla_\mathbf{w}\hat{q}(S_t,A_t,\mathbf{w}) Δw=α(Rt+1+γq^(St+1,At+1,w)−q^(St,At,w))∇wq^(St,At,w)
-
6.3 批量方法
- 梯度下降很简单而且很吸引人
- 但是样本使用效率不高
- 批量方法找寻满足这批数据的最佳价值函数
- 根据智能体的经验(“ 训练数据 ”)
6.3.1 最小二乘预测
- 假设存在一个价值函数的近似 v ^ ( s , w ) ≈ v π \hat{v}(s,w)\approx v_\pi v^(s,w)≈vπ
- 以及一段时期的、包含<状态、价值>的经验 D D D
D = { ⟨ s 1 , v 1 π ⟩ , ⟨ s 2 , v 2 π ⟩ , . . . , ⟨ s T , v T π ⟩ } \mathcal{D}=\{\langle s_1,v_1^\pi\rangle,\langle s_2,v_2^\pi\rangle,...,\langle s_T,v_T^\pi\rangle\} D={⟨s1,v1π⟩,⟨s2,v2π⟩,...,⟨sT,vTπ⟩}
- 最小二乘算法要求找到参数 w w w,使得目标值为 v t π v_{t}^{\pi} vtπ和近似值$ \hat{v}(s,w)$之间的平方和误差最小:
L S ( w ) = ∑ t = 1 T ( v t π − v ^ ( s t , w ) ) 2 = E D [ ( v π − v ^ ( s , w ) ) 2 ] \begin{aligned} LS(\mathbf{w})& =\sum_{t=1}^{T}(v_{t}^{\pi}-\hat{v}(s_{t},\mathbf{w}))^{2} \\ &=\mathbb{E}_{\mathcal{D}}\left[(v^{\pi}-\hat{v}(s,\mathbf{w}))^{2}\right] \end{aligned} LS(w)=t=1∑T(vtπ−v^(st,w))2=ED[(vπ−v^(s,w))2]
6.3.2 带有经验回放的随机梯度下降
- 给出包含<状态、价值>的经验D
D = { ⟨ s 1 , v 1 π ⟩ , ⟨ s 2 , v 2 π ⟩ , . . . , ⟨ s T , v T π ⟩ } \mathcal{D}=\{\langle s_1,v_1^\pi\rangle,\langle s_2,v_2^\pi\rangle,...,\langle s_T,v_T^\pi\rangle\} D={⟨s1,v1π⟩,⟨s2,v2π⟩,...,⟨sT,vTπ⟩}
-
Repeat:
-
从经验中采样状态、价值
-
⟨ s , v π ⟩ ∼ D \langle s,v^{\pi}\rangle\sim\mathcal{D} ⟨s,vπ⟩∼D
-
应用随机梯度下降更新
-
Δ w = α ( v π − v ^ ( s , w ) ) ∇ w v ^ ( s , w ) \Delta\mathbf{w}=\alpha(v^\pi-\hat{v}(s,\mathbf{w}))\nabla_\mathbf{w}\hat{v}(s,\mathbf{w}) Δw=α(vπ−v^(s,w))∇wv^(s,w)
-
-
收敛至针对这段经历最小平方差的参数:
w π = argmin w L S ( w ) \mathbf{w}^\pi=\underset{\mathbf{w}}{\operatorname*{argmin}}LS(\mathbf{w}) wπ=wargminLS(w)
6.3 Deep Q-Networks(DQN)经验回放
- DQN采用经验回放和固定的Q-targets
- 根据 ε − g r e e d y ε-greedy ε−greedy 执行行为 a t a_t at
- 将经验以 ( 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)的形式存储到replay memery D D D
- 从 D D D中随机抽样-个mini-batch的经验 ( s , a , r , s ′ ) (s,a,r,s^{\prime}) (s,a,r,s′)
- 用旧的、固定的参数 w − w^{-} w−计算Q-learning target
- 在Q-network和 Q-learning targets之间优化MSE
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(w_i)=\mathbb{E}_{s,a,r,s'\sim\mathcal{D}_i}\left[\left(r+\gamma\max_{a'}Q(s',a';w_i^-)-Q(s,a;w_i)\right)^2\right] Li(wi)=Es,a,r,s′∼Di[(r+γa′maxQ(s′,a′;wi−)−Q(s,a;wi))2]
- 使用随机梯度下降的方式更新参数。
6.3.1 DQN应用于Atari
- 从像素s端到端学习值函数 Q ( s , a ) Q(s,a) Q(s,a)
- 输入状态 s s s是最后4帧的原始像素堆栈
- 输出为 Q ( s , a ) Q(s,a) Q(s,a),用于18个操纵杆/按钮的控制
- 奖励是该步骤的分数变化
- 所有游戏的网络架构和超参数都是固定的。
thcal{L}i(w_i)=\mathbb{E}{s,a,r,s’\sim\mathcal{D}i}\left[\left(r+\gamma\max{a’}Q(s’,a’;w_i-)-Q(s,a;w_i)\right)2\right]
$$
- 使用随机梯度下降的方式更新参数。
6.3.1 DQN应用于Atari
- 从像素s端到端学习值函数 Q ( s , a ) Q(s,a) Q(s,a)
- 输入状态 s s s是最后4帧的原始像素堆栈
- 输出为 Q ( s , a ) Q(s,a) Q(s,a),用于18个操纵杆/按钮的控制
- 奖励是该步骤的分数变化
- 所有游戏的网络架构和超参数都是固定的。