從代碼學習深度強化學習 - REINFORCE 算法 PyTorch版

文章目錄

  • 前言
  • **一、 理論基礎:什么是策略梯度?**
    • **1.1 基于價值 vs. 基于策略**
    • **1.2 策略梯度(Policy Gradient)**
    • **1.3 REINFORCE 算法:蒙特卡洛策略梯度**
    • **1.4 REINFORCE 算法流程**
  • **二、 PyTorch 代碼實踐**
    • **2.1 環境與輔助函數**
    • **2.2 核心算法實現**
    • **2.3 訓練與結果**
  • **總結**


前言

歡迎來到“從代碼學習深度強化學習”系列!在之前的文章中,我們可能已經接觸了許多基于價值(Value-based)的強化學習算法,如 Q-learning 和 DQN。這些算法的核心思想是學習一個價值函數(如 Q-函數),然后根據這個函數間接地推導出一個最優策略。然而,在很多現實場景中,尤其是那些動作空間連續或者非常大的問題中,直接學習一個策略函數可能更為高效和直接。

今天,我們將深入探討**策略梯度(Policy Gradient)**方法,這正是直接學習策略的算法家族的基石。我們將聚焦于該家族中最基礎也最經典的算法之一:REINFORCE。通過本篇博客,您將不僅理解 REINFORCE 的核心理論,還將跟隨我們一步步用 PyTorch 實現一個完整的 REINFORCE 智能體,并在經典的 CartPole 環境中進行訓練和測試。

讓我們一起從理論出發,最終落腳于代碼,徹底掌握 REINFORCE 算法的精髓!

完整代碼:下載鏈接

一、 理論基礎:什么是策略梯度?

在深入代碼之前,我們必須先理解 REINFORCE 算法背后的核心思想——策略梯度。

1.1 基于價值 vs. 基于策略

首先,讓我們明確兩類方法的根本區別:

  • 基于價值 (Value-based) 的方法:如 Q-learning、DQN 及其改進算法,它們學習的是價值函數。學習過程并不會顯式地存在一個策略,而是根據學到的價值函數(例如,選擇Q值最高的動作)來推導出一個策略。
  • 基于策略 (Policy-based) 的方法:這類方法不通過價值函數,而是直接學習一個目標策略。智能體會學習一個帶參數的策略函數 π(a|s, θ),這個函數直接輸出在某個狀態 s 下采取各個動作 a 的概率。我們的目標就是找到最優的參數 θ,使得策略最優。

策略梯度方法正是基于策略的方法的基礎。

1.2 策略梯度(Policy Gradient)

基于策略的方法首先需要將策略參數化。假設我們的目標策略 πθ 是一個隨機性策略,并且處處可微,其中 θ 是對應的參數。我們可以用一個線性模型或者神經網絡來構建這樣一個策略函數建模,它輸入某個狀態,然后輸出一個動作的概率分布。我們的目標是要尋找一個最優策略并最大化這個策略在環境中的期望回報。

我們將策略學習的目標函數定義為:

J ( θ ) = E s 0 [ V π θ ( s 0 ) ] J(\theta)=\mathbb{E}_{s_0}[V^{\pi_\theta}(s_0)] J(θ)=Es0??[Vπθ?(s0?)]

其中, s 0 s_0 s0? 表示初始狀態,V 是狀態價值函數,J(θ) 代表了在策略 π θ \pi_{\theta} πθ? 下,從初始狀態 s 0 s_0 s0?開始所能獲得的期望總回報。

現在有了目標函數,我們就可以將目標函數對策略參數 θ 求導,得到導數后就可以用梯度上升方法來最大化這個目標函數,從而得到最優策略。這個梯度就是我們常說的策略梯度,其具體形式如下(推導過程略):

? θ J ( θ ) ∝ ∑ s ∈ S ν π θ ( s ) ∑ a ∈ A Q π θ ( s , a ) ? θ π θ ( a ∣ s ) = ∑ s ∈ S ν π θ ( s ) ∑ a ∈ A π θ ( a ∣ s ) Q π θ ( s , a ) ? θ π θ ( a ∣ s ) π θ ( a ∣ s ) = E π θ [ Q π θ ( s , a ) ? θ log ? π θ ( a ∣ s ) ] \begin{aligned}\nabla_\theta J(\theta)&\propto\sum_{s\in S}\nu^{\pi_\theta}(s)\sum_{a\in A}Q^{\pi_\theta}(s,a)\nabla_\theta\pi_\theta(a|s)\\&=\sum_{s\in S}\nu^{\pi_\theta}(s)\sum_{a\in A}\pi_\theta(a|s)Q^{\pi_\theta}(s,a)\frac{\nabla_\theta\pi_\theta(a|s)}{\pi_\theta(a|s)}\\&=\mathbb{E}_{\pi_\theta}[Q^{\pi_\theta}(s,a)\nabla_\theta\log\pi_\theta(a|s)]\end{aligned} ?θ?J(θ)?sS?ν

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

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CRMEB 代碼規范指南:ThinkPHP6+Uni-app 架構下的開發標準

二、代碼規范 2.1 Vue .1.1 代碼結構 <template><div id"my-component"><DemoComponent /></div> </template><script> import DemoComponent from ../components/DemoComponentexport default {name: MyComponent,component…

游戲技能編輯器開發完全指南系統架構設計之技能編輯器整體架構

技能編輯器整體架構 角色資源劃分與管理 1. 角色資源結構 角色資源劃分與管理 1. 角色資源結構 // 骨骼重定向示例 void RetargetAnimation(Animation& srcAnim, Skeleton& targetSkeleton) {for (int frame 0; frame < srcAnim.numFrames; frame) {for (Bone&a…

SD-WAN 不是“裸跑”:聊聊怎么把網絡安全綁在智能網關上

SD-WAN 不是“裸跑”:聊聊怎么把網絡安全綁在智能網關上 一、別被“軟件定義”忽悠了:SD-WAN 到底安不安全? 這些年,“SD-WAN”這個詞火得不行,聽上去高大上,像“云原生網絡”、“下一代 WAN 技術”、“運維降本神器”,廠商的 PPT 一個比一個能吹。 但咱搞運維的知道…

國產Linux銀河麒麟操作系統上安裝開源的視頻錄制和直播推流OBS Studio軟件

一、OBS Studio 簡介 OBS Studio (Open Broadcaster Software Studio) 是一款開源的視頻錄制和直播推流軟件&#xff0c;具有以下特點&#xff1a; 跨平臺支持&#xff1a;支持 Windows、macOS 和 Linux 系統功能全面&#xff1a; 支持多場景無縫切換提供豐富的音視頻源管理內…

Thrift作為客戶端流程(多路復用)

以下是一個 使用多路復用&#xff08;TMultiplexedProtocol&#xff09; 的 Thrift 客戶端完整流程和關鍵函數&#xff08;以 Java 為例&#xff09;&#xff0c;適用于當服務端使用 TMultiplexedProcessor 注冊了多個服務時&#xff0c;客戶端可以區分并調用不同的服務。 ? 客…

實現PDF文件添加水印的功能

通過Java代碼實現PDF文件添加水印的功能&#xff0c;主要依賴iText庫&#xff08;用于PDF操作&#xff09;和OSS SDK&#xff08;可選&#xff0c;用于文件上傳&#xff09;。以下是實現的核心步驟&#xff1a; 首先添加依賴 <!-- 添加 PDF 水印 --><dependency>…

Swoft2 框架精華教程:Swoft 的視圖組件

概述 用模板對頁面進行渲染&#xff0c;這是比較經典的一種設計方式了。主要目的是在服務器端進行頁面渲染&#xff0c;以使客戶端瀏覽器可以直接拿到頁面 html 的代碼&#xff0c;這樣對搜索引擎對網站的收錄比較友好。如果是前后端分離的形式&#xff0c;由于前后端交互是用…

[學習] 哈希碼:原理、用途與實現詳解(C代碼示例)

哈希碼&#xff1a;原理、用途與實現詳解 博主在《在C語言中使用字典》一文中&#xff0c;使用哈希來實現鍵值對的快速檢索&#xff0c;今天對哈希這一算法工具&#xff0c;進行一些深入的研究&#xff0c;爭取能能做到知其然亦知其所以然。 文章目錄 哈希碼&#xff1a;原理、…

golang--channel的關鍵特性和行為

Go 語言 Channel 的核心特性與行為深度解析 Channel 是 Go 語言并發編程的核心組件&#xff0c;用于在不同 goroutine 之間進行通信和同步。以下是其關鍵特性和行為的全面分析&#xff1a; 一、基本特性 1. 類型安全通信管道 ch : make(chan int) // 只能傳遞整數2. 方向性…

HarmonyOS 5 鴻蒙多模態融合測試技術方案詳解

以下是針對HarmonyOS 5多模態融合測試的技術方案詳解&#xff0c;綜合交互邏輯、容錯機制及分布式驗證等核心模塊&#xff1a; ?一、多模態交互核心邏輯驗證? ?事件融合機制? 通過kit.AbilityKit監聽語音指令&#xff0c;結合ArkUI手勢系統捕獲屏幕坐標&#xff1a; import…

在AI普及的大環境下神經網絡在新能源汽車熱管理系統中的應用簡介

一、神經網絡的核心原理與結構 1. 生物啟發與基礎組成 神經網絡&#xff08;Artificial Neural Network, ANN&#xff09;受生物神經元信息處理機制啟發&#xff0c;由大量人工神經元互聯構成計算模型。每個神經元接收輸入信號&#xff08;如溫度、流量等物理量&#xff09;&a…

? CATIA V5與3DEXPERIENCE協同設計:引領無人機行業新紀元

在無人機行業蓬勃發展的今天&#xff0c;傳統設計流程正面臨前所未有的系統性挑戰。更令人擔憂的是&#xff0c;隨著無人機應用場景的不斷拓展&#xff0c;從農業植保到城市物流&#xff0c;從應急救援到軍事偵察&#xff0c;對產品性能的要求日益嚴苛。傳統設計方法已難以應對…

關于科技公司經營的一些想法

分析了一些我們公司的問題&#xff1a; 1&#xff0c;測試 重視測試&#xff0c;加大測試投入 2&#xff0c;人才 人才評判標準&#xff1a;結果論&#xff0c;主要根據該崗位問題的解決效率與質量評判。工作時長不重要 任人唯賢。盡可能錄用能解決問題的人才&#xff0c;不…

校招生成長日記(一):初來乍到

提前來了幾天&#xff0c;感受一下廣東的生活。第一印象就是悶熱&#xff01;后面嘗了潮汕火鍋&#xff0c;椰子雞&#xff0c;荔枝&#xff0c;都很不錯&#xff01;&#xff01;&#xff01;就是沒有重口味的&#xff0c;好想念我的酸辣粉&#xff0c;麻辣燙啊......y走了瞬間…

【精選】移動端學習平臺設計與開發 移動端平臺開發(含資料閱讀、時事新聞、時政答題與討論功能) 基于移動端的專題教育平臺設計與實現

博主介紹&#xff1a; ?我是阿龍&#xff0c;一名專注于Java技術領域的程序員&#xff0c;全網擁有10W粉絲。作為CSDN特邀作者、博客專家、新星計劃導師&#xff0c;我在計算機畢業設計開發方面積累了豐富的經驗。同時&#xff0c;我也是掘金、華為云、阿里云、InfoQ等平臺…

Protobuf 高級特性詳解 —— 嵌套消息、Oneof 字段與自定義選項

在前幾篇文章中&#xff0c;我們已經掌握了 Protocol Buffers&#xff08;Protobuf&#xff09;的基礎語法、.proto 文件的結構、以及如何使用 Go 和 Java 進行數據的序列化與反序列化操作。本篇文章將深入探討 Protobuf 的高級特性&#xff0c;包括&#xff1a; 嵌套消息&…

golang--數據類型與存儲

在 Go 語言中&#xff0c;理解值類型&#xff08;value types&#xff09;和引用類型&#xff08;reference types&#xff09;的區別對于編寫高效、正確的代碼至關重要。以下是主要的區別點和需要注意的特殊情況&#xff1a; 一、值類型&#xff08;Value Types&#xff09; …

uniapp——輪播圖、產品列表輪播、上一頁、下一頁、一屏三張圖

案例展示 組件封裝 <template><view><view class="showSwiperBox"><view class="topSwiper"><swiper class="swiper" :autoplay="autoplay" interval="5000" :previous-margin="margin&qu…

用Python實現安全封裝EXE文件加密保護工具

一、概述 這個Python腳本實現了一個強大的EXE文件加密保護工具,它能夠將任何Windows可執行文件封裝到一個帶密碼保護的GUI程序中。核心功能包括: 使用AES-256加密算法保護原始EXE文件 創建美觀的密碼驗證界面 支持自定義程序圖標 自動處理PyInstaller打包過程 修復Tkinter在…

vue3監聽屬性watch和watchEffect的詳解

文章目錄 1. 前言2. 常規用法3. 監聽對象和route變化4. 使用場景4.1 即時表單驗證4.2 搜索聯想功能4.3 數據變化聯動處理 5. watchEffect詳解5-1 基本概念5-2 核心用法基礎示例&#xff1a;自動響應依賴變化處理異步副作用停止監聽與清理副作用 5-3 高級場景應用監聽多個響應式…