当前位置: 首页 > article >正文

告别巨型Q表!用PyTorch手把手实现价值函数逼近(VFA),搞定CartPole游戏

告别巨型Q表用PyTorch手把手实现价值函数逼近VFA搞定CartPole游戏当你在Gymnasium的CartPole环境中第一次尝试Q-Learning时是否曾被那个不断膨胀的Q表格吓到状态空间稍微复杂些内存占用就会指数级增长。这就是传统表格型强化学习方法的致命伤——维度灾难Curse of Dimensionality。今天我们将用PyTorch实现价值函数逼近Value Function Approximation用神经网络这个万能函数逼近器来替代笨重的Q表格。1. 为什么需要价值函数逼近在经典CartPole问题中小车的状态由四个连续变量构成小车位置x小车速度v杆角度θ杆角速度ω如果用离散化方法处理假设每个维度分成20个区间动作空间有2个动作左/右那么Q表大小将是20^4 * 2 320,000 个条目这种存储方式存在三个致命缺陷内存爆炸状态维度增加时存储需求呈指数增长泛化性差相似状态无法共享经验效率低下查表操作在连续空间变得极其低效函数逼近的核心思想是用参数化函数$Q(s,a;w)$代替Q表其中w是可训练参数。PyTorch实现的优势在于自动微分简化梯度计算GPU加速提升训练速度灵活的神经网络架构设计提示VFA不仅适用于离散动作空间稍加修改就能扩展到连续控制问题2. 环境准备与特征工程首先建立我们的实验环境import gymnasium as gym import torch import torch.nn as nn env gym.make(CartPole-v1) state_dim env.observation_space.shape[0] # 4 action_dim env.action_space.n # 2对于线性逼近器特征设计至关重要。我们采用多项式特征增强表现力def polynomial_features(state, degree2): 将4维状态转换为多项式特征 x, v, theta, omega state features [ 1, x, v, theta, omega, x*v, x*theta, x*omega, v*theta, v*omega, theta*omega, x**2, v**2, theta**2, omega**2 ] return torch.FloatTensor(features)这种特征工程比原始状态更适合线性模型捕捉非线性关系。不同特征处理方式对比特征类型维度优点缺点原始状态4简单直接无法捕捉非线性多项式特征15增强非线性能力维度增长快神经网络自定义自动学习特征需要更多数据3. 构建PyTorch逼近器我们实现两种典型的函数逼近器3.1 线性逼近器class LinearVFA(nn.Module): def __init__(self, feature_dim, action_dim): super().__init__() self.weights nn.Linear(feature_dim, action_dim, biasFalse) def forward(self, features): return self.weights(features)3.2 神经网络逼近器class NeuralVFA(nn.Module): def __init__(self, state_dim, action_dim, hidden_size64): super().__init__() self.net nn.Sequential( nn.Linear(state_dim, hidden_size), nn.ReLU(), nn.Linear(hidden_size, action_dim) ) def forward(self, state): return self.net(state)关键参数初始化技巧def init_weights(m): if type(m) nn.Linear: nn.init.xavier_uniform_(m.weight) if m.bias is not None: m.bias.data.fill_(0.01) model.apply(init_weights) # 应用Xavier初始化4. 训练流程实现完整的训练循环包含这些关键步骤经验收集使用ε-greedy策略与环境交互def select_action(state, epsilon): if random.random() epsilon: return env.action_space.sample() else: with torch.no_grad(): q_values model(state) return q_values.argmax().item()TD目标计算实现Sarsa风格的更新current_q model(current_state)[action] next_q model(next_state)[next_action] # Sarsa风格 target reward gamma * next_q * (1 - done) loss F.mse_loss(current_q, target)参数更新PyTorch标准优化流程optimizer.zero_grad() loss.backward() optimizer.step()完整的训练参数配置参数推荐值作用γ (gamma)0.99折扣因子ε初始值1.0探索率ε衰减率0.995线性衰减学习率0.001Adam优化器批次大小32每次更新样本数隐藏层大小64神经网络宽度5. 效果对比与调优经过2000轮训练后两种方法的性能对比指标线性VFA神经网络VFA收敛步数~800~400最高得分200500训练速度快(1x)慢(3x)稳定性高需要调参常见问题解决方案震荡不收敛减小学习率增加批次大小得分卡在200调整γ接近1增强长期回报考虑探索不足采用ε衰减策略如epsilon max(0.01, epsilon * 0.995) # 指数衰减进阶技巧使用经验回放打破数据相关性实现Double DQN减少过高估计添加优先级采样提升重要经验利用率# 示例优先级回放缓冲区 class PriorityBuffer: def __init__(self, capacity): self.capacity capacity self.buffer [] self.priorities np.zeros(capacity) def add(self, experience, priority): if len(self.buffer) self.capacity: self.buffer.append(experience) else: idx np.argmin(self.priorities) self.buffer[idx] experience self.priorities[len(self.buffer)-1] priority在实际测试中当杆子快要倒下时神经网络VFA能捕捉到更细微的状态变化。比如当θ0.2且ω0.5时模型会强烈建议向相反方向移动而线性模型对这种非线性关系的反应要迟钝许多。

相关文章:

告别巨型Q表!用PyTorch手把手实现价值函数逼近(VFA),搞定CartPole游戏

告别巨型Q表!用PyTorch手把手实现价值函数逼近(VFA),搞定CartPole游戏 当你在Gymnasium的CartPole环境中第一次尝试Q-Learning时,是否曾被那个不断膨胀的Q表格吓到?状态空间稍微复杂些,内存占用…...

6.1B激活,三榜开源第一!蚂蚁·安诊儿医疗大模型发布

刚刚,由浙江省卫生健康信息中心、蚂蚁健康与浙江省安诊儿医学人工智能科技有限公司联合研发,迄今为止规模最大、能力最强的开源医疗语言模型 AntAngelMed 发布并开源。模型基于 Ling-flash-2.0,MoE架构,100B 总参数仅激活 6.1B 即…...

CVPR2021_PLOP 论文代码环境搭建步骤

安装cuda 10.2 wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run sudo sh cuda_10.2.89_440.33.01_linux.run #只选择 cudatoolkit 安装conda 换源,北外源比较快 参考: https://mi…...

PowerToys中文汉化终极指南:3步快速实现Windows效率工具完全本地化

PowerToys中文汉化终极指南:3步快速实现Windows效率工具完全本地化 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾因PowerToys的英文…...

手机跑多模态也能快到飞起!面壁MiniCPM-V 4.6开源

大模型技术正快步从云端机房走入普通人的智能手机,让移动设备直接处理复杂的图文与视频任务成为现实。面壁智能最新开源的一款多模态模型,以极低的算力成本,超低的首Token延迟,成功打通当前三大主流手机操作系统。MiniCPM-V 4.6专…...

python访问sqlite(sqlalchemy)(orm方式)

文章目录sqlalchemy的理解Base declarative_base()的作用?__repr__方法查询db.query()并不是查询,query.count()和query.offset()才是查询?查询-拼接条件分组关联查询新增修改删除安装依赖开始接触sqlalchemy不太习惯,感觉有点抽象。后来换个视角瞬间…...

Nodeunit源码探秘:核心模块与异步测试实现原理

Nodeunit源码探秘:核心模块与异步测试实现原理 【免费下载链接】nodeunit Easy unit testing in node.js and the browser, based on the assert module. 项目地址: https://gitcode.com/gh_mirrors/no/nodeunit Nodeunit 是一个基于 Node.js 断言模块的轻量…...

告别调试助手:在Linux终端用minicom高效收发AT指令

1. 为什么选择minicom替代图形化串口工具 作为一名在嵌入式领域摸爬滚打多年的开发者,我经历过各种串口调试工具的折磨。从早期的Windows超级终端到现在的各种图形化串口助手,最终发现Linux下的minicom才是真正的高效利器。你可能要问:为什么…...

Nodeunit自定义reporters开发:打造个性化测试输出格式

Nodeunit自定义reporters开发:打造个性化测试输出格式 【免费下载链接】nodeunit Easy unit testing in node.js and the browser, based on the assert module. 项目地址: https://gitcode.com/gh_mirrors/no/nodeunit Nodeunit是一款简单易用的Node.js单元…...

深入解析ISO/IEC 14443-4:非接触通信的“对话规则”与实战应用

1. 非接触通信的"对话规则"从何而来? 想象一下你第一次和外国朋友交流的场景:双方需要确认彼此能说哪种语言、用多大的声音说话、每次说完话要等多久再回应——这就是ISO/IEC 14443-4协议在非接触通信中扮演的角色。作为近场通信(N…...

ios蓝牙开发

一、蓝牙基本概念蓝牙&#xff1a;BLE (Bluetooth Low Energy/低功耗蓝牙)&#xff0c;一般应用苹果的官方框架基于 <CoreBluetooth/CoreBluetooth.h> 框架进行开发。中心设备&#xff1a;用于扫描周边蓝牙外设的设备&#xff0c;比如我们上面所说的中心者模式&#xff0…...

Latte文本到视频生成实战:打造个性化AI视频的终极指南

Latte文本到视频生成实战&#xff1a;打造个性化AI视频的终极指南 【免费下载链接】Latte [TMLR 2025] Latte: Latent Diffusion Transformer for Video Generation. 项目地址: https://gitcode.com/gh_mirrors/la/Latte Latte是一款基于TMLR 2025研究成果的文本到视频…...

解决claude code频繁封号问题转向taotoken稳定服务的实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决Claude Code频繁封号问题转向Taotoken稳定服务的实践 1. 问题背景&#xff1a;开发者面临的稳定性与成本挑战 许多开发者在日…...

JPlag:17种编程语言的代码抄袭检测利器,如何精准识别学术不端与代码剽窃?

JPlag&#xff1a;17种编程语言的代码抄袭检测利器&#xff0c;如何精准识别学术不端与代码剽窃&#xff1f; 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gi…...

Shoelace主题定制终极指南:掌握CSS变量覆盖与扩展技巧的10个秘诀

Shoelace主题定制终极指南&#xff1a;掌握CSS变量覆盖与扩展技巧的10个秘诀 【免费下载链接】shoelace Shoelace is now Web Awesome. Come see what’s new! 项目地址: https://gitcode.com/gh_mirrors/sh/shoelace Shoelace是一个功能强大的Web组件库&#xff0c;现已…...

JPlag:源代码相似性检测与抄袭识别的核心技术解析

JPlag&#xff1a;源代码相似性检测与抄袭识别的核心技术解析 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag JPlag是一…...

AI工作流编排利器:OpenClaw Workflow Kit 模块化设计与实战

1. 项目概述&#xff1a;一个为AI工作流打造的“瑞士军刀”最近在GitHub上看到一个挺有意思的项目&#xff0c;叫leilong611-ai/openclaw-workflow-kit。光看这个名字&#xff0c;你可能会有点懵&#xff1a;“OpenClaw”是啥&#xff1f;“Workflow Kit”又是干嘛的&#xff1…...

【Midjourney v8图像修复终极指南】:9大隐藏参数调优+3类高频崩坏场景实战修复(2024官方未公开文档级解析)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v8图像修复功能全景概览 Midjourney v8 引入了革命性的图像修复&#xff08;Image Inpainting&#xff09;能力&#xff0c;不再依赖外部图层或第三方工具&#xff0c;而是通过原生提示词指…...

LeetCode 118. 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。示例 1:输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows 1 输出: [[1]]提示:1 < numRows…...

JiT源码深度剖析:从Denoiser到Transformer的完整实现

JiT源码深度剖析&#xff1a;从Denoiser到Transformer的完整实现 【免费下载链接】JiT PyTorch implementation of JiT https://arxiv.org/abs/2511.13720 项目地址: https://gitcode.com/gh_mirrors/jit8/JiT JiT&#xff08;Just image Transformer&#xff09;是一个…...

百度网盘macOS插件:技术探索与速度优化方案解析

百度网盘macOS插件&#xff1a;技术探索与速度优化方案解析 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 在macOS平台上使用百度网盘的用户常常面临下…...

漏洞审计实战:从思维模式到工具协同的代码安全深度剖析

1. 项目概述&#xff1a;从“bug-audit-skill”看漏洞审计的实战化沉淀最近在GitHub上看到一个名为“bug-audit-skill”的项目&#xff0c;作者是abczsl520。这个项目名直译过来就是“漏洞审计技能”&#xff0c;它不像一个具体的工具&#xff0c;更像是一个知识库或经验集。在…...

JD-GUI深度解析:Java字节码逆向工程的瑞士军刀

JD-GUI深度解析&#xff1a;Java字节码逆向工程的瑞士军刀 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发的世界里&#xff0c;我们常常需要面对只有字节码没有源码的困境——第三方库的调试…...

OpenCart安全审计实战:静态代码扫描与核心漏洞修复指南

1. 项目概述与核心价值最近在整理一个基于OpenCart的电商项目时&#xff0c;客户提出了一个非常具体且关键的需求&#xff1a;需要对整个系统的安全性进行一次全面的审计。这不仅仅是运行一个自动化扫描工具那么简单&#xff0c;客户希望我们能深入代码层面&#xff0c;检查是否…...

探索APK Installer:如何用Windows原生技术解析安装安卓应用?

探索APK Installer&#xff1a;如何用Windows原生技术解析安装安卓应用&#xff1f; 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows上安装安卓应用而烦恼…...

基于OpenClaw与Binance API的加密货币安全助手:四层架构与实战部署

1. 项目概述&#xff1a;一个为普通人打造的加密资产守护神在加密货币的世界里&#xff0c;技术壁垒和信息不对称就像一道无形的墙&#xff0c;将许多普通人挡在了安全投资的门外。我们见过太多这样的场景&#xff1a;一位想为子女攒点教育金的母亲&#xff0c;因为误点了钓鱼链…...

构建工业级电力通信系统的终极指南:libiec61850开源库深度解析

构建工业级电力通信系统的终极指南&#xff1a;libiec61850开源库深度解析 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 在现代…...

Poppins几何无衬线字体:9种字重与多语言支持的技术实现深度解析

Poppins几何无衬线字体&#xff1a;9种字重与多语言支持的技术实现深度解析 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins Poppins几何无衬线字体是一款由Indian Type Foundry…...

企业级应用awesome-stock-resources:商业项目合规使用终极指南

企业级应用awesome-stock-resources&#xff1a;商业项目合规使用终极指南 【免费下载链接】awesome-stock-resources :city_sunrise: A collection of links for free stock photography, video and Illustration websites 项目地址: https://gitcode.com/gh_mirrors/aw/awe…...

如何快速解析SWF文件:JPEXS免费Flash反编译器的完整指南

如何快速解析SWF文件&#xff1a;JPEXS免费Flash反编译器的完整指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款功能强大的开源Flash逆向工程工具…...