1. 程式人生 > 其它 >深度強化學習

深度強化學習

  1. value-based,價值學習:DQN。構建一個神經網路,輸入是state,有多個輸出對應採取每個action到最後所能獲得的累加獎勵Q-value。一開始這個網路估計出來的Q-value很差,我們使用TD演算法,讓

    \[target = r(a_t|s_t) + \lambda Q(s_{t+1},a_{t+1};w) \]

    \(\lambda\)是獎勵折扣率,讓網路在t時刻的輸出儘可能與target相近,以此使用梯度下降更新引數。

    • TD演算法過程:
      1. 觀察到環境狀態\(s_t\)
      2. \(s_t\)輸入到動作價值網路\(q(s,a;w_t)\)得到\(t\)時刻的動作價值\(Q(s_t,a_t;w_t)\)
        並抽樣得到動作\(a_t\);
      3. agent使用動作\(a_t\)與環境進行互動得到時刻\(t\)的獎勵\(r_t\)和新的環境狀態\(s_{t+1}\),將\(s_{t+1}\)輸入動作價值網路,得到下個時刻的動作價值\(Q(s_{t+1},a_{t+1};w_t)\)
      4. 計算得到目標函式:\(y_t = r_t + \lambda Q(s_{t+1},a_{t+1};w_t)\)\(Q(s_t,a_t;w_t)\)的均方誤差作為損失更新網路引數;
  2. policy-based,策略學習:學習一個policy,目標是使得狀態價值函式的值最大化。構建一個神經網路,其輸入是state,輸出是所有action的概率。使用的演算法是策略梯度上升。

    • state-value function:狀態價值函式,從某個狀態到結束所能累計的獎勵的期望值。

      \[V(s;\theta) = \sum_a \pi (a|s;\theta)Q_\pi (s,a) \]
    • 訓練一個policy——\(\pi\),以獲得最大化的狀態價值為目標。policy gradient演算法就是對於狀態價值函式的梯度上升演算法:

      \[\begin{aligned} \frac{\partial V(s;\theta)}{\partial \theta} &= \sum_a \frac{\partial \pi(a|s;\theta)}{\partial\theta}Q_\pi(s,a) \\ &=\sum_a \pi(a|s;\theta)\frac{\partial log\pi(a|s;\theta)}{\partial \theta}Q(s,a) \\ &= \mathbb{E}_{A\sim \pi(a|s;\theta)} [\frac{\partial log \pi(A|s;\theta)}{\partial \theta}Q_\pi(s,A)] \end{aligned} \]

      這裡的變形使得連加變成了求期望,如果動作是離散的,我們使用原始的求和形式;如果動作是連續的,我們使用變形後的求期望的形式,另外此時我們還沒有定義動作價值函式的形式。

    • 對於\(a\)是連續動作,我們的目標是求得給定policy下的\(\frac{\partial log\pi (A|s;\theta)}{\partial\theta}Q_\pi(s,A)\)的期望,也就是求\(\pi(A|s;\theta)\frac{\partial\pi(A|s;\theta)}{\partial\theta}Q_\pi(s,A)\)的積分,但是\(\pi(s,A)\)是一個神經網路,我們沒辦法直接求積分,只能採用蒙特卡洛近似。

      • 蒙克卡羅近似:
        1. \(\pi(A|s;\theta)\)中隨機抽出一個動作\(\hat a\)
        2. 計算\(g(\hat a,\theta) = \frac{\partial log\pi(\hat a|s;\theta)}{\partial \theta}Q_\pi(s,\hat a)\);(還不知道動作價值函式的定義)
        3. 使用\(g(\hat a,\theta)\)作為策略梯度\(\frac{\partial V(s;\theta)}{\partial \theta}\)的近似。
      • 事實上蒙特卡洛也適用於動作是離散時的情況。
    • 策略梯度演算法過程:

      1. 觀測到環境狀態\(s_t\);
      2. 從policy策略\(\pi(A|s_t;\theta_t)\)(動作的概率密度函式)中隨機抽樣一個動作\(a_t\)
      3. 計算動作價值函式:\(q_t \approx Q_\pi(s_t,a_t)\);(還不知道動作價值函式的定義)
      4. 對策略網路求導數:\(d_{\theta,t} = \frac{\partial log\pi(a_t|s_t;\theta)}{\partial \theta}\)
      5. 計算近似策略梯度:\(g(a_t,\theta_t) = d_{\theta,t} \cdot q_t\)
      6. 更新策略網路的引數:\(\theta_{t + 1} = \theta_t + \lambda \cdot g(a_t,\theta_t)\)
      • 在上面的演算法中還沒有對於動作價值函式\(q_t \approx Q_\pi(s,a)\)的定義,下面介紹兩種\(q_t\)的近似:

        1. REINFORCE演算法.

          1. REINFORCE演算法使用一個策略進行一個序列\(\tau\)

          2. 使用這個序列提供的資訊計算時刻\(t\)往後的累計折扣獎勵\(u_t = \sum_{k = t}^\tau \gamma ^{k - t}r_k\)

          3. 由於動作價值函式\(Q_\pi(s_t,a_t) = \mathbb{E}[U_t]\),是在時刻\(t\)採用動作\(a\)的累計折扣獎勵的期望值,因此可以用\(u_t\)近似它;

          4. \(q_t = u_t\)

          • REINFORCE演算法需要執行一次完整的序列才能更新一次策略網路的引數。
        2. actor-critic演算法:

          • 這種演算法使用額外的一個神經網路來近似動作價值函式\(Q_\pi(s,a)\),見下面。
  3. actor-critic演算法:上面的兩種價值學習和策略學習分別學習一個價值網路和一個策略網路,如果將兩種方法結合起來,就成為了actior-critic演算法。

    • 策略網路\(\pi(a|s;\theta)\)用來近似策略\(\pi(a|s)\);

    • 動作價值網路\(q(s,a;w)\)用來近似動作價值函式\(Q_\pi(s,a)\)

      • 輸入:狀態s和動作a。
      • 輸出:動作價值(標量)。
    • 狀態價值函式可以被策略網路和價值網路近似:\(V_\pi(s) = \sum_a\pi(a|s)\cdot Q(s,a) \approx \sum_a \pi(a|s;\theta)\cdot q(s,a;w)\)

    • 網路訓練:

      1. 觀察到環境狀態\(s_t\);
      2. 將狀態\(s_t\)輸入到策略網路\(\pi(A|s_t;\theta_t)\)得到概率輸出,再從輸出中抽樣出一個動作\(a_t\)
      3. agent執行動作\(a_t\)與環境互動得到獎勵\(r_t\)和新的狀態\(s_{t+1}\);
      4. 將狀態\(s_{t+1}\)輸入策略網路抽樣得到動作\(\hat a_{t+1}\);(這個動作並不執行,只是給動作價值網路使用TD演算法提供輸入)
      5. 使用TD演算法更新動作價值網路的引數(見上);
        1. 計算兩個動作價值\(q_t = q(s_t,a_t;w_t)\)\(q_{t+1} = q(s_{t+1},\hat a_{t+1};w_t)\);
        2. 計算TD誤差:\(\delta_t = q_t - (r_t + \lambda(q_{t+1}))\);
        3. 對動作價值網路的引數求導;
        4. 使用梯度下降更新動作價值網路。
      6. 使用策略梯度演算法更新策略網路的引數(見上)。
        1. 依據動作價值網路對動作的評分\(q_t\)和策略網路對引數的導數\(d_{\theta,t} = \frac{\partial log\pi(a_t|s_t;\theta)}{\partial \theta}\)計算得到\(g(a_t,\theta_t) = q_t \cdot d_{\theta,t}\)
        2. 對狀態價值的近似\(g(a_g,\theta_t)\)以梯度上升更行策略網路引數:\(\theta_{t+1} = \theta_t + \gamma g(a_t,\theta_t)\)
      • 需要注意的是在第六步中\(g(a_t,\theta_t) = q_t\cdot d_{\theta,t}\)有的論文和書本中使用的是TD error\(\delta_t\)而不是\(q_t\)。使用\(q_t\)是標準的策略梯度演算法,使用TD error稱為policy gradient with baseline。