上圖展示了 I2A 的工作方式。觀察一開始就會被傳遞給無模型元件和基於模型的元件。在基於模型的元件中,會根據在當前狀態可能採取的 n 個動作來想象 n 個不同的軌跡。這些軌跡是透過將動作和狀態輸入其內部環境模型而得到的,從而能夠過渡到新的想象狀態,然後取其中能得到最大化結果的動作。一個蒸餾後的想象策略(與透過交叉熵損失的最終策略相似)選擇下一個動作。經過固定的 k 個步驟之後,這些軌跡會被編碼並被聚合到一起,然後會與無模型元件的輸出一起輸入策略網路。關鍵的地方在於,這種編碼能讓策略以最有用的方式解讀想象軌跡——如果不合適就忽視它們,在可用時就提取出其中與獎勵無關的資訊。
目前有很多研究者都在探索如何有效結合基於模型的方法和無模型方法。Berkeley AI 提出了一種時間差分模型:https://bair.berkeley.edu/blog/2018/04/26/tdm/;其也有一個非常有趣的前提。其思想是讓智慧體設定更多時間上抽象的目標,即「在 k 個時間步驟內處於 X 狀態」,然後在保證最大化每 k 個步驟所收集到的獎勵的同時學習這些長期的模型過渡。這能為我們提供對動作的無模型探索和在高層目標上的基於模型的規劃之間的平滑過渡——如果思考一下這種方法,你會發現這又會將我們帶回分層式強化學習。
深度強化學習是近年來人工智慧領域內最受關注的研究方向之一,並已在遊戲和機器人控制等領域取得了很多耀眼的成果。DeepMind 的工程師 Joyce Xu 近日發表了一篇部落格文章,介紹了深度強化學習領域的一些近期進展,其中涉及到分層式強化學習、記憶、注意機制、世界模型和想象等方向。
我覺得,深度強化學習最讓人喜歡的一點是它確實實在難以有效,這一點不同於監督學習。用神經網路來解決一個計算機視覺問題可能能達到 80% 的效果;而如果用神經網路來處理強化學習問題,你可能就只能眼睜睜地看著它失敗——而且你每次嘗試時遭受的失敗都各不相同。
強化學習領域內的很多最大的挑戰都圍繞著兩大問題:如何有效地與環境互動(比如探索與利用、樣本效率),以及如何有效地從經歷中學習(比如長期信用分配、稀疏獎勵訊號)。在這篇文章中,我希望探討深度強化學習領域內試圖解決這些挑戰的幾個近期研究方向,並且還會將其與人類認知進行優雅簡潔的對比。具體而言,我將談到:
分層式強化學習
記憶和預測建模
將無模型方法與基於模型的方法組合到一起
本文首先將簡要介紹兩個代表性的深度強化學習演算法——DQN 和 A3C,以為後文提供能夠作為參考的直觀知識,然後我們會深入探討幾篇近期的論文和研究突破。
DQN 和 A3C/A2C
宣告:我假設讀者已經對強化學習有一定的基本瞭解了(因此這裡不會提供有關這些演算法的深度教程),但就算你對強化學習演算法的工作方式並不完全瞭解,你應該也能閱讀後文的內容。
DeepMind 的 DQN(深度 Q 網路)是將深度學習應用於強化學習的最早期突破性成功之一。其中使用了一個神經網路來學習用於經典 Atari 遊戲的 Q 函式,比如《乒乓球》和《打磚塊》,從而讓模型可以直接根據原始畫素輸入得出應該採取的動作。
從演算法上看,DQN 直接源自經典的 Q 學習技術。在 Q 學習中,一個狀態-動作對的 Q 值(即 quality 值)是透過基於經歷的迭代式更新來估計的。從本質上講,對於某個狀態下我們可採取的每個動作,我們都可以使用收到的即時獎勵和對新狀態的價值估計來更新原來的狀態-動作對的價值估計:
DQN 的訓練是最小化時間差分誤差(TD-error)的 MSE(均方誤差),如上所示。DQN 使用了兩個關鍵策略來使 Q 學習適用於深度神經網路,而且這兩個策略也在後續的深度強化學習研究中得到了成功的應用。這兩個策略為:
經歷重放(experience replay),其中每個狀態/動作轉換元組 (s, a, r, s』) 都儲存在一個記憶「重放」快取衝,並會被隨機取樣以用於訓練網路,從而可實現對訓練資料的重複使用和去除連續軌跡樣本中的相關性。
使用一個單獨的目標網路(即上式中的 Q_hat 部分)來實現訓練的穩定,所以 TD 誤差不是根據源自訓練網路的不斷變化的目標計算的,而是根據由一個基本固定的網路所生成的穩定目標計算的。
在那之後,DeepMind 的 A3C(Asynchronous Advantage Actor Critic)和 OpenAI 的同步式變體 A2C 也非常成功地將深度學習方法推廣到了 actor-critic 方法上。
actor-critic 方法將策略梯度方法與一種學習後的價值函式結合到了一起。對於 DQN 方法,我們僅有學習後的價值函式(即 Q 函式),而我們遵循的「策略」只是簡單地在每個步驟取能最大化 Q 值的動作。使用 A3C 和使用其它 actor-critic 方法一樣,我們會學習兩個不同的函式:策略(即 actor)和價值(即 critic)。策略函式是基於採取該動作的當前估計優勢(advantage)來調整動作機率,而價值函式則是基於經歷和後續策略收集到的獎勵來更新該優勢:
從上面的更新可以看出,價值網路會學習一個基線狀態值 V(s_i;θ_v),我們可以將其與我們的當前獎勵估計 R 進行比較,從而得到「優勢」;策略網路則會透過經典的 REINFORCE 演算法根據該優勢調整動作的對數機率。
A3C 真正的貢獻在於其並行化和非同步化的架構:多個 actor 學習器被分派到不同的環境例項中;它們全都會與環境進行互動並收集經歷,然後非同步地將它們的梯度更新推送到一箇中心的「目標網路」(一個借用自 DQN 的思路)。之後,OpenAI 的 A2C 研究表明非同步方式實際上對效能沒有貢獻,而且事實上還會降低樣本效率。對這些架構的詳細解釋已經超出了本文的覆蓋範圍,但如果你和我一樣對分散式智慧體感興趣,那一定要看看 DeepMind 的 IMPALA,這是一種非常有用的設計正規化,可用於實現對學習的擴充套件:https://arxiv.org/abs/1802.01561。
DQN 和 A3C/A2C 都是非常強大的基線智慧體,但是在面對更加複雜的任務、嚴重的部分可觀察性和/或動作與相關獎勵訊號之間存在較長延遲時,這些智慧體往往難以為繼。因此,強化學習研究中有一整個子領域在致力於解決這些問題。接下來我們看看其中一些優秀的研究。
分層式強化學習(HRL)
分層式強化學習是一類從多個策略層學習的強化學習方法,其中每一層都負責控制不同層面的時間和行為抽象。最低層面的策略負責輸出環境動作,讓更高層面的策略可以操作更抽象的目標和更長的時間尺度。
為什麼這種方法很吸引人?首先也是最重要的一點是在認知方面,有很多研究都認為人類和動物行為都基於分層式結構。這在日常生活中有直觀的體現:當我決定做一頓飯時(實際上我基本從不做飯,但為了合理論述,就假設我是一個負責的人類吧),我會將這一任務分成多個更簡單的子任務(切蔬菜、煮麵條等),但絕不會忽視我要做飯的總體目標;我甚至還能切換不同的子任務來完成同樣的目標,比如不煮麵條而是蒸飯。這說明真實世界任務中存在固有的層次結構和組合性質,因此可將簡單的基礎動作串接、重複或組合起來以完成複雜的工作。近些年的一些研究甚至發現 HRL 元件與前額葉皮質中的特定神經結構之間存在直接的相似性。
從技術方面看,HRL 尤其引人注目,因為它能幫助解決我們前文提到的第二個問題的兩大挑戰:如何有效地從經歷中學習(比如長期信用分配、稀疏獎勵訊號)。在 HRL 中,因為低層策略是基於高層策略分配的任務從內在獎勵中學習的,所以儘管獎勵稀疏,基礎任務仍可得以學習。此外,高層策略發展起來的時間抽象讓我們的模型可以根據時間上延展的經歷來處理信用分配問題。
所以 HRL 的工作方式是怎樣的?目前有一些各不相同的方法都能實現 HRL。Google Brain 近期的一篇論文采用了一種尤其清晰和簡單的方法,併為資料高效型訓練引入了一些很好的離策略修正方法。他們的模型名為 HIRO:https://arxiv.org/pdf/1805.08296.pdf。
μ_hi 是高層面的策略,其為低層面的策略輸出需要實現的「目標狀態」。μ_lo 是低層面的策略,輸出環境動作以試圖達成其目標狀態觀察。
其設計思路是有兩個策略層。高層策略的訓練目標是最大化環境獎勵 R。每 c 個時間步驟,高層策略都會取樣一個新動作,這是低層策略所要達成的「目標狀態」。低層策略的訓練目標是選取合適的環境動作,使其能產生類似於給定目標狀態的狀態觀察。
舉一個簡單的例子:假設我們在訓練一個機器人以特定的順序堆疊彩色方塊。我們僅有單個獎勵 +1 在任務成功最終完成時給出,所有其它時間步驟的獎勵都是 0。直觀地說,高層策略負責提出所要完成的必要子目標:也許它輸出的第一個目標狀態是「觀察到一個紅色方塊在你面前」,第二個目標狀態可能是「觀察到藍色方塊在紅色方塊旁邊」,然後是「觀察到藍色方塊在紅色方塊上面」。低層策略在環境中探索,直到其找到用於產生這些觀察結果所必需的動作序列,比如選取一個藍色方塊並將其移動到紅色方塊之上。
HIRO 使用了 DDPG(深度確定性策略梯度)訓練目標的一種變體來訓練低層策略,其內在獎勵被引數化為了當前觀察與目標觀察之間的距離:
DDPG 是又一種影響深遠的深度強化學習演算法,其將 DQN 的思想擴充套件到的連續動作空間。這也是一種 actor-critic 方法,使用策略梯度來最佳化策略;但不同於 A3C 中那樣根據優勢來最佳化策略,它是根據 Q 值來進行最佳化。因此在 HIRO 中,所要最小化的 DDPG 鄰近誤差就變成了:
同時,為了使用離策略的經歷,高層策略使用了離策略修正來進行訓練。其思想是:為了提升樣本效率,我們希望使用某種形式的重放快取,就像 DQN 一樣。但是,過去的經歷不能直接用於訓練高層策略。這是因為低層策略會持續學習和改變,所以就算我們設定了與過去經歷一樣的目標,低層策略還是可能表現出不同的動作/轉換。HIRO 中提出的離策略修正是為了回溯性地修改在離策略經歷中看到的目標,從而最大化所觀察到的動作序列的可能性。換句話說,如果重放經歷表明過去的智慧體採取動作 (x,y,z) 能達成目標 g,那麼我們就尋找一個目標 g̃,使得它能讓當前的智慧體最有可能採取同樣的動作 (x,y,z),即能夠最大化該動作序列的對數機率(如下式)的動作。
然後使用 DDPG 的一種變體在這些動作、新目標和環境獎勵 R 上訓練高層策略。
HIRO 當然不是唯一一種 HRL 方法。FeUdal 網路是一種更早的相關研究(https://arxiv.org/pdf/1703.01161.pdf),其使用了一個學習到的「目標」表徵而不是原始的狀態觀察。實際上,研究中的很多變體都源自學習有用的低層子策略的不同方法;很多論文都使用了輔助的或「代理的」獎勵,還有一些其它研究實驗了預訓練或多工訓練。不同於 HIRO,這些方法中很多都需要某種程度的人工設計或領域知識,這從本質上限制了它們的通用性。近期也有研究在探索使用基於群體的訓練(PBT,https://arxiv.org/abs/1711.09846),這是另一個我個人很喜歡的演算法。本質上講,內部獎勵被當作了附加超引數進行處理,透過在訓練過程中「演進」群體,PBT 能學習到這些超引數的最優演化。
HRL 是當前一個非常受歡迎的研究領域,而且也非常容易與其它技術組合到一起,比如這篇論文將 HRL 與模仿學習結合了起來:https://arxiv.org/pdf/1803.00590.pdf。但是,HRL 的核心只是一個非常直觀的思想。HRL 是可擴充套件的,具備神經解剖學上的相似性,能解決強化學習領域內的一些基本問題。但和其它優秀的強化學習方法一樣,它的訓練難度頗高。
記憶和注意
現在來談談用於解決長期信用分配和稀疏獎勵訊號問題的其它方法。具體而言,我們要說的是最明顯的方法:讓智慧體真正擅長記憶事物。
深度學習中的記憶總是很有意思,因為不管研究者怎樣努力(而且他們確實非常努力),很少有架構能勝過經過精心調節的 LSTM。但是,人類記憶的工作方式卻與 LSTM 完全不同。當我們在處理日常生活中的任務時,我們會回憶和關注與場景相關的特定記憶,很少有其它內容。比如當我回家並開車到當地的雜貨店時,我會使用我在這條道路上駕駛了數百次的記憶,而不是如何從 Camden Town 驅車到倫敦的 Piccadilly Circus 的記憶——即使這些記憶剛剛才加入我的經歷,仍然活靈活現。就此而言,人類的記憶基本都是根據場景進行查詢的——取決於我們在哪裡以及做什麼,我們的大腦知道哪些記憶對我們有用。
在深度學習中,這一觀點催生了外部的基於關鍵值的記憶。這並不是一個新思想;神經圖靈機(https://arxiv.org/pdf/1410.5401.pdf,這是我讀過的第一篇而且是最喜歡的論文)使用了一種可微分的外部記憶儲存來增強神經網路,可以透過指向特定位置的向量值的「讀」和「寫」頭來訪問。我們可以很容易想到將其擴充套件到強化學習領域——在任意給定時間步驟,智慧體都會獲得其環境觀察和與當前狀態相關的記憶。這就是近期的 MERLIN 架構的所做的事情:https://arxiv.org/pdf/1803.10760.pdf。
MERLIN 有兩個元件:一個基於記憶的預測器(MBP)和一個策略網路。MBP 負責將觀察壓縮成有用的低維「狀態變數」,從而將其直接儲存到鍵值記憶矩陣中。它也會負責將相關的記憶傳遞給策略網路,然後策略網路會使用這些記憶和當前狀態來輸出動作。
這個架構可能看起來有些複雜,但要記住,其策略網路只是一個輸出動作的迴圈網路,而 MBP 也僅做三件事:
將觀察壓縮成有用的狀態變數 z_t,從而傳遞給策略。
將 z_t 寫入記憶矩陣
獲取其它有用的記憶並傳遞給策略
其工作流程看起來是這樣的:輸入的觀察首先被編碼並被輸入一個 MLP,這個 MLP 的輸出會被新增到下一個狀態變數的先驗分佈上,從而得到後驗分佈。這個後驗分佈基於所有之前的動作/觀察以及新的觀察,然後會被取樣以產生一個狀態變數 z_t。接下來,z_t 會被輸入 MBP 的 LSTM,其輸出會被用於更新先驗分佈以及透過向量值的「讀取鍵」和「寫入鍵」來對記憶進行讀取/寫入——這兩者是以作為 LSTM 的隱藏狀態的線性函式得到的。最後,下游的工作是策略網路使用 z_t 以及從記憶讀取的輸出來得出一個動作。
其中一個關鍵細節是:為了確保狀態表徵有用,MBP 也經過了訓練以預測當前狀態 z_t 的獎勵,這樣所學習到的表徵就與當前任務存在關聯。
MERLIN 的訓練有一些複雜;因為 MBP 的目標是用作一種有用的「世界模型」,這是一個難以實現的目標,所以它實際上的訓練目標是最佳化變分下界(VLB)損失。(如果你不熟悉 VLB,可以參考這篇文章:https://xyang35.github.io/2017/04/14/variational-lower-bound/ ;但就算你不理解,也不妨礙你理解 MERLIN。)這個 VLB 損失包含兩個成分:
在這下一個狀態變數上的先驗和後驗機率分佈之間的 KL 距離,其中後驗分佈還額外有新觀察的條件。最小化這個 KL 距離能確保新狀態變數與之前的觀察/動作保持一致。
狀態變數的重構損失;我們試圖在這個狀態變數中重現輸入的觀察(比如影象、之前的動作等)並基於該狀態變數預測獎勵。如果這個損失很小,說明我們就找到了一個能準確表徵該觀察的狀態變數,而且它還可用於產生能得到高獎勵的動作。
下式就是我們最終的 VLB 損失,其中第一項是重構損失,第二項是 KL 距離:
這個策略網路的損失是我們上文討論過的 A3C 的策略梯度損失的稍微更好的版本;它使用的演算法被稱為「廣義優勢估計算法」,其細節超出了本文的覆蓋範圍(但能在 MERLIN 論文附錄的 4.4 節找到),但其看起來就類似於下面給出的標準的策略梯度更新:
一旦訓練完成,MERLIN 應該就能透過狀態表徵和記憶來預測性地建模世界,其策略也應該能夠利用這些預測來選取有用的動作。
MERLIN 並不是唯一一個使用外部記憶儲存的深度強化學習研究。早在 2016 年,就有研究者將這一思想用在了 MQN(記憶 Q 網路)中來解決 Minecraft 中的迷宮問題:https://arxiv.org/pdf/1605.09128.pdf ;但使用記憶作為世界的預測模型的概念具有一些獨特的神經科學方面的推動力。有一篇 Medium 文章(https://goo.gl/cVjQK5)很好地解釋了這一思想,所以這裡就不再重複了,只說說其關鍵論點:不同於對大多數神經網路的解釋,我們的大腦很可能不是以「輸入-輸出」機器的方式運作的。相反,其工作方式類似與一個預測引擎,我們對世界的感知實際上只是大腦對於我們的感官輸入的原因的最佳猜測。神經科學家 Amil Seth 對 Hermann von Helmholtz 在 19 世紀提出的這一理論進行了很好的總結:
大腦被鎖在顱骨中。它所接受的都是模糊和有噪聲的感官訊號,這些訊號僅與世界中的物體存在間接的關聯。因此,感知必然是一個推理過程,其中非確定性的感官訊號會與對世界的先前預期或「信念」結合起來,以構建大腦對這些感官訊號的原因的最佳假設。
MERLIN 的基於記憶的預測器的目標正是實現這種預測推理。它會對觀察進行編碼,然後將它們與內在的先驗結合起來,從而生成一個涵蓋輸入的某些表徵(或原因)的「狀態變數」,這些狀態會被儲存在長期記憶中以便智慧體之後能基於它們採取行動。
智慧體、世界模型和想象
有意思的是,大腦類似預測引擎的概念會將我們帶回我們想要探究的第一個強化學習問題:如何從環境中有效地學習?如果我們不能直接根據觀察得到動作,那麼我們又該如何最好地與周遭環境互動並從中學習呢?
在強化學習領域,傳統的做法要麼是無模型學習,要麼是基於模型的學習。無模型強化學習是學習直接將原始的環境觀察對映到價值或動作。基於模型的強化學習則是首先學習一個基於原始觀察的環境的過渡模型,然後使用該模型來選擇動作。
圖中外圈表示基於模型的強化學習,包含「direct RL」的內圈表示無模型強化學習。
比起無模型學習中單純的試錯方法,基於模型進行規劃的樣本效率要高得多。但是,學習優良的模型往往非常困難,因為模型不完美造成的誤差往往會導致智慧體表現糟糕。因為這個原因,深度強化學習領域內很多早期的成功研究(比如 DQN 和 A3C)都是無模型的。
話雖如此,1990 年的 Dyna 演算法(https://goo.gl/5zrqES)就已經模糊了無模型和基於模型的強化學習方法之間的界線,其中使用了一個學習後的模型來生成模擬的經歷,以幫助訓練無模型策略。現在,已有研究將這兩種方法直接組合到了一起,即「想象力增強的智慧體」演算法(I2A,https://arxiv.org/abs/1707.06203)。
在 I2A 中,最終策略是一個與無模型元件和基於模型的元件相關的函式。基於模型的元件被稱為該智慧體對世界的「想象」,其由該智慧體內部的學習後的模型所產生的想象軌跡組成。但是,其關鍵的地方在於基於模型的元件的末端還有一個編碼器,它會將想象軌跡聚合到一起並解讀它們,使得智慧體能學習在有必要時忽略自己的想象。也就是說,如果智慧體發現其內部模型投射的軌跡是無用的和不準確的,那麼它就可以學會忽視該模型並使用其無模型分支進行處理。
上圖展示了 I2A 的工作方式。觀察一開始就會被傳遞給無模型元件和基於模型的元件。在基於模型的元件中,會根據在當前狀態可能採取的 n 個動作來想象 n 個不同的軌跡。這些軌跡是透過將動作和狀態輸入其內部環境模型而得到的,從而能夠過渡到新的想象狀態,然後取其中能得到最大化結果的動作。一個蒸餾後的想象策略(與透過交叉熵損失的最終策略相似)選擇下一個動作。經過固定的 k 個步驟之後,這些軌跡會被編碼並被聚合到一起,然後會與無模型元件的輸出一起輸入策略網路。關鍵的地方在於,這種編碼能讓策略以最有用的方式解讀想象軌跡——如果不合適就忽視它們,在可用時就提取出其中與獎勵無關的資訊。
I2A 的策略網路是透過一個使用優勢的標準策略梯度損失訓練的,類似於 A3C 和 MERLIN,所以這應該看起來很眼熟:
此外,在實際策略和內部模型的想象策略之間還添加了一個策略蒸餾損失,以確保想象策略選擇的動作接近當前智慧體會選擇的動作:
I2A 的表現優於包含 MCTS(蒙特卡洛樹搜尋)規劃演算法在內的很多基準。即使在其基於模型的元件被故意設計得預測結果很差時,它也能在實驗中得到出色的表現,這說明它能權衡所要使用的模型——在有必要時也會使用無模型方法。有意思的是,內部模型較差的 I2A 的表現實際上還稍微優於有較好模型的 I2A——研究者將其歸因於隨機初始化或有噪聲的內部模型能提供某種形式的正則化,但很顯然這還是一個有待進一步研究的領域。
不管怎樣,I2A 都很出色,因為它在某些方面也體現了人類在世界中的運作方式。我們總是在根據對我們所處的環境的某個心智模型來規劃和預測未來,但我們也都清楚我們的心智模型並不完全準確——尤其是當我們處在新環境中或遇到我們未曾見過的情形時。在這種情況下,我們會進行試錯,就像是無模型方法一樣,但我們也會使用新的經歷來更新我們內在的心智模型。
目前有很多研究者都在探索如何有效結合基於模型的方法和無模型方法。Berkeley AI 提出了一種時間差分模型:https://bair.berkeley.edu/blog/2018/04/26/tdm/;其也有一個非常有趣的前提。其思想是讓智慧體設定更多時間上抽象的目標,即「在 k 個時間步驟內處於 X 狀態」,然後在保證最大化每 k 個步驟所收集到的獎勵的同時學習這些長期的模型過渡。這能為我們提供對動作的無模型探索和在高層目標上的基於模型的規劃之間的平滑過渡——如果思考一下這種方法,你會發現這又會將我們帶回分層式強化學習。
所有這些研究論文都關注的是同樣的目標:實現與無模型方法同樣(或更優)的表現,同時達到基於模型的方法那樣的樣本效率。
總結
深度強化學習模型確實很難訓練,這一點毫無疑問。但正是由於這樣的難度,我們才被迫提出了那麼多的策略、方法和演算法,以便能借助深度學習的強大力量來解決經典(或非經典)的控制問題。
這篇文章對深度強化學習的近期研究進行了不全面的介紹——還有大量研究沒有提及,甚至還有很多研究我根本就不知道。但是,希望這裡介紹的一些記憶、分層和想象方向的研究能夠幫助讀者瞭解我們著手解決強化學習領域內一些長期挑戰和瓶頸的途徑。