跳轉到

Deep Q-learning(DQN)

Q-learning 是一種基於值的學習方法 (Value-Based Method),它關注的是學習狀態-行為的值,而非直接學習策略 (Policy)。 透過這種方法,模型不會直接決策,而是通過 Critic 來評估當前行為的好壞。首先,我們要先來談談什麼是 Critic。

Critic 的功能

  • Critic 的工作是評估一個已經存在的 Actor(即決策者)的表現,而不是直接採取行為。具體來說,Critic 會計算 State Value Function 𝑉𝜋(𝑠),該函數表示當前狀態 𝑠 下,Actor 𝜋 在這個狀態之後能夠累積多少預期獎勵。
  • Critic 的輸出是依賴於當前的 Actor,並會根據 Actor 與環境的互動來評估後續可以累積多少的獎勵。

Note

Critic 是與 Actor 綁定的,其主要功能是評估 Actor 的決策表現,但不會直接做出決策。Critic 的輸出結果反映了 Actor 在特定狀態下的預期表現。

舉個例子,在遊戲 Space Invader 中,當畫面上還有很多敵人時,Actor 有很多機會消滅敵人,獲得高分,這時候 Critic 的評價 𝑉𝜋(𝑠) 會很高。相反,如果敵人所剩不多,或遊戲狀況不利,Critic 的評價值會較低,因為接下來獲得獎勵的機會有限。Critic 的評價依賴於當前的 Actor,如果 Actor 很弱,即便是相同的狀態,累積的獎勵也會較低。這強調了 Critic 的輸出不僅依賴於狀態,還取決於 Actor 的表現,兩者是密切相關的。

[State value function] 如何估計狀態價值函數?

在估計狀態價值函數 𝑉𝜋(𝑆)時,有兩種常見的方法:Monte-Carlo(MC)方法和時間差分(Temporal Difference, TD)方法。

蒙地卡羅方法 MC-Based

Monte-Carlo方法是一種直觀的做法,它的核心概念是讓Actor 𝜋 與環境互動,然後Critic觀察並統計從某一個狀態開始,直到整個遊戲結束後的累積回報。例如,當Actor 𝜋 在狀態 𝑆𝑎 時,累積的獎勵可能是 𝐺𝑎,在狀態 𝑆𝑏 時累積的獎勵可能是 𝐺𝑏。這樣,我們可以訓練一個網路來預測不同狀態下的累積獎勵值,這實際上就是一個迴歸問題,我們希望網路輸出與真實累積獎勵越接近越好。這種方法需要等到每一個遊戲回合結束後才能進行更新,因此在處理長遊戲回合時,可能會耗費大量時間。

簡單的例子來解釋 MC 方法

Monte Carlo 方法的例子

假設你正在玩一個桌上遊戲,每回合結束時可以獲得一個分數。我們要估計在每一回合的不同狀態下能夠得到的累積分數。Monte Carlo 方法的核心思想是:你要等到整個遊戲(回合)結束後,才能計算這回合的最終分數,然後將這個分數反映到所有經歷過的狀態中。

假設遊戲過程如下:
- 起點(State A) → 行動 → 中間狀態(State B) → 行動 → 終點(State C) - 這場遊戲的最終分數是 5 分

Monte Carlo 方法具體步驟:
1. 在 State A: - 你採取了某個行動,進入了 State B。 2. 在 State B: - 你採取了另一個行動,進入了 State C,並最終完成了這場遊戲。 3. 遊戲結束後,你知道這場遊戲最終獲得的分數是 5 分,這個就是累積的獎勵。

MC 如何計算價值:
- State A 的價值:因為你從 State A 開始,最終累積的獎勵是 5 分,所以 Monte Carlo 方法會將這 5 分作為 State A 的價值更新。 - State B 的價值:同理,雖然你是在 State B 過程中,但你同樣會將遊戲結束後的總獎勵 5 分更新到 State B

總結:

Monte Carlo 方法的特點在於遊戲結束後才進行更新,不管遊戲中間經歷了哪些狀態或採取了什麼行動,你在每一個狀態下所獲得的價值,都是根據這場遊戲的最終累積獎勵來進行更新的。

在這個例子中:

  • State AState B 都會更新為 5 分,因為整場遊戲的最終獎勵是 5 分

這種方法的優點是直觀且簡單,但缺點是必須等到遊戲結束才能更新,這對於那些遊戲回合非常長的情況可能不是很高效,這也是為什麼 Temporal Difference (TD) 方法會在這裡派上用場,因為 TD 不需要等遊戲結束就可以進行更新。

時間差分方法 TD-based

相對的,時間差分(TD)方法則不需要等待遊戲結束就可以進行更新。在這種方法中,當Actor 𝜋 在某個狀態 𝑆𝑡 行一個動作 𝐴𝑡 後,會立即獲得一個即時獎勵 𝑟𝑡,並轉移到下一個狀態 𝑆𝑡+1。根據這個轉移,我們可以直接根據當前狀態的價值和下一個狀態的價值來進行更新。具體來說,TD方法認為當前狀態 𝑆𝑡 的價值應該等於即時獎勵 𝑟𝑡 加上下一個狀態 𝑆𝑡+1 的價值。訓練時,網路會根據這種差異進行更新,並不需要等到整個遊戲結束。這使得TD方法能夠更快地進行更新,特別適合處理長期回合的遊戲。後續介紹的 Q-Learning 就會使用 TD 的方法。

在進行訓練時,我們並不是直接估算價值函數 𝑉,而是希望透過學習使其符合特定的關係式。具體來說,我們將當前狀態 𝑆𝑡 丟入網路中,得到 𝑉(𝑆𝑡),然後將下一個狀態 𝑆𝑡+1 也丟入網路,得到 𝑉(𝑆𝑡+1)。根據這個關係式, 𝑉(𝑆𝑡)−𝑉(𝑆𝑡+1) 應該等於當前步驟的獎勵 𝑅𝑡。因此,我們會設定一個損失函數,讓這兩者的差異(即 𝑉(𝑆𝑡)−𝑉(𝑆𝑡+1) 和 𝑅𝑡 的差距)越小越好。隨著這樣的訓練過程,我們可以逐步優化網路的參數,讓網路更準確地學習到這個價值函數 𝑉。

簡單的例子來解釋 TD 方法

假設我們在玩一個迷宮遊戲,每次我們做出一個動作(例如向前走一步),就會獲得即時獎勵 𝑟𝑡,這個獎勵可能是正的(我們走對了方向),也可能是負的(我們走錯了方向)。同時,我們會從一個狀態 𝑆𝑡 轉移到下一個狀態 𝑆𝑡+1。

TD 方法的核心思想是,當你在 𝑆𝑡 的時候,你可以估計該狀態的價值 𝑉𝜋(𝑆𝑡),但你不需要等到整個遊戲結束。你可以馬上利用你轉移到的下一個狀態 𝑆𝑡+1 的價值來更新當前狀態 𝑆𝑡 的估計值。

例如,當你從 𝑆𝑡 移動到 𝑆𝑡+1,你會得到一個即時獎勵 𝑟𝑡。這時,你可以說:𝑆𝑡 的價值應該是 𝑆𝑡+1 的價值加上你剛剛得到的獎勵 𝑟𝑡,這就是公式:

\[ V^{\pi}(S_t) = V^{\pi}(S_{t+1}) + r_t \]

換句話說,當前的狀態 𝑆𝑡 價值,應該是從 𝑆𝑡+1 繼續走下去的價值,加上你剛剛獲得的這個獎勵。這樣,我們可以不必等到遊戲結束就可以更新狀態的價值,並且根據每一次的轉移,逐步學習狀態的價值。

例如,假設你在迷宮的某一點 𝑆𝑡 做出一個決策後馬上向正確的方向前進並獲得了 𝑟𝑡=+10 的獎勵,而接下來的狀態 𝑆𝑡+1 又很接近出口,它的價值很高(假設 𝑉𝜋(𝑆𝑡+1)=50)。那麼,當前的狀態 𝑆𝑡 的價值就可以更新為:

𝑉𝜋(𝑆𝑡)=50+10=60

這樣你可以更快速地學到該狀態 𝑆𝑡 的價值,而不必等到遊戲結束。 TD 方法的好處在於它可以在遊戲過程中逐步更新價值估計,而不需要等到整個遊戲回合結束。

補充說明

當我們提到價值 𝑉𝜋(𝑆𝑡) 時,它考慮的是從 狀態 𝑆𝑡 開始,根據策略 𝜋 所能預期獲得的未來所有步驟的累積獎勵。

具體來說,這個累積獎勵包括從 𝑆𝑡 開始的 當前獎勵 𝑟𝑡,以及接下來從 𝑆𝑡+1、𝑆𝑡+2 等未來各個狀態所獲得的所有獎勵。也就是說,它不僅僅指下一個狀態 𝑆𝑡+1 的獎勵,而是 從 𝑆𝑡 開始到最終結束時的所有獎勵的期望值。

我們可以用這個公式來表達:

\[ V^\pi(S_t) = \mathbb{E}_\pi [ r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \cdots ] \]

這裡,𝑟𝑡 是當前的即時獎勵,𝛾 是折扣因子(通常小於 1),用來減少未來獎勵的影響。所以,價值 𝑉𝜋(𝑆𝑡) 是從當前狀態 𝑆𝑡 開始,依據策略 𝜋 所能預期獲得的所有未來獎勵的加權和。

實際上,公式 γrt+1+γ2rt+2+⋯ 可以等同於 𝑉𝜋(𝑆𝑡+1) ,因為它代表的是從狀態 𝑆𝑡+1 開始,未來所有步驟的累積折扣獎勵。因此,我們可以將未來的累積獎勵這部分總結為:

\[ V^{\pi}(S_t) = r_t + \gamma V^{\pi}(S_{t+1}) \]

這裡,𝑟 𝑡是在當前狀態 𝑆𝑡 獲得的即時獎勵,而 𝑉𝜋(𝑆𝑡+1) 是從狀態 𝑆𝑡+1 開始,根據策略 𝜋 所能預期獲得的累積獎勵(包括從 𝑆𝑡+1 開始的即時獎勵及其後續獎勵)。這個關係式揭示了 Temporal-Difference (TD) 的核心概念,即我們可以通過當前獎勵 𝑟𝑡 和下一個狀態的價值 𝑉𝜋(𝑆𝑡+1) 來估算當前狀態 𝑆𝑡 的價值 𝑉𝜋(𝑆𝑡)。

比較 MC 和 TD 差異

MC 和 TD 各有優劣。MC 方法直覺簡單,基於整場遊戲的累積獎勵來更新,但其變異性較大,且需要完整的遊戲回合數據。TD 方法則是基於當前步驟的獎勵和下一步的估計來更新,變異性較小且能即時更新,但可能會有偏差。TD 通常在較長、較複雜的情境中更有效率,而 MC 則適合簡單、回合較短的問題。

比較項目 Monte Carlo (MC) Temporal Difference (TD)
更新時間 需要等到遊戲結束後,才能累積更新值 可以在每一步更新
數據利用率 只在遊戲結束時利用全部數據 可以在每次狀態轉移後立即更新
Variance (變異性) 變異性較大,因為累積了整場遊戲的隨機變量,結果可能波動大 變異較小,因為每一步的更新只依賴於當前觀察到的獎勵
Bias (偏差) 偏差較小,因為使用最終的累積獎勵,較能反映真實值 可能會有較大的偏差,因為依賴於未來的估計值,而非最終結果
需求的經驗 需要完整的遊戲回合數據,無法即時更新 可以逐步學習,即時更新,無需整個遊戲回合
收斂速度 通常較慢,因為需要等待整個回合結束才能更新 通常較快,因為每步驟都會更新
適用情境 適合情境簡單、遊戲長度較短的問題 適合情境較為複雜、遊戲長度較長的問題

MC 和 TD 各有優劣。MC 方法直覺簡單,基於整場遊戲的累積獎勵來更新,但其變異性較大,且需要完整的遊戲回合數據。TD 方法則是基於當前步驟的獎勵和下一步的估計來更新,變異性較小且能即時更新,但可能會有偏差。TD 通常在較長、較複雜的情境中更有效率,而 MC 則適合簡單、回合較短的問題。

Note

MC方法更適合完整回合的回報計算,而TD方法則更具即時性和效率。兩者的選擇依賴於應用場景和遊戲的長度。

從以下例子可以發現,即便是用相同的資料集,MC、TD兩種方法所估測出來的結果是不一樣的。例子中有 8 個 episode,每個 episode 包含兩個狀態 𝑠𝑎 和 𝑠𝑏,以及相應的獎勵 𝑟。

  1. MC 方法

    Monte Carlo 方法在計算 \(V^\pi(s_a)\) 的時候,使用完整 episode 的最終累積獎勵。由於狀態 \(s_a\) 在每次的 episode 結束時都得到的累積獎勵是 0,因此 Monte Carlo 給出的 \(V^\pi(s_a)\) 是 0。

  2. TD 方法

    Temporal Difference 方法則更靈活,利用當前的獎勵和下一個狀態的估計來更新價值函數。根據投影片中的例子,狀態 \(s_b\) 的價值已經被計算為 3/4,因此 TD 使用這個值來計算 \(V^\pi(s_a)\),即 \(V^\pi(s_a) = V^\pi(s_b) + r = 3/4 + 0 = 3/4\)

[State-action value function] Q-function

接下來我們要介紹另一種 Critic,稱為 Q-function,也叫做 State-action value function。在我們之前討論的 State value function 中,輸入僅為一個狀態(state),根據該狀態預測從該點開始的累積獎勵期望值(expected cumulative reward)。然而,在 Q-function 中,輸入變成了一對 State 和 Action(狀態與行動的組合),目的是估計在某個狀態 \( s \) 下,強制執行某個行動 \( a \),然後讓 Actor \( \pi \) 繼續操作下去後,最終能獲得的累積獎勵的期望值。

需要注意的是,Q-function 假設我們在狀態 \( s \) 下強制執行某個行為 \( a \),不管 Actor \( \pi \) 自己會不會選擇這個行為。在狀態 \( s \) 下,我們強制執行行為 \( a \),之後讓 Actor \( \pi \) 繼續操作至遊戲結束,這樣得到的累積獎勵才是我們所定義的 Q-value。舉例來說,如果 Actor \( \pi \) 在狀態 \( s \) 下通常不會選擇行動 \( a \),但我們強制讓它執行 \( a \),之後再讓 Actor 自動運行,這樣才能得到對應的 Q-value

Q-function 有兩種常見的表示方式:

  1. State-action pair 作為輸入:輸入是狀態 \( s \) 和行為 \( a \) 的組合,輸出是一個標量(scalar),代表在該狀態下執行該行為後所能期望的累積獎勵。

  2. 僅 State 作為輸入:如果行為(action)是離散的,輸入可以僅為狀態 \( s \),而輸出會是對應每個可能行為的 Q 值。例如,假設有三個可能的行為「向左」、「向右」和「開火」,則 Q-function 的輸出會是三個對應這些行為的 Q-value,即 \( Q^{\pi}(s, \text{left}) \)\( Q^{\pi}(s, \text{right}) \)\( Q^{\pi}(s, \text{fire}) \)

Note

這種 Q-function 的第二種表示方式僅適用於 離散行為空間(discrete action space)。如果行為是連續的或無法窮舉,則必須使用第一種方法,將 State 和 Action 直接作為輸入,而不是僅使用狀態。

以下範例使用了一個桌球遊戲的範例來說明 State-Action Value Function(狀態-行動價值函數)的概念。投影片展示了不同時間點的遊戲畫面,以及對應的行動價值(Q 值)分佈,這些 Q 值代表在某個狀態下執行某個行為後,所預期的累積獎勵。

1. 第一張圖:在這個時間點,無論選擇「不動」(NO-OP)、「上移」(UP) 或「下移」(DOWN) 行動,預期得到的獎勵都差不多,因為球還沒有靠近需要擊球的位置,因此三個行動的 Q 值接近,沒有明顯的優勢。

2. 第二張圖:球已經往上彈起,這時候如果選擇「上移」,預期的獎勵會更高,這個行為能夠增加成功接球的機會。因此,「上移」的 Q 值高於其他行動,表示這是此時最優的行為選擇。

3. 第三張圖:這個場景與第二張圖類似,球仍在往上移動。如果不選擇「上移」的行為,將無法接到球,導致失去獎勵。因此,「上移」的 Q 值仍然是最高的,強烈建議在此時執行「上移」。

4. 第四張圖:球已經彈回來且遊戲勝利了。在這個狀態下,無論選擇哪一個行動,對遊戲結束的結果沒有太大影響。因此,不同行動的 Q 值差異不大,表示此時任何行動都不會改變結果。

大家應該知道,Deep Reinforcement Learning 最早受到廣泛注意的,是 DeepMind 發表在 Nature 上的一篇經典論文1。在這篇論文中,提出了DQN (Deep Q-Network) 的方法,展示了 AI 如何通過這種技術玩 Atari 遊戲,並且在多個遊戲中大幅超越人類玩家。這張圖其實就是那篇論文中的一個示例,展示了 DQN 在 Atari 遊戲中的學習和決策過程,具體說明了 AI 在不同遊戲狀態下,根據累積獎勵進行的行動選擇,以及如何通過深度學習強化這些選擇,使其表現得更為優異。

基於 Q-function 的強化學習過程

在強化學習中,雖然表面上我們學習 Q-function 是為了評估某個行動 (action) 的好壞,但實際上,只要我們掌握了 Q-function,就能進行決策,完成強化學習的過程。

其主要流程如下:假設我們有一個初始的 actor 策略 π,這個策略一開始可能表現很差,甚至是隨機的,但這並不影響整體流程。我們讓這個策略 π 與環境互動,並蒐集數據(黃色區塊)。接著,我們學習該策略 π 的 Q-value,也就是該策略在某一狀態下 (state) 強制執行某一行動後,期望獲得的累積獎勵(綠色區塊)。我們可以使用 TD (Temporal Difference) 或 MC (Monte Carlo) 來進行這個學習。

學習出一個 Q-function 後,接下來的神奇之處在於:只要我們能學到策略 π 的 Q-function,就可以找到一個新的策略 π′。這個新的策略 π′ 一定會比原來的策略 π 更好,這裡的「更好」稍後會具體定義。重點是,透過學習 Q-function,保證可以持續找到更好的策略 π′(藍色區塊)

Note

在這個循環過程中,我們不斷更新策略:每找到一個更好的策略 π′,就用它來取代原本的策略 π,並根據新策略重新學習 Q-function,然後再找到一個比 π′ 更好的策略。如此循環下去,策略會不斷優化,直到最終獲得最佳的行動決策。

透過 Q 函數尋找更佳策略 𝜋′

當我們說到新策略 \( \pi' \) 一定會比舊策略 \( \pi \) 好時,這裡的「好」是指對所有可能的狀態 \( S \) 而言,新策略 \( \pi' \) 的價值函數 \( V^{\pi'}(S) \) 必定大於或等於舊策略 \( V^{\pi}(S) \)。也就是說,當我們在同一個狀態 \( S \) 下,若繼續使用舊策略 \( \pi \) 和環境互動,我們預期的回報(reward)一定會比使用新策略 \( \pi' \) 獲得的回報要低。因此,對於任何狀態下,使用 \( \pi' \) 互動的預期回報都會更高,這表示 \( \pi' \) 是一個比 \( \pi \) 更好的策略。

那麼如何找到這個新的策略 \( \pi' \) 呢?其實,概念非常簡單:只要我們已經學習到策略 \( \pi \) 的 Q 函數,接著可以通過選擇讓 Q 值最大的行為 \( a \) 來決定新策略 \( \pi' \) 在每個狀態下應該採取的行為。具體來說,在給定狀態 \( S \) 的情況下,我們將所有可能的行為 \( A \) 代入 Q 函數,找到使 Q 值最大的那個行為,這就是新策略 \( \pi' \) 會選擇的行為。

需要注意的是,Q 函數的定義是在給定狀態 \( S \) 並強制採取某個行為 \( a \) 之後,根據策略 \( \pi \) 與環境互動所得到的預期回報。因此,雖然 \( \pi \)\( \pi' \) 在同一狀態下可能選擇不同的行為,但 \( \pi' \) 通過 Q 函數選擇的行為總是能帶來更高的回報。

值得一提的是,\( \pi' \) 並不是由另一個網路單獨決定的,而是直接從 Q 函數推導出來的。只要我們有了 Q 函數,就能找到新策略 \( \pi' \) 而無需額外的策略網路。然而,當行為 \( A \) 是連續型時,解決 argmax 的問題會變得複雜,但這是後續需要解決的問題。在離散情況下,我們可以簡單地將所有選項一一帶入,選擇 Q 值最大的行為即可。

補充說明

上述介紹了如何通過 Q-Learning 的方式,在學習到 Q-function 後找到一個比當前策略更好的策略(actor)。主要有以下幾個重點:

1.學習新的策略:給定 Q-function \( Q^{\pi}(s, a) \),可以找到一個新的策略 \( \pi' \),這個策略 \( \pi' \) 必須比當前的策略 \( \pi \) 更好,也就是對所有狀態 \( s \) 來說,新的策略 \( V^{\pi'}(s) \) 必須大於或等於 \( V^{\pi}(s) \)

2. 策略更新公式:新的策略 \( \pi'(s) \) 可以通過選擇在當前狀態 \( s \) 下能夠最大化 Q-function 的 action 來決定,即:

\[ \pi'(s) = \text{arg max}_{a} Q^{\pi}(s, a) \]

這意味著,新策略是基於當前學到的 Q-function,選擇能夠獲得最大 Q 值的行為。

3. 策略簡單性:更新後的新策略 \( \pi' \) 不需要額外的參數,因為它完全依賴於 Q-function 的結果來進行選擇。

4. 連續動作的限制:這種方法目前只適用於離散的行為選擇,如果是連續動作的問題,這種方式則不適用,需要進一步解決。

以上強調了在給定 Q-function 後,如何通過選擇最大 Q 值的行為來不斷更新並提升策略的過程。

推導證明新策略𝜋′的價值高於原策略𝜋

這張投影片描述了通過 Q-learning 如何使用 Q-function 來不斷地改進策略,並且數學上證明了新的策略 \( \pi' \) 的價值會比原策略 \( \pi \) 更好。

1.策略更新:投影片首先指出了策略更新的方式:

\[ \pi'(s) = \arg \max_a Q^{\pi}(s, a) \]

這表示我們在當前狀態 \( s \) 中,選擇能夠使 Q 值最大的行為作為新策略 \( \pi' \)

2.策略比較:接下來說明了新策略 \( \pi' \) 將比舊策略 \( \pi \) 更好,因為:

\[ V^{\pi'}(s) \geq V^{\pi}(s), \quad \forall s \]

這表示新策略的價值函數 \( V^{\pi'}(s) \) 必然大於等於舊策略的價值 \( V^{\pi}(s) \)

3.價值函數與 Q 值的關係

\[ V^{\pi}(s) = Q^{\pi}(s, \pi(s)) \leq \max_a Q^{\pi}(s, a) = Q^{\pi}(s, \pi'(s)) \]

表示狀態 \( s \) 下的策略價值函數等於該策略選擇的行為對應的 Q 值,而新的策略 \( \pi'(s) \) 所對應的 Q 值必然不小於原策略的 Q 值。

4.價值函數的不等式遞推: 接下來,投影片展開了如何基於策略更新的不等式進行遞推,推導出:

\[ V^{\pi}(s) \leq Q^{\pi}(s, \pi'(s)) = E[r_{t+1} + V^{\pi}(s_{t+1}) | s_t = s, a_t = \pi'(s)] \]

並進一步遞推,將後續狀態的期望累積獎勵不斷展開,直到整個過程都被考慮進去。

結論:最終這個遞推的過程表明,新的策略 \( \pi' \) 必然會讓後續累積的獎勵不小於當前策略,因此保證了策略改進的過程是有效的。

Q-learning 的三個關鍵技巧

在進一步探討 Q-learning 的進階應用之前,我們將介紹三個關鍵技巧,這些技巧能有效提升模型的學習效果與穩定性。不僅幫助我們解決傳統 Q-learning 中的一些常見挑戰,還能進一步提升演算法的效能。接下來,我們將分別介紹:

1.固定目標網路(Fixing Target Network):用於提升學習的穩定性,避免在學習過程中目標值頻繁變動。

2.探索策略(Epsilon-Greedy 和 Boltzmann Exploration):提供更好的探索機制,在 exploitation 和 exploration 之間找到平衡。

3.回放緩衝區(Replay Buffer):用於提升訓練效率,並確保批次數據中的多樣性,避免數據相關性導致的過擬合。

Tip1: 固定目標網路(Fixing Target Network)

Q-learning 中,一個常用的技巧是引入 target network (目標網路)。這個概念的核心是基於 Temporal Difference (TD) 的更新方式。當我們在學習 Q-function 時,會使用 TD 的方法來估計 Q 值之間的關聯。具體來說,假設在狀態 \( s_t \) 採取了動作 \( a_t \),並得到了回報 \( r_t \),系統隨後進入了下一個狀態 \( s_{t+1} \)。根據 Q-function,我們可以預測 \( Q^\pi(s_t, a_t) \)\( Q^\pi(s_{t+1}, \pi(s_{t+1})) \) 之間的差值應該是 \( r_t \)。也就是說,狀態轉移後得到的回報會影響這兩個 Q 值之間的關聯性。

如圖所示,我們的目標是學習這些 Q 值之間的差距,並進行更新。透過將 Q 值的變化與實際觀察到的回報 \( r_t \) 相結合,Q-learning 可以在每次狀態轉移時學習並優化決策。

在 Q-learning 的學習過程中,我們通常會遇到一個問題,就是當我們嘗試使用 TD 方法進行學習時,target 值會持續變動。這導致模型在訓練時難以穩定學習,因為模型每次的回傳值 (target) 是動態的,這樣的情況會讓學習過程變得不穩定。圖中展示了一個解決此問題的策略,稱為 Target Network。

具體來說,Target Network 是一個固定的網路,它負責生成 target 值。在模型學習的過程中,左邊的 Q 函數會進行更新,而右邊的 Target Network 則保持不變。這意味著我們只對左邊的 Q 函數進行參數調整,並通過最小化預測值與固定 target 之間的誤差來學習。

Target Network 被固定住,因此模型學習的目標值 (例如 \(r_t + Q^{\pi}(s_{t+1}, \pi(s_{t+1}))\)) 也會保持固定。當我們完成多次 Q 函數的更新後,再將 Target Network 的參數替換為更新後的 Q 函數。這樣可以避免兩個 Q 函數同時更新,避免學習過程中的不穩定情況。這樣的設計讓我們可以穩定進行迴歸操作,並且不斷縮小預測值與固定 target 之間的誤差,進一步提升學習的穩定性和效率。

Tip2: 探索策略(Epsilon-Greedy 和 Boltzmann Exploration)

在 Q-learning 中,第二個常用的技巧是探索策略 (Exploration)。這裡提到了當我們依賴 Q-function 決定行為時,policy 會根據 Q-function 的值來選擇對應的動作。具體來說,對於給定的一個 state,Q-learning 會遍歷所有可能的 actions,並選擇 Q 值最大的 action 作為當前的行為。這種方法的主要問題在於,如果我們總是選擇同一個 Q 值最大的行為,那麼我們將永遠不會探索其他可能性較小但潛在更好的行為。

投影片中展示了這一問題的例子:在某個 state 下,假設 action 2 的 Q 值是 1,而 action 1 和 action 3 的 Q 值都是 0,這樣我們將永遠選擇 action 2,導致我們無法探索其他行為。這樣的策略對於數據收集並不是一個好的方法,因為我們需要在每個 state 下嘗試所有的行為,這樣才能更好地估計每個 action 的 Q 值。

為了解決這個問題,我們引入了兩種探索策略:

  1. Epsilon Greedy:Epsilon Greedy 策略允許我們在 1-ε 的機率下選擇 Q 值最大的行為,但在 ε 的機率下隨機選擇行為。這樣我們可以確保偶爾嘗試其他行為,避免陷入只選擇單一行為的困境。隨著學習過程的進行,ε 通常會逐漸遞減,因為隨著時間推移,我們對各個行為的 Q 值會變得更加準確,因此減少探索的必要性。

  1. Boltzmann Exploration:Boltzmann Exploration 策略則是根據每個行為的 Q 值生成一個概率分佈。Q 值越高的行為被選擇的概率越大,但 Q 值較低的行為也有一定的機率被選擇。這是通過對每個 Q 值取 exponential,然後將它們 normalize 成一個機率分佈來實現的。這種方法保證了我們能夠根據每個行為的好壞來進行權衡探索。

Exploration vs. Exploitation

在強化學習中,平衡 Exploration 和 Exploitation 是非常關鍵的。過多的探索可能會導致浪費時間在不好的選項上,而過度依賴過去的經驗(利用)則可能會錯過更優的潛在選項。

  • Exploration (探索):指的是嘗試新的行為,尋找未知的可能性,像是踩點、測試新選擇。在生活中,探索就像每天去不同的餐廳嘗試新的菜色,看看哪家餐廳會有更好的食物或體驗。我們不知道結果如何,但透過不斷的嘗試,能夠發現更好的選擇。

  • Exploitation (利用):這是基於已知的經驗,選擇最好的行為,專注於從過去的成功經驗中獲得最大化的回報。在生活中的例子是根據過去吃過的餐廳,選擇一家已經知道好吃、服務好且滿意的餐廳,這樣可以確保當下的享受或收穫是最好的。

因此,在強化學習中,需要找到一個適當的策略,在探索新選擇和利用已有的好經驗之間找到平衡。

Tip3: 回放緩衝區(Replay Buffer)

Replay Buffer 是強化學習中的一個重要技巧,用來提高訓練效率和數據的多樣性。當我們的策略 \( \pi \) 與環境互動時,會產生大量的經驗 (例如在狀態 \( s_t \) 採取行動 \( a_t \) 得到獎勵 \( r_t \) 並轉移到下一個狀態 \( s_{t+1} \)),這些經驗會被儲存在一個稱為 buffer 的地方。這個 buffer 是有限的,因此當 buffer 滿了時,最舊的經驗會被替換掉。

儲存在 buffer 裡的經驗並不全是來自於當前的策略,因為策略會隨著時間進行更新。然而,這樣的設計可以有兩個重要的好處:

  1. 提高樣本效率:在實際強化學習中,與環境互動的步驟是最花時間的過程。透過 replay buffer,我們可以反覆使用之前收集到的經驗,減少不必要的環境互動次數,提升訓練效率。

  2. 增加數據的多樣性:在訓練神經網路時,我們希望每個 batch 的數據越多樣化越好,因為單一性質的數據容易導致模型過度擬合。當 replay buffer 裡的經驗來自於不同的策略時,所選出的批次數據會更加多樣,從而有助於提升模型的泛化能力。

儘管這些經驗來自於不同的策略 (這是一個 off-policy 的特徵),理論上這種方式依然是有效的。這是因為我們不只是依賴一整條路徑,而是從 buffer 中隨機取樣個別的經驗來更新 Q-function。

典型的 Deep Q-learning 演算法流程

Q-learning 是一種通過與環境互動來學習最佳策略的強化學習演算法。它的核心步驟包括初始化兩個 Q-function(\( Q \)\( \hat{Q} \)),並使用探索策略來選擇動作。每次互動後,將獲得的經驗存入 replay buffer,並從中抽取批次數據來更新 Q-function。每隔一定次數的更新後,將 target network \( \hat{Q} \) 同步為最新的 Q-function。這樣的迭代方式能夠逐漸學習到最優策略,最大化累積獎勵。

1.初始化

  • 初始化 Q-function \( Q \) 和 target Q-function \( \hat{Q} \),初始時 \( \hat{Q} = Q \)

2.每個 episode 中的步驟

  • 每個時間步 t

    • 在狀態 \( s_t \) 下,基於 Q-function 使用 epsilon greedy 探索策略來選擇行動 \( a_t \)
    • 獲取獎勵 \( r_t \),並轉移到新狀態 \( s_{t+1} \)
    • 將經驗 \( (s_t, a_t, r_t, s_{t+1}) \) 存入 replay buffer 中。
    • 從 buffer 中隨機取樣一個 batch 的資料,每筆資料包含 \( (s_i, a_i, r_i, s_{i+1}) \)
    • 計算 target 值 \( y = r_i + \gamma \max_a \hat{Q}(s_{i+1}, a) \)
    • 使用迴歸方法更新 Q-function 的參數,使 \( Q(s_i, a_i) \) 更接近 target \( y \)

    • 每 C 次更新後,重置 Target Q-function

      • 將 target network \( \hat{Q} \) 重置為當前的 Q-function:\( \hat{Q} = Q \)

Note

這個過程不斷迭代,通過與環境互動和更新策略,最終學習到一個能夠最大化累積獎勵的 Q-function。

Reference


  1. Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G., Graves, A., Riedmiller, M., Fidjeland, A. K., Ostrovski, G., Petersen, S., Beattie, C., Sadik, A., Antonoglou, I., King, H., Kumaran, D., Wierstra, D., Legg, S., & Hassabis, D. (2015). Human-level control through deep reinforcement learning. Nature, 518(7540), 529–533. https://doi.org/10.1038/nature14236