Policy-Based Reinforcement Learning. 策略學習。
本講用一個神經網路來近似 policy 函式,即 Policy Network,策略網路。
3. 策略學習
3.1 策略函式
我們回顧一下 策略函式 Policy Function :
策略函式 \(\pi(a | s)\)是一個 概率密度函式(PDF),輸入時當前狀態s,輸出為一個概率分佈,表徵每個 action 的概率,
拿到 策略函式 輸出的 概率密度 後,agent 面向所有動作做一次隨機抽樣,但各個動作的概率不同。
策略學習的思路即,有了合適的 策略函式,我們就能很好的控制 agent 自動地運動 。
問題與 價值學習 的相近:我們事先並不知道這樣一個策略函式,我們如何得到一個近似的策略函式呢?
如果 一個小遊戲只有 5個狀態10個動作,那麼畫一張表,通過反覆地遊戲得到它們的概率填入表中即可,但事實上游戲十分複雜。
我們需要做函式近似,通過學習來近似 策略函式。而函式近似的方法很多,神經網路就是其中的一種,用於近似策略函式的神經網路就是 Policy Network。
3.2 策略網路
Policy Network.
用策略網路\(\pi(a|s;\theta)\)來近似\(\pi(a|s)\),其中 θ 是神經網路的引數,初始的 θ 是隨機初始化的,通過後續的學習來改進 θ 。
比如對於超級瑪麗這樣的遊戲:
狀態畫面經過卷積 Conv 提取特徵,特徵經過全連線層 Dense 再通過 softmax 層(歸一化)得到一個動作的概率分佈,動作的概率集合全部加起來要等於1。
3.3 狀態價值函式回顧
State-Value-Function.
折扣回報函式:
- \(U_t=R_t+\gamma R_{t+1}+\gamma^2 R_{t+2}+\gamma^3 R_{t+3}+\cdots\)
動作價值函式:
- \(Q_\pi(s_t,a_t) = \mathbb{E}[U_t|S_t=s_t,A_t=a_t]\)
- 評價在狀態 \(s_t\) 的情況下做出動作 \(a_t\) 的好壞程度。
狀態價值函式
- \(V_{\pi}(s_t) = \mathbb{E}_A[Q_\pi(s_t,A)]\)
- 消掉了動作 A ,這樣 \(V_\pi\) 只跟狀態 s 與策略函式 \(\pi\) 有關了。
- 給定 \(\pi\),可以評價當前狀態的好壞;給定狀態\(s_t\),可以評價策略 \(\pi\) 的好壞。
- 展開:
- \(V_{\pi}(s_t) = \mathbb{E}_A[Q_\pi(s_t,A)]=\sum_a\pi(a|s_t)\cdot Q_\pi(s_t,a)\)這裡動作是離散的。
- \(V_{\pi}(s_t) = \mathbb{E}_A[Q_\pi(s_t,A)]=\int\pi(a|s_t)\cdot Q_\pi(s_t,a) da\)這裡動作是連續的
3.4 策略學習的主要思想
基於上面的回顧,狀態價值函式:
下面我們要用 神經網路 來近似 狀態價值函式:
-
用策略網路 \(\pi(a|s;\theta)\) 來近似 \(\pi(a|s)\)
-
把 \(\pi(a|s_t)\) 函式替換成 \(\pi(a|s_t;\theta)\),即為:
\(V(s_t;\theta) = \sum_a\pi(a|s_t;\theta)\cdot Q_\pi(s_t,a)\)
這樣,狀態價值函式就可以寫成:\(V(s;\theta) ,V\) 可以評價策略網路的好壞,給定狀態 S ,策略網路越好 V 的值就越大。可以通過改進引數 \(\theta\),讓$V(s;\theta) $變大。
基於上述想法,可把目標函式定義為 \(V(s;\theta)\) 的期望 :\(J(\theta)=\mathbb{E}_{S}[V({S};\theta)]\),期望是關於狀態 S 求的,這樣我們的目標就是改進\(\theta\),使得 \(J(\theta)\) 越大越好。
J 函式可以理解為,使用策略函式 \(\pi\) ,agent的勝算有多大。
如何改進 \(\theta\) ? 即使用策略梯度演算法(Policy gradient ascent)
-
觀測到狀態 s,這個 s 是從狀態的概率分佈中隨機抽樣出來的。
-
把$V(s;\theta) $關於 s 求導可以得到一個梯度,然後用梯度上升來更新 \(\theta\),\(\beta\)是學習率。
\(\theta \leftarrow \theta +\beta\cdot \frac{\partial V(s;\theta)}{\partial \theta}\)
注意:我們這裡算的是 V 關於 \(\theta\) 的導數,是一個隨機梯度,隨機性來源於狀態 s
為什麼要用梯度上升,因為我們想讓目標函式 \(J(\theta)\) 變得越來越大。
其中 \(\frac{\partial V(s;\theta)}{\partial \theta}\) 被叫做 Policy gradient 策略梯度。
3.5 策略梯度演算法
策略梯度是 V 函式 對 策略神經網路引數 \(\theta\) 的導數。
策略梯度演算法的推導後續補上,目前按照視訊聽懂了,但是推導過程還不夠嚴謹。
a. 兩種形式
-
\(\pi\) 關於 θ 的導數 ✖ \(Q_\pi\),再做連加;
\(\frac{\partial V(s;\theta)}{\partial \theta}=\sum_a\frac{ \partial \pi(a|s;\theta) }{\partial \theta}\cdot Q_\pi(s,a)\)
-
\(\log\pi\) 關於 \(\theta\) 的導數,乘以 \(Q_\pi\),再關於隨機變數 A 求期望。
\(\frac{\partial V(s;\theta)}{\partial \theta}=\mathbb{E}_{A\sim\pi(\cdot|s;\theta)}[\frac{ \partial log\pi(A|s;\theta) }{\partial \theta})\cdot Q_\pi(s,a)\)
這兩種形式是等價的。
b. 計算梯度
有了前面兩個公式,來計算策略梯度:
如果動作是離散的:可以使用第一個公式:
\(\frac{\partial V(s;\theta)}{\partial \theta}=\sum_a\frac{ \partial \pi(a|s;\theta) }{\partial \theta}\cdot Q_\pi(s,a)\)
-
對於每個動作 a , 計算 \(f(a,\theta)=\frac{\partial{\pi(a|s;\theta)}}{\partial\theta}\cdot{Q_\pi(s,a)}\)
-
策略梯度就是把 每個動作的 f 值 加起來:
$ \frac{\partial{V(s;\theta)}}{\partial \theta}=f(a_1,\theta)+f(a_2,\theta)+...+f(a_n,\theta)$
而對於連續的動作,使用第二個公式:
\(\frac{\partial V(s;\theta)}{\partial \theta}=\mathbb{E}_{A\sim\pi(\cdot|s;\theta)}[\frac{ \partial log\pi(A|s;\theta) }{\partial \theta})\cdot Q_\pi(s,a)\)
要求期望的話,需要對 A 進行定積分,而這不可能,因為 \(\pi\) 函式是一個複雜的神經網路,無法通過數學公式積分。只能通過蒙特卡洛近似來近似的算出來:
-
根據概率密度函式 \(\pi\) 隨機抽樣得到一個動作 \(\widehat{a}\) ,
-
計算 \(g(\widehat{a},\theta)=\frac{\partial{log\pi(\widehat{a}|s;\theta)}}{\partial\theta}\cdot Q_\pi(s,\widehat{a})\)
注意這裡的 \(\widehat{a}\)是抽樣出來的已確定的值。
-
根據公式2,g 函式 關於 A 求期望即為策略梯度:
\(\mathbb{E}_{A}[g(\widehat{a},\theta)] = \frac{\partial V(s;\theta)}{\partial \theta}\)
-
由於 \(\widehat{a}\) 是隨機抽出來的,,所以 g 函式是 策略梯度的無偏估計。
-
由於4中結論,所以可以使用 g函式來近似 策略梯度,這就是蒙特卡洛近似。
蒙特卡洛近似:
隨機抽取一個或很多個樣本,用隨機樣本來近似期望。
mark 一個課程 CS285 Lecture。
c. 演算法過程
- 在 t 時刻觀測到狀態 \(s_t\) ,接下來用蒙特卡洛近似來計算策略梯度
- 把策略網路 \(\pi(\cdot|{s};\theta)\) 作為概率密度函式隨機取樣動作 \(a_t\)。
- 計算價值函式的值,記作\(q_t \approx Q_\pi(s_t,a_t)\)
- 對策略網路 \(\pi\) 求導,得到向量矩陣或者張量:\(d_{\theta,t}=\frac{\partial log \pi(a_t|s_t,\theta)}{\partial \theta}|\theta=\theta_t\)
- 近似計算策略梯度:\(g(a_t,\theta_t) = q_t \cdot d_{\theta,t}\)
- 更新策略網路:\(\theta_{t+1}=\theta_t+\beta \cdot g(a_t,\theta_t)\),梯度上升,為了讓價值函式 V 變大。
其實上面還有一點沒說,就是 \(q_t\) 怎麼計算?,即 \(Q_\pi\)怎麼計算。
方法1:Reinforce 演算法
用策略網路 \(\pi\) 來控制 agent 運動,從一開始玩到遊戲結束,把整個遊戲軌跡都記錄下來:
觀測到所有獎勵 r ,就可以算出折扣回報 \(u_t = \sum_{k=t}^{T}\gamma^{k-t}r_k\)。
由於\(Q_\pi(s_t,a_t) = \mathbb{E}[U_t]\),所以可以使用\(u_t\)來近似$Q_\pi(s_t,a_t) $
即使用\(q_t = u_t\)
總結就是用觀測到的$ u_t\(來代替\)Q_\pi(s_t,a_t)$函式
方法2:用一個神經網路來近似\(Q_\pi\)
原本已經拿神經網路來近似一個策略函式 \(\pi\),現在又拿另一個神經網路近似 \(Q_\pi\) ,這樣就有了兩個神經網路,對於兩個神經網路就涉及到了Actor-Critic。
3.6 總結
策略學習的思路是,我們如果能夠得到一個好的 策略函式 \(\pi\) ,我們就能用 \(\pi\) 自動控制 agent 。即:\(a_t \sim\pi(\cdot | s)\)
為了得到這樣一個策略函式,我們使用一個 神經網路 Policy Network \(\pi(a|s;\theta)\) 來近似策略函式。
要得到神經網路需要得到它的引數 θ,求解的演算法是策略梯度演算法;策略梯度就是價值函式關於θ的導數。算出θ後用梯度上升來迭代θ,以使得目標函式\(J(\theta)=\mathbb{E}_{S}[V({S};\theta)]\)越大越好。