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

告别蒙圈!用Python手搓Sarsa与Q-learning,搞懂时序差分TD算法的核心差异

从零实现Sarsa与Q-learning揭秘时序差分算法的本质差异在强化学习领域时序差分(Temporal Difference, TD)算法如同一位隐形的导师它不需要等待完整的学习过程结束就能在每一步给予我们反馈和指导。想象一下你正在玩一个迷宫游戏传统方法需要你走完全程才知道哪些选择是正确的而TD算法则能在你每次转弯时就给出即时评价——这种边走边学的特性正是它成为强化学习核心算法的关键。1. 环境搭建与基础概念让我们从搭建实验环境开始。OpenAI Gym的FrozenLake环境是一个理想的起点——这个4x4的网格世界模拟了在冰面上行走的情景某些区域是危险的冰窟窿而唯一的安全路径通向目标位置。我们将使用这个环境来对比Sarsa和Q-learning的行为差异。import numpy as np import matplotlib.pyplot as plt import seaborn as sns from tqdm import tqdm import gym env gym.make(FrozenLake-v1, descNone, map_name4x4, is_slipperyTrue) num_states env.observation_space.n num_actions env.action_space.n关键术语解析On-policy学习智能体在学习时遵循的策略与评估的策略相同Off-policy学习学习时使用的策略(行为策略)与要优化的策略(目标策略)可以不同探索-利用困境在尝试新行动(探索)和选择已知最佳行动(利用)之间的平衡注意FrozenLake环境的is_slippery参数设为True时动作执行有33%的概率会随机滑向其他方向这增加了问题的随机性和挑战性。2. Sarsa算法实现与深度解析Sarsa得名于其更新过程中涉及的五个元素State-Action-Reward-State-Action。这是一种典型的on-policy算法它在学习当前策略的同时也使用该策略来选择下一个动作。def sarsa(env, num_episodes10000, alpha0.1, gamma0.99, epsilon0.1): Q np.zeros((num_states, num_actions)) rewards [] for _ in tqdm(range(num_episodes)): state env.reset() action epsilon_greedy(Q, state, epsilon) episode_reward 0 while True: next_state, reward, done, _ env.step(action) next_action epsilon_greedy(Q, next_state, epsilon) # Sarsa更新公式 td_target reward gamma * Q[next_state][next_action] * (not done) td_error td_target - Q[state][action] Q[state][action] alpha * td_error episode_reward reward state, action next_state, next_action if done: break rewards.append(episode_reward) return Q, rewardsSarsa的核心特点保守的策略学习由于使用相同的策略选择下一个动作Sarsa会考虑到策略本身的随机性学习到的策略通常更加安全在线学习特性必须在环境中实际执行下一个动作后才能进行更新策略依赖性学习效果高度依赖于当前策略的探索程度(ε值)在FrozenLake环境中Sarsa的表现会呈现以下模式训练阶段平均奖励策略特点初期接近0随机探索频繁掉入冰窟中期0.3-0.6开始找到安全路径但仍不够稳定后期0.7-0.9找到稳定安全路径避开危险区域3. Q-learning算法实现与技术内幕Q-learning是强化学习中最著名的off-policy算法其核心思想是直接学习最优动作价值函数而不依赖于当前策略。def q_learning(env, num_episodes10000, alpha0.1, gamma0.99, epsilon0.1): Q np.zeros((num_states, num_actions)) rewards [] for _ in tqdm(range(num_episodes)): state env.reset() episode_reward 0 while True: action epsilon_greedy(Q, state, epsilon) next_state, reward, done, _ env.step(action) # Q-learning更新公式 best_next_action np.argmax(Q[next_state]) td_target reward gamma * Q[next_state][best_next_action] * (not done) td_error td_target - Q[state][action] Q[state][action] alpha * td_error episode_reward reward state next_state if done: break rewards.append(episode_reward) return Q, rewardsQ-learning的显著特征最优策略导向直接估计最优动作价值函数不受当前行为策略的限制离线学习能力可以从历史经验或他人收集的数据中学习更大胆的策略倾向于找到最短路径但可能在随机环境中不够稳健让我们通过一个对比表格来直观展示两种算法的差异特性SarsaQ-learning策略类型On-policyOff-policy更新目标当前策略的下一个动作最优可能的下一个动作探索敏感性高低收敛速度通常较慢通常较快随机环境中的稳健性高较低数据利用效率较低较高4. 实战对比分析与可视化现在让我们将两种算法在相同的FrozenLake环境中运行并通过可视化来观察它们的行为差异。# 运行两种算法 Q_sarsa, rewards_sarsa sarsa(env, num_episodes10000) Q_qlearning, rewards_qlearning q_learning(env, num_episodes10000) # 绘制学习曲线 plt.figure(figsize(12, 6)) plt.plot(np.convolve(rewards_sarsa, np.ones(100)/100, modevalid), labelSarsa) plt.plot(np.convolve(rewards_qlearning, np.ones(100)/100, modevalid), labelQ-learning) plt.xlabel(Episode) plt.ylabel(Average Reward (100-episode window)) plt.legend() plt.title(Learning Curve Comparison) plt.show()关键观察点收敛速度Q-learning通常会更早显示出性能提升因为它直接瞄准最优值最终性能在随机环境中Sarsa往往能获得更稳定的高回报因为它考虑了策略的随机性学习曲线波动Q-learning的曲线通常波动更大反映出其更激进的优化目标在策略可视化方面我们可以绘制出两种算法学习到的最优策略def plot_policy(Q, title): policy np.argmax(Q, axis1).reshape(4,4) plt.figure(figsize(6,6)) sns.heatmap(policy, annotTrue, fmtd, cmapYlGnBu, cbarFalse) plt.title(title) plt.show() plot_policy(Q_sarsa, Sarsa Policy) plot_policy(Q_qlearning, Q-learning Policy)策略差异分析Sarsa策略倾向于选择远离冰窟的安全路径即使这意味着要走更长的路线Q-learning策略通常会选择最短路径但在随机环境中可能因为滑动而掉入冰窟在实际项目中选择哪种算法取决于具体需求。如果安全性至关重要(如医疗或金融应用)Sarsa可能是更好的选择如果追求最大效率且环境随机性较小(如游戏AI)Q-learning通常表现更佳。5. 高级技巧与优化策略要让这些算法在实际中发挥最佳性能还需要一些关键技巧1. 动态ε-greedy策略def dynamic_epsilon(episode, min_epsilon0.01, max_epsilon1.0, decay_rate0.001): return min_epsilon (max_epsilon - min_epsilon) * np.exp(-decay_rate * episode)2. 自适应学习率def adaptive_alpha(state, action, initial_alpha0.5, decay0.0001): return initial_alpha / (1 decay * state_visit_count[state][action])3. 经验回放(适用于Q-learning)class ReplayBuffer: def __init__(self, capacity10000): self.buffer deque(maxlencapacity) def push(self, transition): self.buffer.append(transition) def sample(self, batch_size): return random.sample(self.buffer, batch_size)4. 多步TD学习# n步Q-learning更新 td_target 0 for i in range(n): if i 0: td_target reward else: td_target (gamma**i) * next_rewards[i-1] td_target (gamma**n) * np.max(Q[next_state])这些技术可以显著提升算法性能特别是在复杂环境中。例如在FrozenLake的8x8变体中基础算法可能表现不佳而结合了这些技巧的版本则能保持良好性能。6. 算法选择指南与行业应用理解Sarsa和Q-learning的本质差异后我们可以制定一个选择框架选择Sarsa当环境随机性高动作执行不精确安全性和稳定性比效率更重要需要在线学习且策略需要持续改进选择Q-learning当环境相对确定动作执行可靠追求最优性能是首要目标可以利用历史数据或并行收集数据行业应用案例机器人控制Sarsa常用于需要安全控制的物理机器人因为其学习到的策略更加稳健游戏AIQ-learning及其变种(如DQN)在确定性较高的游戏环境中表现出色量化交易结合两种算法特点的混合方法常用于平衡风险和收益推荐系统基于Q-learning的off-policy特性可以利用历史用户行为数据学习在实现这些算法时一个常见的陷阱是忽视环境本身的特性。例如在FrozenLake这样的随机环境中直接使用Q-learning而不调整探索策略可能导致学习到的策略过于冒险。我曾在一个物流路径规划项目中使用Q-learning最初因为忽视环境随机性而导致方案失败后来通过引入动态ε和结合Sarsa的保守更新机制才获得了理想结果。

相关文章:

告别蒙圈!用Python手搓Sarsa与Q-learning,搞懂时序差分TD算法的核心差异

从零实现Sarsa与Q-learning:揭秘时序差分算法的本质差异 在强化学习领域,时序差分(Temporal Difference, TD)算法如同一位隐形的导师,它不需要等待完整的学习过程结束,就能在每一步给予我们反馈和指导。想象一下,你正在…...

数独AI求解器:从回溯算法到LLM推理的技术实现

1. 项目概述:当数独遇上AI,一场关于逻辑与推理的深度对话如果你和我一样,对数独这项经典的逻辑游戏抱有浓厚的兴趣,同时又对人工智能如何“思考”充满好奇,那么“Keyoku-ai/keyoku”这个项目绝对值得你花时间深入研究。…...

PHP 9.0 + RAG + Async Streams全栈部署,支撑万级并发AI会话的5大核心配置,你漏了第3个?

更多请点击: https://intelliparadigm.com 第一章:PHP 9.0 RAG Async Streams全栈AI会话架构全景 PHP 9.0(预发布版)原生支持协程级异步 I/O 与结构化并发,结合 RAG(Retrieval-Augmented Generation&…...

江西省人民医院红谷滩分院电话0791-87720770 / 87720771打不通,什么原因?

◆◆ 预约方式◆◆(一)扫描微信二维码或支付宝二维码预约(二)预约电话:0791-87720770 / 87720771据了解,红谷滩院区是院本部优质医疗业务的同质拓展和延伸,占地约126亩,建筑总面积约…...

STM32H7B0VBT6驱动SHT40温湿度传感器:硬件I2C配置与HAL库实战避坑

STM32H7B0VBT6硬件I2C驱动SHT40温湿度传感器全流程解析 在嵌入式系统开发中,精确的环境监测往往离不开温湿度传感器的支持。Sensirion推出的SHT40作为第四代数字温湿度传感器,以其高精度和低功耗特性成为工业级应用的热门选择。本文将深入探讨如何基于ST…...

通过TaotokenAPI管理功能实现团队密钥分发与调用审计

通过Taotoken API管理功能实现团队密钥分发与调用审计 1. 团队API Key管理基础 在Taotoken平台上,团队管理员可以通过控制台集中管理多个API Key。每个Key可以设置独立的权限范围和使用配额,便于分配给不同成员或项目使用。登录控制台后,导航…...

为内容创作平台集成 Taotoken 实现按需调用不同风格的文案生成模型

为内容创作平台集成 Taotoken 实现按需调用不同风格的文案生成模型 1. 多模型统一接入的业务需求 内容创作平台通常需要支持多种文案风格,从正式报告到创意故事,每种风格对生成模型的要求各不相同。传统方案需要对接多个厂商的 API,分别管理…...

Taotoken 模型广场如何帮助开发者快速选型与对比不同大模型

Taotoken 模型广场如何帮助开发者快速选型与对比不同大模型 1. 模型广场的核心功能 Taotoken 模型广场作为统一入口,聚合了当前主流的大语言模型服务。开发者登录控制台后,可在「模型广场」页面查看所有可用模型的列表。每个模型卡片展示了基础信息&am…...

概率论在机器学习中的核心应用与实践

1. 概率论与机器学习的共生关系 概率论是机器学习领域最基础也最容易被低估的数学工具。我在工业界参与过的所有真实项目里,从简单的用户点击率预测到复杂的自动驾驶决策系统,概率模型都扮演着核心角色。举个实际案例:当我们为电商平台构建推…...

ARM GIC虚拟化指令陷阱机制解析与应用

1. ARM GIC虚拟化指令陷阱机制概述在ARM架构的虚拟化环境中,通用中断控制器(GIC)的虚拟化扩展是实现高效、安全中断处理的关键组件。作为系统级芯片(SoC)中负责管理和分发中断的核心模块,GIC在虚拟化场景下需要解决一个基本问题:如何让多个虚…...

基于Git与Markdown的自动化写作系统:打造高效数字工作台

1. 项目概述:一个为写作者打造的“数字工作台” 如果你经常写作,无论是技术博客、小说、学术论文还是日常笔记,大概率都经历过这样的困扰:文档散落在电脑各处,格式五花八门,想找个去年的草稿得翻半天&#…...

造纸机烘缸轴承故障预测【附代码】

✅ 博主简介:擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 如需沟通交流,扫描文章底部二维码。(1)烘缸表面温度分布特征与振动联合诊断:造纸机烘缸…...

2026年腾讯云OpenClaw/Hermes Agent集成攻略+百炼token Plan配置全览攻略

2026年腾讯云OpenClaw/Hermes Agent集成攻略百炼token Plan配置全览攻略。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#xff1…...

2026年Hermes Agent/OpenClaw怎么搭建?阿里云部署及token Plan配置解析

2026年Hermes Agent/OpenClaw怎么搭建?阿里云部署及token Plan配置解析。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗…...

2026年华为云Hermes Agent/OpenClaw安装指南+百炼token Plan全解析攻略教程

2026年华为云Hermes Agent/OpenClaw安装指南百炼token Plan全解析攻略教程。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#xf…...

在自动化测试流水线中集成Taotoken进行智能代码审查与报告生成

在自动化测试流水线中集成Taotoken进行智能代码审查与报告生成 1. 自动化测试与智能代码审查的结合价值 现代软件开发流程中,持续集成与持续交付(CI/CD)已成为团队提升效率的关键实践。传统自动化测试主要覆盖功能验证与回归测试&#xff0…...

Element-Plus Tree节点右键菜单实战:从权限管理到文件操作的完整交互设计

Element-Plus Tree节点右键菜单实战:从权限管理到文件操作的完整交互设计 在后台管理系统开发中,树形结构(Tree)是最常用的组件之一。无论是部门组织架构、文件目录管理,还是权限控制系统,Tree组件都能直观…...

终极跨平台Unity资产提取指南:5分钟掌握AssetRipper完整使用技巧

终极跨平台Unity资产提取指南:5分钟掌握AssetRipper完整使用技巧 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper AssetRip…...

如何快速解密QQ音乐加密文件:qmcdump终极免费解决方案

如何快速解密QQ音乐加密文件:qmcdump终极免费解决方案 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 想要在…...

如何永久重置JetBrains IDE试用期:IDE Eval Resetter完全指南

如何永久重置JetBrains IDE试用期:IDE Eval Resetter完全指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为IntelliJ IDEA、PyCharm、WebStorm等JetBrains IDE的30天试用期到期而烦恼吗&#…...

Mysql插入数据时,怎么让自增的主键续接表当前最大ID+1

一.需求如下在user表中,需要插入数据, 该数据的主键ID值为当前表最大ID1, 比如: 当前表最大ID977, 当插入数据: insert into(date, name) values(2026-04-28, 张三), (2026-04-28, 李四)时,主键ID应该为978,979这样, 但现在进行插入时, 主键ID变化却是如下:二.原因造成上面情况…...

test-creator:AI驱动的结构化测试思维框架,构建生产级自动化测试体系

1. 项目概述与核心价值最近在折腾一个Go写的用户管理微服务,功能都写得差不多了,但一提到写测试,我就有点头大。不是不会写,而是不知道从何写起。单元测试要覆盖哪些边界?API测试怎么保证数据真的存进数据库了&#xf…...

从工作站主板到ZFS阵列:我的TrueNAS SCALE高性能NAS搭建全记录(含硬件避坑与功耗实测)

从工作站主板到ZFS阵列:我的TrueNAS SCALE高性能NAS搭建全记录 在数据爆炸式增长的今天,个人存储需求正经历着从简单备份到高性能数据中心的转变。作为一名长期关注存储技术的实践者,我决定构建一台能够满足未来5-8年需求的NAS系统。这台设备…...

保姆级教程:用Python脚本搞定VisDrone和CARPK数据集,为YOLOv5/8训练做预处理

从零构建YOLO-ready数据集:VisDrone与CARPK预处理实战指南 当无人机视角遇上目标检测算法,数据预处理成为模型效果的第一道门槛。VisDrone和CARPK作为两个典型的航拍数据集,前者包含11类复杂目标与特殊忽略区域,后者则采用绝对坐标…...

高速数字设计中的信号完整性挑战与解决方案

1. 信号完整性基础概念解析信号完整性(Signal Integrity)是高速数字系统设计中最为核心的工程挑战之一。简单来说,它描述的是电信号在传输路径中保持其原始时序、幅度和波形特性的能力。在理想情况下,数字信号应当具有干净快速的跳…...

I2S 接口

I2S(Inter-IC Sound) 是飞利浦 1986 年制定的数字音频串行接口标准,用于在芯片间(如 Codec、DSP、ADC/DAC)传输未压缩的 PCM 音频,特点是时钟与数据分离、固定时序、低延迟、抗干扰强。基本信号线&#xff…...

终极音乐地址解析实战指南:一键获取全网音乐播放链接

终极音乐地址解析实战指南:一键获取全网音乐播放链接 【免费下载链接】music-api Music API 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 想要快速获取网易云音乐、QQ音乐、酷狗音乐、酷我音乐四大平台的歌曲播放地址吗?music-api项目…...

STM32F103 FSMC驱动NT35310 LCD屏:从时序图到代码的保姆级避坑指南

STM32F103 FSMC驱动NT35310 LCD屏:时序匹配与代码调试实战指南 在嵌入式开发中,驱动LCD屏幕是常见需求,而STM32F103的FSMC模块因其灵活性和高效性成为许多开发者的首选。本文将深入探讨如何通过FSMC模块驱动NT35310 LCD屏幕,重点解…...

从X-Forwarded-For到RFC 7239:聊聊负载均衡里‘IP透传’的演进与安全实践

从X-Forwarded-For到RFC 7239:负载均衡中客户端IP透传的技术演进与安全实践 在分布式系统架构中,准确识别客户端真实IP地址是一个看似简单却充满挑战的基础问题。当请求穿越层层代理和负载均衡节点时,原始连接信息就像经过多面镜子反射的光线…...

免费漫画下载终极方案:E-Hentai下载器完整使用指南

免费漫画下载终极方案:E-Hentai下载器完整使用指南 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 你是否厌倦了在E-Hentai网站上逐页保存漫画的繁琐过程&a…...