強化學習-學習筆記3 | 策略學習

climerecho發表於2022-07-05

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 策略學習的主要思想

基於上面的回顧,狀態價值函式:

\[V_{\pi}(s_t) = \mathbb{E}_A[Q_\pi(s_t,A)]=\sum_a\pi(a|s_t)\cdot Q_\pi(s_t,a) \]

下面我們要用 神經網路 來近似 狀態價值函式:

  • 用策略網路 \(\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. 兩種形式
  1. \(\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)\)

  2. \(\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)\)

  1. 對於每個動作 a , 計算 \(f(a,\theta)=\frac{\partial{\pi(a|s;\theta)}}{\partial\theta}\cdot{Q_\pi(s,a)}\)

  2. 策略梯度就是把 每個動作的 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\) 函式是一個複雜的神經網路,無法通過數學公式積分。只能通過蒙特卡洛近似來近似的算出來:

  1. 根據概率密度函式 \(\pi\) 隨機抽樣得到一個動作 \(\widehat{a}\) ,

  2. 計算 \(g(\widehat{a},\theta)=\frac{\partial{log\pi(\widehat{a}|s;\theta)}}{\partial\theta}\cdot Q_\pi(s,\widehat{a})\)

    注意這裡的 \(\widehat{a}\)是抽樣出來的已確定的值。

  3. 根據公式2,g 函式 關於 A 求期望即為策略梯度:

    \(\mathbb{E}_{A}[g(\widehat{a},\theta)] = \frac{\partial V(s;\theta)}{\partial \theta}\)

  4. 由於 \(\widehat{a}\) 是隨機抽出來的,,所以 g 函式是 策略梯度的無偏估計。

  5. 由於4中結論,所以可以使用 g函式來近似 策略梯度,這就是蒙特卡洛近似。

蒙特卡洛近似:

隨機抽取一個或很多個樣本,用隨機樣本來近似期望。

mark 一個課程 CS285 Lecture

c. 演算法過程
  1. 在 t 時刻觀測到狀態 \(s_t\) ,接下來用蒙特卡洛近似來計算策略梯度
  2. 把策略網路 \(\pi(\cdot|{s};\theta)\) 作為概率密度函式隨機取樣動作 \(a_t\)
  3. 計算價值函式的值,記作\(q_t \approx Q_\pi(s_t,a_t)\)
  4. 對策略網路 \(\pi\) 求導,得到向量矩陣或者張量:\(d_{\theta,t}=\frac{\partial log \pi(a_t|s_t,\theta)}{\partial \theta}|\theta=\theta_t\)
  5. 近似計算策略梯度:\(g(a_t,\theta_t) = q_t \cdot d_{\theta,t}\)
  6. 更新策略網路:\(\theta_{t+1}=\theta_t+\beta \cdot g(a_t,\theta_t)\),梯度上升,為了讓價值函式 V 變大。

其實上面還有一點沒說,就是 \(q_t\) 怎麼計算?,即 \(Q_\pi\)怎麼計算。

方法1:Reinforce 演算法

用策略網路 \(\pi\) 來控制 agent 運動,從一開始玩到遊戲結束,把整個遊戲軌跡都記錄下來:

\[s_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_t,a_t,r_t \]

觀測到所有獎勵 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)]\)越大越好。

x. 參考教程

相關文章