强化学习笔记(八)值函数近似

强化学习笔记(八):值函数近似

在实际场景中,我们的状态空间是非常大的,如果我们使用之前的建立一个个表格的方法,他的数据规模也会非常大,这显然不是一个很现实的解决方案。我们希望提出一种新的value function,他可以近似等于真正的value function,但是我们不再需要为每一个state建立一个映射,也就是一种和函数拟合思路类似的方法。在这一章,也是首次将神经网络引入强化学习。

前面7章中我们所有的算法都是基于表格的

表格的优点是分析起来容易,但是缺点是没法离散,为此来引入神经网络来估计值

首先先看一个经典的问题:神经网络拟合

我们可以用直线来进行拟合,这里w就是待拟合曲线的参数。

这样我们不用存储很多的值,用简单的参数w来表达就可以。

当然,也可以用很多的其他的曲线来拟合。

总结:用曲线拟合的优势有两个:存储和泛化,泛化这一点可以看课件的解释,更新一个值其他相近的值也会改变。

二、值函数估计算法

2.1 目标函数选择

目的:找到最优的目标函数,使得它能给每个状态估值

这是我们的目标函数,目标是找到最优权重让J(w)最小。这里面还涉及到一个随机变量:S

这里我们采用的是随机变量s,怎么去估计它的概率分布呢? 第一种方法是使用同一分布,认为每个状态出现概率是一样的,去估计状态的概率

第二种方法是用稳态分布,其实就是把里面的状态的权重变成了可变的。可以认为这个时候状态是平稳的,跑了很多次之后才出现的状态

举个例子,d 认为是多个状态的加权,在跑算法很多步之后,最后算出来的状态值都是平稳的。

2.2 优化的算法

优化的式子也是用迭代的方式去计算。但是这种计算方式需要依赖真实梯度,我们不知道真实的梯度怎么求,很自然的想到用随机梯度代替真实梯度

这里面需要依赖真实梯度,没法获取就得想办法替代

一种方式是用蒙特卡洛的方式,依赖整个的return 另一种是用td learning的方式去获取,这里就是把v换成了 td target,也就是$ r + γ $

这个方法就可以用于更新算法。这里还有一步就是的选择:它可以是不同的函数,可以是线性的或非线性的。

的选择:过往会选择线性或者多项式或者傅里叶的组合,现在更常用的是基于神经网络,引入非线性

线性的例子

使用线性的优势和劣势:

线性函数还是有比较强的表征能力。而且比较便于理解。 需要指出的是q表的方式其实是线性的方式的一种特殊形式

例子:

用平面作为待预测的vhat的函数去拟合真实v,,并且进行三维可视化。发现平面趋势差不多,但细节上还是有区别

换用二次、三次函数之后,效果立竿见影

通过值函数的td学习主要就是做这件事:用近似的 去替换真实的,不知道的这个v,尽管这俩可能并不相等,甚至由于 的选取,可能永远无法拟合v(例如 选平面,就永远无法拟合)

三、sarsa和值函数近似的结合

如图所示,算法这里的值函数都用去进行替代了原来的时序差分学习。(之前介绍的部分是针对,这里是

伪代码如图所示,基本上,步骤就是将w的更新用q函数替换掉

四、q-learning和值近似的结合

直接给出迭代的公式

其实就是sarsa把td target 替换一下 伪代码如下:需要指出的是这里给出的是on-policy版本的ql,当然他也可以是off-policy的。

五、dqn

dqn引入了两个机制:经验回放目标网络,目标是打破样本的相关性。

dqn的目标:最小化td target,这里的td target就是贝尔曼最优误差。所以这两个值做差,它的期望应该是0。 dqn通过调整网络参数θ,缩小预测值和目标值之间的差距。

优化的方法:梯度下降 直接用梯度下降方法是比较困难的,因为参数w不仅仅位于中,也位于y中。 为了简化运算,我们在计算的过程中先固定住y中的w,来进行运算。

为了处理不一致性,这里还应用了一个技巧:两个神经网络:main networktarget network ,固定一个网络去更新另一个

经验回放

为什么经验回放是必须的?

答案在更新的式子中,s,a是从分布中采样的,s,a被认为是一个随机变量

为什么ql里面没有涉及到shared replay? 因为QL都没有涉及到分布,纯回放。

dqn涉及到分布,求的是s,a的平均,ql里面没有分布的概念,纯粹是求贝尔曼公式。当然ql也可以使用经验回放

dqn的伪代码(off-policy)

①没有策略更新的原因:这个是off-policy

②为什么不用policy update evaluation?其实是可以可以直接用$w_{t+1}=w_t +a_t(r+γ max-),但是现在都有神经网络了,可以直接用神经网络里面的黑盒性质来优化算法。

③这个算法实现和dqn论文原文不一样,dqn原文是输入s输出5个动作的q,这个是输入s a输出q,内涵是一样的


强化学习笔记(八)值函数近似
https://runsstudio.github.io/2026/02/25/强化学习笔记(八)值函数近似/
发布于
2026年2月25日
许可协议