從代碼學習深度強化學習 - 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+γaAmax?Q(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+γmaxaA?Q(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ωmin?2N1?i=1N?[Q

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909981.shtml
英文地址,請注明出處:http://en.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&…