理解策略梯度方法:從REINFORCE到PPO

今年2月的時候,導師突然告訴我Ron William離世了。他算是我導師的 a life time friend,關系很好,我做畢業論文的時候,他還來參與了論文的答辯。Ron是一個很友善的老頭,和他在強化學習領域的影響力比起來,本人顯得非常的低調,質樸。如果說Ron這個名字你很陌生,那么REINFORCE算法的你一定知道,對的,沒錯,Ron William就是那個paper的一作。

那之后,我一直就想寫點什么,去回顧一下REINFORCE這個算法以及這個算法所開創的策略梯度學習,或是去單純的紀念一下我和Ron的一面之緣。

引言

在強化學習中,策略梯度方法對于通過優化期望累積獎勵直接學習最優策略至關重要。這些方法已經從最基礎的REINFORCE算法發展到更復雜的方法,如信賴域策略優化(TRPO)和近端策略優化(PPO)。本文將探討對數技巧的必要性、將軌跡積分轉化為樣本估計的方法,以及從REINFORCE到TRPO和PPO的演變過程。

對數技巧和樣本估計

策略梯度方法的核心思想是通過優化策略參數來最大化期望獎勵。然而,直接計算期望獎勵的梯度通常是不可行的。這時對數技巧變得至關重要。通過使用對數技巧,我們可以將期望獎勵的梯度表示為涉及策略對數概率梯度的期望:

?θJ(θ)=Eτ~πθ[?θlog?πθ(τ)R(τ)]\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} [\nabla_\theta \log \pi_\theta(\tau) R(\tau)]?θ?J(θ)=Eτ~πθ??[?θ?logπθ?(τ)R(τ)]

其中,πθ\pi_\thetaπθ? 是由參數 θ\thetaθ 參數化的策略,τ\tauτ 表示軌跡,R(τ)R(\tau)R(τ) 是軌跡的累積獎勵。

這一轉化將軌跡上的積分轉化為樣本估計,可以使用蒙特卡羅方法來逼近。通過從策略中采樣軌跡,我們可以計算梯度的無偏估計,并相應地更新策略參數。

從REINFORCE到TRPO

REINFORCE的局限性

REINFORCE算法雖然簡單直觀,但存在一些局限性。由于它依賴于樣本估計,策略的更新可能具有較高的方差,導致學習過程不穩定且低效。此外,REINFORCE不能保證更新后的策略質量,因此難以確保每次更新都能改善策略。

TRPO的思想

為了解決這些局限性,信賴域策略優化(TRPO)被引入,它建立在Kakade和Langford(2002)的基礎成果之上。這個結果為策略優化中的信賴域方法提供了理論依據,表明兩個策略的期望折扣獎勵之間的差異可以準確地表示為在新策略上估計但由舊策略計算的期望優勢

TRPO的核心思想是通過從舊策略采樣來估計這種差異,因為直接計算這種差異是困難的,因為我們不能從新策略采樣。TRPO引入了一個代理目標,使用舊策略的樣本來估計新策略的性能。這是通過確保更新的策略與先前的策略保持接近,即維持在一個“信賴域”內來實現的。TRPO中的關鍵優化問題可以表述為:

max?θEτ~πθold[πθ(τ)πθold(τ)R(τ)]\max_\theta \mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ \frac{\pi_\theta(\tau)}{\pi_{\theta_{\text{old}}}(\tau)} R(\tau) \right]maxθ?Eτ~πθold???[πθold??(τ)πθ?(τ)?R(τ)] subject?to??Eτ~πθold[DKL(πθold∥πθ)]≤δ\text{subject to} \; \mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ D_{KL}(\pi_{\theta_{\text{old}}} \| \pi_\theta) \right] \leq \deltasubject?toEτ~πθold???[DKL?(πθold??∥πθ?)]≤δ

這一約束確保策略更新不會顯著偏離先前的策略,從而提供更穩定和可靠的學習過程。TRPO的研究結果表明,只要新策略和舊策略足夠接近,用在舊策略上計算的期望優勢替代在新策略上的計算是可行的

有趣的是,TRPO最初嘗試直接用KL懲罰進行優化。然而,這種方法被發現過于嚴格,導致作者放棄并改用直接優化,這顯著增加了算法的復雜性。但是后來,在PPO中,作者發現了更靈活的KL懲罰項,從而又回歸到了最初的形式之上。

從TRPO到PPO

用PPO簡化TRPO

雖然TRPO為策略優化提供了一個強有力的框架,但它涉及求解一個約束優化問題,這可能在計算上昂貴且復雜。近端策略優化(PPO)通過使用一個裁剪的代理目標來簡化這一過程,該目標近似于信賴域約束,而不需要復雜的優化過程:

Eτ~πθold[min?(r(θ)A^,clip(r(θ),1??,1+?)A^)]\mathbb{E}_{\tau \sim \pi_{\theta_{\text{old}}}} \left[ \min \left( r(\theta) \hat{A}, \text{clip}(r(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A} \right) \right]Eτ~πθold???[min(r(θ)A^,clip(r(θ),1??,1+?)A^)]

其中,r(θ)=πθ(τ)πθold(τ)r(\theta) = \frac{\pi_\theta(\tau)}{\pi_{\theta_{\text{old}}}(\tau)}r(θ)=πθold??(τ)πθ?(τ)? 是概率比率,A^\hat{A}A^ 是優勢估計。剪輯函數確保策略的更新不會偏離太多,有效地保持了信賴域的行為。

隨機采樣和重要性采樣

與REINFORCE不同,TRPO和PPO都可以使用隨機樣本進行更新,而不是整個軌跡。這是通過重要性采樣實現的,在這種方法中,使用舊策略的樣本來估計當前策略的性能。通過根據概率比率重新加權這些樣本,我們可以推導出當前策略梯度的無偏估計。這種新的采樣方式也避免了使用對數技巧

實際應用和擴展

在實際中,TRPO和PPO由于其穩健性和效率而被廣泛采用。例如,在像ChatGPT這樣的大規模模型的訓練中,目標通常需要改寫為相對于先前策略的期望,以便于重要性采樣并應用PPO框架。這種調整允許復雜模型的高效和穩定訓練。

結論

從REINFORCE到TRPO和PPO的演變代表了策略梯度方法的重大進步。通過解決REINFORCE中高方差和不穩定的問題,TRPO引入了一種方法來確保策略更新保持在信賴域內,從而基于Kakade和Langford的基礎成果提供更可靠的改進。PPO進一步簡化了這種方法,使其在實際應用中更易于訪問和高效。PPO中靈活的KL懲罰版本展示了策略梯度方法的迭代改進如何導致穩健和高效的算法。這些方法共同構成了現代強化學習的堅實基礎,使得開發復雜和有效的策略成為可能。

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

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

相關文章

汽車信息安全--數據安全:圖像脫敏

General 隨著車聯網的發展,汽車越來越智能化,就像是一部“裝著四個輪子的手機”。 有人說,智能手機就如同一部竊聽器,無論你開機或者關機,它都會無時不刻地監聽著用戶的一舉一動。 可想而知,智能車輛上…

馬工程刑法期末復習筆記重點2

馬工程刑法期末復習筆記重點2

SpringBoot 參數校驗

參數校驗 引入springvalidation依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>參數前添加Pattern public Result registry(Pattern(regexp &qu…

Java面向對象練習(2.商品類)(2024.7.4)

商品類 package Supermarket20240704;public class Commodity {private String name;private double price;private int inventory;public Commodity(){};public Commodity(String name, double price, int inventory){this.name name;this.price price;this.inventory inv…

Java核心技術【十九】Iterator與增強for循環

Java中的Iterator與增強for循環 在Java編程中&#xff0c;迭代是處理集合元素的一種常見操作。Java提供了多種迭代集合元素的方式&#xff0c;其中最常用的兩種是Iterator和增強for循環&#xff08;也稱為“for-each”循環&#xff09;。本文將深入探討這兩種迭代方式的特性和…

CLAM用于弱監督WSI分析

計算病理學&#xff08;computational pathology&#xff09;下的深度學習方法需要手動注釋大型 WSI 數據集&#xff0c;并且通常存在領域適應性和可解釋性較差的問題。作者報告了一種可解釋的弱監督深度學習方法&#xff0c;只需要WSI級標簽。將該方法命名為聚類約束注意力多實…

Perl 格式化輸出:提升代碼可讀性的技巧

引言 Perl 是一種功能強大的腳本語言&#xff0c;廣泛用于文本處理、系統管理、網絡編程等多個領域。在 Perl 編程中&#xff0c;代碼的格式化輸出不僅有助于提升代碼的可讀性&#xff0c;還能增強程序的用戶體驗。本文將詳細介紹如何在 Perl 中實現代碼的格式化輸出。 Perl …

【HarmonyOS4學習筆記】《HarmonyOS4+NEXT星河版入門到企業級實戰教程》課程學習筆記(二十一)

課程地址&#xff1a; 黑馬程序員HarmonyOS4NEXT星河版入門到企業級實戰教程&#xff0c;一套精通鴻蒙應用開發 &#xff08;本篇筆記對應課程第 31 節&#xff09; P31《30.數據持久化-關系型數據庫》 上一節中學習了使用用戶首選項的方式實現數據持久化&#xff0c;但用戶首…

微機原理 選擇題

D C MOV、PUSH、POP、XLAT&#xff08;查表&#xff09;、IN、OUT不影響標志位 D B D C D C D B 1. (單選題, 5分)8位無符號數(字節)表示的數值范圍是( ), 16位無符號數(字)表示的數值范圍是( )。 A. 0~128 0~32768B. 0~255 0~655…

為什么 npm run serve 正常,npm run build 就報錯:digital envelope routines::unsupported

這個錯誤通常與 Node.js 版本和使用的加密算法有關。讓我解釋一下原因和可能的解決方案&#xff1a; 錯誤原因 這個錯誤&#xff08;“error:0308010C:digital envelope routines::unsupported”&#xff09;通常發生在以下情況&#xff1a; 使用較新版本的 Node.js&#xf…

Vscode快捷鍵崩潰

Vscode快捷鍵崩潰 Linux虛擬機下使用vscode寫代碼【ctrlA&#xff0c;CtrlC&#xff0c;CtrlV】等快捷鍵都不能使用&#xff0c;還會出現“NO text insert“等抽象的指令&#xff0c;問題就是不知道什么時候裝了一個VIM插件&#xff0c;讓他滾出電腦》》》

監聽 web 容器內的網絡請求(錯誤的方案)

需求 iOS 項目中 wkwebview 實現的 web 容器&#xff0c;需要監聽 web 容器內的所有網絡請求 實現 在 iOS 項目中使用 WKWebView 實現的 Web 容器&#xff0c;監聽 Web 容器內的網絡請求是一個常見需求。可以通過實現 WKURLSchemeHandler 協議來處理自定義的 URL scheme&#…

通過 API 接口管理 Kafka

文章目錄 前言Topic 管理配置管理消費者群組管理查看消費者群組修改消費者群組 為主題添加分區從主題中刪除消息首領選舉 前言 除了通過命令行和可視化界面對 kafka 進行管理&#xff0c;也可以通過 AdminClient的 API 對 kafka 進行管理。本文將介紹如何通過 AdminClient 進行…

[Vue學習]生命周期及其各階段舉例

當我們運行vue項目&#xff0c;看到了屏幕上顯示的界面&#xff0c;看到了界面上顯示的數據和標簽&#xff0c;之后將這個界面叉掉&#xff0c;這一過程其實經歷了一整個vue的生命周期的四個階段&#xff0c;即創建階段、掛載階段、更新階段以及銷毀階段, 而對于每個階段的啟動…

使用 pyecharts 渲染成圖片程序報錯: echarts is not defined問題處理

背景 之前寫的使用 snapshot_selenium 來保存pyeacharts渲染成的網頁截圖&#xff0c;可以正常運行。程序擱置了半年&#xff0c;不知道動了電腦哪里&#xff0c;再次運行程序時&#xff0c;程序開始報錯&#xff1a;JavascriptException: javascript error: echarts is not d…

【SQL】已解決:SQL分組去重并合并相同數據

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;SQL分組去重并合并相同數據 在數據庫操作中&#xff0c;數據的分組、去重以及合并是常見需求。然而&#xff0c;初學者在編寫SQL語句時&#xff0c;可能會遇到一…

正弦波與單位圓關系的可視化 包括源碼

正弦波與單位圓關系的可視化 包括源碼 flyfish 正弦波與單位圓的關系 正弦波可以通過單位圓上的點在直線&#xff08;通常是 y 軸&#xff09;上的投影來表示。具體來說&#xff0c;考慮一個單位圓&#xff0c;其半徑為 1&#xff0c;圓心在原點。我們可以通過旋轉一個角度 …

每日一道算法題 判斷子序列

題目 判斷子序列_牛客題霸_牛客網 (nowcoder.com) Python # # 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回方法規定的值即可 # # # param S string字符串 # param T string字符串 # return bool布爾型 # class Solution:def isSubseq…

【全網最全流程+所有代碼】企業微信回調聯調,開通企微回調和收到企微回調

流程圖: 只是這里的消息回調,僅作為提示,群內有消息了。不是具體的消息,而是類似這樣的結構,: 如果需要獲取消息,還需要拉取企微群內消息方法,這個后續再更新。 好了,我們開始吧。 開啟消息回調和接收消息回調,地址是一樣的,只是 開啟消息回調,get請求, 接受消…

人工智能在日常生活中的十大應用:從醫療到智能家居

人工智能已成為當今人類日常生活的重要組成部分&#xff0c;無論您是否意識到&#xff0c;它幾乎在所有場景中都能提供幫助。每次您進行網絡搜索、在線預訂旅行、接收來自京東等購物平臺的產品推薦又或是打開您的新浪、抖音時&#xff0c;都能看到影子&#xff0c;這些只是一些…