news 2026/6/24 7:14:59

强化学习(8)--值函数近似

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习(8)--值函数近似

说明:本系列文章是我在学习了西湖大学赵世钰老师的《Mathematical Foundations of Reinforcement Learning》一书后的学习笔记,在B站上有赵老师的完整课程视频。

课程视频链接

PDF教材链接

本文代码链接

一、从表格到函数

之前我们都是用表格的方法来维护策略的s-value和q-value,当状态空间有限且较小的时候,表格的方式很好用,但是当状态空间是连续的或者非常大的时候,表格的方式将使得存储和计算的需求就爆炸式的增长。从现在开始,我们介绍用函数的方式来位数s-value和q-value,用有限的参数通过函数的方式来表达value。

还是以gridworld为例:

在表格方法中:

在函数方法中:

  • 来近似
  • 是状态的一个函数;
  • 其中是我们要优化的参数;
  • 叫做状态的特征向量(feture vector)。
对比:
  • 在表格方法中,我们通过查找对应单元格来获取v-value,在函数方法中,我们通过计算函数值来获取v-value。
  • 在表个方法中,我们通过修改对应单元格来直接更新v-value,在函数方法中,我们通过更新参数来间接更新v-value。
  • 函数的表达方式具有更强的泛化能力,因为在表格方法中,我们更新某个v-value,只会影响对应的状态s;在函数方法中,我们更新参数,会影响其他状态s通过函数计算的输出值。

从上图中,我们可以看出,函数的方式替代表格的方式,本质上是一个用曲线拟合一个数据集合。上图是用一条直线来拟合所有v-value,但是如果这些点的分布不是一条类直线呢?世界上,我们可以根据需要选用多种不同的函数来拟合,比如用更复杂的高阶多项式。

随着用来拟合的函数阶数的增高,参数量增大,拟合的精度会增加,随之而来的是存储和计算的资源需求也增加。

在上面的公式(8.1)和(8.2)中,对参数都是线性的,我们称之为线性方程近似。(虽然它对状态s不是线性的)

近似函数的选择:

这取决于具体的任务,但选择一个好的函数并不简单,所以我们通常直接选用神经网络来作为非线性函数近似。

目标函数:

既然我们要优化参数,使得,则显然目标函数应该是:

二、基于函数近似的TD Learning

期望形式目标函数:

这里S是一个随机变量,是随机变量就涉及到概率分布:

  • 如果s是均匀分布:

  • 如果s不是均匀分布(绝大多数情况下):

这里的意义:

在策略下,agent从任一初始状态s出发,经过足够长的episode,在这个过程中访问所有状态s概率分布,称之为平稳分布。(Stationary distribution of a Markov decision process)

然而,并不容易获取,因此,我们采用梯度下降的方法来优化参数w:

计算梯度:

带入可得:

从GD的期望形式转为SGD的elementwise form:

其中是在t时刻S的采样。

等式中依赖一个我们并不知道的真实值,有两种方法获得:

  • 一是蒙特卡罗方法,采样一个episode,用从开始的discounted return,来近似

  • 另一种方法是时序差分的方法(TD)

伪代码:

线性的方法较容易理解,但是其近似能力有限,对于复杂任务,选择合适的特征向量也不容易,较难收敛。通常情况下,我们更多的使用神经网络来近似。

这里是估计s-value,无法更新策略,原因还是Mode-free得方法,只有数据,没有模型,因此,我们下面要切换为估计q-value的方法。

在线性估计中,由于是线性的,所以其对的导数就是特征向量

三、TD based on q-value approximation

简单的将替换为,得到:

伪代码:

如果是线性估计,则由于是线性的,所以其对的导数就是特征向量

四、Q-Learning with function approximation

将q-value近似的公式中,替换为,得到:

伪代码:

这是一个on-policy的伪代码,和上一章中的Q-Learning一样,我们也可以将其改写为off-policy形式。

五、Deep Q-Learning

我们使用神经网络替代函数近似,就是DQN。

目标函数(损失函数):

要求解,则需要用到梯度下降算法:

在(8.37)中,显然中都是w的函数,由于target中有max项,计算梯度并不容易。

因此,我们假定target中的w是固定的,不参与迭代,则只需要计算estimate项的梯度。令:

则有:

双网络:
  • 这样target和estimate中的神经网络就变成了两个不同的网络,我们成estimate中的网络为main network,target中的网络为target network。
  • main network中的参数在每次迭代中都更新
  • target network则每经过一定的迭代次数后,将main network中的参数复制给target network
经验重放:

从目标函数(8.27)我们可以看出,计算中只依赖于和前后两个状态的q-value,而q-value就是神经网络的输出。

也就是说,当我们采样一个episode后,我们可以将其截断成一个个的,而无需关心整个episode的链条关系,每个就是一个sample。

这样,我们就只需要采样一个足够长的episode,然后将其封装成一个数据集,并将其打乱,重复使用(使得每个(s,a)都变成了独立分布)。这不就是深度学习中的典型dataset吗?

每个训练epoch都使用相同的数据集,每个batch从中随机选取部分sample训练迭代(MBGD)。这就是经验重放。

经验重放的好处:

  • 只需采样一次,重复利用,数据利用率高
  • 打乱的数据,满足GD对采样独立分布的要求

伪代码:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 14:50:06

设计稿发出去之后:一次让我想辞职的颜色噩梦

甲方说"这不是我要的蓝",我看了一眼,想死 周一早上九点,甲方总监发来微信:“这个蓝色不对,不是我们品牌色。” 我把设计稿放大到300%,盯着那个#2B5C8A看了足足十秒——这是我用取色器从甲方品牌手…

作者头像 李华
网站建设 2026/4/13 14:49:59

SwiftUI 波浪动画与图像同步

在开发移动应用时,动画效果常常是提升用户体验的重要元素。本文将介绍如何在 SwiftUI 中实现一个波浪动画,同时让图像与波浪同步移动,创建一个看起来像在水面上漂浮的效果。 问题描述 我们希望在一个波浪动画中,图像能够随着波浪的起伏移动,而不是像背景图一样固定在屏幕…

作者头像 李华
网站建设 2026/4/13 14:49:06

Keil5嵌入式开发启示:Graphormer模型在MCU上的极限压缩与部署探索

Keil5嵌入式开发启示:Graphormer模型在MCU上的极限压缩与部署探索 1. 前沿技术背景 在嵌入式AI领域,将大模型部署到资源受限设备一直是极具挑战性的课题。传统认知中,像Graphormer这样的图神经网络需要GPU级别的算力支持。但最近的技术突破…

作者头像 李华
网站建设 2026/4/13 14:49:04

SQL查询特定行:limit用法

LIMIT 关键字在 SQL 中用于限制查询结果返回的记录数量。它可以用来实现分页查询,或者从复杂查询中获取特定的记录。limit (n.极限; 限制; 界限; 范围 v.限制; 限量; 使限于)limit 有三种使用方法举例:查询user_profile表中&#…

作者头像 李华
网站建设 2026/4/13 14:48:17

Chord - Ink Shadow 效果展示:基于Transformer架构的国风水墨画生成

Chord - Ink & Shadow 效果展示:基于Transformer架构的国风水墨画生成 1. 开场白:当AI遇见千年水墨 最近试用了Chord - Ink & Shadow这个模型,说实话,第一眼看到它生成的画作时,我有点愣住了。不是那种冷冰冰…

作者头像 李华
网站建设 2026/4/13 14:48:17

从零开始理解AI:大模型、多模态与智能体,小白也能收藏学习!

打开手机,我们在用DeepSeek查资料,用豆包写邮件,让通义千问总结文档,刷着算法推荐的短视频……AI似乎无处不在。但当别人问起“AI到底是什么”时,我们又常常不知从何说起。 别担心,今天这篇文章&#xff0c…

作者头像 李华