【深度強化學習 DRL 快速實踐】策略梯度算法 (PG)

在這里插入圖片描述

PG(1984,Sutton) 核心改進點

策略梯度算法 (PG): 直接對策略函數進行建模,可以適用于連續的動作空間

  • model-free, on-policy, PG, stochastic 策略
核心改進點說明
策略梯度優化通過Actor網絡直接優化策略,適應連續動作問題: θ n e w = θ o l d + α ? θ J ( θ ) \theta_{new} = \theta_{old} + \alpha \nabla_\theta J(\theta) θnew?=θold?+α?θ?J(θ)

PG 網絡更新 – 基于蒙特卡洛估計REINFORCE

? θ J ( θ ) ≈ ∑ t = 0 T ? 1 ? θ log ? π θ ( a t ∣ s t ) G t ,where? G t = ∑ t ′ = t T γ t ′ ? t r t ′ \nabla_\theta J(\theta) \approx \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t | s_t) G_t,\text{where } G_t = \sum_{t'=t}^{T} \gamma^{t' - t} r_{t'} ?θ?J(θ)t=0T?1??θ?logπθ?(at?st?)Gt?where?Gt?=t=tT?γt?trt?


詳細網絡更新公式推導

策略更新目標:使得 θ \theta θ 策略下得到的所有軌跡 τ \tau τ 的回報期望 R ˉ θ \bar{R}_\theta Rˉθ? 最大化: 可以用 N 條軌跡的均值近似

  • τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , … , s τ , a τ , r τ } \tau = \{s_1, a_1, r_1, s_2, a_2, r_2, \dots, s_\tau, a_\tau, r_\tau\} τ={s1?,a1?,r1?,s2?,a2?,r2?,,sτ?,aτ?,rτ?}
    R ˉ θ = ∑ τ R ( τ ) P ( τ ∣ θ ) ≈ 1 N ∑ n N R ( τ n ) \bar{R}_\theta =\textcolor{red}{\sum_\tau} R(\tau) \textcolor{red}{P(\tau | \theta)} \approx \textcolor{blue}{\frac{1}{N} \sum_n^N}R(\tau^n) Rˉθ?=τ?R(τ)P(τθ)N1?nN?R(τn)

計算梯度 (近似)

? R ˉ θ = ∑ τ R ( τ ) ? P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ? P ( τ ∣ θ ) P ( τ ∣ θ ) = ∑ τ R ( τ ) P ( τ ∣ θ ) ? θ log ? P ( τ ∣ θ ) ≈ 1 N ∑ n = 1 N R ( τ n ) ? θ log ? P ( τ n ∣ θ ) \nabla \bar{R}_\theta = \sum_{\tau} R(\tau) \nabla P(\tau | \theta) = \sum_\tau R(\tau) P(\tau | \theta) \frac{\nabla P(\tau | \theta)}{P(\tau | \theta)}=\textcolor{red}{\sum_\tau} R(\tau) \textcolor{red}{P(\tau | \theta)} \nabla_\theta \log P(\tau | \theta)\\ \approx \textcolor{blue}{\frac{1}{N} \sum_{n=1}^N} R(\tau^n) \nabla_\theta \log P(\tau^n | \theta) ?Rˉθ?=τ?R(τ)?P(τθ)=τ?R(τ)P(τθ)P(τθ)?P(τθ)?=τ?R(τ)P(τθ)?θ?logP(τθ)N1?n=1N?R(τn)?θ?logP(τnθ)

  • 注:轉為 log 時利用了公式 d log ? ( f ( x ) ) d x = 1 f ( x ) ? d f ( x ) d x \frac{d \log(f(x))}{dx} = \frac{1}{f(x)} \cdot \frac{d f(x)}{dx} dxdlog(f(x))?=f(x)1??dxdf(x)?

其中, ? θ log ? P ( τ n ∣ θ ) \nabla_\theta\log P(\tau^n | \theta) ?θ?logP(τnθ) 可以做進一步表示

P ( τ ∣ θ ) = p ( s 1 ) ∏ t = 1 T p ( a t ∣ s t , θ ) p ( r t , s t + 1 ∣ s t , a t ) log ? P ( τ ∣ θ ) = log ? p ( s 1 ) + ∑ t = 1 T log ? p ( a t ∣ s t , θ ) + log ? p ( r t , s t + 1 ∣ s t , a t ) ? θ log ? P ( τ ∣ θ ) = ∑ t = 1 T ? θ log ? p ( a t ∣ s t , θ ) P(\tau|\theta) = p(s_1) \prod_{t=1}^{T} p(a_t|s_t, \theta) p(r_t, s_{t+1}|s_t, a_t) \\ \log P(\tau|\theta) = \log p(s_1) + \sum_{t=1}^{T} \log p(a_t|s_t, \theta) + \log p(r_t, s_{t+1}|s_t, a_t)\\ \nabla_\theta\log P(\tau | \theta) = \sum_{t=1}^{T} \nabla_\theta \log p(a_t | s_t, \theta) P(τθ)=p(s1?)t=1T?p(at?st?,θ)p(rt?,st+1?st?,at?)logP(τθ)=logp(s1?)+t=1T?logp(at?st?,θ)+logp(rt?,st+1?st?,at?)?θ?logP(τθ)=t=1T??θ?logp(at?st?,θ)

所以梯度 (近似)的表示更新為

? R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ? θ log ? p ( a t n ∣ s t n , θ ) \nabla \bar{R}_\theta \approx {\frac{1}{N} \sum_{n=1}^N} \sum_{t=1}^{T^n} R(\tau^n) \nabla_\theta \log p(a_t^n | s_t^n, \theta) ?Rˉθ?N1?n=1N?t=1Tn?R(τn)?θ?logp(atn?stn?,θ)

  • 注:梯度用的是總的回報 R ( τ n ) R(\tau^n) R(τn) 而不是 a t n a_t^n atn? 對應的即時獎勵,也就是說,總的回報會增強/減弱軌跡上所有有利/有害的動作輸出;進一步,由于對于第 t 個step,所選擇的動作只會影響未來的 U t n = ∑ t T n r t n U^n_t = \sum_t^{T^n} r^n_t Utn?=tTn?rtn? 所以 R ( τ n ) R(\tau^n) R(τn) 可以被優化為 U t n U^n_t Utn?,對應本文一開始所給出的梯度公式

關于如何理解這個梯度,李宏毅老師類比分類學習的講法也很有啟發,強烈推薦學習下 【PG 李宏毅 B 站】

進一步的 還可以通過添加 baseline 等方法進一步優化表現

  • 解決全正數值的獎勵導致的 – 沒有被 sample 到的 action 輸出概率會下降 (因為其他被 sample 到了的 actions,獲得了正數值的獎勵導致其被視為 有利的動作,進而被增強了其的輸出) 的問題

基于 stable_baselines3 的快速代碼示例

  • 見后續 PPO 算法章節

參考資料:策略梯度算法(PG)詳解

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

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

相關文章

G1垃圾回收器中YoungGC和MixedGC的區別

在 G1 垃圾回收器中,Mixed GC 和 Young GC 的區別主要體現在以下幾個方面: 作用范圍 Young GC:僅針對年輕代中的Region進行回收,包括 Eden 區和 Survivor 區的 Region。Mixed GC:會回收所有年輕代的 Region 以及部分…

從LLM到AI Agent的技術演進路徑:架構解析與實現邏輯

人工智能技術正經歷從基礎語言模型到智能執行體的關鍵躍遷。解析LLM→RAG→Agent的技術演進三層架構,拆解大模型與知識庫、工具鏈的融合機理,揭示感知-決策-執行閉環系統的構建邏輯。通過架構范式解析、代碼實現示例及多模態實踐案例,為開發者…

commix

Commix 基礎用法和高級用法 基礎用法 Commix 是一個自動化的命令行注入工具,用于檢測和利用 Web 應用程序中的命令注入漏洞。以下是基本使用方法: 基本掃描 python commix.py -u "http://example.com/vuln.php?id1"指定注入點 python commi…

Git刪除指定歷史版本

問題: 在Git提交版本,有時有些小版本相比較于后續的大版本,都會包含,且后續存在的意義不太大,一般認為是可以刪除的。或者,中間一些版本有問題但是也提交了,拉取這些版本根本沒用,這…

使用 Pandas 進行多格式數據整合:從 Excel、JSON 到 HTML 的處理實戰

前言 在數據處理與分析的實際場景中,我們經常需要整合不同格式的數據,例如 Excel 表格、JSON 配置文件、HTML 報表等。本文以一個具體任務(藍橋杯模擬練習題)為例,詳細講解如何使用 Python 的 Pandas 庫結合其他工具&…

今日行情明日機會——20250425

指數依然在震蕩,等待方向選擇,整體量能不搞但個股紅多綠少。 2025年4月25日漲停板行業方向分析如下: 一、核心行業方向及驅動邏輯 一季報增長(17家漲停) 核心個股:惠而浦、鴻博股份、衛星化學驅動邏輯&am…

Python 快速獲取Excel工作表名稱

文章目錄 前言準備工作Python 獲取Excel中所有工作表的名稱Python 獲取Excel中隱藏工作表的名稱 前言 在數據分析與辦公自動化領域,通過Python處理Excel文件已成為必備技能。通過獲取工作表名稱,我們可以: 快速了解文件結構自動化處理多工作…

寧德時代25年時代長安動力電池社招入職測評SHL題庫Verify測評語言理解數字推理真題

測試分為語言和數字兩部分,測試時間各為17分鐘,測試正式開始后不能中斷或暫停

ECMAScript 1(ES1):JavaScript 的開端

1. 版本背景與發布 ●發布時間:1997 年 6 月,由 ECMA International 正式發布,標準編號為 ECMA-262。 ●歷史意義:ES1 是 JavaScript 的首個標準化版本,結束了 Netscape Navigator 與 Internet Explorer 瀏覽器間腳本語…

C語言面試高頻題——define 和typedef 的區別?

1. 基本概念 (1) #define 定義:#define 是預處理指令,用于定義宏。作用:在編譯之前進行文本替換。語法:#define 宏名 替換內容示例:#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定義:…

【自然語言處理與大模型】模型壓縮技術之蒸餾

知識蒸餾是一種模型壓縮技術,主要用于將大型模型(教師模型)的知識轉移到更小的模型(學生模型)中。在大語言模型領域,這一技術特別重要。 知識蒸餾的核心思想是利用教師模型的輸出作為軟標簽(sof…

PHP CURL發送POST請求(支持HEADER參數配置)

/** POST請求(raw數據請求,支持HEADER參數配置) * @param $url * @param $datas 支持數組或字符串 * # $CURLOPT_HTTPHEADER = [ X-AjaxPro-Method:ShowList, Content-Type: application/json; charset=utf-8, Content-Length: . strlen($data_string)]; …

利用JMeter代理服務器方式實現高效壓測

前言 在當今快節奏的互聯網時代,確保Web應用和服務能夠在高負載下穩定運行變得至關重要。無論是電子商務平臺、社交媒體網絡還是在線教育服務,用戶對網站響應速度和穩定性的期望從未如此之高。因此,性能測試不再是一個可選項,而是…

【JavaWeb后端開發04】java操作數據庫(JDBC + Mybatis+ yml格式)詳解

文章目錄 1. 前言2. JDBC2.1 介紹2.2 入門程序2.2.1 DataGrip2.2.2 在IDEA執行sql語句 2.3 查詢數據案例2.3.1 需求2.3.2 準備工作2.3.3 AI代碼實現2.3.4 代碼剖析2.3.4.1 ResultSet2.3.4.2 預編譯SQL2.3.4.2.1 SQL注入2.3.4.2.2 SQL注入解決2.3.4.2.3 性能更高 2.4 增刪改數據…

力扣-240.搜索二維矩陣 II

題目描述 編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性&#xff1a; 每行的元素從左到右升序排列。每列的元素從上到下升序排列。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, in…

Spark-Streaming(三)

一. kafka和flume的整合 任務需求一:利用flume監控某目錄中新生成的文件&#xff0c;將監控到的變更數據發送給kafka&#xff0c;kafka將收到的數據打印到控制臺 1. 在flume/conf/目錄下添加flume-kafka.conf文件 配置文件如下 2. 啟動flume和kafka消費者 3. 傳入數據 查看fl…

Spring Boot 啟動生命周期詳解

Spring Boot 啟動生命周期詳解 1. 啟動階段劃分 Spring Boot 啟動過程分為 4個核心階段&#xff0c;每個階段涉及不同的核心類和執行邏輯&#xff1a; 階段 1&#xff1a;預初始化&#xff08;Pre-initialization&#xff09; 目標&#xff1a;準備啟動器和環境配置關鍵類&am…

《深入理解 AOP》

一、AOP 是什么 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面編程&#xff0c;是軟件開發中一種重要的編程范式。它通過橫向抽取機制&#xff0c;將那些與業務邏輯本身無關、卻為業務模塊所共同調用的邏輯或責任&#xff08;如事務處理、日…

Python【協程(Coroutine)和線程的關系】

協程(Coroutine)和線程都是實現并發編程的技術&#xff0c;但它們在實現方式、使用場景和性能上有顯著區別。理解它們的關系與差異有助于在實際應用中選擇合適的并發模型&#xff0c;以下是它們的核心關系與對比分析&#xff1a; 一、核心關系 互補關系 協程和線程可以結合使用…

Springboot——Redis的使用

在當今的軟件開發領域&#xff0c;緩存技術是提升應用性能的關鍵手段之一。Redis 作為一款高性能的鍵值對存儲數據庫&#xff0c;憑借其出色的讀寫速度和豐富的數據結構&#xff0c;在緩存場景中得到了廣泛應用。Spring Boot 作為一款簡化 Spring 應用開發的框架&#xff0c;與…