您的位置:首頁>正文

一文簡述多種強化學習演算法,重要概念和術語一覽

本文簡要介紹了強化學習及其重要概念和術語, 並著重介紹了 Q-Learning 演算法、SARSA、DQN 和 DDPG 演算法。

強化學習(RL)指的是一種機器學習方法, 其中智慧體在下一個時間步中收到延遲的獎勵(對前一步動作的評估)。

這種方法主要用於雅達利(Atari)、馬里奧(Mario)等遊戲中, 表現與人類相當, 甚至超過人類。 最近, 隨著與神經網路的結合, 這種演算法不斷發展, 已經能夠解決更複雜的任務, 比如鐘擺問題。

雖然已經有大量的強化學習演算法, 但似乎並沒有什麼文章對它們進行全面比較。 每次需要決定將哪些演算法應用於特定的任務時, 都讓我很糾結。 本文旨在通過簡要討論強化學習的設置來解決這個問題, 並簡要介紹一些眾所周知的演算法。

1. 強化學習入門

通常, 強化學習的設置由兩部分組成, 一個是智慧體(agent), 另一個是環境(environment)。

強化學習圖示

環境指的是智慧體執行動作時所處的場景(例如雅達利遊戲中的遊戲本身), 而智能體則表示強化學習演算法。 環境首先向智慧體發送一個狀態, 然後智慧體基於其知識採取動作來回應該狀態。 之後, 環境發送下一個狀態, 並把獎勵返回給智慧體。 智慧體用環境所返回的獎勵來更新其知識,

對上一個動作進行評估。 這個迴圈一直持續, 直到環境發送終止狀態來結束這個事件。

大多數強化學習演算法遵循這一模式。 下面我將簡要介紹強化學習中的一些術語, 以方便下一節的討論。

定義

1. 動作(A):智慧體可以採取的所有可能的行動。

2. 狀態(S):環境返回的當前情況。

3. 獎勵(R):環境的即時返回值, 以評估智慧體的上一個動作。

4. 策略(π):智慧體根據當前狀態決定下一步動作的策略。

5. 價值(V):折扣(discount)下的長期期望返回, 與 R 代表的短期返回相區分。 Vπ(s) 則被定義為策略 π 下當前狀態**s**的期望長期返回值。

6. Q 值或行動值 (Q):Q 值與價值相似, 不同點在於它還多一個參數, 也就是當前動作 a。 Qπ(s, a) 指當前狀態**s**在策略π下採取動作 a 的長期回報。

無模型(Model-free)vs. 基於模型(Model-based)

這裡的模型指的是環境的動態類比, 即模型學習從當前狀態 s0 和動作 a 到下一個狀態 s1 的轉移概率 T(s1|(s0, a))。 如果成功地學習了轉移概率, 那麼智慧體將知道給定當前狀態和動作時, 進入特定狀態的可能性。 然而, 當狀態空間和動作空間增長(S×S×A, 用於表格設置)時, 基於模型的演算法就變得不切實際了。

另一方面, 無模型演算法依賴試錯來更新知識。 因此, 它不需要空間來存儲所有狀態和動作的組合。 下一節討論的所有演算法都屬於這一類。

在策略(on-policy)vs. 離策略(off-policy)

在策略智慧體基於當前動作 a 學習價值, 而離策略智慧體基於局部最優的貪心行為(greedy action)a* 學習價值。 (我們將在 Q-Learning 和 SARSA 演算法部分進一步討論這個問題)

2. 各種演算法的說明

2.1 Q-learning 演算法

Q-Learning 是基於貝爾曼方程(Bellman Equation)的離策略、無模型強化學習演算法:

貝爾曼方程

其中, E 代表期望, ƛ 是折扣因數(discount factor)。 我們可以將它重寫成 Q 值的形式:

Q 值形式的貝爾曼方程

最優的 Q 值 Q*, 可以表示為:

最優 Q 值

目標是最大化 Q 值。 在深入探討優化 Q 值的方法之前, 我想討論兩個與 Q-learning 密切相關的值更新方法。

策略反覆運算法

策略反覆運算法交替使用策略評估和策略改進。

策略反覆運算法

策略評估會評估從上次策略改進中獲得的貪心策略的價值函數 V。另一方面,策略改進通過使每個狀態的 V 值最大化的動作來更新策略。更新方程以貝爾曼方程為基礎。它不斷反覆運算直到收斂。

策略反覆運算的偽代碼

價值反覆運算

價值反覆運算只包含一個部分。它基於最優貝爾曼方程來更新值函數 V。

最優貝爾曼方程

價值反覆運算的偽代碼

在反覆運算收斂之後,通過對所有狀態應用最大值函數直接匯出最優策略。

注意,這兩種方法都需要知道轉移概率 p,這表明它是一個基於模型的演算法。但是,正如我前面提到的,基於模型的演算法存在可擴展性問題。那麼 Q-learning 如何解決這個問題呢?

Q-Learning 更新方程

α 指學習速率(即我們接近目標的速度)。Q-learning 背後的思想高度依賴於價值反覆運算。然而,更新方程被上述公式所取代。因此,我們不再需要擔心轉移概率。

Q-learning 的偽代碼

注意,下一個動作 a』 的選擇標準是要能夠最大化下一個狀態的 Q 值,而不是遵循當前的策略。因此,Q-Learning 屬於離策略演算法。

2.2 狀態-動作-獎勵-狀態-動作(State-Action-Reward-State-Action,SARSA)

SARSA 很像 Q-learning。SARSA 和 Q-learning 之間的關鍵區別是 SARSA 是一種在策略演算法。這意味著 SARSA 根據當前策略執行的動作而不是貪心策略來學習 Q 值。

SARSA 的更新方程

動作 a_(t+1) 是在當前策略下的下一個狀態 s_(t+1) 執行的動作。

SARSA 的偽代碼

從上面的偽代碼中,你可能會注意到執行了兩個動作選擇,它們始終遵循當前策略。相比之下,Q-learning 對下一個動作沒有約束,只要它能最大化下一個狀態的 Q 值就行了。因此,SARSA 是一種在策略演算法。

2.3 深度 Q 網路(Deep Q Network,DQN)

Q-learning 是一種非常強大的演算法,但它的主要缺點是缺乏通用性。如果你將 Q-learning 理解為在二維陣列(動作空間×狀態空間)中更新數位,那麼它實際上類似於動態規劃。這表明 Q-learning 智慧體不知道要對未見過的狀態採取什麼動作。換句話說,Q-learning 智慧體沒有能力對未見過的狀態進行估值。為了解決這個問題,DQN 引入神經網路來擺脫二維陣列。

DQN 利用神經網路來估計 Q 值函數。網路的輸入是當前的動作,而輸出是每個動作對應的 Q 值。

用 DQN 玩雅達利遊戲

2013 年,DeepMind 將 DQN 應用于雅達利遊戲,如上圖所示。輸入是當前遊戲場景的原始圖像,經過包括卷積層和全連接層的多個層,輸出智慧體可執行的每個動作的 Q 值。

問題歸結為:我們如何訓練網路?

答案是基於 Q-learning 更新方程來訓練網路。回想一下 Q-learning 的目標 Q 值是:

目標 Q 值

ϕ 相當於狀態 s, 代表神經網路裡的參數。因此,網路的損失函數可定義為目標 Q 值與網路 Q 值輸出之間的平方誤差。

DQN 的偽代碼

另外兩種技術對於訓練 DQN 也很重要:

1. 經驗重播(Experience Replay):由於典型強化學習設置中的訓練樣本高度相關,且資料效率較低,這將導致網路更難收斂。解決樣本分佈問題的一種方法是採用經驗重播。從本質上講,樣本轉換會被存儲,然後從「轉換池」中隨機選擇該轉換來更新知識。

2. 分離目標網路(Separate Target Network):目標 Q 網路與用來估值的網路結構相同。根據上面的偽代碼,在每個 C 步驟,目標網路都被重置為另一個。因此,波動變得不那麼嚴重,帶來了更穩定的訓練。

2.4 深度確定性策略梯度(Deep Deterministic Policy Gradient,DDPG)

雖然 DQN 在高維問題上取得了巨大的成功,例如雅達利遊戲,但動作空間仍然是離散的。然而,許多有趣的任務,特別是物理控制任務,動作空間是連續的。而如果你把動作空間分離得太細來趨近連續空間,你的動作空間就太大了。例如,假設自由隨機系統的自由度為 10。對於每一個自由度,你把空間分成 4 個部分,你最終就會有有 4¹⁰= 1,048,576 個動作。對於這麼大的動作空間來說,收斂也是極其困難的。

DDPG 依賴於「行動者-評論家」(actor-critic)架構。行動者用來調整策略函數的參數,即決定特定狀態下的最佳動作。

策略函數

而評論家用於根據時間差分(temporal difference,TD)誤差來評估行動者估計出來的策略函數。

時間差分誤差

在這裡,小寫的 v 表示行動者已經確定的策略。看起來很熟悉對嗎?看著像 Q-learning 的更新方程!TD 學習是一種學習如何根據給定狀態的未來值來預測價值的方法。Q-learning 是 TD 學習的一種特殊類型,用於學習 Q 值。

「行動者-評論家」架構

DDPG 還從 DQN 借鑒了經驗重播和分離目標網路的思想。DDPG 的另一個問題是它很少對動作進行探索。一個解決方案是在參數空間或動作空間中添加雜訊。

動作雜訊(左),參數雜訊(右)

OpenAI 這篇博客認為在參數空間上添加雜訊比在動作空間上添加要好得多。一個常用的雜訊是 Ornstein-Uhlenbeck 隨機過程。

DDPG 的偽代碼

策略反覆運算法

策略評估會評估從上次策略改進中獲得的貪心策略的價值函數 V。另一方面,策略改進通過使每個狀態的 V 值最大化的動作來更新策略。更新方程以貝爾曼方程為基礎。它不斷反覆運算直到收斂。

策略反覆運算的偽代碼

價值反覆運算

價值反覆運算只包含一個部分。它基於最優貝爾曼方程來更新值函數 V。

最優貝爾曼方程

價值反覆運算的偽代碼

在反覆運算收斂之後,通過對所有狀態應用最大值函數直接匯出最優策略。

注意,這兩種方法都需要知道轉移概率 p,這表明它是一個基於模型的演算法。但是,正如我前面提到的,基於模型的演算法存在可擴展性問題。那麼 Q-learning 如何解決這個問題呢?

Q-Learning 更新方程

α 指學習速率(即我們接近目標的速度)。Q-learning 背後的思想高度依賴於價值反覆運算。然而,更新方程被上述公式所取代。因此,我們不再需要擔心轉移概率。

Q-learning 的偽代碼

注意,下一個動作 a』 的選擇標準是要能夠最大化下一個狀態的 Q 值,而不是遵循當前的策略。因此,Q-Learning 屬於離策略演算法。

2.2 狀態-動作-獎勵-狀態-動作(State-Action-Reward-State-Action,SARSA)

SARSA 很像 Q-learning。SARSA 和 Q-learning 之間的關鍵區別是 SARSA 是一種在策略演算法。這意味著 SARSA 根據當前策略執行的動作而不是貪心策略來學習 Q 值。

SARSA 的更新方程

動作 a_(t+1) 是在當前策略下的下一個狀態 s_(t+1) 執行的動作。

SARSA 的偽代碼

從上面的偽代碼中,你可能會注意到執行了兩個動作選擇,它們始終遵循當前策略。相比之下,Q-learning 對下一個動作沒有約束,只要它能最大化下一個狀態的 Q 值就行了。因此,SARSA 是一種在策略演算法。

2.3 深度 Q 網路(Deep Q Network,DQN)

Q-learning 是一種非常強大的演算法,但它的主要缺點是缺乏通用性。如果你將 Q-learning 理解為在二維陣列(動作空間×狀態空間)中更新數位,那麼它實際上類似於動態規劃。這表明 Q-learning 智慧體不知道要對未見過的狀態採取什麼動作。換句話說,Q-learning 智慧體沒有能力對未見過的狀態進行估值。為了解決這個問題,DQN 引入神經網路來擺脫二維陣列。

DQN 利用神經網路來估計 Q 值函數。網路的輸入是當前的動作,而輸出是每個動作對應的 Q 值。

用 DQN 玩雅達利遊戲

2013 年,DeepMind 將 DQN 應用于雅達利遊戲,如上圖所示。輸入是當前遊戲場景的原始圖像,經過包括卷積層和全連接層的多個層,輸出智慧體可執行的每個動作的 Q 值。

問題歸結為:我們如何訓練網路?

答案是基於 Q-learning 更新方程來訓練網路。回想一下 Q-learning 的目標 Q 值是:

目標 Q 值

ϕ 相當於狀態 s, 代表神經網路裡的參數。因此,網路的損失函數可定義為目標 Q 值與網路 Q 值輸出之間的平方誤差。

DQN 的偽代碼

另外兩種技術對於訓練 DQN 也很重要:

1. 經驗重播(Experience Replay):由於典型強化學習設置中的訓練樣本高度相關,且資料效率較低,這將導致網路更難收斂。解決樣本分佈問題的一種方法是採用經驗重播。從本質上講,樣本轉換會被存儲,然後從「轉換池」中隨機選擇該轉換來更新知識。

2. 分離目標網路(Separate Target Network):目標 Q 網路與用來估值的網路結構相同。根據上面的偽代碼,在每個 C 步驟,目標網路都被重置為另一個。因此,波動變得不那麼嚴重,帶來了更穩定的訓練。

2.4 深度確定性策略梯度(Deep Deterministic Policy Gradient,DDPG)

雖然 DQN 在高維問題上取得了巨大的成功,例如雅達利遊戲,但動作空間仍然是離散的。然而,許多有趣的任務,特別是物理控制任務,動作空間是連續的。而如果你把動作空間分離得太細來趨近連續空間,你的動作空間就太大了。例如,假設自由隨機系統的自由度為 10。對於每一個自由度,你把空間分成 4 個部分,你最終就會有有 4¹⁰= 1,048,576 個動作。對於這麼大的動作空間來說,收斂也是極其困難的。

DDPG 依賴於「行動者-評論家」(actor-critic)架構。行動者用來調整策略函數的參數,即決定特定狀態下的最佳動作。

策略函數

而評論家用於根據時間差分(temporal difference,TD)誤差來評估行動者估計出來的策略函數。

時間差分誤差

在這裡,小寫的 v 表示行動者已經確定的策略。看起來很熟悉對嗎?看著像 Q-learning 的更新方程!TD 學習是一種學習如何根據給定狀態的未來值來預測價值的方法。Q-learning 是 TD 學習的一種特殊類型,用於學習 Q 值。

「行動者-評論家」架構

DDPG 還從 DQN 借鑒了經驗重播和分離目標網路的思想。DDPG 的另一個問題是它很少對動作進行探索。一個解決方案是在參數空間或動作空間中添加雜訊。

動作雜訊(左),參數雜訊(右)

OpenAI 這篇博客認為在參數空間上添加雜訊比在動作空間上添加要好得多。一個常用的雜訊是 Ornstein-Uhlenbeck 隨機過程。

DDPG 的偽代碼

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示