1. 程式人生 > >深度增強學習漫談 從DQN到

深度增強學習漫談 從DQN到

深度增強學習(Deep reinforcement learning, DRL)是DeepMind(後被谷歌收購)近幾年來重點研究且發揚光大的機器學習演算法框架。兩篇Nature上的奠基性論文(DQN和AlphaGo)使得DRL這一深度學習(Deep learning, DL)和增強學習(Reinforcement learning, RL)的交叉方向變得炙手可熱。再加上多個影響較大的benchmark(Atari 2600,圍棋等)上漂亮的成績使它如今倍受學術界和商業界的關注,甚至讓人聞到了泡沫的味道。不管怎樣,它還是非常成功地開創了新的方向,既具有極大學術價值也具有頗高的商業價值。儘管之後用於解決像圍棋這樣的大規模搜尋問題,但DQN出現之初的最大意義在於演算法的通用性。因為泛化性向來是機器學習最大的挑戰之一,它才是機器和人相比弱太多的地方,也是很多機器學習演算法最有待改進的地方。今天我們看各種小報上對人工智慧研究成果的報道都喜歡斷章取義,拿特定資料集上的準確性說事,雖然那也很牛X,但一定程度上忽略了通用性也是機器學習走向大眾最大瓶頸之一的事實。

今天我們就抱著“知其然知其所以然”的態度,看看它的演變歷程。其實DQN並不是一蹴而就,它是基於一個古老的人工智慧方向,即增強學習。增強學習不同與機器學習中其它兩大類學習方法-監督學習(supervised learning, SL)和非監督學習(unsupervised learning, UL),其基本思想是借鑑人類學習的過程,讓agent(智慧體,或稱學習體)通過不斷試錯來找尋最優策略,而我們只需要設定回報(獎勵和懲罰)即可。但由於其侷限性(比如強依賴於人工設計的特徵質量等),長期處於不溫不火的境地,直到DQN使它老樹發新芽,重獲新生。NIPS 2013論文《Playing Atari with Deep Reinforcement Learning》提出的深度Q學習(Deep Q-learning,DQN)是基於增強學習中的Q學習(Q-learning)。那我們就以它為切入點,來看一下Q-learning是怎麼來的。Sutton的經典著作《Reinforcement Learning: An Introduction》中對常規的增強學習方法做了非常好的總結。我們就參考它粗糙地勾勒下Q-learning在其中的大體位置。

這裡寫圖片描述

從圖中可以看到,增強學習發展了幾十年,已經開枝散葉,有了很多分支。1989年由Watkins提出的Q學習是一種model-free(不用學習環境模型)的基於off-policy(學習過程中執行的策略與值估計使用的策略不一樣)的temporal difference(TD)方法,也是RL中流傳最為廣泛的一種學習方法。

接下來話鋒一轉就需要講函式逼近(Function approximation,FA)了。因為最原始的表格法(tabular method)來表示目標函式(V或Q函式)畢竟用途有限,且多用於離散空間。而函式逼近相比之下可有不少好處:比如一可以降低輸入維度,減少計算量;二可以提高泛化能力,避免過學習(over-fitting);三可以使目標函式對於引數可微,用上基於梯度的計算方法。前面提到RL的侷限之一就是需要人工設計的特徵。設計的不好後面的演算法再好也白搭。這其實不只針對RL,以前我們看到分類或迴歸問題結果不好,就去換其它演算法或改進演算法本身。後來發現只要特徵選取合適或設計合理,很多時候演算法的結果都沒有顯著差異。其實深度學習本身也正是把更多注意力拉回到特徵學習上來。回到正題,函式逼近分為兩大類:線性和非線性的。前者一般是用一系列特徵的線性組合,它們的權重作為引數。優點自然是計算方便,演算法好實現。後者就比如用神經網路(Neural network,NN),優點是表達能力大大加強,缺點是訓練起來也麻煩得多。當然,用NN來逼近目標函式(比如值函式)早已被人研究過,畢竟上世紀80年代的時候神經網路也如同今天的深度學習一樣香餑餑。比如上世紀的TD-Gammon,可以說是當時RL在博弈應用的經典,就是用了多層神經網路作為函式逼近。但深度學習前的神經網路功能上只用於分類或迴歸,沒有無監督學習提取特徵的功能,因此難以直接處理裸資料,比如畫素級資料(raw pixels)。

NIPS 2013 《Playing Atari with Deep Reinforcement Learning》

到這裡為止,還沒有深度學習半毛錢關係,很多都是二,三十年前的東西。作下簡單的鋪墊後,接下來我們看下DL是怎麼讓這些經典方法換髮青春的。DQN中的輸入採用的是原始影象資料,可以說基本是裸資料了。這是DQN最有意義的一步了。在DNN前喂裸資料一般效果都不怎麼理想,因為一般的ANN無法通過自動訓練catch到其中的隱含特徵。而這幾年湧現的一些成果,比如論文《Imagenet classification with deep convolutional neural networks》等,極大地增強了DL處理raw pixels資料的信心。說實話,純拼Atari成績的話,任何一個遊戲都可以通過針對性的演算法取得非常高的成績,但DQN能發表在Nature上,了不起在它的演算法對所有遊戲是通用的(甚至超引數也是通用的),而這種通用性的重要基礎之一就是它能吃raw pixels。當然它的意義不止於此,它實現了很好的效果向全世界證明了該方法的有效性,而其中的一大功臣就是experience replay。該方法在Long-Ji Lin 1993年的畢業論文中有較詳細的介紹,其主要作用是克服經驗資料的相關性(correlated data)和非平穩分佈(non-stationary distribution)問題。它的做法是從以往的狀態轉移(經驗)中隨機取樣進行訓練。這樣至少有兩個好處:1. 資料利用率高,因為一個樣本被多次使用。2. 連續樣本的相關性會使引數更新的方差(variance)比較大,該機制可減少這種相關性。注意這裡用的是隨機取樣,這也給之後的改進埋下了伏筆。

Nature 2015《Human-level control through deep reinforcement learning》

以上是NIPS 2013論文中提出的DQN原型。之後Nature 2015的論文《Human-level control through deep reinforcement learning》對之作了改進和完善。其中對於演算法上的變化最主要是引入了單獨的Q函式網路。研究者在實踐中發現當使用如NN這樣的非線性函式逼近器逼近Q函式時RL學習過程並不穩定。這種不穩定有幾種原因:經驗資料(即觀察序列)具有相關性。Q函式的微小改變會引起策略(policy)的巨大改變,進而改變訓練資料分佈,以及Q函式與Q函式目標之間的差值。前者可以用experience replay解決(參見NIPS 2013論文)。後者可採用迭代式更新(iterative update)解決(Nature 2015引入)。 該方法即Q函式的引數只在一定步數後才更新,相當於延遲更新來減少Q函式和Q函式目標間的相關性。直觀上,整個訓練學習過程其實就是Q函式向Q函式目標逼近的過程,試想下,如果目標也跟著學習體一起變,那勢必對收斂性造成影響。

到這裡為止,在Q學習的基礎上,DQN的大致演進路線如下。

這裡寫圖片描述

之後,DeepMind的大牛們一刻不停地在AAAI,ICML等頂級會議中相繼對DQN作了改進,使其成績與效能有了質的飛躍。按時間順序主要有下面論文:

AAAI 2016 《Deep Reinforcement Learning with Double Q-learning》

研究者發現,Q學習中的overestimation問題(在確定狀態下Q值估計偏高)可能導致非最優解和學習過程穩定性下降。最初Thrun & Schwartz開始探討該問題,證明了在使用函式逼近器時overestimation可能導致非最優解。之後van Hasselt發現即使用表格表示法的情況下,環境中的噪聲也能導致overestimation,並且提出瞭解決方案Double Q-learning。而DQN是基於Q-learning,所以本質上也有這個問題。因此將Double Q-learning結合進DQN可以改善。其基本思想是將選擇和評估動作分離,讓它們使用不同的Q函式(網路)。其中一個用於產生貪婪策略(greedy policy),另一個用於產生Q函式估計值。實現時會有兩個Q函式網路:原DQN中的Q函式網路稱為線上網路(online network),後者稱為目標網路(target network)。由於Nature版DQN已經引入了單獨的Q目標網路,所以Double DQN對DQN架構基本不需什麼改動,只需把目標網路的引數和線上網路的引數獨立訓練即可。注意和本文方法相比,Nature 2015上的方法相當於是引數的延遲更新,在同一步更新的動作選取和函式估計中還是用的同一個引數。

ICLR 2016《Prioritized Experience Replay》

在RL與DL結合的實踐中起到比較關鍵作用的experience replay演算法靈感可以說部分來自生物學,它類似於大腦中海馬體在我們休息的時候將近期的經驗回放加深印象的機制。最原始的RL是每次觀察到一次狀態轉移(表示為s, a, R, γ, S’)只更新一次引數。這樣一來有幾個問題:1. 引數更新具有時間上的相關性,這與隨機梯度下降演算法的假設不符。2. 那些出現次數少的狀態轉移(經驗)很快就會被“遺忘”掉。DQN中使用了experience replay來緩解這兩個問題。該方法不僅穩定了函式訓練過程,也提高了經驗資料的利用率。缺點是需要更多記憶體來儲存經驗池(experience pool)。 這種方法的效果很好,但目前的做法還是對以往經驗均勻取樣的。下一步自然是根據經驗的重要程度進行有側重的replay。

在RL領域,上個世紀90年代就有類似的想法,即prioritized sweeping,應用在model-based的規劃問題中。直覺上,我們知道一部分經驗比其它經驗要對引數的訓練產生更大的作用 。基於此,該方法的基本思想是使引數更新傾向於使值估計變化更大的經驗。而怎麼衡量哪些經驗對值估計的貢獻呢,這就需要有定量的測度。在model-free的場景中,這個測度一般選用TD error。具體地,TD error越大,也就是expected learning progress越高的經驗資料,可以讓它們replay的次數越頻繁。基於這種思想實現的greedy TD-error prioritization演算法將經驗資料和其TD error按序存在replay memory中,每次取最大TD error的經驗進行replay,同時引數更新的量也與之同比。另外新的經驗會設成最大優先順序以保證它至少被訓練一次。

論文還提到這種做法會導致loss of diversity問題和引入bias,但文中分別用stochastic prioritization和importance sampling方法來減輕和糾正。總得來說,按文的原話說,experience replay使得引數的更新不再受限於實際經驗的順序,prioritized experience replay繼而使之不再受限於實際經驗的出現頻率。

ICML 2016《Dueling Network Architectures for Deep Reinforcement》

這篇論文提出了針對model-free RL的dueling network框架。它是對傳統DQN架構層面上的改動,將基於狀態的V函式(value function)和狀態相關的advantage函式(advantage function)分離。Advantage函式的思想基於1993年Baird提出的advantage updating。除了傳統的V函式外,引入的advantage函式 A(x, u)的定義是當採取動作u相比於採取當前最優動作能多帶來多少累積折扣回報。簡單粗暴得說,就是選這個動作比當前最優動作(或其它動作)好多少。

基於這個思想,同一個網路會同時估計V函式和advantage函式,它們結合起來可以得到Q函式。從架構上來說,這是一個一分為二,再合二為一的過程。它的出發點是因為對於很多狀態,其實並不需要估計每個動作的值。可以預見到,引入advantage函式後,對於新加入的動作可以很快學習,因為它們可以基於現有的V函式來學習。它直覺上的意義在於將Q函式的估計分為兩步。這樣,可以先估計哪些狀態更能獲得更多回報,而不受該狀態下不同動作的干擾。文中舉了典型的賽車遊戲的例子。可以看到V函式專注於遠處(地平線)和分數,也就是長期目標,advantage函式專注於附近障礙,也就是短期目標。這說明V函式和advantage函式分別學習到了兩個層次的策略。這種分層學習的做法有幾個好處:一是V函式可以得到更多的學習機會,因為以往一次只更新一個動作對應的Q函式。二是V函式的泛化性更好,當動作越多時優勢越明顯。直觀上看,當有新動作加入時,它並不需要從零開始學習。三是因為Q函式在動作和狀態維度上的絕對數值往往差很多,這會引起噪聲和貪婪策略的突變,而用該方法可以改善這個問題。

將這些改進考慮進去,我們可以把上面的圖再延伸出去:

這裡寫圖片描述

Nature 2016 《Mastering the game of Go with deep neural networks and tree search》

DRL的第二波高潮當屬Nature 2016 上的論文《Mastering the Game of Go with Deep Neural Networks and Tree Search》,其中發表了AlphaGo的相關成果。它應用了DRL技術將圍棋智慧水平達到了一個全新的高度。我們都知道在這類資訊完全博弈遊戲中人工智慧遲早會戰勝人(因為在類似於啟發式搜尋問題上,人的智慧會受到大腦開發的生理極限限制,而計算能力的發展可以以數量級速度增長,再加上有合適的方法出現就可以使其搜尋效率極大提高),但AlphaGo似乎讓它提前了好多年實現。AlphaGo雖然也基於DRL,但其意義與之前基於DQN的工作大相徑庭,否則《Nature》也不會讓它發兩次。如果說之前的最開始提出的DQN還是一種演算法的話,AlphaGo這時就已經是一套為圍棋精心設計的演算法框架了。前面提到過,DQN的意義在於演算法具有通用性,而AlphaGo的意義在於圍棋問題本身的搜尋空間非常之大,同時也是經典的NP-hard問題。AlphaGo通過蒙特卡洛搜尋樹(Monte-Carlo Tree Search,MCTS)和DRL結合使得這個大規模搜尋問題在可計算範圍內。它沒有用raw pixels作輸入(也無必要),而是使用人工設計的特徵用於policy network和value network的訓練。其實AlphaGo更多是個工程上的傑作。它基於前面的DRL基礎上,做了很多針對圍棋問題的特有技術,且用了分散式的技術加速計算。總之,它們要展示的是DRL兩方面的能力,DQN是演算法的通用能力,AlphaGo是對於變態級規模搜尋問題的計算有效性。

AlphaGo的大體思想是使用value network來評估棋盤位置,用policy network來選擇動作,同時結合了監督學習和DRL技術。它還引入了一種結合MC模擬和value/policy network的搜尋演算法。

這裡寫圖片描述

架構上,value network用於評估位置,policy network用於取樣動作。流程上,學習分為幾個階段:第一階段基於人類專家的資料集通過監督學習訓練SL policy network。另外訓練一個單獨的策略用於在之後的rollout中快速選取動作。這一步更多是為了結合人類已有經驗(畢竟純靠自學習有些慢),用於後面幾步作先驗知識。接著,將SL policy network的引數來初始化RL policy network (該policy network用於之後在RL中通過self-play做策略搜尋)。第二階段是通過RL的policy gradient方法學習策略,通過隨機梯度上升(Stochastic gradient ascent)演算法來更新RL policy network引數。第三階段,學習value network用於預測RL policy network玩遊戲時的勝算,這一步使用隨機梯度下降(Stochastic gradient descent,SGD)來最小化outcome(對當前狀態而言圍棋結束時的回報,即輸贏)與V函式之間的差(用MSE表示)。最後,第四階段中,有了上面的policy network和value network,就可以據此用MCST來進行搜尋了。

在最後一個階段中,演算法會通過MC模擬從根狀態來往下單向遍歷搜尋樹,這一階段又可以分為選取(selection),擴充套件(expansion),評估(evaluation)和回溯(backup)四步。這其實也是MCST演算法框架中的經典的四個步驟。只是AlphaGo在這個MCTS演算法中結合了policy和value network。其中選取這步基於前面的value network取Q函式值最大的動作。注意這一步使用的是UCT族演算法,它在動作選取時除Q函式值還會考慮一個代表未知程度的量,用於解決著名的exploration-exploitation問題。畢竟,我們的期望是程式不僅僅是複製人類的經驗,而且能夠超越。第二步擴充套件是針對搜尋樹中的葉子結點,使用的是RL policy network中學習到的策略。第三步評估有兩種完全不同的方式:1. 通過value network。2.通過隨機rollout直到結束(使用fast rollout policy,也就是之前的SL policy network)所得到的回報。這兩者可通過引數進行調和。最後回溯這步即根據前面的搜尋進行Q函式更新。

總得來說可以大體概括為下圖:

這裡寫圖片描述

可以看到,今天的的人工智慧和機器學習領域,工程和學術同樣重要。一方面可能因為DL的特殊性,畢竟它基於的神經網路從一開始就是偏工程的;另一方面今天的工業與學術結合更加緊密,產業化速度大大加快。比如DRL的idea很好,但前提是要有工程能力證明它好。即使有人早幾年想到了這個idea,它仍不一定能使它發在Nature這樣的高級別刊物上。因為今天的DRL是工程和學術的充分結合。另外,這還提醒我們要重視學科或者說是方向的交叉。很多時候,一篇論文的學術價值取決於它能給後人留多少可以繼續深究的東西。除了那些能自成一派的極端牛人,大多數時候能連線兩個或多個方向並證明其價值所帶來的影響就非常深遠了。