從獎勵到最優決策:動作價值函數與價值學習
- 價值學習
- 一、動作價值函數
- 對 U t U_t Ut?求期望得到動作價值函數
- 動作價值函數的意義
- 最優動作價值函數(Optimal Action-Value Function)
- 如何理解 Q ? Q^* Q?函數
- 二、價值學習的基本思想
- Deep Q-Network(DQN)
- DQN玩游戲的具體流程
- 如何訓練DQN——TD算法(Temporal Difference Algorithm,時差算法)
- 三、將TD算法應用到DQN中
價值學習
本文旨在詳細介紹價值學習的基本理論與算法,并通過具體示例幫助你理解從動作價值函數到深度Q網絡(DQN)的整體流程。
一、動作價值函數
基礎概念:
- 獎勵 R R R:
agent每作出一個動作,環境都會更新,并且會給出一個獎勵 R R R,每一個獎勵 R R R都依賴于前一個狀態和動作。 - 回報(return) U t U_t Ut?:
回報依賴從 T T T時刻開始的所有的動作和所有的狀態
U t = R t + γ R t + 1 + γ 2 R t + 2 + γ 3 R t + 3 + ? + γ T ? t R T U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \gamma^3 R_{t+3} + \dots + \gamma^{T-t} R_T Ut?=Rt?+γRt+1?+γ2Rt+2?+γ3Rt+3?+?+γT?tRT?
回報的特點:
- 長期回報:一個狀態 s s s的回報 U t U_t Ut?,是所有 t t t時刻的獎勵的和,所以 U t U_t Ut?是一個長期的回報。回報 U t U_t Ut?依賴從 T T T時刻開始的所有的動作和所有的狀態
- 動作的隨機性:動作的隨機性,即在狀態 s s s下,采取動作 a a a的概率是不確定的。動作的隨機性來自策略 π \pi π的抽樣。
P [ A = a ∣ S = s ] = π ( a ∣ s ) \mathbb{P}[ A = a | S = s ] = \pi(a | s) P[A=a∣S=s]=π(a∣s)
- 狀態的隨機性:狀態的隨機性來自狀態轉移函數 p p p,新的狀態市場函數 p p p中抽樣得到的
P [ S = s ′ ∣ S = s , A = a ] = p ( s ′ ∣ s , a ) \mathbb{P}[ S = s' | S = s, A = a ] = p(s' | s, a) P[S=s′∣S=s,A=a]=p(s′∣s,a)
- 總體隨機性: 動作和狀態都是隨機的,因此 U t U_t Ut?也是一個隨機變量。
對 U t U_t Ut?求期望得到動作價值函數
因為回報 U t U_t Ut?是一個隨機變量,我們要消除它的隨機性,只留下 s t s_t st?和 a t a_t at?兩個變量,我們可以對它求期望。所以 U t U_t Ut?的期望值可以表示為:
Q π ( s t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_\pi(s_t,a_t) = \mathbb{E}[U_t | S_t = s_t, A_t = a_t] Qπ?(st?,at?)=E[Ut?∣St?=st?,At?=at?]
這樣我們就得到動作價值函數(Action-Value Function).
動作價值函數只和策略 π \pi π、當前的狀態和動作( s t s_t st?和 a t a_t at?)有關。
動作價值函數的意義
動作價值函數可以反映出當前狀態 s t s_t st?下,采取動作 a t a_t at?的好壞程度(期望)。
最優動作價值函數(Optimal Action-Value Function)
要想消除策略 π \pi π對動作價值函數的隨機性,我們可以定義一個最優動作價值函數(Optimal Action-Value Function),對 Q π Q_\pi Qπ?求最大化:
Q ? ( s , a ) = m a x π Q π ( s t , a t ) Q^* (s, a) = {max}_\pi Q_\pi (s_t, a_t) Q?(s,a)=maxπ?Qπ?(st?,at?)
最優動作價值函數是一個最優的動作價值函數,它表示了當前狀態 s t s_t st?下,采取動作 a t a_t at?的最優情況,它與策略 π \pi π無關。要使agent在當前狀態 s t s_t st?下采取動作 a t a_t at?,得到的回報 U t U_t Ut?最多就是 Q ? ( s t , a t ) Q^* (s_t, a_t) Q?(st?,at?)
。
Q ? Q^* Q?函數可以指導agent做決策,它可以為所有的動作打分,并且選擇分數最高的作為動作。
如何理解 Q ? Q^* Q?函數
我們可以理解 Q ? Q^* Q?函數,它表示了當前狀態 s t s_t st?下,采取動作 a t a_t at?的平均回報,你可以把它當作一個先知,它可以告訴你每一支股票的期望收益。
二、價值學習的基本思想
雖然 Q ? Q^* Q?函數非常厲害,但是實際上我們并沒有 Q ? Q^* Q?函數,我們只能通過學習得到 Q ? Q^* Q?函數。我們可以通過學習一個函數來近似 Q ? Q^* Q?函數。這就是價值學習的基本思想。
Deep Q-Network(DQN)
使用一個深度學習的神經網絡來近似 Q ? Q^* Q?函數。
我們可以使用一個函數來代表這個神經網絡
Q ( s , a ; W ) → Q ? ( s , a ) Q(s,a;W) \rightarrow Q^* (s,a) Q(s,a;W)→Q?(s,a)
其中:
- W: 神經網絡的參數
- s: 神經網絡的輸入,狀態。
- 神經網絡的輸出是很多數值,這些數值是對每個可能的動作的打分。
舉個例子,在超級瑪麗中,游戲可以有三個動作,分別是向左,向右,向上。
我們將游戲的一幀通過卷積、特征提取輸入到DQN中,然后得到三個動作的打分。
- 向上: 2000
- 向右: 1000
- 向右: 1000
很明顯這時我們應該采取的動作是向上。
DQN玩游戲的具體流程
一個使用深度Q網絡(DQN)來玩電子游戲的基本流程。流程從當前狀態開始,通過選擇動作、接收獎勵、更新狀態,不斷循環進行。以下是詳細的步驟描述:
-
開始于當前狀態:流程從當前狀態 S t S_t St? 開始。
-
選擇動作:在狀態 S t S_t St? 下,通過最大化Q值函數 Q ( S t , a ; w ) Q(S_t, a; \mathbf{w}) Q(St?,a;w) 來選擇一個動作 a t a_t at?。這里的 w \mathbf{w} w 表示Q值函數的參數。
-
執行動作并觀察結果:執行動作 a t a_t at? 后,狀態轉移函數 P P P觀察到下一個狀態 S t + 1 S_{t+1} St+1? 和獲得的獎勵 r t r_t rt?。獎勵可以用來更更新參數
-
更新狀態:狀態更新到 S t + 1 S_{t+1} St+1?。
-
重復選擇動作:在新的狀態 S t + 1 S_{t+1} St+1? 下,再次通過最大化Q值函數來選擇動作 a t + 1 a_{t+1} at+1?。
-
繼續循環:這個過程不斷重復,即在每個新的狀態 S t + 2 , S t + 3 , … S_{t+2}, S_{t+3}, \ldots St+2?,St+3?,… 下,都通過最大化Q值函數來選擇最優動作 a t + 2 , a t + 3 , … a_{t+2}, a_{t+3}, \ldots at+2?,at+3?,…,并觀察到相應的獎勵 r t + 1 , r t + 2 , … r_{t+1}, r_{t+2}, \ldots rt+1?,rt+2?,…。知道游戲結束
-
狀態轉移:每個狀態 S t + 1 , S t + 2 , S t + 3 , … S_{t+1}, S_{t+2}, S_{t+3}, \ldots St+1?,St+2?,St+3?,… 都是根據當前狀態和動作,通過概率分布 p ( ? ∣ S t , a t ) p(\cdot | S_t, a_t) p(?∣St?,at?) 來確定的。
這個流程展示了如何通過不斷學習和選擇最優動作來最大化累積獎勵,這是強化學習中DQN算法的核心思想。
如何訓練DQN——TD算法(Temporal Difference Algorithm,時差算法)
實際問題類比:
假如我想要從廣州坐高鐵到西安,我們可以先使用 Q ( W ) Q(W) Q(W)函數進行預測。假設預測值為q = 15小時 ,注意此時模型還在訓練,預測的值可能是完全錯誤的,然后我們實際坐車是y = 10個小時,這樣我們就得到一個誤差,我們希望這個誤差越小越好。
-
得到損失
L o s s = 1 2 ( q ? y ) 2 Loss = \frac{1}{2}(q - y)^2 Loss=21?(q?y)2 -
梯度
? L ? w = ? L ? q ? q ? w = ( q ? y ) ? Q ( w ) ? w \frac{\partial L}{\partial w} = \frac{\partial L}{\partial q} \frac{\partial q}{\partial w} = (q - y) \frac{\partial Q(w)}{\partial w} ?w?L?=?q?L??w?q?=(q?y)?w?Q(w)? -
梯度下降:
w t + 1 = w t ? α ? L ? w ∣ w = w t w_{t+1} = w_t - \alpha \frac{\partial L}{\partial w} |_{w = w_t} wt+1?=wt??α?w?L?∣w=wt??
提出問題:上述算法必須完成整個旅途才能對模型做一次更新,假如沒有完成全程,如何進行更新:
假如我從廣州做到西安,使用 Q ( W ) Q(W) Q(W)函數進行預測。預測值為q = 15小時 ,但是我坐了三個個小時到了武漢,中途下車不去西安,這時我該如何進行更新模型呢?
我到了武漢,還可以使用 Q ( W ) Q(W) Q(W)函數進行預測,預測值為q = 10小時,
- 模型最初的預測: Q ( W ) Q(W) Q(W) = 15小時
- 我們可以使用武漢的時間進行更新模型的預測: Q ( W ) Q(W) Q(W) = 3小時(實際的時間) + 10小時(再進行預測的時間 = 13小時,我們將這個值稱為TD target
TD target與最開始預測的q 同樣也有一個誤差,我們也可以利用這個誤差進行更新模型。
TD target : y = 13 y = 13 y=13
Loss : L o s s = 1 2 ( Q ( w ) ? y ) 2 Loss = \frac{1}{2}(Q(w) - y)^2 Loss=21?(Q(w)?y)2
梯度 ? L ? w = ( 15 ? 13 ) ? Q ( w ) ? w \frac{\partial L}{\partial w} = (15 - 13) \frac{\partial Q(w)}{\partial w} ?w?L?=(15?13)?w?Q(w)?
梯度下降:
w t + 1 = w t ? α ? L ? w ∣ w = w t w_{t+1} = w_t - \alpha \frac{\partial L}{\partial w} |_{w = w_t} wt+1?=wt??α?w?L?∣w=wt??
這個算法就是時差算法,它通過不斷更新模型來最小化損失函數,從而提高模型的預測性能。
換成是強化學習也是同樣的道理,我們不需要完成游戲全程也能更新參數。
并據此更新模型參數。
三、將TD算法應用到DQN中
再上述例子中,我們可以發現有以下的等式;
T 西安 → 廣州 ≈ T 西安 → 武漢 + T 武漢 → 廣州 T_{西安 \rightarrow{廣州}} \approx T_{西安 \rightarrow{武漢}} + T_{武漢 \rightarrow{廣州}} T西安→廣州?≈T西安→武漢?+T武漢→廣州?
其中 T 西安 → 廣州 T_{西安 \rightarrow{廣州}} T西安→廣州?是模型預測的, T 西安 → 武漢 T_{西安 \rightarrow{武漢}} T西安→武漢?是實際時間, T 武漢 → 廣州 T_{武漢 \rightarrow{廣州}} T武漢→廣州?是再進行預測的時間。
那么在深度強化學習中,也應該有一個等式。
Q ( s t , a t ; W ) ≈ R t + γ Q ( s t + 1 , a t + 1 ; W ) Q(s_t,a_t;W) \approx R_t + \gamma Q(s_{t+1},a_{t+1};W) Q(st?,at?;W)≈Rt?+γQ(st+1?,at+1?;W)
模型的輸出 Q ( s t , a t ; W ) Q(s_t,a_t;W) Q(st?,at?;W)是對回報 E ( U t ) \mathbb{E}(U_t) E(Ut?)做出的估計,
模型的輸出 Q ( s t + 1 , a t + 1 ; W ) Q(s_{t+1},a_{t+1};W) Q(st+1?,at+1?;W)是對回報 E ( U t + 1 ) \mathbb{E}(U_{t+1}) E(Ut+1?)做出的估計,
所以:
Q ( s t , a t ; W ) ≈ E ( R t + γ Q ( s t + 1 , a t + 1 ; W ) ) Q(s_t,a_t;W) \approx \mathbb{E}(R_t + \gamma Q(s_{t+1},a_{t+1};W)) Q(st?,at?;W)≈E(Rt?+γQ(st+1?,at+1?;W))
更新過程:
- 開始的預測 Prediction: Q ( S t , a t ; w t ) Q(S_t, a_t; \mathbf{w}_t) Q(St?,at?;wt?).
- TD target:
y t = r t + γ ? Q ( S t + 1 , a t 1 + ; w t ) = r t + γ ? max ? a Q ( S t + 1 , a ; w t ) . y_t = r_t + \gamma \cdot Q(S_{t+1}, a_{t1+}; \mathbf{w}_t) = r_t + \gamma \cdot \max_a Q(S_{t+1}, a; \mathbf{w}_t). yt?=rt?+γ?Q(St+1?,at1+?;wt?)=rt?+γ?amax?Q(St+1?,a;wt?). - Loss: L t = 1 2 [ Q ( S t , a t ; w ) ? y t ] 2 L_t = \frac{1}{2} [Q(S_t, a_t; \mathbf{w}) - y_t]^2 Lt?=21?[Q(St?,at?;w)?yt?]2.
- 梯度更新Gradient descent: w t + 1 = w t ? α ? ? L t ? w ∣ w = w t \mathbf{w}_{t+1} = \mathbf{w}_t - \alpha \cdot \frac{\partial L_t}{\partial \mathbf{w}} \big|_{\mathbf{w}=\mathbf{w}_t} wt+1?=wt??α??w?Lt?? ?w=wt??.
通過這種方式,TD算法能夠逐步減小預測誤差,進而提高模型的預測性能,并幫助智能體在不斷更新中趨向最優策略。