针对连续动作的DQN
1 前言
????????跟基于策略梯度的方法比起來,DQN在處理連續狀態的問題中 是比較好的。(因為前者是計算Q-table,后者是計算Q-function。前者在狀態空間連續的時候是很難計算的)。
? ? ? ? 同時,DQN是比較容易訓練的:在 DQN 里面,你只要能夠估計出Q函數,就保證你一定可以找到一個比較好的策略。也就是你只要能夠估計出Q函數,就保證你可以改進策略。而估計Q函數這件事情,是比較容易的,因為它就是一個回歸問題。在回歸問題里面, 你可以輕易地知道模型學習得是不是越來越好,只要看那個回歸的損失有沒有下降,你就知道說模型學習得好不好,所以估計Q函數相較于學習一個策略是比較容易的。
? ? ? ? 但是,DQN也存在一些問題,最大的問題是它不太容易處理連續動作。假設動作是連續的,做 DQN 就會有困難。因為在做 DQN 里面一個很重要的一步是你要能夠解這個優化問題。估計出 Q函數Q(s,a)?以后,必須要找到一個?a,它可以讓?Q(s,a)最大
????????假如a是連續的,你無法窮舉所有可能的連續動作,來看哪一個連續動作可以讓 Q 的值最大。
?
????????那么,怎么解決這個問題呢?第八章 DQN (連續動作) (datawhalechina.github.io)?提出了四種方案:
2 方案1
????????采樣出?N?個可能的?a:,一個一個帶到 Q函數里面,看那個最大。
????????當然這不是一個非常精確的做法,因為你沒有辦法做太多的采樣, 所以你估計出來的 Q 值,最后決定的動作可能不是非常的精確
3 方案2
????????既然要解的是一個優化問題,那么我們要做的其實就是要最大化目標函數Q。
????????要最大化一個東西, 就可以用梯度上升。
????????我們就把a當作是參數,然后要找一組a去最大化Q函數,就用梯度上升去更新?a?的值,最后看看能不能找到一個a去最大化Q函數,也就是目標函數。
? ? ? ? 但這種方案會遇到兩個問題:
1)全局最大值的問題,我們可能會停在局部最大值, 就不見得能夠真的找到最優的結果。
2)這個運算量會很大,因為我們需要迭代地訓練Q函數和a的值。我們訓練一個Q函數網絡就很花時間了。如果你用梯度上升的方法來計算當前最優的a, 等于是你每次要決定采取哪一個動作的時候,都還要做一次訓練網絡的過程,顯然運算量是很大的。
4 方案3
? ? ? ? 第三個方案是特別設計一個網絡的架構,或者說是特別設計Q函數,使得解 arg max 的問題變得非常容易。
????????也就是說,這邊的Q函數不是一個一般的Q函數,特別設計一下這個Q函數,是的Q函數最大的時候,a比較容易去求得。
? ? ? ? 怎么去設計這個Q函數,是一個學問。(有些問題可能找不到這樣的Q函數,或者Q函數不好找,這也是這一方案的局限性)下面舉一個例子:
????????輸入?s,Q函數會輸出 3 個東西。向量μ(s),矩陣Σ(s),標量V(s)。
? ? ? ? 我們知道Q函數是需要輸入一個狀態s和一個動作a,然后決定一個值。我們現在只輸入了s,還沒有將a加進來。【這個例子里面a是機器人各個關節的旋轉角度,也是一個向量】
? ? ? ? 于是之后我們處理Q(s,a),用a和μ(s),Σ(s),V一起計算最終的Q
????????把向量?a?減掉向量μ,取轉置,所以它是一個行向量。Σ?是一個矩陣。然后a減掉 μ(s)?,是一個列向量。所以是一個標量,這個數值就是 這個例子里面的Q(s,a)。
????????假設?Q(s,a)?定義成這個樣子,我們要怎么找到一個a去最大化這個 Q 值呢?這個方案非常簡單。
? ? ? ? 我們人為令Σ是一個正定矩陣(這個由的設計決定,它直接輸出的不是正定矩陣,然后這個矩陣通過一些操作使它變成正定矩陣輸入,稱為Σ(s))
? ? ? ? 因而此時一定是正的,它前面乘上一個負號。所以第一項假設我們不看這個負號的話,第一項的值越小,最終的 Q 值就越大。
????????怎么讓第一項的值最小呢?直接把a代入?μ?的值,讓它變成 0,就會讓第一項的值最小。
5 方案4?
????????第 4 種方案就是不要用 DQN。用 DQN 處理連續動作還是比較麻煩。 基于策略的方法 PPO 和基于價值的方法 DQN,這兩者其實是可以結合在一起的,如下圖所示,也就是演員-評論員的方法。
?
總結
以上是生活随笔為你收集整理的针对连续动作的DQN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: osmnx 应用 可视化两张图异同的点和
- 下一篇: 强化学习笔记:Actor-critic