LLMs基礎學習(八)強化學習專題(5)

LLMs基礎學習(八)強化學習專題(5)

文章目錄

  • LLMs基礎學習(八)強化學習專題(5)
    • 重要性采樣(Importance Sampling)
      • 權重計算邏輯
      • 兩種實現形式
      • 使用注意事項
    • PPO 與 TRPO
      • PPO 算法(Proximal Policy Optimization)
      • TRPO 算法(Trust Region Policy Optimization)
      • PPO 與 TRPO 的關系

視頻鏈接:https://www.bilibili.com/video/BV1MQo4YGEmq/?spm_id_from=333.1387.upload.video_card.click&vd_source=57e4865932ea6c6918a09b65d319a99a

重要性采樣(Importance Sampling)

在強化學習中,重要性采樣(Importance Sampling) 是一種通過調整樣本權重,修正 “行為策略(Behavior Policy)” 與 “目標策略(Target Policy)” 分布差異的技術,核心解決異策略(Off - Policy)學習的關鍵問題:如何用行為策略采集的數據,準確估計目標策略的性能。

  • 行為策略 b ( a ∣ s ) b(a \mid s) b(as):負責與環境交互、生成動作樣本(比如探索性更強的策略 )。
  • 目標策略 π ( a ∣ s ) \pi(a \mid s) π(as):需要被評估或優化的策略(比如更偏向利用的最優策略 )。

權重計算邏輯

通過概率比率(重要性權重) 調整樣本對目標策略的貢獻,公式:

  • 單步權重 ρ t = π ( a t ∣ s t ) b ( a t ∣ s t ) \rho_t = \frac{\pi(a_t \mid s_t)}{b(a_t \mid s_t)} ρt?=b(at?st?)π(at?st?)? 衡量 “目標策略選動作 a t a_t at? 的概率” 與 “行為策略選 a t a_t at? 的概率” 的比值。
  • 多步軌跡權重 ρ 0 : T = ∏ t = 0 T π ( a t ∣ s t ) b ( a t ∣ s t ) \rho_{0:T} = \prod_{t=0}^T \frac{\pi(a_t \mid s_t)}{b(a_t \mid s_t)} ρ0:T?=t=0T?b(at?st?)π(at?st?)? 整條軌跡的權重是各步權重的乘積,體現軌跡對目標策略的整體貢獻。

兩種實現形式

1. 普通重要性采樣(Ordinary IS)

直接用權重加權樣本回報,估計目標策略的價值函數 V π ( s ) V^\pi(s) Vπ(s) V π ( s ) ≈ 1 n ∑ i = 1 n ρ 0 : T ( i ) G ( i ) V^\pi(s) \approx \frac{1}{n} \sum_{i=1}^n \rho_{0:T}^{(i)} G^{(i)} Vπ(s)n1?i=1n?ρ0:T(i)?G(i)

  • G ( i ) G^{(i)} G(i):第 i 條軌跡的累積回報; ρ 0 : T ( i ) \rho_{0:T}^{(i)} ρ0:T(i)?:第 i 條軌跡的多步權重。

2. 加權重要性采樣(Weighted IS)

引入權重歸一化,避免極端權重主導估計: V π ( s ) ≈ ∑ i = 1 n ρ 0 : T ( i ) G ( i ) ∑ i = 1 n ρ 0 : T ( i ) V^\pi(s) \approx \frac{\sum_{i=1}^n \rho_{0:T}^{(i)} G^{(i)}}{\sum_{i=1}^n \rho_{0:T}^{(i)}} Vπ(s)i=1n?ρ0:T(i)?i=1n?ρ0:T(i)?G(i)?

使用注意事項

1. 核心風險:分布差異導致高方差

  • 數學本質:期望轉換依賴分布相似度,公式: E x ~ π [ f ( x ) ] = E x ~ b [ f ( x ) π ( x ) b ( x ) ] \mathbb{E}_{x \sim \pi} [f(x)] = \mathbb{E}_{x \sim b} \left[ f(x) \frac{\pi(x)}{b(x)} \right] Exπ?[f(x)]=Exb?[f(x)b(x)π(x)?]
  • 問題:若 π \pi π 與 b 分布差異大,即使采樣足夠,方差會急劇增大(極端權重讓估計不穩定 )。

2. 解決方案

  • 加權重要性采樣:通過歸一化降低極端權重影響,緩解方差問題。
  • 截斷權重:限制權重最大值(如 PPO 算法的剪切機制 ),避免單個樣本主導。
  • 限制軌跡長度:減少多步權重的乘積效應(長軌跡易因步數多放大分布差異 )。

一句話理解:重要性采樣讓 “探索的策略(行為策略)” 采集的數據,能為 “優化的策略(目標策略)” 服務,但得小心分布差異導致的方差問題,用加權、截斷等技巧兜底~

PPO 與 TRPO

強化學習中,異策略(Off - Policy)學習 需用 “行為策略(采集數據)” 優化 “目標策略(性能更好的策略)”,但兩者分布差異過大會導致重要性采樣方差爆炸。PPO 與 TRPO 正是為解決這一問題而生。

PPO 算法(Proximal Policy Optimization)

1. 提出與目標

  • 由 OpenAI 2017 提出,核心解決傳統策略梯度因更新步長不當導致的訓練不穩定問題。
  • 目標:限制新、舊策略的差異,平衡 “探索” 與 “利用”,讓重要性采樣更穩定。

2. 核心思想

通過限制策略更新幅度,確保新策略 θ \theta θ 與舊策略 θ ′ \theta' θ 差異不大,避免重要性采樣因分布差異大而失效。

3. 數學表達與關鍵機制

目標函數包含兩部分: J PPO θ ( θ ) = J θ ′ ( θ ) ? β KL ( θ , θ ′ ) J_{\text{PPO}}^\theta(\theta) = J^{\theta'}(\theta) - \beta \text{KL}(\theta, \theta') JPPOθ?(θ)=Jθ(θ)?βKL(θ,θ)

  • J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ):基于重要性采樣的策略梯度目標(用舊策略 θ ′ \theta' θ 采集的數據優化新策略 θ \theta θ )。 J θ ′ ( θ ) = E ( s t , a t ) ~ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}(\theta) = \mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t \mid s_t)}{p_{\theta'}(a_t \mid s_t)} A^{\theta'}(s_t, a_t) \right] Jθ(θ)=E(st?,at?)πθ??[pθ?(at?st?)pθ?(at?st?)?Aθ(st?,at?)] A θ ′ ( s t , a t ) A^{\theta'}(s_t, a_t) Aθ(st?,at?) 是優勢函數,衡量動作價值 )
  • β KL ( θ , θ ′ ) \beta \text{KL}(\theta, \theta') βKL(θ,θ):KL 散度約束,懲罰新、舊策略的差異,確保更新幅度可控。

4. 算法特性

  • 同策略本質:雖用重要性采樣,但僅依賴 “上一輪策略 θ ′ \theta' θ” 的數據,新、舊策略差異小,可近似視為同策略。
  • 易用性:將 KL 散度直接融入目標函數,用梯度上升即可優化,實現簡單(對比 TRPO )。

TRPO 算法(Trust Region Policy Optimization)

1. 定位與目標

  • 是 PPO 的前身,核心解決 “策略更新的單調性” 問題(保證策略性能單調提升 )。
  • 目標:通過信任區域約束,限制策略更新步長,避免因分布差異導致性能下降。

2. 核心思想

將新策略 θ \theta θ 與舊策略 θ ′ \theta' θ 的 KL 散度作為額外約束(而非融入目標函數 ),要求 KL ( θ , θ ′ ) < δ \text{KL}(\theta, \theta') < \delta KL(θ,θ)<δ δ \delta δ 是信任區域半徑 )。

3. 數學表達與痛點

目標函數: J TRPO θ ′ ( θ ) = E ( s t , a t ) ~ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] , KL ( θ , θ ′ ) < δ J_{\text{TRPO}}^{\theta'}(\theta) = \mathbb{E}_{(s_t,a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t \mid s_t)}{p_{\theta'}(a_t \mid s_t)} A^{\theta'}(s_t, a_t) \right], \quad \text{KL}(\theta, \theta') < \delta JTRPOθ?(θ)=E(st?,at?)πθ??[pθ?(at?st?)pθ?(at?st?)?Aθ(st?,at?)],KL(θ,θ)<δ

  • 痛點:約束是 “額外條件”,無法直接用梯度上升優化,需復雜的二階優化(如共軛梯度 ),實現難度高、計算成本大。

PPO 與 TRPO 的關系

1. 核心聯系

  • 兩者均為解決異策略學習中 “策略分布差異導致的高方差” ,目標是穩定策略更新、提升樣本效率。
  • PPO 是 TRPO 的簡化與優化,繼承 “限制策略差異” 的核心思想,改進實現方式。

2. 關鍵區別

維度PPOTRPO
約束處理KL 散度融入目標函數,直接梯度優化KL 散度作為額外約束,需二階優化
實現難度簡單(一階優化,易工程落地)復雜(二階優化,計算成本高)
樣本效率與 TRPO 性能接近理論保證單調提升,但實現復雜限制推廣

3. 實際應用選擇

工程中優先選 PPO :實現簡單、訓練穩定,在 Atari 游戲、機器人控制等場景表現優異;TRPO 僅用于理論研究或對 “單調提升” 有強需求的極端場景。

一句話概括:TRPO 開了 “限制策略差異” 的腦洞,PPO 把這個腦洞做成了 “人人能用” 的工具,讓強化學習落地更簡單~

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

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

相關文章

深入理解“回調地獄“(Callback Hell)

"回調地獄"是異步編程中常見的問題&#xff0c;指由于過多嵌套的回調函數導致的代碼難以理解和維護的情況。 一、什么是回調地獄 基本概念 回調地獄(Callback Hell/Pyramid of Doom)是指&#xff1a; 多層嵌套的回調函數形成的代碼結構 代碼向右縮進越來越深&…

Oracle 的 TCP.SEND_TIMEOUT 參數

Oracle 的 TCP.SEND_TIMEOUT 參數 一 參數基本概念 TCP.SEND_TIMEOUT 是 Oracle Net Services 中的一個重要參數&#xff0c;用于控制 TCP 數據發送操作的最長等待時間。 二 關鍵特性 特性說明參數類型sqlnet.ora 配置文件參數默認值none (無超時限制)單位ms, sec, min, 默…

[Nginx] 配置中的sendfile參數詳解:從傳統 IO 到零拷貝的性能優化

一、sendfile 是什么&#xff1f; sendfile 是 Nginx 中一個關鍵的配置參數&#xff0c;用于控制是否使用操作系統提供的 sendfile() 系統調用來傳輸文件。 sendfile on;&#xff1a;啟用零拷貝技術&#xff0c;直接由內核將文件發送到網絡。sendfile off;&#xff1a;使用傳統…

(LeetCode 每日一題) 2138. 將字符串拆分為若干長度為 k 的組 (字符串、模擬)

題目&#xff1a;2138. 將字符串拆分為若干長度為 k 的組 思路&#xff1a;字符串模擬&#xff0c;時間復雜度0(n)。 C版本&#xff1a; class Solution { public:vector<string> divideString(string s, int k, char fill) {vector<string> v;int ns.size();for…

C++法則1:在 C++ 中,所有的具名變量都是左值,即使它們的類型是右值引用。

看下面例子&#xff1a; test(0)調用的是函數是&#xff1a; template<typename T> void test(T&& t) {std::cout << "右值引用" << std::endl; }test(n)調用的是函數是&#xff1a; template<typename T> void test(T& t) {st…

python如何使用正則提取文章所有形容詞

在Python中使用正則表達式提取文章中的形容詞需要結合語言特性處理。以下是分步解決方案&#xff1a; 英文場景解決方案&#xff08;推薦使用專業NLP庫&#xff09;&#xff1a; import re import nltk nltk.download(averaged_perceptron_tagger) # 首次使用需要下載text …

低代碼平臺的數據歸集及治理

低代碼平臺或無碼平臺&#xff0c;在建表單的時候&#xff0c;都是每一個表單一個json的格式文件&#xff0c;存儲在Nosql數據庫中。在開發的過程中&#xff0c;有以下主要的需求 1、json格式實時的轉為關系數據庫的格式&#xff0c;存入到關系數據庫中 需要在流程結束的時候&…

Origin:如何使柱狀圖看起來懸空

想得到這樣的一個沒有下軸的柱狀圖&#xff0c;操作步驟如下: 1.點擊下軸坐標軸 2.修改效果

Vite 原理深入剖析

1. 整體架構設計 Vite 的整體架構由幾個關鍵模塊組成,每個模塊都對應具體的源碼文件: 開發服務器:用于處理瀏覽器請求、模塊解析和熱更新。開發服務器的代碼主要位于 src/node/server/index.ts。 模塊解析與熱更新:通過模塊中間件攔截請求,處理代碼轉換與熱模塊替換。相關…

微處理器原理與應用篇---常見基礎知識(5)

一、什么是嵌入式系統 嵌入式系統是一種以應用為中心、以計算機技術為基礎、軟硬件可裁剪的專用計算機系統&#xff0c;通常嵌入在其他設備中&#xff0c;用于實現特定功能。它廣泛存在于消費電子、工業控制、汽車電子、醫療設備等領域&#xff0c;是現代智能設備的核心 “大腦…

Redis 8.0向量庫 vs 傳統向量數據庫:大模型知識庫開發選型全指南

在大模型知識庫開發領域&#xff0c;向量數據庫的選擇直接影響系統的性能、擴展性和開發效率。隨著Redis 8.0推出Vector Set數據結構并增強向量搜索能力&#xff0c;開發者面臨新的選擇困境&#xff1a;是采用傳統專用向量數據庫&#xff08;如Milvus、Pinecone&#xff09;&am…

偏向鎖撤銷為什么會觸發STW?

偏向鎖撤銷觸發STW&#xff08;Stop-The-World&#xff09;的根本原因在于其撤銷操作需要??全局內存一致性??和??線程狀態確定性??&#xff0c;具體機制如下&#xff1a; ?? ??一、偏向鎖撤銷的核心流程?? ??競爭觸發撤銷?? 當線程B嘗試獲取已被線程A偏向的…

Java觀察者模式詳解

觀察者模式(Observer Pattern)是一種行為型設計模式&#xff0c;它定義了對象之間的一對多依賴關系&#xff0c;當一個對象(主題)的狀態發生改變時&#xff0c;所有依賴于它的對象(觀察者)都會自動收到通知并更新。 核心概念 觀察者模式包含以下核心角色&#xff1a; ?Subje…

創世新布控球 國標

目錄 結論&#xff1a; UDP模式 對講 平臺頁面設置 設備tcp被動 舊的創世版本&#xff08;平臺選的設備tcp被動&#xff1b;設備側無法設置&#xff09; 新創世從2.8改到180上&#xff0c;先UDP&#xff0c;全報文 參考文檔 結論&#xff1a; 對講的tcp主被動&#xff0…

【Dify精講】第18章:企業級功能定制

在企業級AI應用的實際部署中&#xff0c;你很快就會發現開源版本的標準功能往往無法滿足復雜的業務需求。作為一個在多家企業實施AI系統的老兵&#xff0c;我深知企業級定制的痛點和需求。今天&#xff0c;讓我們一起深入Dify的企業級功能定制&#xff0c;看看如何在現有架構基…

PHP $_GET 變量詳解

PHP $_GET 變量詳解 引言 在PHP編程中,$_GET變量是處理HTTP GET請求參數的一種非常便捷的方式。本文將詳細介紹PHP $_GET變量的使用方法、特點以及在實際開發中的應用。 一、什么是$_GET變量? $_GET是一個預定義的PHP超級全局變量,用于存儲HTTP GET請求中的數據。當用戶…

Kafka動態配置深度解析

在分布式消息隊列領域&#xff0c;Kafka憑借其高吞吐量、低延遲和可擴展性成為眾多企業的首選。隨著業務場景的日益復雜和數據流量的動態變化&#xff0c;靜態配置已難以滿足需求&#xff0c;Kafka的動態配置功能應運而生。通過動態配置&#xff0c;用戶無需重啟集群或中斷服務…

為WIN10微軟輸入法的全角切換Bug禁用Shift+Space組合鍵

20250621 By wdhuag 目錄 前言&#xff1a; 參考&#xff1a; 使用AutoHotkey屏蔽快捷鍵&#xff08;推薦&#xff09;&#xff1a; 使用PowerToys的鍵盤管理器屏蔽快捷鍵&#xff08;不推薦&#xff09;&#xff1a; 網上其它的方法&#xff1a; 前言&#xff1a; 是的…

Shell腳本調試與錯誤處理詳解

在 Shell 腳本中&#xff0c;set 命令用于控制腳本的執行行為和調試選項。以下是詳細解釋&#xff1a; 1. set -e 和 set e set -e&#xff08;嚴格錯誤檢查&#xff09;&#xff1a; 當命令返回非零退出狀態&#xff08;失敗&#xff09;時&#xff0c;立即退出腳本。 示例&a…

鯤鵬服務器創建Zookeeper鏡像實例

配置Kafka過程中&#xff0c;少不了要使用Zookeeer&#xff0c;這里記錄一下配置Zookeeper鏡像實例的過程。 創建目錄 mkdir -p /data/docker/zookeeper/data mkdir -p /data/docker/zookeeper/conf mkdir -p /data/docker/zookeeper/logs說明&#xff1a;data目錄為數據掛載…