DDPG 算法(深入理解DDPG)
大家好,又見面了,我是你們的朋友風君子。
DDPG 算法
1 離散動作 vs. 連續動作
離散動作與連續動作是相對的概念,一個是可數的,一個是不可數的。
- 在 CartPole 環境中,可以有向左推小車、向右推小車兩個動作。在 Frozen Lake 環境中,小烏龜可以有上下左右四個動作。在 Atari 的 Pong 游戲中,游戲有 6 個按鍵的動作可以輸出。
- 但在實際情況中,經常會遇到連續動作空間的情況,也就是輸出的動作是不可數的。比如說推小車力的大小、 選擇下一時刻方向盤的轉動角度或者四軸飛行器的四個螺旋槳給的電壓的大小等等。
對于這些連續的動作控制空間,Q-learning、DQN 等算法是沒有辦法處理的。那我們怎么輸出連續的動作呢,這個時候,萬能的神經網絡又出現了。在上面這個離散動作的場景下,比如說我輸出上下或是停止這幾個動作。有幾個動作,神經網絡就輸出幾個概率值,我們用
來表示這個隨機性的策略。在連續的動作場景下,比如說我要輸出這個機器人手臂彎曲的角度,這樣子的一個動作,我們就輸出一個具體的浮點數。我們用
來代表這個確定性的策略。
我們再解釋一下隨機性策略跟確定性策略。
- 對隨機性的策略來說,輸入某一個狀態 s,采取某一個 action 的可能性并不是百分之百,而是有一個概率 P 的,就好像抽獎一樣,根據概率隨機抽取一個動作。
- 而對于確定性的策略來說,它沒有概率的影響。當神經網絡的參數固定下來了之后,輸入同樣的 state,必然輸出同樣的 action,這就是確定性的策略。
- 要輸出離散動作的話,我們就是加一層 softmax 層來確保說所有的輸出是動作概率,而且所有的動作概率加和為 1。
- 要輸出連續動作的話,一般可以在輸出層這里加一層 tanh。tanh 的圖像的像右邊這樣子,它的作用就是可以把輸出限制到 [-1,1] 之間。我們拿到這個輸出后,就可以根據實際動作的一個范圍再做一下縮放,然后再輸出給環境。比如神經網絡輸出一個浮點數是 2.8,然后經過 tanh 之后,它就可以被限制在 [-1,1] 之間,它輸出 0.99。然后假設說小車的一個速度的那個動作范圍是 [-2,2] 之間,那我們就按比例從 [-1,1] 擴放到 [-2,2],0.99 乘 2,最終輸出的就是 1.98,作為小車的速度或者說推小車的力輸出給環境。
2 DDPG(Deep Deterministic Policy Gradient)
在連續控制領域,比較經典的強化學習算法就是 DDPG(Deep Deterministic Policy Gradient)。DDPG 的特點可以從它的名字當中拆解出來,拆解成 Deep、Deterministic 和 Policy Gradient。
- Deep 是因為用了神經網絡;
- Deterministic 表示 DDPG 輸出的是一個確定性的動作,可以用于連續動作的一個環境;
- Policy Gradient 代表的是它用到的是策略網絡。REINFORCE 算法每隔一個 episode 就更新一次,但 DDPG 網絡是每個 step 都會更新一次 policy 網絡,也就是說它是一個單步更新的 policy 網絡。
DDPG 是 DQN 的一個擴展的版本。在 DDPG 的訓練中,它借鑒了 DQN 的技巧:目標網絡和經驗回放。經驗回放這一塊跟 DQN 是一樣的,但 target network 這一塊的更新跟 DQN 有點不一樣。
提出 DDPG 是為了讓 DQN 可以擴展到連續的動作空間,就是我們剛才提到的小車速度、角度和電壓的電流量這樣的連續值。所以 DDPG 直接在 DQN 基礎上加了一個策略網絡,就是藍色的這個,用來直接輸出動作值。所以 DDPG 需要一邊學習 Q 網絡,一邊學習策略網絡。Q 網絡的參數用 w 來表示。策略網絡的參數用 \theta 來表示。我們稱這樣的結構為 Actor-Critic 的結構。
通俗地解釋一下 Actor-Critic 的結構,
- 策略網絡扮演的就是 actor 的角色,它負責對外展示輸出,輸出舞蹈動作。Q 網絡就是評論家(critic),它會在每一個 step 都對 actor 輸出的動作做一個評估,打一個分,估計一下它做一次的 action 未來能有多少收益,也就是去估計這個 actor 輸出的這個 action 的 Q 值大概是多少,即 Q_w(s,a)。 Actor 就需要根據舞臺目前的狀態來做出一個 action。
- 評論家就是評委,它需要根據舞臺現在的狀態和演員輸出的 action 這兩個值對 actor 剛剛的表現去打一個分數 Q_w(s,a)。所以 actor 就是要根據評委的打分來調整自己的策略。也就是更新 actor 的神經網絡參數 \theta, 爭取下次可以做得更好。而 critic 就是要根據觀眾的反饋,也就是環境的反饋 reward 來調整自己的打分策略,也就是要更新 critic 的神經網絡的參數 w ,它的目標是要讓每一場表演都獲得觀眾盡可能多的歡呼聲跟掌聲,也就是要最大化未來的總收益。
- 最開始訓練的時候,這兩個神經網絡參數是隨機的。所以 critic 最開始是隨機打分的,然后 actor 也跟著亂來,就隨機表演,隨機輸出動作。但是由于我們有環境反饋的 reward 存在,所以 critic 的評分會越來越準確,也會評判的那個 actor 的表現會越來越好。既然 actor 是一個神經網絡,是我們希望訓練好的這個策略網絡,那我們就需要計算梯度來去更新優化它里面的參數 \theta 。簡單的說,我們希望調整 actor 的網絡參數,使得評委打分盡可能得高。注意,這里的 actor 是不管觀眾的,它只關注評委,它就是迎合評委的打分,打的這個 Q_w(s,a) 而已。
接下來就是類似 DQN。DQN 的最佳策略是想要學出一個很好的 Q 網絡。 學好這個網絡之后,我們希望選取的那個動作使你的 Q 值最大。DDPG 的目的也是為了求解讓 Q 值最大的那個 action。Actor 只是為了迎合評委的打分而已,所以用來優化策略網絡的梯度就是要最大化這個 Q 值,所以構造的 loss 函數就是讓 Q 取一個負號。我們寫代碼的時候要做的就是把這個 loss 函數扔到優化器里面,它就會自動最小化 loss,也就是最大化這個 Q。然后這里注意,除了策略網絡要做優化,DDPG 還有一個 Q 網絡也要優化。評委一開始也不知道怎么評分,它也是在一步一步的學習當中,慢慢地去給出準確的打分。那我們優化 Q 網絡的方法其實跟 DQN 優化 Q 網絡的方法是一模一樣的,我們用真實的 reward r 和下一步的 Q 即 Q’ 來去擬合未來的收益也就是 Q_target。
然后讓 Q 網絡的輸出去逼近這個 Q_target。所以構造的 loss function 就是直接求這兩個值的均方差。構造好 loss 后,之后我們就扔進去那個優化器,讓它自動去最小化 loss 就好了。
那我們把兩個網絡的 loss function 就可以構造出來。我們可以看到策略網絡的 loss function 是一個復合函數。我們把那個
代進去,最終策略網絡要優化的是策略網絡的參數 \theta 。
Q 網絡要優化的是那個 Q 的輸出 Q_w(s,a) 和那個 Q_target 之間的一個均方差。但是 Q網絡的優化存在一個和 DQN 一模一樣的問題就是它后面的這個 Q_target 是不穩定的。這個在之前的 DQN 有講過。后面的
也是不穩定的。因為
也是一個預估的值。為了穩定這個 Q_target。DDPG 分別給 Q 網絡和策略網絡都搭建了 target network,專門就是為了用來穩定這個 Q_target。
target_Q 網絡就為了來計算 Q_target 里面的
。然后
里面的需要的 next action a’ 就是通過 target_P 網絡來去輸出,即
為了區分前面的 Q 網絡和策略網絡以及后面的 target_Q 網絡和 target_P 策略網絡。前面的網絡的參數是 w,后面的網絡的參數是
。這就是為什么我們去看一些 DDPG 的文章,會發現 DDPG 會有四個網絡。策略網絡的 target 網絡 和 Q 網絡的 target 網絡就是顏色比較深的這兩個,它只是為了讓計算 Q_target 的時候能夠更穩定一點而已。因為這兩個網絡也是固定一段時間的參數之后再跟評估網絡同步一下最新的參數。
這里面訓練需要用到的數據就是 s,a,r,s’。我們只需要用到這四個數據,我們就用 Replay Memory 把這些數據存起來,然后再 sample 進來訓練就好了。這個經驗回放的技巧跟 DQN 是一模一樣的。注意,因為 DDPG 使用了經驗回放這個技巧,所以 DDPG 是一個 off-policy 的算法。
3 Exploration vs. Exploitation
DDPG 通過 off-policy 的方式來訓練一個確定性策略。因為策略是確定的,如果 agent 使用同策略來探索,在一開始的時候,它會很可能不會嘗試足夠多的 action 來找到有用的學習信號。為了讓 DDPG 的策略更好地探索,我們在訓練的時候給它們的 action 加了噪音。DDPG 的原作者推薦使用時間相關的 OU noise,但最近的結果表明不相關的、均值為 0 的 Gaussian noise 的效果非常好。由于后者更簡單,因此我們更喜歡使用它。為了便于獲得更高質量的訓練數據,你可以在訓練過程中把噪聲變小。
在測試的時候,為了查看策略利用它學到的東西的表現,我們不會在 action 中加噪音。
- 百度強化學習課
- OpenAI Spinning Up
總結
以上是生活随笔為你收集整理的DDPG 算法(深入理解DDPG)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux dmaengine编程
- 下一篇: 学习笔记76—重复测量和配对检验,随机区