值函数近似
值函数近似
v-table
$$ 使用表格的好处是是我们能够比较容易的进行分析 \坏处就是当\text{state space或者 action space}非常大或者为连续时我们很难进行处理 \主要存在两个问题:1.存储问题,2.泛化能力问题 $$
例子
$$ \hat{v}(s,w)=as+b=\underbrace{\begin{bmatrix}s,1\end{bmatrix}}{\phiT(s)}\underbrace{\begin{bmatrix}a\b\end{bmatrix}}_{w}=\phiT(s)w \s\text{ is state} \\text{w is the parameter vector} \\phi(s)\text{ the feature vector of s} \\hat{v}(s,w)\text{ is linear in w} \ \使用这种方式的好处 \现在我们只需要存在两个值a和b \缺点就是使用这种方法估计的值可能不是那么的精确 $$ 我们可以使用高阶曲线来进行拟合 $$ 这里考虑一个二阶曲线 \\hat{v}(s,w)=as2+bs+c=\underbrace{[s2,s,1]}{\phiT(s)}\underbrace{\begin{bmatrix}a\b\c\end{bmatrix}}_{w}=\phiT(s)w $$
Objective function
如何找到最优的w
$$ 我们也可以通过另一种方式知道d_\pi(s) \d_\pi(s)满足下面这个式子,P_\pi是状态转移矩阵 \d_\pi^T P_\pi=d_\pi^T(Ax=\lambda x) \通过这个式子我们可以知道d_\pi^T是P_\pi对应特征值\lambda=1的特征向量 \ \具体到这个例子,我们已知状态转移矩阵P_\pi \P_\pi=\begin{bmatrix} 0.3 & 0.1 & 0.6 & 0 \ 0.1 & 0.3 & 0 & 0.6 \ 0.1 & 0 & 0.3 & 0.6 \ 0 & 0.1 & 0.1 & 0.8 \end{bmatrix} \已知矩阵P_\pi和特征值\lambda=1,求特征向量d_\pi^T \P_\pi^T = \begin{bmatrix} 0.3 & 0.1 & 0.1 & 0 \ 0.1 & 0.3 & 0 & 0.1 \ 0.6 & 0 & 0.3 & 0.1 \ 0 & 0.6 & 0.6 & 0.8 \end{bmatrix} \需要注意这里原始矩阵和特征向量的位置和我们线性代数中常见题型的位置有点不同,所以我们进行转置 \P_\pi^Td_\pi=d_\pi \|P_\pi^T-E|=\begin{bmatrix} -0.7 & 0.1 & 0.1 & 0 \ 0.1 & -0.7 & 0 & 0.1 \ 0.6 & 0 & -0.7 & 0.1 \ 0 & 0.6 & 0.6 & -0.2 \end{bmatrix}\xrightarrow{\times10}\begin{bmatrix} -7 & 1 & 1 & 0 \ 1 & -7 & 0 & 1 \ 6 & 0 & -7 & 1 \ 0 & 6 & 6 & -2 \end{bmatrix}\xrightarrow{r_2\leftrightarrow r_1}\begin{bmatrix} 1 & -7 & 0 & 1 \ -7 & 1 & 1 & 0 \ 6 & 0 & -7 & 1 \ 0 & 6 & 6 & -2 \end{bmatrix}\\xrightarrow{r_2+ 7r_1}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & -48 & 1 & 7 \ 6 & 0 & -7 & 1 \ 0 & 6 & 6 & -2 \end{bmatrix}\xrightarrow{r_3 - 6r_1}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & -48 & 1 & 7 \ 0 & 42 & -7 & -5 \ 0 & 6 & 6 & -2 \end{bmatrix}\xrightarrow{r_4\leftrightarrow r_2}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & 6 & 6 & -2 \ 0 & 42 & -7 & -5 \ 0 & -48 & 1 & 7 \ \end{bmatrix}\\xrightarrow{r_3 - 7r_2}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & 6 & 6 & -2 \ 0 & 0 & -49 & 9 \ 0 & -48 & 1 & 7 \ \end{bmatrix}\xrightarrow{r_4 + 8r_2}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & 6 & 6 & -2 \ 0 & 0 & -49 & 9 \ 0 & 0 & 49 & -9 \ \end{bmatrix}\xrightarrow{r_4 + r_3}\begin{bmatrix} 1 & -7 & 0 & 1 \ 0 & 6 & 6 & -2 \ 0 & 0 & -49 & 9 \ 0 & 0 & 0 & 0 \ \end{bmatrix} \求得同解方程组:\begin{cases} x_1-7x_2=-x_4 \ 6x_2+6x_3=2x_4 \ 49x_3=9x_4 \end{cases},x_4为自由未知数,令x_4=1,得:\begin{bmatrix} \frac{1}{21}\ \frac{22}{147}\ \frac{9}{49}\ 1\ \end{bmatrix} \归一化得:d_\pi=\begin{bmatrix} 0.0345 \ 0.1084 \ 0.1330 \ 0.7241 \end{bmatrix} $$
优化Objective function
什么是自举(bootstrapping)
在 TD 学习/动态规划 中,用当前估计去近似未来的真值,再拿这个“近似真值”回过头来更新当前估计,这个过程就叫 自举。
伪代码

如何选择\(\hat{v}(s,w)\)函数
第一种:线性函数 $$ \hat{v}(s,w)=\phi^T(s)w \\hat{v}(s,w)是w的一个线性函数,\phi^T(s)可以认为是组合系数 \\phi(s)是特征向量,但是特征向量又需要人为的选取 \选取的方法可以通过特征多项式等等,这里不详细将,因为现在基本上使用神经网络 $$ 第二种:使用神经网络逼近 $$ s\rightarrow \text{model}\rightarrow \hat{v}(s,w) \神经网络是关于w的非线性函数 $$ 回到线性的情况 $$ 如果\hat{v}(s,w)=\phi^T(s)w,则有 \\nabla_w\hat{v}(s,w)=\phi(s) \把这个梯度代入TD算法 \w_{t+1}=w_t+\alpha_t[r_{t}+\gamma\hat{v}(s_{t+1},w_{t})-\hat{v}(s_t,w_t)]\nabla_w\hat{v}(s_t,w_t) \\text{yields}: \w_{t+1}=w_t+\alpha_t[r_t+\gamma\phiT(s_{t+1})w_t-\phiT(s_t)w_t]\phi(s_t) \这个算法被称为\text{TD-Linear} $$ TD-Linear的优劣势
- 劣势
- 特征向量需要人工选择合适的特征向量,但是这个往往很难选择,即使对这个任务有很好的了解
- 优势
- 理论性质比较好分析,神经网络很难分析
- 虽然不能实现所有的函数,但是还是有比较好的表征能力的
为什么说tabular是Linear的特殊情况
- 首先,我们在状态s时选取一个特殊的特征向量 $$ \phi(s)=e_s\in\mathbb{R}^{|S|} $$ \(e^s\)是一个向量,里面全都是0,除了对应位置s的量为1
- 把这个代入到\(\hat{v}(s,w)\)中: $$ \hat{v}(s,w)=e^T_s w=w(s) \w(s)是向量w对应s位置的量 \也就是说每个位置都只会对应一个权重,那么就是一个表格 $$
贝尔曼投影
- 实际上我们之前的算法并不是在最小化\(J(w)=\mathbb{E}[(v_\pi(S)-\hat{v}(S,w))^2]\)
多种的objective function
-
True value error $$ J(w)=\mathbb{E}[(v_\pi(S)-\hat{v}(S,w))2]=|\hat{v}(w)-v_\pi|_D2 $$
-
Bellman Error $$ J_{BE}(w)=|\hat{v}(w)-(r_\pi+\gamma P_\pi\hat{v}(w))|D2\stackrel{\cdot}{=}|\hat{v}(w)-T_\pi(\hat{v}(w))|2_D \ \为什么写成这个呢? \我们希望\hat{v}去逼近v\pi,而v_\pi满足v_\pi=r_\pi+\gamma p_\pi v_\pi \当\hat{v}=v_\pi时肯定是满足\hat{v}=r_\pi+\gamma p_\pi \hat{v} \简写成\hat{v}=T_\pi(\hat{v}) \然而实际中可能不相等,所以就去最小化|\hat{v}=r_\pi+\gamma p_\pi \hat{v}|^2 $$
-
Projected Bellman error $$ 这个算法就是我们刚刚在最小化的\text{error} \J_{PBE}(w)=|\hat{v}(w)-MT_\pi(\hat{v}(w))|^2_D \M是一个投影矩阵 \因为|\hat{v}(w)-T_\pi(\hat{v}(w))|^2_D的误差可能永远都不会为0 \所以需要一个投影矩阵,投影到一个空间上去,使得误差为零 $$
Sarsa值函数近似
伪代码

Q-learning值函数近似
伪代码

DQN
半梯度
两个网络
- 一个主网络\(\hat{q}(s,a,w)\)
- 一个目标网络\(\hat{q}(S',a,w_T)\)
基于这个objective function我们计算梯度得到 $$ \nabla_w J(w)=\mathbb{E}\bigg[\bigg(R+\gamma\max_{a\in\mathcal{A}(S')}\textcolor{red}{\hat{q}(S',a,w_T)}-\textcolor{blue}{\hat{q}(S,A,w)}\bigg)\nabla_w\hat{q}(S,A,w)\bigg] \这里为了整洁省略了-2 $$
经验回放
收集n个episode的数据\(\mathcal{B}\stackrel{\cdot}{=}\{(s,a,r,s')\}\),里面有n个4元组,从里面随机抽取数据来训练神经网络 不一定要按照采集数据的顺序,随机抽取时一定要服从均匀分布
为什么要使用经验回放
为什么采样的时候要使用均匀分布 $$ 先回到算法 \J(w)=\mathbb{E}\bigg[\bigg(R+\gamma\max_{a\in\mathcal{A}(S')}\hat{q}(S',a,w)-\hat{q}(S,A,w)\bigg)^2\bigg] \这里有R、S'、S、A4个随机变量,我们要求J(w)就必须知道他们的概率分布 \(S,A)\sim d:我们这里把(S,A)当成一个索引,当成一个随机变量(二维随机变量) \假设有n个状态,每个状态有5个\text{action},每个\text{action}就可以通过(s,a)进行索引 \R\sim p(R|S,A),S'\sim p(S'|S,A),当S,A给定时R、S'需要服从系统的模型 \我们要求(S,A)是均匀分布的 \如果使用高斯分布,需要我们有先验知识需要知道哪些状态和动作重要哪些不重要 \如果没有则需要一视同仁遵循采集到的数据,然后进行随机抽样 \ \\text{tips:}这里说的对(S,A)均匀抽样是指从缓冲区均匀抽样 $$ 对已有经验随机抽样,是为了用数据的经验分布来近似目标中的期望,并获得近似 IID 的小批量,使 SGD 的梯度估计无偏而方差可控,从而在未知环境下也能稳定地优化,另外也能提高样本的利用效率
为什么能提高利用效率呢
因为之前的算法可以理解为采集一个数据就丢掉一个数据,大量数据被浪费
和表格对比
- 在tabular中没有经验回放的,为什么没有呢?
- 因为之前没有涉及到状态S,A的分布
- 分布的引入是因为要定义一个标量的目标函数
- 为什么DQN就会涉及到S,A的分布呢,tabular就没有呢
- 因为value function approximation有一个objective function需要优化,而objective function是一个期望,所以有了分布
- 经验回放对于tabular Q-learning不是必须的,但是也是可以用的
- 因为tabular Q-learning也是off policy的方法
伪代码

\(Y_T\)表示目标值
提问
-
为什么没有policy update呢?
- 因为off policy的,所以不需要对行为进行更新,即使更新了也不会对采样策略产生影响。
- 所以只需要收敛之后,再更新一次就可以了
-
这个代码中输入输出和原论文是不一样的,这么做没问题吗? $$ 这里的神经网络:\begin{cases} s \ a\ \end{cases} \stackrel{w}{\rightarrow}\hat{q}(s,a) \ \这个神经网络会比较低效,假设有5个状态每个状态5个行为 \需要25次循环,再去求哪个最大 \原文中的神经网络:s\stackrel{w}{\rightarrow} \begin{cases} \hat{q}(a_1) \ \vdots\ \hat{q}(a_n) \end{cases} \原文中输入s直接预测出q,看哪个是最大的
$$
例子

- 这里只有1个spisode
- 这个episode是由一个探索性策略得到的,选择每个action的概率相同
- 这个episode只有1000步,之前tabular Q-learning的时候是100000步
- 这里是一个浅层的神经网络,隐藏层有100个神经元