2.1 函数逼近(Function Approximation)

news/2025/10/12 19:39:33/文章来源:https://www.cnblogs.com/zzzxx/p/19137099

函数逼近(Function Approximation)

此前介绍的所有方法都是表格方法(tabular methods),即为每个状态–动作对存储一个值:要么是该动作的 Q 值,要么是该动作的偏好值。

qtable

在大多数实际应用中,这样存储的值数量会迅速变得无法处理。例如当输入为原始图像时,可能的状态数目本身就是天文级的。此外,这些算法要求每个状态–动作对都被访问足够多次,才能收敛到最优策略;如果某个状态–动作对从未访问过,则无法保证找到最优策略。在连续状态或动作空间中,这一问题更加明显。

然而,在许多情况下,两个非常相似的状态下应采取的最优动作往往是相同的。例如在视频游戏中改变一个像素通常不会影响最佳动作。因此,若能在不同状态间插值 Q 值将极其有用:只需探索部分状态–动作对,其余的值可通过状态或动作间的相似性泛化(generalization)得到。这就是知识迁移问题,即如何将已学知识推广到未见但相似的情况。

这正是函数逼近(Function Approximation, FA)的用武之地:值函数或策略不再以表格形式存储,而是通过一个函数逼近器进行学习。
逼近器的类型不限:在深度强化学习中通常使用神经网络,但任何可微的回归模型(线性模型、径向基函数网络、支持向量回归等)都可以。


基于值的函数逼近(Value-based Function Approximation)

状态值函数逼近

用一个 \(d\) 维特征向量 \(\phi(s) = [\phi_1(s), \phi_2(s), \ldots, \phi_d(s)]^T\) 表示状态 \(s\)
以“倒立摆(Cartpole)”为例:

\[\phi(s) = \begin{bmatrix}x \\ \dot{x} \\ \theta \\ \dot{\theta} \end{bmatrix} \]

其中 \(x\) 为小车位置,\(\theta\) 为杆角,\(\dot{x}\)\(\dot{\theta}\) 为其导数。这样即可表示任意状态 \(s\)
对于图像型输入,可以将像素展平为向量。更复杂的场景应包含所有必要信息以保证满足马尔可夫性质。

我们希望用一个参数化函数 \(V_\varphi(s)\) 来逼近真实的状态值函数 \(V^\pi(s)\)

\[V_\varphi(s) \approx V^\pi(s) \]

该函数由参数 \(\varphi\) 控制,用于将特征向量 \(\phi(s)\) 映射为近似值 \(V_\varphi(s)\)

最简单的逼近器是线性逼近器(Linear Approximator)

\[V_\varphi(s) = \sum_{i=1}^d w_i \phi_i(s) = \mathbf{w}^T \phi(s) \]

其中权重向量 \(\mathbf{w} = [w_1, w_2, \ldots, w_d]^T\) 即参数集 \(\varphi\)
无论函数形式如何,我们希望找到参数 \(\varphi\) 使 \(V_\varphi(s)\) 尽可能接近 \(V^\pi(s)\)
这就是一个回归问题,目标是最小化均方误差(MSE):

\[\min_\varphi \mathcal{L}(\varphi) = \mathbb{E}_{s \in \mathcal{S}}[(V^\pi(s) - V_\varphi(s))^2] \]

若假设函数可微,则可用梯度下降法(Gradient Descent, GD)迭代优化:

\[\Delta \varphi = -\eta \nabla_\varphi \mathcal{L}(\varphi) \]

展开梯度形式:

\[\nabla_\varphi \mathcal{L}(\varphi) = \mathbb{E}_{s \in \mathcal{S}}[-(V^\pi(s) - V_\varphi(s)) \nabla_\varphi V_\varphi(s)] \]

由于计算整个状态空间的期望过于耗时(批量算法),采用随机梯度下降(SGD)

\[\Delta \varphi = \eta (V^\pi(s) - V_\varphi(s)) \nabla_\varphi V_\varphi(s) \]

此时参数更新是随机的,噪声较大。
得到的更新规则与线性回归的“Delta 规则”一致,只需能计算 \(\nabla_\varphi V_\varphi(s)\)
但问题在于我们并不知道真实值 \(V^\pi(s)\)。可用采样估计替代:

  • 蒙特卡罗(Monte Carlo)函数逼近:

    \[\Delta \varphi = \eta (R_t - V_\varphi(s)) \nabla_\varphi V_\varphi(s) \]

  • 时间差分(TD)函数逼近:

    \[\Delta \varphi = \eta (r_{t+1} + \gamma V_\varphi(s') - V_\varphi(s)) \nabla_\varphi V_\varphi(s) \]

因此,TD 实际上是最小化奖励预测误差(RPE)

\[\mathcal{L}(\varphi) = \mathbb{E}_{s \in \mathcal{S}}[(r_{t+1} + \gamma V_\varphi(s') - V_\varphi(s))^2] = \mathbb{E}[\delta_t^2] \]


梯度蒙特卡罗值估计算法

算法步骤:

  1. 初始化参数 \(\varphi\) 为 0 或随机值;
  2. while 未收敛:
    1. 按策略 \(\pi\) 生成一个完整回合 \(\tau = (s_0, a_0, r_1, s_1, \ldots, s_T)\)
    2. 对每个状态 \(s_t\)
      • 计算回报 \(R_t = \sum_k \gamma^k r_{t+k+1}\)
      • 更新参数:

        \[\Delta \varphi = \eta (R_t - V_\varphi(s_t)) \nabla_\varphi V_\varphi(s_t) \]

该算法无偏(因使用真实回报),但方差较高。


半梯度时间差分值估计算法

算法步骤:

  1. 初始化参数 \(\varphi\)
  2. while 未收敛:
    1. 从初始状态 \(s_0\) 开始;
    2. 对于每一步
      • 按策略 \(\pi\) 选择动作;
      • 执行动作,观察 \((r_{t+1}, s_{t+1})\)
      • 更新参数:

        \[\Delta \varphi = \eta (r_{t+1} + \gamma V_\varphi(s_{t+1}) - V_\varphi(s_t)) \nabla_\varphi V_\varphi(s_t) \]

      • \(s_{t+1}\) 为终止状态:break

该方法方差较小,但由于 \(V_\varphi(s_{t+1})\) 初期估计误差大,因此存在显著偏差。


动作值函数逼近

同样可以用参数化函数 \(Q_\theta(s,a)\) 逼近 Q 值。
两种常见结构如下:

  1. \((s,a)\) 的联合特征向量为输入,输出单个 Q 值;

  2. 仅以状态特征为输入,输出每个可能动作的 Q 值(适用于离散动作空间)。

在两种情况下,目标都是最小化真实 Q 值 \(Q^\pi(s,a)\) 与近似值 \(Q_\theta(s,a)\) 之间的均方误差,可用 SARSA 或 Q-learning 估计目标。


函数逼近的 Q-learning 算法

算法步骤:

  1. 初始化参数 \(\theta\)
  2. while True:
    • 从初始状态 \(s_0\) 开始;
    • 对于每一步:
      • 按行为策略 \(b\)(如 \(\epsilon\)-greedy)选择动作 \(a_t\)
      • 执行动作,观察 \((r_{t+1}, s_{t+1})\)
      • 更新参数:

        \[\Delta \theta = \eta (r_{t+1} + \gamma \max_a Q_\theta(s_{t+1}, a) - Q_\theta(s_t, a_t)) \nabla_\theta Q_\theta(s_t, a_t) \]

      • 贪婪改进策略:

        \[\pi(s_t, a) = \text{Greedy}(Q_\theta(s_t, a)) \]

      • \(s_{t+1}\) 为终止状态:break

基于策略的函数逼近(Policy-based Function Approximation)

在策略逼近中,目标是直接学习一个参数化策略 \(\pi_\theta(s,a)\),使其最大化期望回报。
定义目标函数为:

\[\mathcal{J}(\theta) = \mathbb{E}_{\tau \sim \rho_\theta}[R(\tau)] \]

其中轨迹 \(\tau = (s_0, a_0, s_1, a_1, \ldots, s_T)\) 的概率由策略 \(\pi_\theta\) 决定。
学习的目标是让策略产生高回报的轨迹,同时避免低回报的轨迹。

该目标函数理论上正确,但计算上不可行(需对所有可能轨迹积分)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode code-snippets Note

VSCode code-snippets Note在使用 VSCode 作为 C++ 开发工具的时候,编写头文件的时候会有大量的冗余代码,使用 Code Snippets 中的 transform 可以大幅提高该过程的效率,于是这里总结一些 VSCode 中一些开发常用的 …

Elasticsearch 备份:snapshot 镜像使用篇

本文是 ES 备份的镜像使用篇,主要介绍了 snapshot 的备份恢复原理和使用细节。上一篇文章中,我们简要的列举了 Elasticsearch 备份 主要的几个方案,比对了一下各个方案的实现原理、优缺点和适用的场景。现在我们来看…

本次科研收获

不要害怕修改项目源代码,现在的AI Agent已经很强大了,可以直接把需求告诉他,让他改

2025.10.12 - 20243867孙堃2405

早上太阳照到窗台上,风轻轻的飘进来,把我没看完的书吹得翻了两页,感觉这会儿时间都变慢了。

git clone 克隆下载深度层级仓库最新源码而不是整个仓库

前言全局说明一、说明 1.1 环境: Windows 7 旗舰版 git version 2.9.0.windows.1二、命令原型 usage: git clone [<options>] [--] <repo> [<dir>]--depth <depth> create a shallow cl…

九、可供选择的体系结构

九、可供选择的体系结构 之前发现大多数时间只有20%的指令会使用,所以不使用复杂的扩展指令集,而是使用RISC,目前大多数体系结构采用RISC内核实现CISC架构RISC设备 RISC是一种设计方法,比CISC指令集规模更小的指令…

Linux查看一个文件的时候发生了什么?

Linux查看一个文件的时候发生了什么?概念辨析 整体的关系是这样的:下面来逐个介绍图中的内容。 文件系统磁盘文件系统:按照指定的格式和规则直接将数据存在磁盘中,Ext 2/3/4等等拿到磁盘首先格式化为具体的磁盘文件…

2025 年 10 月金属门窗厂家加盟代理品牌推荐排行榜,行业权威盘点与品质红榜发布

在金属门窗加盟代理市场,品牌的生产实力与产品竞争力是创业者核心考量。2025 年,消费者对金属门窗的耐用性、安全性、节能性需求提升,兼具先进技术与完善扶持的品牌更具加盟价值。以下十大品牌经权威盘点,凭硬实力…

五、指令集架构深入分析

五、指令集架构深入分析 雇主不是需要汇编语言程序员,而是需要有理解计算机体系结构的人来写出各高效的程序 指令的格式 指令集设计的考虑因素? ISA设计考虑因素:指令占用内存空间大小; 指令系统复杂程度,主要指指…

ARC 208 Div.2

三天之期已到,这一次,我要夺回属于我的一切!

八、系统软件

八、系统软件 编译时绑定Compile time binding :给定明确的代码 装载时绑定Load time binding:装载到内存里面不可以再修改 运行时绑定Run time binding:模块不运行就不会加载 链接:不同的二进制文件形成一个单一的…

七、输入输出和存储系统

七、输入输出和存储系统 AMDAHL定律(阿姆达尔) 计算机系统整体性能的速度提升(加速比)取决于某个特定部件本身的加速率和该部件在系统中的使用率。公式表示为式中,S为系统整体性能的加速率,f表示待替换部件完成的…

那快把题端上来吧(五)

十月训练好题记录量子通信 将 \(256\) 分成 \(16\times 16\) ,因为 \(k\le 15\) ,所以合法的串至少有一个块是和询问串完全相同的。 记录每个块每一种可能的值对于的字典编号,扫描这些字典判断是否合法。 因为字典是…

机器学习学术研讨会柏林举办

某中心柏林办公室将举办StatML牛津帝国理工学院机器学习研讨会,旨在搭建学术界与工业界的桥梁,促进机器学习与计算统计领域的学术交流与合作,探讨方法论进展及实际应用解决方案。某中心将主办StatML牛津帝国理工学院…

构建易受攻击的AWS DevOps环境:CloudGoat攻防实战

本文详细介绍了如何在CloudGoat中构建易受攻击的AWS DevOps环境,包含完整的攻击路径分析、IAM权限绕过技巧、供应链安全漏洞利用,以及使用Terratest进行端到端自动化测试的方法。构建易受攻击的AWS DevOps环境作为Cl…

虚拟机和windows

一、虚拟机 1.1 虚拟机的概念 ​ 一台计算机可以运算多个操作系统 1.2 虚拟机的两种模式寄居架构:在物理硬件上的操作系统中安装虚拟机软件运行其他操作系统 原生架构:虚拟机本身就是操作系统,在虚拟机上运行多个操…

实用指南:二型最大似然(Type II Maximum Likelihood):概述与核心概念

实用指南:二型最大似然(Type II Maximum Likelihood):概述与核心概念pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

MySQL 5.7版本,搭建一个两主一从的多源主从复制环境

0. 概述 自MySQL5.7.6 版本开始,就支持多源复制。本文简要记录下两主一从的多源复制部署过程,及其中的要点。 1. 分别在两个主库中模拟需要同步的数据:主库1:在mm数据库中创建测试表mm,并插入几条数据。root@loca…

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像疑问深度学习优化技术

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Go 语言中映射(Map)使用场景 - 教程

Go 语言中映射(Map)使用场景 - 教程2025-10-12 19:10 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…