強化學習-學習筆記10 | 經驗回放

climerecho發表於2022-07-08

Experience Replay 經驗回放。價值學習高階技巧第一篇。

之前講解的 價值學習的方法 都很簡單,所以實現效果並不優秀。接下來會介紹一些高階的技巧,可以大幅度提高 DQN 的表現。Experience Replay 是最重要的技巧。

10. 經驗回放

10.1 DQN / Deep Q Network

DQN 是用神經網路 \(Q(s,a;w)\) 來近似 Q-star 函式。通常用 TD 演算法訓練 DQN。TD演算法思路如下:

  • agent 觀察當前狀態 \(s_t\) 並執行動作 \(a_t\)

  • 環境給出新的狀態 \(s_{t+1}\) ,返回獎勵 \(r_t\)

  • TD target: \(y_t = r_t + \gamma \cdot {\mathop{max}\limits_{a}Q^*(s_{t+1},a;w)}\)

  • TD error:\(\delta_t = q_t - y_t; \ \ 其中q_t=Q(s_t,a_t;w)\)

    \(q_t\) 完全是猜測的,\(y_t\) 有一部分真實值。

  • 我們的目標是讓 \(q_t\) 接近 \(y_t\),所以最小化 \(\delta^2\),即:

  • \(\delta_t\)的均值記為:\(L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta^2_t}{2}\),通過調整 w ,使得 L(w) 儘量小。

  • 之前是使用線上梯度下降來更新 w:

    • 得到 transition \((s_t,a_t,r_t,s_{t+1})\),計算 \(\delta_t\)
    • 計算梯度 \(g_t = \frac{\partial \ \delta^2_t}{\partial \ w} = \delta_t \cdot \frac{\partial \ Q(s_t,a_t;w)}{\partial \ w}\)
    • 梯度下降更新 w:\(w \leftarrow w-\alpha\cdot g_t\)
    • 接著是之前忽略掉的一點,在更新完 w 之後,我們丟棄了這次使用的 transition。

10.2 DQN的不足之處

a. 經驗浪費

這裡的經驗(包括經驗回放)是指 從開始到結束所有的 transitions,剛才回顧的TD演算法在使用了一次 transition 後就將它丟棄,這就造成了經驗的浪費。

b. 相關更新

另外一個不足的原因是,前後兩個 transition 之間存在很強的關聯。實踐證明這種相關性是 有害的。如果能夠把 這些 transition 打散,更有利於訓練 DQN。

經驗回放就可以很好克服以上兩個缺點。

10.3 經驗回放原理

一個 transition 相當於一條訓練資料,為了重複使用之前的 transition,可以把 最近的 transition 存入一個佇列(Replay Buffer),容量為 n,n 是一個超引數。

經驗回放 的使用方法:

  • 我們的目標是 將\(L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta^2_t}{2}\)最小化

  • 使用隨機梯度下降改進 L(w);

    • 每次從 Replay Buffer中隨機均勻抽樣一個 transition \((s_i,a_i,r_i,s_{i+1})\)

      注意這裡可以隨機抽取多個 transition

    • 計算 TD error \(\delta_i\)

    • 計算隨機梯度:\(g_i = \frac{\partial \ \delta^2_i/2}{\partial w}=\delta_i \cdot \frac{\partial \ Q(s_i,a_i;w)}{\partial \ w}\)

    • 隨機梯度下降:\(w \leftarrow w-\alpha\cdot g_i\)

經驗回放的好處就是;

  1. 打破 transition 之間的相關性;
  2. 重複使用之前的經驗。

10.4 經驗回放改進

經驗回放以改進效果明顯而被廣泛使用,也有了很多對經驗回放的改進。下面介紹一種:優先經驗回放 / Prioritized Experience Reply。

改進之處在於使用非均勻抽樣來選擇 transitions。

優先經驗回放的想法如下:

  • 佇列裡存了很多 transitions,但是它們的重要性並不一樣;

  • 我們可以通過 TD error 來判斷 transitions 的重要性,絕對值越大,就說明越重要。

  • 原因是,這裡的優先順序是指,我們要優先訓練 難以訓練的、訓練樣本少的、訓練效果不好的這些場景,給與這些 transition 更大的重視(權重)

    (就好像要多看看自己的錯題,而不是自己很容易做對的題)

    而 TD error 大的 transition,實際意義是與實際值偏離大,說明對於場景不熟悉。

抽樣方法介紹兩種:

  1. 使抽樣概率與 TD-error 線性相關:\(p_t\propto|\gamma_t|+\epsilon\)

    \(\epsilon\) 是一個很小的數,避免 \(p_t\) 為 0 ;

  2. \(|\delta_t|\) 作排序,rank(t)是其序號,大的靠前,小的靠後:\(p_t\propto \frac{1}{rank(t)}\),這樣就讓排在前面的更容易被抽到。

調整學習率矯正偏差:

因為不同的 transition 被人為附上了不同的概率,成為了非均勻抽樣,這樣會造成 DQN預測有偏差,通過調整學習率來矯正:

當所有 transition 的概率都一樣,那麼所有的 transition 的學習率一樣。如果非均勻抽樣,需要根據不同的 transition 概率來調整學習率。

  • 如果 transition 的抽樣概率較大,應當調小它的學習率;
  • 具體操作是用\((n \cdot p_t)^{-\beta},\beta\in(0,1)\) 乘以 學習率 α,n 是佇列容量,β 是一個0~1之間的數,是超引數,論文中一般從很小增長到1。

下面再考慮一個事情:

即,在優先經驗回放中,我們需要把 TD-error 跟 transtions 放在一起,而剛放入佇列的 transition 還沒有進行訓練 DQN,不知道 TD-error,這時直接把它的 \(\delta\) 設為最大值,給他最高的權重;

每次我們使用了 transition 之後,重新計算 它的 \(\delta_t\),更新 transition 的權重。

x. 參考教程

相關文章