基于目的地的o2o旅游電子商務(wù)網(wǎng)站開發(fā)設(shè)計畢業(yè)設(shè)計公眾號推廣平臺
軟性演員-評論家算法 SAC
- 軟性演員-評論家算法 SAC
- 優(yōu)勢原理
- 軟性選擇
- 模型結(jié)構(gòu)
- 目標函數(shù)
- 重參數(shù)化
- 熵正則化
- 代碼實現(xiàn)
?
軟性演員-評論家算法 SAC
優(yōu)勢原理
DDPG 的問題在于,訓(xùn)練不穩(wěn)定、收斂差、依賴超參數(shù)、不適應(yīng)復(fù)雜環(huán)境。
軟性演員-評論家算法 SAC,更穩(wěn)定,更適應(yīng)復(fù)雜環(huán)境。
傳統(tǒng)強化學(xué)習(xí)策略,采用 ε-greedy 貪心策略。
-
過度利用已知最優(yōu)策略,老是在同一個地方用同一個策略
-
忽視對未知狀態(tài)和未知最優(yōu)動作的探索,容易忽視復(fù)雜環(huán)境的動態(tài)變化
-
DDPG 每個時刻只給了一個最優(yōu)策略,這個最優(yōu)策略很大程度還是之前的經(jīng)驗
軟性在這里的意思是,軟性選擇,用于平滑探索和利用的關(guān)系。
比如走迷宮,你有很多選擇:向前走、向后走、轉(zhuǎn)向等。
- 在沒有 SAC 的情況下,如果你發(fā)現(xiàn)一條看似可行的路線(已知最佳經(jīng)驗和動作),你可能會一直沿著這條路線走,即使它可能不是最佳路徑。
- 有了 SAC,就好比你不僅想盡快找到出路,還想探索迷宮中的每個角落。即使某些路線看起來當前并不是最直接的出路,你也會嘗試它們,因為你被鼓勵去探索。
- 當 SAC 算法發(fā)現(xiàn)自己在某一區(qū)域過于確定或重復(fù)同樣的路徑時,它會因為想要增加熵(探索不確定性)而嘗試新的動作,比如嘗試之前沒有走過的道路。
- 隨著時間的推移,SAC 不僅找到了出路,而且可能發(fā)現(xiàn)了多條路徑,因為它在探索過程中學(xué)到了迷宮的更多信息。
SAC 算法通過鼓勵探索(即不總是走看起來最優(yōu)的路徑)來找到多個好的解決方案,并且它比其他算法更不容易陷入局部最優(yōu)解,因為它總是在尋找新的可能性。
核心優(yōu)勢是,避免過早陷入局部最優(yōu)解,至少也要找一個更大的局部最優(yōu)解。
SAC 軟性選擇是基于熵,熵的作用是為了衡量不確性程度。
這意味著在評估一個動作的價值時,不僅考慮了獎勵,還考慮了執(zhí)行該動作后策略的熵。
目標不僅是最大化獎勵,還要最大化熵,這意味著算法被鼓勵探索更多不同的動作,即使它們不是當前看起來最優(yōu)的。
最大熵強化學(xué)習(xí)不僅僅關(guān)注立即的獎勵最大化,還關(guān)注保持策略的多樣性和隨機性,以促進更全面的探索。
這張圖描繪的是軟性演員-評論家算法(Soft Actor-Critic, SAC)中用到的一個關(guān)鍵概念,即多模態(tài)Q函數(shù)。
在這個圖中,我們可以看到兩個子圖,3a和3b,它們展示了策略(π)和Q函數(shù)之間的關(guān)系。
圖3a:
- π(at|st):這表示在給定狀態(tài)st時,動作at的概率分布,這里假設(shè)為正態(tài)分布N(μ(st), Σ),其中μ(st)是均值函數(shù),Σ是協(xié)方差矩陣。
- Q(st, at):這是Q函數(shù)在特定狀態(tài)st和動作at下的值。Q函數(shù)衡量采取某動作并遵循當前策略預(yù)期可以獲得的累積回報。
圖3b:
- π(at|st) ∝ exp(Q(st, at)):這里顯示了SAC中采用的最大熵策略,其中策略(即概率分布)與exp(Q(st, at))成正比。這意味著采取某個動作的概率不僅與預(yù)期回報(Q值)相關(guān),還與該動作的熵有關(guān)。熵較高的動作即使預(yù)期回報不是最大,也可能被選中,這樣鼓勵了探索。
- Q(st, at):同樣表示Q函數(shù)的值,但在這里,它與策略結(jié)合來形成一個調(diào)整后的策略分布。
這兩個子圖展示了如何從Q函數(shù)構(gòu)建一個隨機策略,這個策略不僅考慮最大化回報,還鼓勵策略的多樣性(探索)。在圖3a中,我們只看到了策略的原始形態(tài),而在圖3b中,我們看到了這個策略如何通過與Q函數(shù)結(jié)合來調(diào)整,以包含探索性。
在SAC算法中,這種通過最大化熵來鼓勵探索的策略非常重要,有助于避免局部最優(yōu)解并找到更魯棒的長期解決方案。
通過這種方式,SAC能夠在學(xué)習(xí)過程中平衡探索和利用,提高智能體在復(fù)雜環(huán)境中的表現(xiàn)。
軟性選擇
在某些環(huán)境中,可能存在多種不同的策略都能獲得高回報,這導(dǎo)致 動作價值 Q 函數(shù) 變得多模態(tài)(即有多個高值峰)。
傳統(tǒng)的強化學(xué)習(xí)算法可能只能收斂到其中一個模態(tài),也就是一個局部最優(yōu)解,而忽略了其他可能同樣好或者更好的策略。
為了解決這個問題,可以使用一種稱為基于能量的策略來讓策略更好地適應(yīng)Q函數(shù)的多模態(tài)特性。
基于能量的策略通常采用玻爾茲曼分布的形式,這是一個概率分布,它根據(jù)能量函數(shù)給出了各個狀態(tài)的概率。
玻爾茲曼分布(x軸是能量大小):
讓策略收斂到 Q 函數(shù) 的玻爾茲曼分布形式,這個形式的分布就可以擬合上圖的多個解。
玻爾茲曼分布可以用來選擇動作,其中動作的選擇概率與其Q值的指數(shù)成正比,公式如下:
- [ π ( a ∣ s ) = exp ? ( Q ( s , a ) / τ ) ∑ b exp ? ( Q ( s , b ) / τ ) ] [ \pi(a|s) = \frac{\exp(Q(s,a)/\tau)}{\sum_\exp(Q(s,b)/\tau)} ] [π(a∣s)=∑b?exp(Q(s,b)/τ)exp(Q(s,a)/τ)?]
這里的 τ \tau τ 稱為溫度參數(shù),它控制了策略的探索程度。
-
當 τ \tau τ 較大時,策略傾向于探索
-
當 τ \tau τ 較小時,策略傾向于利用
這種基于玻爾茲曼分布的策略平衡了探索和利用,有助于智能體在復(fù)雜環(huán)境中找到長期有效的解決方案。
理論上,當智能體的學(xué)習(xí)收斂時,它的策略會反映出Q函數(shù)的結(jié)構(gòu),優(yōu)先選擇預(yù)期回報高的動作,同時保持對其他可能性的探索,這樣做可以避免局部最優(yōu)解,并適應(yīng)環(huán)境的變化。
模型結(jié)構(gòu)
V網(wǎng)絡(luò)(Value Network)
- 輸入嵌入層(Input Embedder):對輸入的觀察數(shù)據(jù)進行預(yù)處理。
- 中間件(Middleware):通常是一系列的全連接層或其他類型的網(wǎng)絡(luò)層,用于提取特征。
- 輸出層(Dense):輸出狀態(tài)值(State Value),它代表了在給定狀態(tài)下,遵循當前策略所能獲得的預(yù)期回報。
策略網(wǎng)絡(luò)(Policy Network)
- 輸入嵌入層(Input Embedder):與V網(wǎng)絡(luò)相同,對輸入進行預(yù)處理。
- 中間件(Middleware):提取特征。
- 策略均值輸出層(Dense, Policy Mean):預(yù)測給定狀態(tài)下每個動作的均值。
- 策略標準差輸出層(Dense, Log Policy Std):預(yù)測動作的對數(shù)標準差,通常會通過指數(shù)函數(shù)(Exponentiate)進行處理以確保標準差是正的。
- SAC頭(SAC Head):結(jié)合均值和標準差定義了一個高斯分布,并從中采樣動作(Sampled Actions)作為策略輸出。
Q網(wǎng)絡(luò)(Q Networks)
- 輸入嵌入層(Input Embedder):分別對狀態(tài)和動作進行預(yù)處理。
- 中間件(Middleware):提取特征。
- 輸出層(Dense):存在兩個Q網(wǎng)絡(luò),每個都輸出一個狀態(tài)-動作對的價值(State Action Value 1 & 2),這是為了減少估計偏差并提高穩(wěn)定性。
這種結(jié)構(gòu)允許SAC在做出決策時考慮到策略的多樣性,并通過兩個Q網(wǎng)絡(luò)來減少值函數(shù)的過估計。
整個架構(gòu)的目的是訓(xùn)練一個智能體,使其能在復(fù)雜環(huán)境中作出決策,同時通過熵正則化來鼓勵探索未知的行為。
目標函數(shù)
Q網(wǎng)絡(luò)更新?lián)p失函數(shù):
L Q ( ? ) = E ( s i , q i , r i , s i + 1 ) ~ D , a i + 1 ~ π θ ( ? ∣ s i + 1 ) [ 1 2 ( Q ? ( s i , a i ) ? ( r i + γ ( min ? j = 1 , 2 Q ? ˙ j ( s t + 1 , a t + 1 ) ? α log ? π ( a t + 1 ∣ s t + 1 ) ? Entropy Iterm ) 2 ] L_Q(\phi)=\mathbb{E}_{(s_i,q_i,r_i,s_{i+1})\sim\mathcal{D},a_{i+1}\sim\pi_{\theta}(\cdot|s_{i+1})}\left[\frac{1}{2}\left(Q_{\phi}(s_i,a_i)-(r_i+\gamma(\min_{j=1,2}Q_{\dot{\phi}_j}(s_{t+1},a_{t+1})\overbrace{-\alpha\log\pi(a_{t+1}|s_{t+1})}^{\textbf{Entropy Iterm}} \right ) ^ 2 \right ] LQ?(?)=E(si?,qi?,ri?,si+1?)~D,ai+1?~πθ?(?∣si+1?)? ?21? ?Q??(si?,ai?)?(ri?+γ(minj=1,2?Q?˙?j??(st+1?,at+1?)?αlogπ(at+1?∣st+1?) ?Entropy?Iterm? ?2 ?
- L Q ( ? ) L_Q(\phi) LQ?(?): 這是Q函數(shù)的損失函數(shù),用來訓(xùn)練Q網(wǎng)絡(luò)的參數(shù) ? \phi ?。
- E ( s i , a i , r i , s i + 1 ) ~ D \mathbb{E}_{(s_i, a_i, r_i, s_{i+1}) \sim \mathcal{D}} E(si?,ai?,ri?,si+1?)~D?: 這個期望表示對經(jīng)驗回放緩沖區(qū) D \mathcal{D} D中的樣本進行平均,包括狀態(tài) s i s_i si?、動作 a i a_i ai?、獎勵 r i r_i ri?和下一個狀態(tài) s i + 1 s_{i+1} si+1?。
- a i + 1 ~ π θ ( ? ∣ s i + 1 ) a_{i+1} \sim \pi_{\theta}(\cdot|s_{i+1}) ai+1?~πθ?(?∣si+1?): 表示根據(jù)當前策略 π θ \pi_{\theta} πθ?選擇下一個動作 a i + 1 a_{i+1} ai+1?。
- Q ? ( s i , a i ) Q_{\phi}(s_i, a_i) Q??(si?,ai?): Q網(wǎng)絡(luò)使用參數(shù) ? \phi ?來估計在狀態(tài) s i s_i si?下采取動作 a i a_i ai?的價值。
- r i + γ ( min ? j = 1 , 2 Q ? ˙ j ( s i + 1 , a i + 1 ) ? α log ? π ( a i + 1 ∣ s i + 1 ) ) r_i + \gamma (\min_{j=1,2}Q_{\dot{\phi}_j}(s_{i+1}, a_{i+1}) - \alpha \log \pi(a_{i+1}|s_{i+1})) ri?+γ(minj=1,2?Q?˙?j??(si+1?,ai+1?)?αlogπ(ai+1?∣si+1?)): 這部分計算目標Q值,包括立即獎勵 r i r_i ri?加上對下一個狀態(tài)-動作對的Q值的折現(xiàn)(考慮兩個Q網(wǎng)絡(luò)中較小的那個),再減去與策略熵相關(guān)的項,其中 γ \gamma γ是折現(xiàn)因子, α \alpha α是熵正則化的權(quán)重。
- α log ? π ( a i + 1 ∣ s i + 1 ) \alpha \log \pi(a_{i+1}|s_{i+1}) αlogπ(ai+1?∣si+1?): 這是熵正則化項, α \alpha α表示其權(quán)重。熵項鼓勵策略進行探索,防止過早收斂到局部最優(yōu)策略。
公式的原意:
- Q函數(shù)部分:不僅基于當前能得到多少分數(shù)來建議你的動作,而且還會考慮到未來可能得到的分數(shù)
- 最大熵部分:讓游戲更有趣、多樣性(探索),這種考慮未來的方式稱為折現(xiàn),意味著未來的分數(shù)在今天看來不那么值錢。
策略網(wǎng)絡(luò)更新?lián)p失函數(shù):
L π ( θ ) = E s t ~ D , a t ~ π θ [ α log ? ( π θ ( a t ∣ s t ) ) ? Q ? ( s t , a t ) ] L_{\pi}(\theta)=\mathbb{E}_{s_{t}\sim\mathcal{D},a_{t}\sim\pi_{\theta}}[\alpha\log(\pi_{\theta}(a_{t}|s_{t}))-Q_{\phi}(s_{t},a_{t})] Lπ?(θ)=Est?~D,at?~πθ??[αlog(πθ?(at?∣st?))?Q??(st?,at?)]
- L π ( θ ) L_{\pi}(\theta) Lπ?(θ): 這是策略網(wǎng)絡(luò)的損失函數(shù),用于更新策略網(wǎng)絡(luò)的參數(shù) θ \theta θ。
- E s t ~ D , a t ~ π θ \mathbb{E}_{s_t \sim \mathcal{D}, a_t \sim \pi_{\theta}} Est?~D,at?~πθ??: 這表示對經(jīng)驗回放緩沖區(qū) D \mathcal{D} D中的狀態(tài)s_t以及根據(jù)當前策略 π θ \pi_{\theta} πθ?采取的動作 a t a_t at?進行平均。
- α log ? ( π θ ( a t ∣ s t ) ) \alpha \log(\pi_{\theta}(a_t|s_t)) αlog(πθ?(at?∣st?)): 這是策略熵的加權(quán)值, α \alpha α是熵的權(quán)重系數(shù)。這個熵項鼓勵策略多樣性,即鼓勵策略產(chǎn)生更隨機的動作。
- Q ? ( s t , a t ) Q_{\phi}(s_t, a_t) Q??(st?,at?): 這是Q網(wǎng)絡(luò)評估在狀態(tài)s_t下采取動作 a t a_t at?的價值。
上面提到的兩個公式共同工作以優(yōu)化智能體的行為,但各自負責(zé)不同的部分:
-
Q函數(shù)的損失函數(shù) L Q ( ? ) L_Q(\phi) LQ?(?):
- 負責(zé)更新Q網(wǎng)絡(luò),即學(xué)習(xí)評估在給定狀態(tài)和動作下預(yù)期回報的函數(shù)。
- 通過比較實際的回報(包括立即獎勵和折現(xiàn)后的未來獎勵)和Q網(wǎng)絡(luò)的預(yù)測來調(diào)整網(wǎng)絡(luò),以準確估計每個動作的價值。
- 該過程涉及考慮策略的熵(探索性),確保智能體在追求高回報的同時,也會考慮到策略的多樣性。
-
策略網(wǎng)絡(luò)的損失函數(shù) L π ( θ ) L_{\pi}(\theta) Lπ?(θ):
- 負責(zé)優(yōu)化策略網(wǎng)絡(luò),即決定智能體在每個狀態(tài)下應(yīng)采取的最佳動作。
- 強調(diào)在保持行動的高熵(即多樣性和探索性)的同時,選擇預(yù)期回報最大化的動作。
- 策略網(wǎng)絡(luò)通過最小化該損失函數(shù)來學(xué)習(xí)如何在探索和利用之間取得平衡。
L Q ( ? ) L_Q(\phi) LQ?(?)確保了對動作價值的準確估計,而 L π ( θ ) L_{\pi}(\theta) Lπ?(θ)使智能體能夠在探索多樣動作的同時做出回報最大化的決策。兩者共同作用使得智能體在復(fù)雜環(huán)境中能有效地學(xué)習(xí)和適應(yīng)。
重參數(shù)化
熵正則化
代碼實現(xiàn)
論文作者:https://github.com/rail-berkeley/softlearning
OpenAI:https://github.com/openai/spinningup
?