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

告别表格!用PyTorch实战策略梯度(Policy Gradient),5步搞定REINFORCE算法

告别表格用PyTorch实战策略梯度Policy Gradient5步搞定REINFORCE算法在强化学习领域策略梯度Policy Gradient方法正逐渐成为解决复杂决策问题的主流选择。与传统的表格型方法相比策略梯度通过神经网络直接参数化策略能够有效应对高维状态空间和连续动作空间的挑战。本文将带您从零开始使用PyTorch框架实现经典的REINFORCE算法让您快速掌握这一强大工具的核心实现技巧。1. 环境准备与策略网络设计在开始编码之前我们需要搭建实验环境。CartPole是OpenAI Gym中经典的强化学习测试环境非常适合初学者理解策略梯度的基本原理。这个环境中智能体需要控制小车左右移动以保持杆子竖直。首先安装必要的依赖库pip install gym torch numpy matplotlib策略网络是REINFORCE算法的核心组件它接收环境状态作为输入输出各个动作的概率分布。我们使用一个简单的三层全连接神经网络来实现import torch import torch.nn as nn import torch.nn.functional as F class PolicyNetwork(nn.Module): def __init__(self, state_dim, action_dim, hidden_size128): super(PolicyNetwork, self).__init__() self.fc1 nn.Linear(state_dim, hidden_size) self.fc2 nn.Linear(hidden_size, action_dim) def forward(self, x): x F.relu(self.fc1(x)) x F.softmax(self.fc2(x), dim-1) return x这个网络的关键设计要点包括输入层维度与状态空间维度匹配输出层使用softmax激活函数确保动作概率归一化隐藏层使用ReLU激活函数增强非线性表达能力实际调试中发现过大的隐藏层可能导致训练不稳定而太小的网络又难以捕捉复杂策略。经过多次实验128个隐藏单元在CartPole环境中表现出较好的平衡。2. 理解REINFORCE算法的数学基础REINFORCE算法建立在策略梯度定理的基础上其核心思想是通过蒙特卡洛采样来估计梯度然后使用梯度上升法优化策略。策略梯度定理给出了目标函数J(θ)关于参数θ的梯度∇θ J(θ) E[∇θ log πθ(a|s) * Qπ(s,a)]其中πθ(a|s)是策略网络给出的动作概率Qπ(s,a)是状态-动作价值函数期望E[...]表示在策略πθ下轨迹的期望在实际实现中我们使用轨迹的回报Gt来近似Qπ(s,a)这使得算法成为蒙特卡洛方法。这种近似带来了两个重要特性无偏性Gt是Qπ(s,a)的无偏估计高方差单条轨迹的回报可能波动很大关键技巧为减少方差通常会引入基线baseline最常见的是使用状态价值函数V(s)作为基线。但在基础REINFORCE实现中我们暂时不使用基线以保持算法简洁。3. 完整实现REINFORCE算法现在我们将上述理论转化为具体的PyTorch实现。完整的REINFORCE算法包含以下几个关键步骤def reinforce(env, policy, optimizer, num_episodes1000, gamma0.99): for episode in range(num_episodes): state env.reset() log_probs [] rewards [] # 收集轨迹数据 while True: state torch.FloatTensor(state).unsqueeze(0) action_probs policy(state) action torch.multinomial(action_probs, 1).item() next_state, reward, done, _ env.step(action) log_prob torch.log(action_probs.squeeze(0)[action]) log_probs.append(log_prob) rewards.append(reward) state next_state if done: break # 计算折扣回报 returns [] G 0 for r in reversed(rewards): G r gamma * G returns.insert(0, G) # 归一化回报重要技巧 returns torch.FloatTensor(returns) returns (returns - returns.mean()) / (returns.std() 1e-9) # 计算策略梯度损失 policy_loss [] for log_prob, G in zip(log_probs, returns): policy_loss.append(-log_prob * G) # 更新策略网络 optimizer.zero_grad() policy_loss torch.stack(policy_loss).sum() policy_loss.backward() optimizer.step()这段代码有几个值得注意的实现细节使用torch.multinomial根据概率分布采样动作这是策略梯度方法的关键反向计算折扣回报时gamma参数控制未来奖励的衰减程度回报归一化是稳定训练的重要技巧避免梯度幅度波动过大损失函数中的负号是因为PyTorch默认做梯度下降而我们需要梯度上升性能优化提示在实际应用中可以考虑使用批量更新收集多个episode后再更新来减少梯度更新的方差。4. 训练技巧与常见问题解决即使实现了正确的算法训练过程中仍可能遇到各种问题。以下是我们在CartPole环境中实践总结的经验4.1 学习率选择学习率对REINFORCE的训练效果影响极大。经过多次实验我们发现学习率训练效果0.01训练不稳定容易发散0.001收敛速度适中最终性能好0.0001收敛过慢需要更多episode# 推荐的学习率设置 optimizer torch.optim.Adam(policy.parameters(), lr0.001)4.2 奖励缩放CartPole环境中每一步的奖励都是1这可能导致回报Gt随着episode长度线性增长。我们采用两种方法解决回报归一化如前面代码所示引入折扣因子gamma控制长期奖励的影响实际测试发现gamma0.99在CartPole中效果良好既能考虑长期回报又不至于使Gt过大。4.3 梯度消失问题当策略接近最优时某些动作的概率可能变得非常小导致对数概率趋近于负无穷引发梯度消失。我们通过以下方法缓解# 在策略网络输出层添加小常数避免零概率 action_probs policy(state) 1e-8 action_probs action_probs / action_probs.sum()4.4 训练监控可视化训练过程有助于及时发现问题和调整超参数import matplotlib.pyplot as plt def plot_rewards(rewards): plt.plot(rewards) plt.xlabel(Episode) plt.ylabel(Total Reward) plt.title(Training Progress) plt.show()5. 进阶优化与扩展思路掌握了基础REINFORCE实现后我们可以考虑以下几个方向的改进5.1 引入基线减少方差如前所述引入基线可以显著降低梯度估计的方差。最简单的基线是回报的移动平均baseline 0 beta 0.9 # 基线更新系数 for log_prob, G in zip(log_probs, returns): baseline beta * baseline (1 - beta) * G.item() policy_loss.append(-log_prob * (G - baseline))5.2 使用Advantage函数Advantage函数A(s,a) Q(s,a) - V(s)能更准确地评估动作的相对优势。可以使用n-step TD估计# n-step TD估计 n_step 5 advantages [] for t in range(len(rewards)): end min(t n_step, len(rewards)) G sum([gamma**(i-t) * rewards[i] for i in range(t, end)]) if end len(rewards): G gamma**n_step * torch.max(policy(torch.FloatTensor(next_state))) advantages.append(G - baseline)5.3 扩展到连续动作空间REINFORCE也可以应用于连续动作空间只需修改策略网络输出高斯分布的参数class ContinuousPolicy(nn.Module): def __init__(self, state_dim, action_dim): super().__init__() self.fc_mean nn.Linear(state_dim, action_dim) self.fc_std nn.Linear(state_dim, action_dim) def forward(self, x): mean self.fc_mean(x) std F.softplus(self.fc_std(x)) 1e-5 return torch.distributions.Normal(mean, std)5.4 并行采样加速训练使用多个环境并行采集轨迹可以显著提高数据效率from multiprocessing import Process, Queue def worker(env_fn, policy, queue, num_episodes): env env_fn() for _ in range(num_episodes): # 采集轨迹并放入队列 queue.put(collect_trajectory(env, policy))在实现这些进阶技巧时建议逐步添加每次只引入一个改进并验证其效果这样才能准确理解每个组件的作用。

相关文章:

告别表格!用PyTorch实战策略梯度(Policy Gradient),5步搞定REINFORCE算法

告别表格!用PyTorch实战策略梯度(Policy Gradient),5步搞定REINFORCE算法 在强化学习领域,策略梯度(Policy Gradient)方法正逐渐成为解决复杂决策问题的主流选择。与传统的表格型方法相比&#…...

从Wi-Fi到5G:深入浅出聊聊BER(误比特率)在实际通信系统里到底有多重要?

从Wi-Fi到5G:误比特率如何塑造你的数字生活体验 1. 当视频卡顿时,BER在幕后做了什么? 深夜追剧时突然出现的马赛克画面,或是视频会议中同事凝固的表情——这些让人抓狂的瞬间,往往与一个名为误比特率(BER&a…...

没有GPU也能玩转PINN?手把手教你用CPU在云服务器上跑通Burgers方程仿真

没有GPU也能玩转PINN?手把手教你用CPU在云服务器上跑通Burgers方程仿真 物理信息神经网络(PINN)作为AI与科学计算交叉领域的前沿技术,正吸引着越来越多研究者的目光。但许多初学者常被一个误区困扰:必须配备高端GPU才能…...

3分钟搞定音乐解锁:Unlock-Music让你的加密音频重获自由

3分钟搞定音乐解锁:Unlock-Music让你的加密音频重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: htt…...

微信单向好友检测技术难题与自动化解决方案

微信单向好友检测技术难题与自动化解决方案 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字化社交时代&am…...

终极指南:OpenCore Legacy Patcher让老Mac重获新生的完整教程

终极指南:OpenCore Legacy Patcher让老Mac重获新生的完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让2015款MacBook Pro运行最新的ma…...

别再只会用GPIO读按键了!用STM32的ADC实现矩阵按键,节省IO口的硬件设计思路

突破传统:用STM32的ADC实现高性价比矩阵按键设计 在嵌入式系统开发中,按键输入是最基础却又最常遇到的功能需求之一。传统GPIO按键方案虽然简单直接,但在IO资源紧张的多功能设备中,往往成为制约设计灵活性的瓶颈。想象一下&#x…...

PyGPT:本地化AI助手部署与多模态应用实战指南

1. 项目概述:PyGPT,一个全能的桌面AI助手如果你和我一样,对ChatGPT这类在线AI助手的强大能力感到兴奋,但又时常受限于其网络环境、隐私顾虑,或者希望它能更深度地融入你的本地工作流,那么PyGPT的出现&#…...

终极暗黑2存档编辑器:5分钟打造你的个性化游戏体验

终极暗黑2存档编辑器:5分钟打造你的个性化游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你知道吗?还在为暗黑破坏神2中重复刷装备而烦恼?想快速体验不同职业build却不想从头练级&am…...

用ESPHome和Home Assistant玩转WS2812B灯带:从氛围灯到节日装饰的保姆级配置

用ESPHome和Home Assistant玩转WS2812B灯带:从氛围灯到节日装饰的保姆级配置 在智能家居的海洋中,灯光控制是最能体现"智能"二字的领域之一。而WS2812B可编程RGB灯带,就像一位全能的灯光魔术师,仅用一根数据线就能控制数…...

INAV PID控制器终极调参指南:7个简单技巧让无人机飞行稳如磐石

INAV PID控制器终极调参指南:7个简单技巧让无人机飞行稳如磐石 【免费下载链接】inav INAV: Navigation-enabled flight control software 项目地址: https://gitcode.com/gh_mirrors/in/inav INAV(导航增强飞行控制软件)是一款功能强…...

拒绝职场停滞:海归程序员突破 SDE II 瓶颈的进阶指南

很多留学生凭借扎实的代码基本功和高强度的加班,能在入职前两三年内迅速从初级(Junior)跃升至中级工程师(SDE II)。然而,当职业生涯迈入第五个年头,绝大多数人会撞上一面极其坚硬的“隐形高墙”…...

审稿人视角:你的IEEE论文在Related Work里踩了哪些雷?

IEEE论文Related Work章节的审稿人避雷指南 Related Work章节常被视为论文中最"套路化"的部分,却恰恰是审稿人判断研究者学术素养的第一道关卡。资深IEEE审稿人往往通过这一章节就能预判论文的学术价值——那些堆砌文献却缺乏批判性思考的"文献目录式…...

使用 Node.js 在 Ubuntu 后端服务中集成 Taotoken 多模型能力

使用 Node.js 在 Ubuntu 后端服务中集成 Taotoken 多模型能力 1. 环境准备与依赖安装 在 Ubuntu 系统中运行 Node.js 后端服务需要确保已安装 Node.js 运行环境。推荐使用 LTS 版本以获得长期支持。可以通过以下命令检查 Node.js 和 npm 是否已安装: node -v npm…...

为什么92%的PHP项目还在手写表单逻辑?揭秘被低估的PSR-14事件驱动表单引擎架构

更多请点击: https://intelliparadigm.com 第一章:PHP表单开发的现状与认知陷阱 当前,大量遗留 PHP 应用仍依赖 $_POST 和 $_GET 直接读取表单数据,缺乏输入验证、CSRF 防护与输出转义机制,导致 XSS、SQL 注入与会话…...

九大网盘直链下载解决方案:打破速度壁垒的技术实践

九大网盘直链下载解决方案:打破速度壁垒的技术实践 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

RTranslator大模型下载问题解决指南:从卡顿到流畅的完整实用方案

RTranslator大模型下载问题解决指南:从卡顿到流畅的完整实用方案 【免费下载链接】RTranslator Open source real-time translation app for Android that runs locally 项目地址: https://gitcode.com/GitHub_Trending/rt/RTranslator RTranslator是一款开源…...

终极指南:5步实现Deceive游戏状态伪装,英雄联盟离线模式全解析

终极指南:5步实现Deceive游戏状态伪装,英雄联盟离线模式全解析 【免费下载链接】Deceive 🎩 Appear offline for League of Legends, VALORANT, and Legends of Runeterra. 项目地址: https://gitcode.com/gh_mirrors/de/Deceive 你是…...

从一次线上Referrer泄露事故说起:聊聊strict-origin-when-cross-origin的实战价值

从一次线上Referrer泄露事故说起:聊聊strict-origin-when-cross-origin的实战价值 去年夏天,我们团队经历了一次令人警醒的安全事件。当时公司新上线了一个数据分析平台,运营团队在后台配置了几个第三方统计工具的埋点代码。两周后的某个深夜…...

使用 pip install 命令快速安装并配置 Taotoken Python SDK 的完整指南

使用 pip install 命令快速安装并配置 Taotoken Python SDK 的完整指南 1. 环境准备与 SDK 安装 确保您的 Python 环境版本在 3.7 或以上。推荐使用虚拟环境管理依赖: python -m venv taotoken-env source taotoken-env/bin/activate # Linux/macOS # 或 taotok…...

茉莉花插件:5分钟掌握Zotero中文文献管理的终极解决方案

茉莉花插件:5分钟掌握Zotero中文文献管理的终极解决方案 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为管理海…...

5分钟快速掌握GridPlayer:免费多视频网格播放工具终极指南

5分钟快速掌握GridPlayer:免费多视频网格播放工具终极指南 【免费下载链接】gridplayer Play videos side-by-side 项目地址: https://gitcode.com/gh_mirrors/gr/gridplayer 你是否经常需要同时观看多个视频,却不得不在不同窗口之间来回切换&…...

如何高效配置Windows风扇控制软件:FanControl完全指南

如何高效配置Windows风扇控制软件:FanControl完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

从‘采样抖动’聊起:你的高速ADC性能瓶颈,可能藏在这几个被忽略的电路细节里

高速ADC采样保持电路设计:从时钟抖动到系统级噪声优化的工程实践 在追求极致性能的高速ADC设计中,采样保持电路往往成为限制系统整体信噪比(SNR)的关键瓶颈。当我们把目光聚焦在12位以上精度、数百MHz采样率的应用场景时&#xff…...

iOS 15-16激活锁绕过终极指南:轻松解锁闲置iPhone

iOS 15-16激活锁绕过终极指南:轻松解锁闲置iPhone 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否有一部因激活锁而无法使用的iPhone?applera1n是一个专为iOS 15-16系统设…...

智能体开发研究

一、智能体的概念与核心特征 智能体(AI Agent)是指能够自主感知环境、做出决策并执行行动的AI系统。它通过"感知-决策-执行"的闭环实现复杂任务处理,区别于传统AI模型的被动响应,智能体具备自主性、交互性、反应性和适应性四大核心特征。 自主性:智能体能在无人干…...

QMCDecode终极指南:3分钟破解QQ音乐加密格式,让音乐文件自由播放 [特殊字符]

QMCDecode终极指南:3分钟破解QQ音乐加密格式,让音乐文件自由播放 🎵 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识…...

DDrawCompat:让经典DirectX游戏在现代Windows上重获新生的技术救星

DDrawCompat:让经典DirectX游戏在现代Windows上重获新生的技术救星 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirro…...

从电影到实战:手把手复现GoldenEye靶机中的POP3服务与邮件信息收集

从电影到实战:手把手复现GoldenEye靶机中的POP3服务与邮件信息收集 当007系列电影《黄金眼》中的反派角色通过黑客技术控制卫星武器系统时,谁曾想到这些虚构场景会成为渗透测试教学的绝佳案例?GoldenEye靶机正是基于这部电影构建的实战环境&a…...

2026 网安行业全景洞察:3 大发展机遇、4 大现实挑战,看懂未来五年安全赛道

2026网络安全行业趋势分析:3大机遇4大挑战 2026 年,在人工智能、大数据、物联网等新技术的驱动下,网络安全行业迎来新一轮变革窗口期,机遇与挑战并存。无论是职场人、准备入行的求职者,还是企业管理者,都需…...