从代码学习深度强化学习 - DQN PyTorch版

文章目录

  • 前言
  • DQN 算法核心思想
    • Q-Learning 与函数近似
    • 经验回放 (Experience Replay)
    • 目标网络 (Target Network)
  • PyTorch 代码实现详解
    • 1. 环境与辅助函数
    • 2. 经验回放池 (ReplayBuffer)
    • 3. Q网络 (Qnet)
    • 4. DQN 主类
    • 5. 训练循环
    • 6. 设置超参数与开始训练
  • 训练结果与分析
  • 总结

前言

欢迎来到深度强化学习的世界!如果你对 Q-learning 有所了解,你可能会知道它使用一个表格(Q-table)来存储每个状态-动作对的价值。然而,当状态空间变得巨大,甚至是连续的时候(比如一个小车在轨道上的位置),Q-table 就变得不切实际。这时,深度Q网络(Deep Q-Network, DQN)就闪亮登场了。

DQN 的核心思想是用一个神经网络来代替 Q-table,实现从状态到(各个动作的)Q值的映射。这使得我们能够处理具有连续或高维状态空间的环境。本文将以经典的 CartPole-v1 环境为例,通过一个完整的 PyTorch 代码实现,带你深入理解 DQN 的工作原理及其关键组成部分:神经网络近似经验回放目标网络

在这里插入图片描述

图 1 CartPole环境示意图

在 CartPole 环境中,智能体的任务是左右移动小车,以保持车上的杆子竖直不倒。这个环境的状态是连续的(车的位置、速度、杆的角度、角速度),而动作是离散的(向左或向右)。这正是DQN大显身手的完美场景。

让我们一起通过代码,揭开DQN的神秘面纱。

完整代码:下载链接

DQN 算法核心思想

在深入代码之前,我们先回顾一下 DQN 的几个关键概念。

Q-Learning 与函数近似

传统的 Q-learning 更新规则如下:
Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s,a)\leftarrow Q(s,a)+\alpha\left[r+\gamma\max_{a^{\prime}\in\mathcal{A}}Q(s^{\prime},a^{\prime})-Q(s,a)\right] Q(s,a)Q(s,a)+α[r+γaAmaxQ(s,a)Q(s,a)]

当状态是连续的,我们无法用表格记录所有 Q(s,a)。因此,我们引入一个带参数 w 的神经网络,即 Q-网络 Q ω ( s , a ) Q_\omega\left(s,a\right) Qω(s,a),来近似真实的 Q-函数。我们的目标是让网络预测的Q值 Q ω ( s , a ) Q_\omega\left(s,a\right) Qω(s,a) 逼近“目标Q值” r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) r+\gamma\max_{a^{\prime}\in\mathcal{A}}Q(s',a') r+γmaxaAQ(s,a)

为此,我们可以定义一个损失函数,最常见的就是均方误差(MSE Loss):
ω ∗ = arg ⁡ min ⁡ ω 1 2 N ∑ i = 1 N [ Q ω ( s i , a i ) − ( r i + γ max ⁡ a ′ Q ω ( s i ′ , a ′ ) ) ] 2 \omega^*=\arg\min_\omega\frac{1}{2N}\sum_{i=1}^N\left[Q_\omega\left(s_i,a_i\right)-\left(r_i+\gamma\max_{a^{\prime}}Q_\omega\left(s_i^{\prime},a^{\prime}\right)\right)\right]^2 ω=argωmin2N1i=1N[Q

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

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

相关文章

AI与大数据如何驱动工业品电商平台的智能决策?

在轰鸣的工厂里,一台关键设备因某个密封圈失效而骤然停机。生产线停滞、订单延误、经济损失每分钟都在扩大。此刻,采购经理在工业品电商平台上疯狂搜索,却迷失在海量零件参数与供应商信息中。工业品的沉默,往往意味着生产线的沉默…

连接器全解析:数据库连接器和文件连接器的区别和联系

目录 一、数据库连接器和文件连接器的基本概念 1. 数据库连接器 2. 文件连接器 二、数据库连接器和文件连接器的区别 1. 数据存储方式 2. 数据处理能力 3. 数据安全性 4. 数据更新频率 三、数据库连接器和文件连接器的联系 1. 数据交互 2. 数据处理流程 3. 应用场景…

Uniapp 中根据不同离开页面方式处理 `onHide` 的方法

Uniapp 中根据不同离开页面方式处理 onHide 的方法 在 Uniapp 开发中,onHide 生命周期会在页面隐藏时触发,但默认无法直接区分用户是通过何种方式离开页面的。不过我们可以通过组合其他钩子函数和路由事件来实现对不同离开方式的识别和处理。 一、常见…

使用Visual Studio Code实现文件比较功能

Visual Studio Code 中如何使用文件比较功能? 在 Visual Studio Code (VS Code) 中使用“比较文件”功能来查看两个文件之间的差异是非常直观的。 以下是具体步骤: 使用“比较文件”功能 打开 VS Code: 启动 VS Code 编辑器。 打开第一…

(40)华为云平台cce中挂载nginx等配置文件方法

直接在负载中添加数据存储: 将nginx.conf文件分别存放在集群中每个cce节点对应的路径下即可(防止pod飘节点找不到nginx.conf) 2.直接添加配置项与密钥: 添加对应的key与value即可(nginx.conf的具体配置写在value中&am…

web布局09

Flexbox 是现代 Web 布局的主流技术之一,它提供了一种有效的方式来定位 、排序 和 分布元素,即使在视窗或元素大小不明确或动态变化时亦是如此。Flexbox 的优势可以用一句话来表达:“在不需要复杂的计算之下,元素的大小和顺序可以…

Redux and vue devtools插件下载

Redux and vue devtools插件下载 插件下载地址 收藏猫插件

深入理解SQLMesh中的SCD Type 2:缓慢变化维度的实现与管理

在数据仓库和商业智能领域,处理随时间变化的数据是一个常见且具有挑战性的任务。缓慢变化维度(Slowly Changing Dimensions, SCD)是解决这一问题的经典模式。本文将深入探讨SQLMesh中SCD Type 2的实现方式、配置选项以及实际应用场景。 什么是SCD Type 2&#xff1f…

如何保证MySQL与Redis数据一致性方案详解

目录 一、数据不一致性的根源 1.1 典型不一致场景 1.2 关键矛盾点 二、一致性保障策略 2.1 基础策略:更新数据库与缓存的时序选择 (1)先更新数据库,再删除缓存 (2)先删缓存,再更新数据库…

JSON-RPC 2.0 与 1.0 对比总结

JSON-RPC 2.0 与 1.0 对比总结 一、核心特性对比 特性JSON-RPC 1.0JSON-RPC 2.0协议版本标识无显式版本字段,依赖 method 和参数结构区分[5]。强制包含 "jsonrpc": "2.0" 字段,明确版本[1][4]。参数结构仅支持索引数组(…

C# 事件详解

C# 事件 一、事件二、事件的应用三、事件的自定义声明 一、事件 定义:“a thing that happens, especially something important” / “能够发生的什么事情”角色:使对象或类具备通知能力的成员使用:用于对象或类间的动作协调与信息传递事件…

青少年编程与数学 01-011 系统软件简介 24 Kubernetes 容器编排系统

青少年编程与数学 01-011 系统软件简介 24 Kubernetes 容器编排系统 一、历史沿革(一)起源1. Google 内部起源 (二)开源后的关键事件(三)社区治理 二、技术架构(一)分层设计哲学&…

[C++] : 谈谈IO流

C IO流 引言 谈到IO流,有些读者可能脑海中第一个想到的C程序员的最基础的std::cout , std::cin两个类的使用,对的,这个就是一个典型的IO流,所以逆天我们这篇文章会基于C IO流的原理和各种应用场景进行深入的解读。 C…

Kafka 3.0零拷贝技术全链路源码深度剖析:从发送端到日志存储的极致优化

在分布式消息系统领域,Kafka凭借高吞吐、低延迟的特性成为行业首选。而零拷贝技术作为Kafka性能优化的核心引擎,贯穿于消息从生产者发送、Broker接收存储到消费者读取的全生命周期。本文基于Kafka 3.0版本,深入源码层面,对零拷贝技…

利益驱动机制下开源AI智能名片链动2+1模式与S2B2C商城小程序的商业协同研究

摘要:在数字经济时代,利益驱动作为用户行为激励的核心逻辑,正通过技术创新实现模式升级。本文基于“利益驱动”理论框架,结合“开源AI智能名片链动21模式S2B2C商城小程序”的技术架构,系统分析物质利益(返现…

pytest的前置后置条件

1. setUp()和tearDown() setup()函数主要是进行测试前的初始化工作,比如:在接口测试前面做一些前置的参数赋值,数据库操作等等。 teardown()函数是测试后的清除工作,比如:参数还原或销毁,数据库的还原恢复…

Python 自动化运维与DevOps实践

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 基础设施即代码(IaC) 使用Fabric执行远程命令 python 复制 下载 from fabric import Connectiondef deploy_app():# 连接到远程服务器with Connection(web-server.example.com, userdeploy,…

css3 文本效果(text-shadow、text-overflow、word-wrap、word-break)文本阴影、文本换行、文本溢出并隐藏显示省略号

1. 文本阴影(text-shadow) 1.1 基本语法 text-shadow: h-shadow v-shadow blur-radius color;参数说明: h-shadow:必需。水平阴影的位置。允许负值。 正值:向右偏移负值:向左偏移 v-shadow:必…

在Kibana上新增Elasticsearch生命周期管理

技术文章大纲:在Kibana上新增Elasticsearch生命周期管理 引言 Elasticsearch索引生命周期管理(ILM)是管理索引从创建到删除全周期的核心工具。通过Kibana界面配置ILM策略,可以自动化处理索引的滚动、收缩、冻结和删除等操作&…

从零开始构建Python聊天机器人:整合NLP与深度学习

引言 在人工智能快速发展的今天,聊天机器人已经成为企业与用户交互的重要工具。从客户服务到信息查询,从个人助手到教育辅助,聊天机器人的应用场景越来越广泛。构建一个智能、高效的聊天机器人不仅需要了解自然语言处理(NLP&…