Actor Critic對比PGValue-Based

目錄

回顧一下policy gradient:

QAC算法:

A2C- advantage actor critic

問題:

1. 為什么要結合起來,能解決什么問題?

1. 策略梯度 (PG) 的優勢與核心問題

2. 基于價值方法 (Value-Based) 的優勢與局限性

3. 潛在挑戰與權衡

2.policy gradient和DQN的區別?

3.連續動作空間中,AC如何將輸出值映射為具體的動作?

1. 確定性策略 + 輸出層激活函數縮放 (DDPG, TD3 的核心方式)

2. 隨機策略 + 參數化概率分布 (SAC, A2C/PPO 用于連續空間的核心方式)

總結:Actor 如何輸出連續動作值

4.為什么具有探索能力?


Actor Critic是 actor與critic方法的組合

actor:policy update to take action

critic: policy evaluation

回顧一下policy gradient:

\theta_{t+1}=\theta_t +\alpha\bigtriangledown_{\theta} J(\theta_t)

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

其實從這個公式中就可以發現actor 和critic: 這個策略更新對應actor,而策略更新需要計算q_tq_t的計算對應于critic。

其中q_t的計算可以有兩種方式:

1. Monte Carlo learning:對應的算法為REINFORCE 或者?Monte Carlo policy gradient。

2. Temporal-difference learning(TD):對應的算法稱作actor-critic。

QAC算法:

其中

critic: 對應于“SARSA + value function approximation”

actor: 對應于policy update 算法

這個算法是on-policy的(每個輪次會根據新更新的policy進行數據采樣)。

且policy是隨機的,不需要\varepsilon -greedy技術。

A2C- advantage actor critic

基本思想:在AC中引入一個baseline,來降低方差:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-b(S))]

為什么該公式成立且這種方式可以降低方差?

公式證明:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)b(S)]=0

證明過程:

\bigtriangledown_{\theta} J(\theta_t)=\Xi [X]

X(S,A) = \bigtriangledown_{\theta}In\pi(A|S, \theta_t)[(q(S,A)-b(S))]

E[X]相對于b(S)是不變的,但是var(X)相對b(S)是變化的。

目標是找到一個baseline b 來最小化var(X)。這樣通過一個隨機采樣來近似\Xi [X],方差會更小。

最優的baseline:可以通過狀態函數v_{\pi}(s)來近似

這樣:梯度上升算法變為:

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-v_{\pi}(S))]

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)\delta _{\pi}(S,A)]

其中:\delta _{\pi}(S,A) = q_{\pi}(S,A)-v_{\pi}(S)?,這就是advantage function

與PG一樣,這個算法可以被轉化為(推導過程見:Policy Gradient【強化學習的數學原理】-CSDN博客):

\theta_{t+1}=\theta_t +\alpha (\frac{\delta _{t}(s_t,a_t)}{\pi(a_t|s_t, \theta_t)})\bigtriangledown_{\theta}\pi (a_t|s_t, \theta_t)

與相對值\delta _{t}?成比例,而不是絕對值q_t,不在乎絕對值,在乎相對值。

advantahe function可以通過TD error來近似,這樣可以只通過一個網絡來近似v函數,而不需要近似q和v兩個網絡。

\delta _{t}(s,a) = q_{t}(s_t,a_t)-v_{\pi}(s_t)

\delta _{t}(s,a) =r_{t+1} + \gamma *v_{t}(s_{t+1}) -v_{\pi}(s_t)

具體算法:

問題:

1. 為什么要結合起來,能解決什么問題?

1. 策略梯度 (PG) 的優勢與核心問題

  • 優勢:

    • 直接優化策略:?直接參數化策略函數 $\pi_\theta(a|s)$ 并沿著提升期望回報的方向更新參數 $\theta$。

    • 處理連續動作空間:?天然適用于動作是連續的或高維的場景(如機器人控制、自動駕駛),因為它直接輸出動作或動作分布。

    • 學習隨機策略:?可以學習最優的隨機策略(這在部分可觀測環境或需要探索性的博弈中很重要)。

  • 核心問題:高方差

    • 策略梯度方法(如REINFORCE)使用蒙特卡洛(MC)方法估計整個軌跡的回報 $G_t$ 作為期望回報梯度的無偏估計。

    • 問題在于,$G_t$ 是通過采樣得到的,其方差非常大。環境的內在隨機性(狀態轉移、獎勵)、策略本身的隨機性以及長軌跡都會累積巨大的方差。

    • 高方差的后果:

      • 訓練不穩定:?更新方向波動劇烈,導致策略參數劇烈震蕩。

      • 收斂緩慢:?需要大量樣本(軌跡)才能獲得可靠的梯度估計,樣本效率低。

      • 難以收斂到最優策略:?巨大的噪聲可能使優化過程難以找到正確的方向。

2. 基于價值方法 (Value-Based) 的優勢與局限性

  • 優勢:

    • 低方差:?通過學習價值函數 $V(s)$ 或 $Q(s, a)$ 來評估狀態或狀態-動作對的好壞。

    • 樣本效率相對較高:?價值函數估計可以利用時序差分(TD)學習進行 Bootstrap(自舉),即利用當前估計的值來更新之前的估計,這大大降低了方差(相比MC)。

  • 局限性:

    • 間接優化策略:?需要從學到的價值函數(通常是 $Q$ 函數)中派生策略(例如 $\epsilon$-greedy 或 max操作 $\arg\max_a Q(s, a)$)。

    • 處理連續動作空間困難:?執行 $\arg\max_a Q(s, a)$ 在連續或高維動作空間中非常困難(需要昂貴的優化過程)。(DQN也不行:也需要輸入action進行argmax;DQN同PG都是使用的神經網絡建模,為什么DQN沒有辦法建模連續狀態空間?

    • 通常學習確定性策略:?標準的基于價值的方法傾向于學習確定性策略或帶探索噪聲的確定性策略,不一定能學習到最優的隨機策略。

通過這種結合,Actor-Critic 有效地解決了 PG 的核心痛點:

  • 顯著降低方差:?Critic 提供的價值估計(尤其是利用 TD 學習的)比原始的蒙特卡洛回報 $G_t$ 的方差低得多。這直接解決了 PG 方法高方差的核心問題。

  • 提高樣本效率:?更低的方差意味著需要更少的樣本來獲得可靠度足夠高的梯度信號,從而提高了樣本利用效率

  • 提升訓練穩定性:?更平滑、方差更小的梯度信號使得策略參數的更新更加穩定,減少了震蕩,更容易收斂。

  • 保持 PG 的優勢:?同時,它保留了策略梯度方法的優點:能夠直接參數化和優化策略,輕松處理連續動作空間,并能學習隨機策略

  • 解決基于價值方法的局限性:?Actor 直接輸出動作,繞過了基于價值方法在連續動作空間中執行 $\arg\max$ 的難題。

3. 潛在挑戰與權衡

  • 引入偏差:?Critic 的價值函數估計本身可能是有偏的(尤其是在函數逼近和 Bootstrap 的情況下)。雖然方差降低了,但可能引入了偏差。設計良好的 Critic 和算法(如使用 n-step TD 或 GAE)可以在偏差和方差之間取得良好平衡。

  • 需要訓練兩個網絡:?需要同時學習和更新策略網絡(Actor)和價值網絡(Critic),增加了算法的復雜性和調參難度。

  • 相互依賴:?Actor 的性能依賴于 Critic 的評估質量,而 Critic 評估的質量又依賴于 Actor 生成的樣本。如果一方訓練不好,會影響另一方。這可能導致訓練不穩定。

簡而言之,Actor-Critic 解決了“如何在保持策略梯度靈活性的前提下,使其學習過程更高效、更穩定”這個關鍵問題,使其成為解決復雜連續控制任務的主流且強大的強化學習框架。后續的許多先進算法(如 A2C/A3C, PPO, TRPO, SAC, TD3)都是 Actor-Critic 框架的改進和發展。

2.policy gradient和DQN的區別?

3.連續動作空間中,AC如何將輸出值映射為具體的動作?

是一個非常關鍵的技術細節!Actor-Critic 方法(尤其是用于連續動作空間的算法如 DDPG, TD3, SAC)通過 Actor 網絡的輸出層設計采樣策略,將網絡輸出的數值映射到具體的、有物理意義的連續動作值(如扭矩、角度)。核心思路是利用參數化的概率分布確定性函數,并結合激活函數進行縮放。

1. 確定性策略 + 輸出層激活函數縮放 (DDPG, TD3 的核心方式)

  • Actor 網絡結構:?Actor 網絡 $\pi_\theta(s)$ 是一個神經網絡,輸入是狀態?s輸出層直接輸出一個動作向量?a。動作向量的維度等于動作空間的維度(例如,n 個關節就是 n 維向量)。

  • 關鍵:輸出層激活函數:?為了將網絡輸出限制在期望的范圍內(如 $[-1, 1]^n$ 或 $[-\pi, \pi]$),輸出層使用有界激活函數。最常用的是:

    • tanh?函數:?輸出范圍是 $[-1, 1]$。這是最直接和常用的方式。

      • 例如,對于扭矩 $a_i \in [-1, 1]$:

        # Actor 網絡最后一層
        raw_output = ...  # 神經網絡中間層輸出
        torque_i = torch.tanh(raw_output_i)  # 將每個維度的輸出壓縮到 [-1, 1]
    • sigmoid?函數 + 線性縮放:?輸出范圍是 $[0, 1]$。如果需要范圍 $[min, max]$,可以線性縮放:

      • 例如,對于方向盤轉角 $a \in [-90^\circ, 90^\circ]$:

        raw_output = ...  # 神經網絡中間層輸出 (假設是標量或單維向量)
        normalized_angle = torch.sigmoid(raw_output)  # [0, 1]
        steering_angle = min_val + normalized_angle * (max_val - min_val)  # [-90, 90]
        # 即:steering_angle = -90 + 180 * normalized_angle
      • 更常見的是直接用?tanh?縮放:

        steering_angle = max_val * torch.tanh(raw_output)  # 因為 tanh 在 [-1, 1], max_val=90 => [-90, 90]
  • 動作選擇:?在訓練和測試時(確定性策略),Actor 網絡直接輸出縮放后的動作值?a = \pi_\theta(s)

2. 隨機策略 + 參數化概率分布 (SAC, A2C/PPO 用于連續空間的核心方式)

  • Actor 網絡結構:?Actor 網絡 $\pi_\theta(s)$ 的輸出層不再直接輸出動作?a,而是輸出一個概率分布的參數。對于連續動作空間,最常用的是多元高斯分布 (Multivariate Gaussian Distribution),通常假設各維度獨立(對角協方差矩陣)。

    • 輸出內容:

      • 均值 (mu, $\mu$):?一個向量,維度等于動作空間維度。表示每個動作維度的中心位置。

      • 標準差 (sigma, $\sigma$) 或 對數標準差 (log_sigma, $\log \sigma$):?一個向量(與?mu?同維),表示每個動作維度的分布寬度(不確定性/探索性)。通常輸出?log_sigma?是為了確保 $\sigma > 0$ (通過?exp?轉換)。

  • 映射動作范圍:

    • 均值?mu?和確定性策略一樣,mu?的輸出層使用有界激活函數(如?tanh)進行縮放,使其落在?[min, max]?內。

    • 標準差?sigma?其輸出層通常使用?softplus?或?exp?激活函數,確保其值為正數。

      • softplus:?sigma = torch.nn.functional.softplus(raw_sigma)?(輸出 > 0, 更平滑)

      • exp:?sigma = torch.exp(raw_sigma)?(輸出 > 0)

  • 動作選擇 (采樣):?在給定狀態?s?下,動作?a?通過從該狀態對應的參數化高斯分布中采樣得到:

    mu = ... # Actor 網絡輸出的均值 (已縮放) e.g., [0.5, -0.3]
    log_sigma = ... # Actor 網絡輸出的對數標準差 e.g., [-1.0, -0.5]
    sigma = torch.exp(log_sigma)  # e.g., [0.367, 0.606]# 創建獨立高斯分布 (假設各維度獨立)
    dist = torch.distributions.Normal(loc=mu, scale=sigma)
    # 從分布中采樣一個動作
    action_sampled = dist.sample()  # e.g., [0.62, -0.15]
  • 確保動作在范圍內 (可選但推薦):?采樣得到的動作可能略微超出?[min, max]?范圍(尤其是在分布邊緣時)。常見做法:

    1. Clipping:?直接將采樣動作裁剪到范圍內?action = torch.clamp(action_sampled, min_val, max_val)。簡單有效,但會改變分布形狀(概率質量累積在邊界)。

    2. Squashing:?使用?tanh?等壓縮函數將采樣動作映射到范圍內(SAC 使用此法)。但這引入了分布變換,計算對數概率 (log_prob) 時需要加入 Jacobian 行列式的修正項(SAC 論文處理了這點)。

  • 探索:?探索性來源于分布采樣本身。標準差?sigma?控制探索程度。訓練算法(如 SAC)通常會包含策略熵正則化項,鼓勵策略保持一定的探索性(避免?sigma?過早坍縮到 0)。

  • 測試/部署時:?可以選擇:

    • 使用均值?mu?作為動作(確定性輸出,不探索)。

    • 繼續采樣(保持一定的隨機性,可能更魯棒)。

總結:Actor 如何輸出連續動作值

方法類型輸出內容動作范圍映射關鍵動作選擇 (訓練)探索來源測試/部署常用動作
確定性策略
(DDPG, TD3)
動作向量?atanh?激活函數?直接輸出到?[-1, 1]
(或縮放至?[min, max])
a = \pi_\theta(s)?+?外部噪聲添加的外部噪聲a = \pi_\theta(s)
隨機策略
(SAC, PPO)
分布參數 (mu,?log_sigma)mu?用?tanh?縮放
sigma?用?exp/softplus?保證 >0
從?Normal(mu, sigma)?分布采樣
(+ Clipping/Squashing)

4.為什么具有探索能力?

祥見:Policy Gradient【強化學習的數學原理】-CSDN博客

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

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

相關文章

buuctf-re

1.findKey 打開是C而且有點亂,所以找關鍵步驟有一個加密進去是不能反編譯的,有花指令, 這里有重復的部分把下面的NOP掉,重新定義函數’p’ 之后分析邏輯, // positive sp value has been detected, the output may be wrong! int __userpurge sub_40191F<eax>(int a1&l…

RuoYi、Vue CLI 和 uni-app 結合構建跨端全家桶方案

將 RuoYi、Vue CLI 和 uni-app 結合構建跨端全家桶方案&#xff0c;可以實現一套代碼管理后臺系統&#xff08;PC&#xff09;和移動端應用&#xff08;H5/小程序/App&#xff09;。以下是整合思路和關鍵步驟&#xff1a; 技術棧分工 RuoYi&#xff1a;后端框架&#xff08;Spr…

二十九、windows系統安全---windows注冊表安全配置

環境 windows server 2012 原理 注冊表簡介: 注冊表&#xff08;Registry&#xff0c;繁體中文版Windows操作系統稱之為登錄檔&#xff09;是Microsoft Windows中的一個重要的數據庫&#xff0c;用于存儲系統和應用程序的設置信息。早在Windows 3.0推出OLE技術的時候&#…

Android 一幀繪制流程

Android 一幀繪制流程揭秘&#xff1a;主線程與 RenderThread 的雙人舞 核心目標&#xff1a;60幀/秒的絲滑體驗&#xff0c;意味著每幀必須在16.67ms內完成所有工作&#xff01; 想象一下屏幕刷新就像放映電影&#xff0c;一幀接一幀。Android系統為了播放這“電影”&#xff…

智能網盤檢測軟件,一鍵識別失效鏈接

軟件介紹 今天為大家推薦一款由吾愛論壇大神開發的網盤鏈接檢測工具&#xff0c;專為網絡資源愛好者設計&#xff0c;可快速批量檢測分享鏈接的有效性。 核心功能 這款工具能夠智能識別各類網盤分享鏈接的有效狀態&#xff0c;用戶只需批量粘貼鏈接&#xff0c;軟件便會自…

408第三季part2 - 計算機網絡 - 應用層

理解 客戶機不能直接通信&#xff0c;要通過服務器才行 P2P可以 先記個名字 看圖記查詢流程 然后迭代就是 主機到本地 本地先查根&#xff0c;然后返回&#xff0c;再查頂級&#xff0c;然后返回&#xff0c;再查權限 然后注意這里主機到本地都是遞歸查詢&#xff0c;其他的…

Modern C++(七)類

7、類 7.1、類聲明 前置聲明&#xff1a;聲明一個將稍后在此作用域定義的類類型。直到定義出現前&#xff0c;此類名具有不完整類型。當代碼僅僅需要用到類的指針或引用時&#xff0c;就可以采用前置聲明&#xff0c;無需包含完整的類定義。 前置聲明有以下幾個作用&#xf…

4-6WPS JS宏自定義函數變長參數函數(實例:自定義多功能數據統計函數)學習筆記

一、自定義函數:自定義多功能數據統計函數。示例1&#xff1a;function jia1(x,...arr){//自定義變長函數&#xff0c;X第一參數&#xff0c;...arr為變長參數可放入無數個參數&#xff0c;就像是數組return xWorksheetFunction.Sum(arr)//返回&#xff0c;X第一參數WorksheetF…

HDMI延長器 vs 分配器 vs KVM切換器 vs 矩陣:技術區別與應用場景

在音視頻和計算機信號傳輸領域&#xff0c;延長器、分配器、切換器和矩陣是四種常見設備&#xff0c;它們的功能和應用場景有顯著區別。以下是它們的核心差異對比&#xff1a; 1. 延長器&#xff08;Extender&#xff09; 功能&#xff1a; ? 將信號&#xff08;如HDMI、Displ…

從0到1解鎖Element-Plus組件二次封裝El-Dialog動態調用

技術難題初登場 家人們&#xff0c;最近在開發一個超復雜的后臺管理系統項目&#xff0c;里面有各種數據展示、表單提交、權限控制等功能&#xff0c;在這個過程中&#xff0c;我頻繁地使用到了element-plus組件庫中的el-dialog組件 。它就像一個小彈窗&#xff0c;可以用來顯示…

數據結構實驗習題

codeblock F2是出控制臺 1.1 /* by 1705 WYY */ #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define YES 1 #define NO 0 #define OK 1 #define ERROR 0 #define SUCCESS 1 #define UNSUCCESS 0 #define OVERFLOW -2 #define UNDERF…

PyTorch 2.7深度技術解析:新一代深度學習框架的革命性演進

引言:站在AI基礎設施變革的歷史節點 在2025年這個充滿變革的年份,PyTorch團隊于4月23日正式發布了2.7.0版本,隨后在6月4日推出了2.7.1補丁版本,標志著這個深度學習領域最具影響力的框架再次迎來了重大突破。這不僅僅是一次常規的版本更新,而是一次面向未來計算架構和AI應…

LTspice仿真10——電容

電路1中電容下標m5&#xff0c;表示5個該電阻并聯電路2中ic1.5v&#xff0c;表示電容初始自帶電量&#xff0c;電壓為1.5v

C#事件驅動編程:標準事件模式完全指南

事件驅動是GUI編程的核心邏輯。當程序被按鈕點擊、按鍵或定時器中斷時&#xff0c;如何規范處理事件&#xff1f;.NET框架通過EventHandler委托給出了標準答案。 &#x1f50d; 一、EventHandler委托&#xff1a;事件處理的基石 public delegate void EventHandler(object se…

全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例

spring:rabbitmq:# 基礎連接配置 host: localhost # RabbitMQ 服務器地址port: 5672 # 默認端口username: guest # 默認用戶名password: guest # 默認密碼virtual-host: / # 虛擬主機&#xff08;默認/&…

Win32 API實現串口輔助類

近期需要使用C++進行串口通訊,將Win32 API串口接口進行了下封裝,可實現同步通訊,異步回調通訊 1、SerialportMy.h #pragma once #include <Windows.h> #include <thread> #include <atomic> #include <functional> #include <queue> #inclu…

Python-執行系統命令-subprocess

1 需求 2 接口 3 示例 4 參考資料 Python subprocess 模塊 | 菜鳥教程

Web攻防-XMLXXE上傳解析文件預覽接口服務白盒審計應用功能SRC報告

知識點&#xff1a; 1、WEB攻防-XML&XXE-黑盒功能點挖掘 2、WEB攻防-XML&XXE-白盒函數點挖掘 3、WEB攻防-XML&XXE-SRC報告 一、演示案例-WEB攻防-XML&XXE-黑盒功能點挖掘 1、不安全的圖像讀取-SVG <?xml version"1.0" standalone"yes&qu…

瀏覽器工作原理37 [#] 瀏覽上下文組:如何計算Chrome中渲染進程的個數?

一、前言 在默認情況下&#xff0c;如果打開一個標簽頁&#xff0c;那么瀏覽器會默認為其創建一個渲染進程。 如果從一個標簽頁中打開了另一個新標簽頁&#xff0c;當新標簽頁和當前標簽頁屬于同一站點&#xff08;相同協議、相同根域名&#xff09;的話&#xff0c;那么新標…

位置編碼和RoPE

前言 關于位置編碼和RoPE 應用廣泛&#xff0c;是很多大模型使用的一種位置編碼方式&#xff0c;包括且不限于LLaMA、baichuan、ChatGLM等等 第一部分 transformer原始論文中的標準位置編碼 RNN的結構包含了序列的時序信息&#xff0c;而Transformer卻完全把時序信息給丟掉了…