Continuous Deep Q-Learning with Model-based Acceleration
本文提出了連續動作空間的深度強化學習算法。
開始正文之前,首先要弄清楚兩個概念:Model-free 和 Model-based。引用 周志華老師的《機器學習》中的一段話來解釋這個概念,即:
Model-based learning:機器已對環境進行了建模,能夠在機器內部模擬出與環境相同或者近似的狀況。在已知模型的環境中學習稱為“有模型學習”,也就是這里講的 model-based learning。此時,對於任意狀態 x,x' 和 動作 a,在狀態 x 下執行 動作 a 轉移到 狀態 x' 的概率p 是已知的,該轉移所帶來的獎賞 R 也是已知的。
那么,於此相對應,就是 Model-free learning。
那么什么是:on-policy 什么是:off-policy ?
我們知道一個策略的好壞需要進行評估,然后對學習到的比較差的策略,需要進行改進,完善。那么問題來了,如果說被評估和被改進的是同一個策略,那么就是屬於:on-policy,否則,如果 被評估 和 被改進的不是同一個策略,則是屬於 off-pocicy。
那么我們就想問?哪個比較好?為什么說 策略評估 和 策略改進不是同一個策略 ??
恩 這個問得好!答案是: 。 。 。
Model-free RL 已經成功的應用於許多具有挑戰性的問題,最近也被拓展去處理大型神經網絡策略和值函數。但是,model-free 算法的樣本復雜性,特別是當使用高維的函數估計時,使其應用范圍局限在物理系統中。本文,探索了一種新的在連續控制任務上降低樣本復雜性的探索算法 和 表示。提出了兩種互補性的技術來改善該算法的效率。首先,我們提出一個連續的Q-learning algorithm 的變種,並且命名為:Normalized adantage function (NAF),來替換經常使用的 策略梯度 和 actor-critic methods。NAF 允許我們利用 Q-learning 和 經驗回放來處理連續的任務,並且在模擬的機器人控制任務上提升了性能。為了進一步的提升我們算法的效率,本文探索了利用學習到的模型來加速 model-free RL 的過程。
引言部分:
Model-free RL 已經成功的應用於一系列的具有挑戰性的問題上。並且已經拓展到大型的神經網絡和策略值函數上,這使得直接將原始表態表示作為輸入傳給神經網絡,來訓練策略對付復雜的任務。但是,model-free 算法的樣本復雜性,特別是當使用高維的函數估計時,使其應用范圍局限在物理系統中。在這種情況下,選擇有效的 model-free algorithms 使用更加合適的,特定任務的表示,以及 model-based algorithms 來用監督學習的方法來學習系統的模型,並且在該模型下進行策略的優化。利用特定任務的表示顯著的改善了效率,但是限制了能夠從更加廣泛的 domain 知識上學習和掌握的任務的范圍。利用 model-based RL 能夠改善效率,但是約束了策略只是和學習到的 model 一樣好。在許多實際任務上,去表示一個好的策略 可能比 學習一個好的model 更加容易。所以,通過降低樣本的復雜性,改善 model-free DRL 的泛化能力到實際 domains。
本文提出了兩個互補性的技術來改善 DRL 在連續控制領域的效率:
1. 提出 Q-learning 的變種,適用於連續領域;
2. 結合 連續的 Q-learning 和 學習到的模型,來加速學習的過程。
除了提出一種改善的 model-free DRL 算法之外,本文也結合了 model-based RL 來加速學習過程,而沒有扔掉 model-free 方法的優勢。
一種方式是:對於 off-policy 算法,例如:Q-learning 結合由一個 model-based planner 產生的 off-policy experience。但是,這個解是自然的一個,我們經驗評價表明這沒法有效的加速學習。就像我們在評價中討論的那樣,這部分是由於 值函數估計算法的本質問題,必須要經歷好的和壞的狀態轉移來准確的對值函數進行建模。我們提出了另一種方法來結合學習的模型到我們的連續動作 Q-learning 算法,基於 imagenation rollouts:
on-policy samples generated under the learned model, analogous to the Dyna-Q method.
本文的創新點有:
1. 我們得到和評價一個 Q-function表示,可以進行有效的連續 domains 的Q-learning;
2. 我們評價幾個 naive 的方法來融合學習到的模型 和 model-free Q-learning,但是表明在我們連續控制任務上幾乎沒有影響;
3. 我們提出將 局部線性模型 和 局部 on-policy imagination rollouts 來加速 model-free 連續的 Q-learning,並且表明這個操作在樣本復雜性上產生了巨大的改善。
Background:
Model-Free Reinforcement Learning
當 system dynamics $p(x_{t+1}|x_t, u_t)$ 是未知的,就像實際系統當中,如機器人中經常遇到的。Off-policy 算法利用值或者 Q-函數估計原則上可以達到很好的數據效率,但是,采用這種方法在連續的任務上通常需要在不同的目標上優化兩個函數估計。我們不采用標准的 Q-learning,因為其只有一個目標。本節總結下 Q-learning,此粗略的介紹下,有需要請看原文。
Q-learning 的目標就是在一個狀態下,選擇一個動作 a,使得得到的獎賞最大化,即:
上面這個公式就是 Q 函數,學習的目標就是最小化 Bellman error,我們固定 目標 $y_t$:
其中,這個就是和神經網絡結合之后的產物,將下一個時刻的最大化的Q值作為要學習的目標,也可以看做是監督學習當中的 label。
對於連續動作問題, Q-learning 就變得困難了,因為每次迭代它都需要最大化一個復雜的 非線性的函數。
就是由於這個原因,連續領域經常利用 actor-critic methods 來解決,除了要學習 Q 函數 或者 值函數“critic”,還需要學習一個額外的參數化的 “actor”策略 $\pi$,如:DDPG 算法。
為了描述我們的方法,此處也定義 在給定策略 $\pi$之后,值函數 V 和 優勢函數 A:
Model-based Reinforcement Learning :
。 。 。
4. Continuous Q-learning with Normalized Advantage Functions :
我們首先提出一種簡單的方法來使得 Q-laarning 可以在連續動作空間和深度神經網絡相結合,此處稱為:Normalized Advantage Functions(NAF)。歸一化優勢函數(Advantage Function)背后的 idea 是為了表示 Q-learning 當中的 Q-function Q(xt, ut),使得 其最大值可以在Q-learning 更新的過程中簡單,且有理有據的決定。
將 Q 值分解為 兩項,即: advantage term A 和 state-value term V 其實早在 1993 和 1996 年救被人提出來了,只是最近 ICML 2016 的 Best Paper 又將其在離散的動作問題上進行了探索。
本文的初始算法流程總結如下:
our method is the first to combine such representations with deep neural networks into an algorithm that can be used to learn policies for a range of challenging continuous control tasks.
本文是第一個將 動作值函數和深度學習網絡 融合進一個算法,並且將其用於學習策略,從而實現應用在連續控制任務上。
算法理解:
隨機的初始化歸一化的 Q network ;
利用上述初始化的 Q network 來初始化目標網絡 Q' ;
初始化 回放容器(replay buffer)R ;
對於 episode 1:M
初始化一個隨機過程 $\mathcal{N}$ 來進行動作的探索;
接收初始觀測狀態 x1~p(x1);
對於 t = 1:T
選擇一個 action $ u_t $;
執行該動作,觀察得到的獎賞 r_t 和 轉移后的狀態 $x_{t+1}$;
在回放容器 R 中存儲 transitions $(x_t, u_t, r_t, x_{t+1})$;
對於迭代次數 = 1:I ,
從回放單元 R 中隨機的抽取一個由 m 個 transitions 得到的 minibatch;
設置 ; ---> 設置目標或者講是:label
---> 相當於是在訓練網絡結構的參數;
更新目標網絡 ;
5. Accelerating Learning with Imagination Rollouts
NAF 展現出在連續控制領域,對比 actor-critic model-free RL 方法的優勢,但是結合已經學習到的 model,在一些額外假設的條件下,可以改善數據的有效性(Improve data efficiency)。我們將表明將特定類型的學習到的model 結合到 帶有 NAF 的Q-learning 算法當中,可以改善 sample efficiency;而與此同時,用 model-free learning 可以微調 final policy 達到較好的效果。
5.1. Model-Guided Exploration
一個很直觀的方法來結合學習到的 model 到 一個 off-policy 算法當中,就是利用學習到的 model 通過規划(planning)或者軌跡優化(trajectory OPtimization)來產生好的探索行為。為了評價這個 idea,我們利用了 iLQG 算法在該模型的基礎上來產生好的軌跡,然后將這些軌跡 和 replay buffer 混合在一起。但是有意思的是,即使在 真正的model下進行 planning,用這種方法得到的提升也是很小的。導致這種結果的潛在直覺是:off-policy iLQG 探索和學習到的策略大不相同,而 Q-learning 必須要考慮到不同,為了弄清楚給定動作的優越性。也就是說,只展示給算法 good actions 使不夠的,而必須也讓其經歷 bad actions 來徹底的理解哪些動作更好 或者 哪些更壞。
5.2 Imagition Rollouts
上述結果表明:Q-learning 基於最小化時間差來學習一個策略,需要有噪聲的 on-policy actions 來繼承。
基於學習到的 model 產生合成的 on-policy trajectories ,加上這些合成的樣本到 replay buffer,(我們稱為: imagination rollouts)來增強 Q-learning 可用經驗的數量。我們使用的特定方法是利用混合的 planned iLQG trajectories 和 on-policy trajectories 在實際世界中執行 rollouts, 然后 我們利用學習到的 model 產生額外的合成 on-policy rollouts。這種方法可以看做是 Dyna-Q algorithm的一個變種。但是 Dyna-Q 主要用來處理小的 離散的系統,利用迭代的 refitting 線性模型允許我們拓展該方法到 DRL 的連續控制領域(continous control domains)。在一些場景中,我們甚至可以產生所有后者大部分的實際 rollouts,這里用的是 off-policy iLQG controllers,這在 safety-critic domains 是非常關鍵的,因為殘缺的訓練策略可能會采取危險的actions。
知乎上“DQN 從入門到放棄系列”:
DQN從入門到放棄7 連續控制DQN算法-NAF
1 前言
在上一篇文章DQN從入門到放棄6 DQN的各種改進中,我們介紹了DQN的各個方面的改進。從各種改進的角度和思路很有利於我們思考如何去創新這個事情。那么,本着從入門到放棄的精神[呲牙],在今天這篇文章中,我們還是來分析一下將DQN拓展到連續控制的算法------NAF。
2 DQN算法用在連續控制上存在的問題
從之前對DQN的分析,大家已經知道,DQN是一個面向離散控制的算法,也就是說輸出的動作是離散的,不是連續的。這里也單獨說一下離散控制和連續控制。這可以認為是增強學習任務的一種分類方法。那么一開始在沒有引入深度學習的情況下,增強學習的任務基本是面向低維輸入,低維輸出的問題,因為高維的問題難度實在是太大,很難收斂。那么,DQN,引入了深度學習,使得輸入可以拓展到高維空間,比如玩Atari,完全圖像輸入,維度是80x80=6400維,但是玩Atari的輸出只是離散的鍵盤按鍵輸出,比如Breakout這個游戲,也就是4個輸出。而如果問題換成一個機械臂的控制呢?假設有6個關節,然后每個關節的扭矩輸出是連續值,也就是在一個范圍內任意取值,比如(-1,1)。那么,即使把每一個輸出離散化,比如精度到0.01,那么一個動作有200個取值,那么6個關節也就是1200個取值,這比4個輸出大得多。更何況如果進一步提升這個精度,那么取值的數量就成倍增加了。這就是連續控制比離散控制難得多的地方。
那么DQN為什么沒辦法直接用在連續控制上呢?原因很簡單,DQN依靠計算每一個動作的Q值,然后選擇最大的Q值對應的動作。那么這種方法在連續控制上完全不起作用。因為,根本就沒辦法窮舉每一個動作,也就無法計算最大的Q值對應的動作。
所以,問題也就來了:
如何將DQN拓展成能夠用在連續控制上的深度增強學習算法?
3 Continuous Deep Q-Learning with NAF
http://arxiv.org/abs/1603.00748
在上面這篇Paper中,作者提出了一種idea來實現連續控制。基本思路是這樣的:
Step 1:在DQN的框架下,連續控制的輸出需要滿足什么條件?
因為DQN是通過計算Q值的最大值來選擇動作。那么對於連續控制,我們已經無法選擇動作,我們只能設計一種方法,使得我們輸入狀態,然后能夠輸出動作,並且保證輸出動作對應的Q值是最大值。
Step 2:又要輸出動作,又要輸出Q值?
第一步的分析我們會發現一個兩難的境地,就是我們輸入狀態,輸出的時候,既要能輸出動作,還要能輸出Q值。那么這個時候,我們有兩種選擇,一種就是弄兩個神經網絡,一個是Policy網絡,輸入狀態,輸出動作,另一個是Q網絡,輸入狀態,輸出Q值。另外一種就是弄一個神經網絡,既輸出動作,有能輸出Q值。先說第一種做法。這種做法其實就是Actor-Critic算法的做法。這種做法需要能夠構建一個能夠更新Policy網絡的方法。而DQN並沒有提供更新Policy網絡的方法。這使得我們要基於DQN做文章,只有一個辦法,就是只弄一個神經網絡,既能輸出動作也能輸出Q值。But,how?
Step 3:如何構建神經網絡,又能輸出動作,也能輸出Q值,而且動作對應的Q值最大?
這個問題確實是很困難的一個問題,很難直接就想出一個好的做法。雖然在Paper中作者其實只用了一段話來說明他們的方法,但是確實是很酷的idea。先提一下這些作者Shixiang Gu, Timothy Lillicrap, Ilya Sutskever, Sergey Levine 后面兩個都很牛。然后我們還是直接分析他們提出的方法吧!
上圖就是這個方法的示意圖了。輸入輸出關系非常復雜。正常簡單的Q網絡就是200relu之后直接輸出Q,但是這里經過很多復雜的步驟之后才輸出Q。
基本的idea就是引入了Advantage,也就是每一個動作在特定狀態下的優劣。我們不是要選最優的動作嗎?其實就是要選Advantage最大的動作。Q,A(Advantage)和V(Value)的關系如下:

所以,核心idea來了:如果我們能夠限制A小於等於0,並且選擇的動作對應的A為0,那么問題就解決了。要做到這點,一種簡單的想法就是讓
P為正
也就是二次方程取負。這個時候當a=x即選擇的動作時為0.
那么具體構建當然是用矩陣的方式來構建。只是顯然復雜的多。
state經過兩個200層的神經網絡(包含非線性)后分別構建三個分力的全連接層,輸出Value,mu(動作)還有構建矩陣P所需的L0。也就是同時輸出了價值還有動作
那么最大的問題就是如何構造A的矩陣表示了。
上式是A的矩陣表示,也就是一個二次型。其中x是狀態,u是動作,mu是神經網絡的輸出動作。
那么令,也就是

即

要滿足這個要求,P必須為正定矩陣。這本身也就是正定矩陣的定義。
接下來就是如何構造P的問題了。
這里作者竟然采用了喬列斯基(Cholesky)分解:
若A為n階對稱正定矩陣,則存在唯一的主對角線元素都是正數的下三角陣L,使得,此分解式稱為 正定矩陣的喬列斯基(Cholesky)分解。
也就是構造了一個對角線元素都是正數的下三角陣L,然后利用L構造P。
---------------------------------------------------------------------------------------
上面的分析確實是有點復雜。
那么我們再回到上面那個神經網絡流程圖來具體看看神經網絡具體是怎么處理的?
1)State,維度是輸入維度state_dim
2) 經過兩個200的RELU全連接層
3)輸出V,維度為1
4)輸出mu(動作),維度為動作的維度action_dim
5)輸出L0,維度為(action_dim)x(action_dim+1)/2,也就是構造下三角矩陣L所需要的維度
6)構造L。將L0轉化為L.也就是將一個列向量轉換為下三角矩陣,就是從新排列,然后把對角線的數exp對數化。
7)根據L構造P。
8)根據mu,P,action構造A
9)根據A和V構造Q,也就是Q=A+V
綜上,最終輸出Q,並且可以根據DQN的方法進行梯度下降。
以上就是這個算法的整個過程。
3 小結
這個算法確實設計精美,但實現起來其實蠻復雜。未來需要有更多的改進!