天天看點

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

雷鋒網(公衆号:雷鋒網)按:大牛講堂算法工程師入門系列第二期-穆黎森講增強學習(二),上一講内容主要涉及增強學習基本概念及deep q learning的相關内容,本講除了deep q learning的相關拓展内容、dqn和近期的一些進展。

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

dqn将一個強大的工具deep

neural network

引入rl,解決了這中間遇到的很多新問題,收到了很好的效果。自從這篇工作以後,一方面,大家希望更強的工具能解決更難的問題,比如上面dqn還玩的不是很好的遊戲,或者遊戲之外的問題;另一方面,大家也希望已經能夠解決的問題能做得更好,更快。近兩年,學術界和工業界做了很多工作,不斷将rl的效果和性能推到新的高度。不論是學術界還是企業界,都認為rl的潛力是很大的。但是在什麼時候,能夠以一個合理的代價解決一個現實的應用場景,這個問題目前還處在探索之中。

在這個探索的過程中,最重要的一步,是如何發現現有算法方案的缺陷和短闆;其次是以什麼樣的思路去解決它;然後是算法的實作與工程細節。這一節中,重點是前兩個方面,特别是第一個:dqn之後,大家都是從什麼樣的視角,去不斷改進rl算法的效果的?

連續動作問題

下面是dqn的一個示意圖。

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

可以看出,這種形式的網絡結構以及loss

function的定義,隻能處理離散action,即政策需要從n個action中挑選一個的情況。在實際的應用場景中,很多時候,action是多元連續的值,比如機器人控制中各個電機的控制量。在連續action次元非常低的時候,我們可以把連續的值離散化成為幾個區間,然後按照離散action處理;但在action次元較高的情形,這種方法就不适用了。這個時候,顯式的值函數就隻能将state,action作為輸入,而無法同時輸出所有action對應的q值。

是以,我們需要顯式的政策函數:α=π(s) or π(α|s)

接下來要介紹的兩個方法中,既使用了顯式的值函數,又使用了顯式的政策函數,它們可以被歸類為actor critic 方法:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

随着訓練的進行,value

function 和 policy 都會得到更新:value function 一般會根據temporal

difference疊代更準确的q值(或者v值,稱為狀态價值state value;相對的,q為動作價值action value);policy

function會根據value function 以及從環境中收集到的trajectory,疊代更新更好的政策。

deterministic policy

第一種思路,政策函數形式為:α=π(s) 

也就是确定性的政策。這個方法稱為deterministic policy gradient(dpg)其政策函數輸出一個确定的action,這個action可以是高維連續的。其網絡結構示意為:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

q網絡,即值函數部分,訓練的更新依然通過通過td loss 來更新;π網絡,即政策函數部分,其更新的梯度方向為使得輸出的action對應的q值變大,也就是說,loss function為 -q。具體證明過程在此不展開了。

stochastic policy

第二種思路,政策函數形式為:π(α|s)

也就是随機性政策。對于随機性政策,policy function應該輸出action的機率分布。對于連續的action來說,policy function可以輸出action的機率密度函數。是以,假設action的分布符合多元正态分布:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

那麼,政策網絡可以輸出正态分布的均值和方差來代表這個分布。于是,關于政策梯度的更新方法就都可以應用在這個政策函數上:隻要能構造一個loss function,使得“更好”的action對應的機率密度變高,“更差”的action對應的機率密度變低就可以了。

action的機率分布符合正态分布這個假設,可以說是一個很強的假設。但是在實際使用當中,這個假設下,在不少問題中是可以得到還不錯的政策的。這個方法在asynchronous

advantage actor critic(a3c)這個工作中有提及,關于a3c,後面還會有介紹。

更好的模型結構

既然使用了model來近似表示希望獲得的政策/價值函數,那麼我們總是可以問的一個問題是:有沒有更好的模型來解決我的問題?

在這之前,得首先回答一個問題:什麼叫更好的模型?

關于模型(model),有三個互相關聯的特性:

· non-linearity,非線性。通常我們希望拟合的真實函數,其輸入到輸出的對應關系是非常複雜的,或者說,具有非常大的非線性。是以模型的非線性是否足夠,決定了最終拟合的結果誤差可以有多小。

· capacity,容量。即模型的自由度。自由度越高的模型,能拟合的函數的集合就越大,但同時因為搜尋空間的變大,訓練的代價就越大;自由度越低的模型,能拟合的函數的集合就越小,相應的,訓練的代價也會變小。

· computation cost,計算代價。計算越複雜的模型,其使用以及訓練所消耗的計算資源也越多。

通常情況下,以上三個特性是成正比的。例如,如果對某個神經網絡增加其層數,那麼其非線性會增加,可以表示更複雜形狀的函數;其次參數量會增加;最後,其計算代價也會上升。

但是,如果有可能,我們總是希望模型能夠更準确的表示真實函數的同時,盡量不要增大搜尋的空間,以及計算複雜度。翻譯一下,就是在增加non-linearity的同時,可以相對減小capacity和computation cost。 

如果能面向要處理的問題的特點,有針對性的設計模型結構,是有可能做到這一點的。這就是所謂“更好的模型”。

那麼,在rl中,要解決的問題有什麼特點呢?以下,舉幾個這方面的例子。

lstm的應用

我們知道,rnn或者說lstm,是具有一定的記憶能力的,适合于處理序列的輸入情況。例如語音識别、機器翻譯等領域,lstm被用來處理語音、句子等序列輸入;或者在計算機視覺(cv)中,用來實作attention

機制,即網絡需要的輸出隻和輸入圖像的一部分關系密切的情形。

而以上兩點,在rl中,都存在相似的情形:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

例如,在遊戲任務中,通常對政策決策比較重要的資訊都來自于螢幕上很集中的部分區域。

例如,rl

agent和環境互動的過程本身就是個序列過程,而很多時候,agent隻能接收到環境的部分資訊;agent的目前決策需要依賴于若幹步之前收到的資訊。這種情況被稱為partially

observable problem,形式化的描述是可以用lstm将partially observable markov decision

process 轉化為fully observable markov decision process,在此不做展開。

其中,上面第二點可以說是很多rl問題的共性,是以應用也更加廣泛。

dueling network

lstm可以說是其他領域成功應用的模型結構,應用在rl中應對類似問題的例子。那麼,在rl中特别是value based method中,神經網絡是用來拟合值函數q的。值函數q有沒有什麼特有的結構可以被用來設計模型呢?

設想一下:在學習騎自行車這個任務中,假設agent所處的狀态是輪胎與地面成30°角。可以想象,無論這個時候agent采取什麼action,多半都會收到一個很糟糕的reward:摔倒在地面上。這裡,一個直覺的推斷是:在很多問題下,q值的一大部分由輸入的state決定;在此基礎上,不同的action會造成小部分的差别;另外一方面,對于政策來說,q之中僅由state決定的這部分沒有什麼作用,更重要的是不同action之間的差别。

這就是dueling network的思路:把q網絡的結構顯式地限制成兩部分之和。

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

這樣,v的部分隻依賴于state,訓練起來更容易;不同action之間的差别隻展現在a部分,這部分通常被叫做action advantage。這部分的收斂也可以與v獨立開來,使得action之間的相對差别可以獨立學習。

關于q值函數形狀的限制假設,還有更激進的工作如naf(normalized advantage functions),在此不做展開了。

value iteration network

dueling network可以說是利用q值函數的形狀特性。那麼q值疊代的計算過程,是否有特性可以利用呢?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

value

iteration network這個工作的思路正是如此,其利用了q值疊代過程和convolution/max pooling

過程形式上的一緻性:二維平面狀态空間下,假設每個狀态隻能轉移到和其相鄰的狀态中,那麼根據bellman

equation對平面内所有狀态做一次值疊代的過程,就可以表示成在這個二維圖上的一次卷積操作。這樣,通過若幹輪卷積,網絡可以提取出若幹步後的所有狀态的q值,這種look

ahead 的行為正是規劃(planning)所需要的。是以,vin可以用來實作帶規劃功能的政策函數。算法的其餘細節不再展開。

更快的收斂速度

我們先比較一下增強學習(dqn)和監督學習的loss function:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

可以看出,兩者的loss function 形式上有一定的相似性,都是讓模型的輸出趨近于一個目标值(圖檔中紅色的部分)。

對比可以看出,dqn的訓練過程有如下幾個特點。

第一,基礎事實(ground truth)非常稀疏。原因來自于兩方面:

首先,對于不同的任務來說,環境給出的r的密度不一樣,有些任務的r可能會很稀疏,甚至于隻有在任務最後成功/失敗的時候才會有非零的r,其餘時候r都是0。

其次,監督學習的loss

function中,目标值完全來自于外界輸入的正确資訊,也就是ground truth。而dqn的loss

function中,目标值隻有r的部分來自ground truth,另外一部分來自于前一版本的網絡的輸出q值,這隻是一個真實值的近似。

第二,對目标q值的估計存在偏差。這個偏差正是來自于上面所說的前一版本網絡輸出的q值上:網絡訓練的過程中,其輸出和真實值可能差距較大;其次,在不準确的q值基礎上應用操作,會導緻估計的q值系統性地偏大。

第三,dqn這個loss也被稱為1

step td

loss,也就是說,在s'處估計的目标值沿着trajectory倒推一步s'處,用來更新s處的q值。這樣,transition中<s,a,r,s'>所蘊含的ground

truth需要很多輪疊代才能傳播到離和更遠的地方去,得到比較精确的q值。以下幾個工作,就是針對上面說到的dqn的收斂性問題所做的改進。

prioritized experience replay

在某些任務中,既然對訓練有價值的reward比較的稀疏,那是否可以着重利用這些采集到的reward呢?prioritized

experience

replay就是基于這個思路,從replay中采樣的時候,提高訓練的時候loss高的transition被采樣到的機率,進而更有效率的學習。

double dqn

這個工作對目标q值的計算做了如下的修正:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

使得對目标q值的估計偏高的問題得到了改善:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)
optimality tightening

前面提到dqn的一個問題是1

step td loss在state空間中傳播ground truth太慢的問題。事實上,dqn屬于值方法,而很多政策方法是可以利用n

step td的。為什麼dqn不能用呢?因為n step td是從序列:[r[t], r[t+1], ..., r[t+i]]

計算而來,而從replay

buffer中提取出來的trajectory序列可能是根據比較早版本的q網絡生成的,這就無法真實的反映出最新的target

q網絡的表現情況。而單步td隻關心r,而不用關心r的序列,是以不用擔心生成這個序列的政策和目前政策不一樣的問題。更詳細的分析可以去了解一下on-policy和off-policy的相關概念。

optimality tightening 這個工作的思路是,雖然不能直接用n step td來計算目前的目标q值,但是用來給目前q目标值加一個上下界的限制:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

這樣,相當于在dqn裡面,應用上了n step td的資訊,讓ground truth 沿着trajectory的軌迹傳播得更快。 

更好的探索政策

探索是rl的重要話題。想象人類學習玩遊戲的過程,在遊戲的開始,玩家會嘗試一些操作;并逐漸掌握一些基本的政策,完成簡單的挑戰;然後根據這些政策,達到離初始狀态較遠的狀态,然後不斷探索嘗試面臨的新的挑戰。在rl中也是如此,一方面,政策需要保持一定的探索以發現新的政策;另一方面,政策需要利用之前學到的知識,才能保證探索的時候更有效率。

在dqn中,?−??????方法是一種比較基礎的探索政策,是在greedy政策(選取q值最大的action)基礎上,以一定比例加入随機選擇的action而來。通過調整?的大小,可以控制随機探索與應用現有政策之間的比例。

但是,在稍複雜一些的問題下,?−??????是一種比較低效的探索方法。因為很顯然,在?值也就是随機的比例一定的情況下,agent到達某個狀态s的幾率,随着s離初始狀态距離的增加是成指數級降低的。我們需要除了簡單的随機政策以外,更加有效的探索方式。

intrinsic rewards

既然rl的訓練過程會讓agent的政策傾向于盡可能多地收集累積回報,那我們是不是可以自己構造回報函數,來指導agent的探索呢?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

這是一種比較通用的辦法。即在agent收到的環境reward之上,加入自己設計的intrinsic reward,指導agent趨向于這個reward所指引的方向。至于如何構造這個intrinsic reward,不同的工作有不同的思路,這裡僅舉一個例子:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

即構造一個專門的網絡來預測環境的transition

model;這個transition model跟着政策/值網絡一起訓練,隻是以更慢的學習速度進行。那麼這個transition

model預測環境變化的準确度高的state,就認為agent已經很熟悉這個state了;反之,就認為這個agent對目前所處的環境不是很熟悉。是以,就是用transition

model的training loss 來當做intrinsic reward。這個training

loss的方法被形象地稱為curiosity driven exploration。

deeper exploration

前面提到,簡單的随機政策會讓agent很難到達離初始狀态較遠的狀态,就像布朗運動很難遠離原點一樣。這樣的探索是一種很“淺”的探索,那如何讓探索更深呢?直覺的想法是減少随機性,以避免在初始狀态原地打轉的情況;但随機性太小的話,又會導緻agent采集到的transition趨同,不利于訓練。如何來平衡這兩點呢?

假設有一個團隊來執行探索迷宮的任務。其中a喜歡貼着右邊牆走;b喜歡貼着左邊牆走。那每次探索,團隊都派不同的人出去執行任務,是不是就可以實作每個人都深入到迷宮的不同部分了呢?

bootstrapped dqn這個工作所采取的思路是這樣的:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

每個head都是一組q值;每個episode僅根據一個head的q值做greedy的探索,直到下一個episode,再随機選取一個head執行探索。這樣,每個episode都會依據某一個head的政策執行到底,保證了探索的一緻性和深入;同時,隻要能保持不同head之間的多樣性,從統計上來看,探索得到的transition也比較多樣化。 

hierarchical rl

我們知道,人是有比較強的資訊抽象能力的。對于資料的抽象,深度的神經網絡也具備相似的能力,可以從高次元的、低層次的輸入資料(比如圖像),提取出低次元的,高層次的資訊(比如圖檔裡有一隻喵的機率)。但是對于行為來說,人同樣是具有很強的抽象能力的:可以從高次元、低層次的行為的基礎上,逐漸建立出低次元、高層次的行為。

舉一個例子,需要完成的任務是通過鍵盤猜測兩位數的密碼。正常的人類在完成這個任務的時候,其實際需要探索的狀态空間隻有10²個狀态,也就是兩位數密碼的所有組合;而按照普通的rl方法,agent輸出機械臂的所有控制信号來敲鍵盤的話,其探索的狀态空間是一個大得多的高維空間。

這就是層次式rl:heirarchical rl的出發點:把政策(或者動作)本身劃分為不同的層次,底層的政策負責完成一些底層的任務;上層的政策負責把底層政策結合起來,完成更複雜的任務。這樣,無論上層政策還是底層政策,其探索空間都大大減小。

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

通常,heirarchical

rl會把政策分為至少兩層,上層的政策負責輸出底層政策的階段性目标,稱為goal或者option;然後底層政策在一定的時間周期内,負責實作這個目标。上層政策可以在此期間,負責輸出reward給底層政策,用來評價底層政策的執行情況。

屬于這類的工作有很多,在此就不一一舉例了。

向專家學習

在rl的架構下,agent可以從零開始,探索環境,逐漸學習得到越來越好的政策。由于前面提到的各種原因,對比監督學習來說,rl是個相對較慢的過程。

反觀人類學習某項任務的過程:人類具有很強的模仿能力,如果在學習的過程中,有老師示範的話,人類的學習速度将會大大提升。那是否可以讓rl中的agent,也能像人類一樣,從專家的行為中學習呢?

一個傳統的思路是inverse

rl:給出專家在完成任務的一些例子,先對環境的reward做出假設:r(s, a);然後設法求出使得專家的例子收到的獎勵最大化的r(s,

a),再反過來用r(s, a)指導agent的訓練。通常這樣的r(s,

a)傳回的獎勵是比環境本身的獎勵要更稠密的,是以在r的指導下,agent學習會更快。

這種方法比較間接。還有更直接的做法:imitation learning,即設法讓agent的政策輸出和專家的輸出更接近。imitation learning也有很多做法,這裡就舉一個例子:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

熟悉深度學習近期進展的同學能看出來,這是一個對抗學習(generative

adversarial network,gan)的結構。在generative adversarial imitation

learning這個工作裡面,通過對抗學習,使得generator也就是policy輸出的trajectory的分布,盡量靠近專家的trajectory

的分布。然後可以再放進rl的架構下,進一步學習得到更好的政策。

分布式算法

rl的訓練過程是很慢的。一個很花時間的程式,設法改成分布式以加速,是個很自然的想法。

那麼,rl訓練過程中,哪些部分可以并行化呢?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)
gorila

上圖來自于google reinforcement learning architecture(gorila)這個工作。我們會發現,隻要有需要,rl過程中的各個部分皆可并行化:

· environment:不同的環境執行個體之間互相獨立;

· agent:agent與environment一一對應,隻與自己的environment互動,是以也可以并行;

· replay memory:當需要存儲超過單機容量的replay的時候,可以用多機存儲; learner, parameter, agent。

· learners:不同的learner可以獨立地從experience replay中采樣資料并計算梯度,類似于監督學習中的資料并行;

· parameters:如果網絡規模比較大,那麼可以用多機來儲存和更新網絡參數,類似于監督學習中的模型并行。

a3c

如果系統的部署規模還沒有到google這麼大,那麼asynchronous methods for deep reinforcement learning這個工作比較值得關注:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

從架構上來說,比gorila要簡單。細節先不展開了,這裡有一個比較有意思的結論:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

我們看到,當把單機的算法改成分布式之後,有些算法獲得了超過1的加速比。這個在分布式計算中并不常見,因為單機的算法很可能有一部分是沒法并行化的,同時并行化還帶來了通訊和排程的開銷。

原因在于,多個agent同時探索,往往會探索到environment的不同狀态。這樣,在訓練的時候,采樣得到的訓練資料之間互相的獨立性會更強。是以分布式訓練除了利用了更多計算資源以外,對rl而言對于訓練時候的樣本獨立同分布還有額外的好處。

文中提到的asynchronous advantage actor-critic, a3c算法是一個效果比較好的算法,值得感興趣的同學關注一下。

多任務和遷移

遷移學習不是一個新的話題。模型的訓練是一件花時間的事情;人們希望訓練好一個模型以後,能讓這個模型能完成不同的任務,或者至少對訓練其他任務的模型有所幫助。在rl的領域,多任務和遷移的話題變得越來越重要,原因包括:

· 在現實的場景中,agent需要面臨的情況是很複雜的,可能不時會有新的情況發生;如果能讓agent學會處理新的情況速度大大加快,無疑是很有價值的。

·

我們知道,虛拟的environment的執行和探索的成本很低,而在真實的實體世界裡探索成本非常高。但是通常,虛拟環境和真實環境總會有一些差異。如果能有辦法幫助在虛拟環境裡訓練好的agent更快地适應真實環境的話,就可以讓在虛拟環境中訓練、在實際場景下使用變得更加容易。

· 即使是完成單個任務,任務本身可能也有一些結構值得探索,就像在hierachical rl一節所思考的一樣。那麼,将多任務的一些方法應用在單個任務的訓練中,也可以起到加快訓練的作用。

target driven navigation

有一個完成單一任務的程式,現在想讓它能完成更多任務?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

從軟體工程的角度,最直接的辦法是把要完成的任務,也當成程式輸入的一部分。這也是target driven visual navigation in indoor scenes using deep rl這個工作的思路。

progressive neural networks

上述方法要求任務之間具有比較強的一緻性。如果還是希望分别訓練多個網絡對應多個任務呢?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

這篇工作的思路是,讓已經訓練好的網絡也參與到新的任務網絡的訓練過程中:因為已經訓練好的網絡所具有的資訊抽取的能力,可能對新的任務有一定的參考價值。

elastic weight consolidation

那麼,是否真的就不能讓同一個agent或者說網絡,具有完成多個任務的能力呢?

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

從訓練的角度來講,一個神經網絡在兩個task下表現好,就意味着這個網絡的參數對于兩個task對應的loss

都比較低。也就意味着,在訓練好task a以後,在訓練task b的時候,希望能保留對task a重要的參數,隻改變對task

a不重要的參數,來尋找能完成task

b的政策。參數對task的重要程度,正好有個直接的衡量标準:即訓練這個task的時候,loss對參數的梯度。這樣,隻要調低對task

a重要的參數的學習率,就能讓網絡不會“忘記”task a。

rl with unsupervised auxiliary tasks

如果是人類來學習完成某項任務的話,人類不會僅僅習得在某種state下應該執行某個action,而是會逐漸掌握這個任務的環境的一些一般規律,并利用這些知識,更快地習得更魯棒的政策。

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

在這個工作中,除了主要的訓練流程之外,

還加入了幾個輔助的任務,來預測收集到的reward、疊代值函數、控制像素的變化情況,等等。這些輔助的任務和主任務之間,共享一部分網絡機構。一個很合理的直覺是:一個能很好從環境中預測收到的reward的網絡,它從state中提取出來的資訊也對完成這個任務非常有用。

curriculum learning

人類在學習某項技能的時候,如果先從簡單的情形開始學起,循序漸進提高難度,那麼學習很容易很多,這就是所謂的學習曲線。相同的思路應用在rl上,就是課程表學習:

幹貨 | 算法工程師入門第二期——穆黎森講增強學習(二)

以上是個玩射擊遊戲的例子,不同的class

實際上是不同難度的同一個任務。class 0是最容易的,意味着更容易收集到有意義的reward,是以訓練起來比較容易;能順利完成class

0的agent,相比未經訓練的agent來說,在class

1裡面收集到reward的難度要低,是以訓練起來也比較容易,以此類推,就能逐漸完成我們最終設定的任務。

後記

可以看出,上述的各種進展,是用新的手段,解決更複雜的任務,同時不斷定位問題并解決改善的過程。由于篇幅和角度所限,不少近期的進展并沒有覆寫到;同時,上述所有的工作所聲稱要解決的問題,還遠未達到解決得很好的程度,他們各自起作用也有一些假設和作用範圍,是以這些問題都還是開放性的話題。相信不久的将來,rl的進展會展現在更多的實際應用場景中,甚至催生出很多新的産品形态,這也是學界和業界共同努力的方向,讓我們拭目以待。

                                                                                                  (回顧上一講内容敬請關注《大牛講堂》專欄)

本文作者:大牛講堂

繼續閱讀