目錄
回顧一下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:
其實從這個公式中就可以發現actor 和critic: 這個策略更新對應actor,而策略更新需要計算,
的計算對應于critic。
其中的計算可以有兩種方式:
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是隨機的,不需要技術。
A2C- advantage actor critic
基本思想:在AC中引入一個baseline,來降低方差:
為什么該公式成立且這種方式可以降低方差?
公式證明:
證明過程:
E[X]相對于是不變的,但是
相對
是變化的。
目標是找到一個baseline b 來最小化。這樣通過一個隨機采樣來近似
,方差會更小。
最優的baseline:可以通過狀態函數來近似
這樣:梯度上升算法變為:
其中:?,這就是advantage function
與PG一樣,這個算法可以被轉化為(推導過程見:Policy Gradient【強化學習的數學原理】-CSDN博客):
與相對值?成比例,而不是絕對值
,不在乎絕對值,在乎相對值。
advantahe function可以通過TD error來近似,這樣可以只通過一個網絡來近似v函數,而不需要近似q和v兩個網絡。
具體算法:
問題:
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]
?范圍(尤其是在分布邊緣時)。常見做法:-
Clipping:?直接將采樣動作裁剪到范圍內?
action = torch.clamp(action_sampled, min_val, max_val)
。簡單有效,但會改變分布形狀(概率質量累積在邊界)。 -
Squashing:?使用?
tanh
?等壓縮函數將采樣動作映射到范圍內(SAC 使用此法)。但這引入了分布變換,計算對數概率 (log_prob
) 時需要加入 Jacobian 行列式的修正項(SAC 論文處理了這點)。
-
-
探索:?探索性來源于分布采樣本身。標準差?
sigma
?控制探索程度。訓練算法(如 SAC)通常會包含策略熵正則化項,鼓勵策略保持一定的探索性(避免?sigma
?過早坍縮到 0)。 -
測試/部署時:?可以選擇:
-
使用均值?
mu
?作為動作(確定性輸出,不探索)。 -
繼續采樣(保持一定的隨機性,可能更魯棒)。
-
總結:Actor 如何輸出連續動作值
方法類型 | 輸出內容 | 動作范圍映射關鍵 | 動作選擇 (訓練) | 探索來源 | 測試/部署常用動作 |
---|---|---|---|---|---|
確定性策略 (DDPG, TD3) | 動作向量?a | tanh ?激活函數?直接輸出到?[-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博客