CS 294: Deep Reinforcement Learning Note(1)

Berkeley深度強化學習的中文筆記(1):簡介+模仿學習

本專題記錄了在自學伯克利的深度學習課程時的筆記,主要目的是供個人學慣用和同道交流,因此有一些個人的觀點和感想。文章主要是對CS 294課程視頻的翻譯與整理,附加一些相關知識。課程地址:rll.berkeley.edu/deeprl,課程視頻地址 。(這是我第一次寫文章,文章有什麼問題請指教。)

預備要求:學過機器學習,深度學習,知道一點優化,知道一點線性代數。會用python。

課程筆記導讀:

  1. 簡介+模仿學習(Imitation Learning)
  2. 有模型的優化控制(Optimal Control)
  3. 基於模型的強化學習(model-based reinforcement learning)
  4. 對優化控制的模仿學習
  5. MDP,值迭代,策略迭代(model-free RL)
  6. 策略梯度(policy gradient)
  7. Q-learning
  8. DQN
  9. Advanced Policy Gradient - Variance Reduction(GAE)
  10. Advanced Policy Gradient - pathwise derivative(SVG and DPG)
  11. Advanced Policy Gradient:TRPO

註:2-4節為model-based RL,5-10節為model-free RL,兩者可以分開看。

一、深度強化學習簡介

1.深度強化學習名詞簡介

深度指的是深度學習(deep learning,DL),通過多層的神經網路而有十分強大的表示能力(representation learning),能接受學習高維的複雜的輸入信息,能表示高維複雜函數,在學習之後深度網路能把原始的高維信息轉化為有利於學習目標的高層特徵,例如cifar10的圖像分類任務。

強化學習(RL)的學習任務是機器(agent)學習策略(policy):即對於外界環境給定的觀測(observation)或者狀態(state)給出理想的動作(action)(對這種「理想的」界定往往通過獎勵函數(reward)),在通過學習後可進行複雜的決策過程。而且強化學習是序列性的(sequential),即前一個動作會通過影響後一個狀態來影響後一動作的決策,因此在做一步決策時,不光要考慮當前的獎勵最大,而且要考慮之後的總獎勵累積。

為簡化分析,對這樣一個過程,常做馬爾科夫(Markov)假設,即當前狀態僅與前一狀態和動作有關,而與更早的狀態無關。(這種序列性是強化學習與其他機器學習最大的不同)。例如AlphaGo學習下圍棋,每一步不但要考慮這步的收益最大,而且要考慮如何獲得後續的收益。

2.深度網路在強化學習中的作用:可用來表徵以下三個映射

  1. 策略函數(給出觀測,經過神經網路,得到理想的動作)
  2. 值函數(Value functions)(用來衡量狀態的好壞,或者狀態—動作對的好壞)(可用來選擇最優策略)
  3. 動態模型(用來預測下一狀態和獎勵)

3.深度強化學習與人腦的相像之處:

  1. 兩者都能接受不同的複雜的感知信息
  2. 對於不同的感知信息的加工和反應任務都使用同一套學習演算法(人類的舌頭經過學習之後能「看見」物體)
  3. 人類在做一些任務時會假定一個獎勵函數並以此來檢驗行為或作為目標(大腦中的基底核似乎與獎勵機制有關)
  4. 而且無模型的強化學習過程和實驗中的動物適應過程有一定一致性(可能會用一些探索——利用的策略之類的)等。

4.強化學習面臨的挑戰:

  1. 人可以在短時間,少樣本的條件下學習得很好,而深度強化學習需要大量的樣本和時間。
  2. 人可以利用之前的相關知識和經驗,而遷移學習(Transfer learning)在強化學習中還是在研究中的問題。
  3. 時常無法確定一個明確的有利於學習的獎勵函數。(有時可以用逆強化學習(Inverse RL):推測獎勵函數或目標 或模仿學習(imitation learning))
  4. 人能預測之後會發生什麼以此來幫助決策,但是在強化學習中決策時還無法很好利用這種對未來走向的預測(Prediction)。

5.強化學習對其他機器學習任務的作用:

  1. 在圖像分類任務中強化學習可以決策圖像哪塊區域值得注意,然後對該區域更精細地加工,來提升分類效果。
  2. 在機器翻譯中,可用強化學習方法來進行序列性的預測,產生目標語言詞語。

強化學習術語、記號:

強化學習的結果是機器接受觀測或狀態,經過一定策略來產生行為的,用數學式表示:

o_t 表示t時刻的觀測, x_t 表示t時刻的狀態, u_t 表示t時刻機器所採取的動作, pi_{	heta}(u_t|o_t) 表示帶參數的策略(表示在t時刻的觀測下採取各種行為的條件概率,而可以是神經網路的參數),若策略為: pi_{	heta}(o_t) 	o a_t ,則是確定型策略。其中 o_tx_t 不同為: o_t 往往表示機器所感知到的信息(如由像素組成的圖像),而 x_t 表示外界環境實際所處的狀態(如物體運動的速度,物體相對位置等)(不一定能觀測到,而且是高維像素的低維內在表示),而且狀態是滿足馬爾科夫性質的,但觀測就不一定滿足了,但在課程中有時不太需要十分區別兩者,都可以作為輸入。

我們之後所用的是馬爾可夫決策過程(Markov Decision Processes,MDP)即假設當前狀態只與上一狀態和動作有關,用圖表示:

p(x_{t+1}|x_t,u_t) 表示狀態轉移函數: x_{t+1} 可見僅與 x_t,u_t 有關,而與 x_{t-1},u_{t-1} 條件不相關。

二、模仿學習(Imitation Learning)

想讓機器學會某樣操作(比如開車),一個很直接的想法是觀察人類行為,並且模仿人類,在相應觀測下做出人類所做行為。將這個想法實現起來也很簡單,只需要收集該任務的一些觀測(路面的畫面),以及每個觀測人類會做出的反應(轉動方向盤),然後像監督學習一樣訓練一個神經網路,以觀測為輸入,人類行為為標籤,其中行為是離散時是分類任務,連續時是回歸任務:

然而這簡單的監督學習理論上並不可行,一個直觀的原因是由於現實的隨機性或者複雜性,使得機器所採用的動作和人類的動作有偏差或者動作所產生的結果有偏差,這樣在有偏差的下一狀態,機器還會做出有偏差的動作,使得之後狀態的偏差積累,導致機器遇到監督學習時沒有碰到過的狀態,那機器就完全不知道該怎麼做了。

嚴格的講,就是學習時和實際操作時的 o_t 的分布不同,實際操作時的 o_t 的情況由於存在偏差而會比學習時的要糟糕許多。因此我們希望 p_{data}(o_t)=p_{pi_{	heta}}(o_t) ,這也就是DAgger演算法的想法。在

穩定化實際分布

DAgger演算法之前,我們先來看看簡單的模仿學習在實際中的表現:

有關汽車的自動駕駛的論文:《End to End Learning for Self-Driving Cars》中,在採集數據時,汽車中間和兩側都放有攝像頭,將三張圖片作為觀測,而相應的人類的正常駕駛行為作為標記,將這組數據打亂餵給CNN,監督學習出模仿人類的策略。出人意料的是這種簡單的模仿學習實際上能成功。這是因為論文中所用的一個技巧:在標記左邊攝像機畫面時,它的的標記為人類正常動作加上小量的右轉,而汽車右邊攝像機圖像的標記是人類正常動作加上小量的左轉。這樣機器行為在產生的向左偏差時,機器所接受到的畫面就和正常情況下的左邊攝像機的畫面相似,而汽車左邊攝像機圖像的標記是人類正常動作加上小量的右轉,因此機器進行有小量的右轉。這樣能在偏差時,檢測到偏差並作出修復,也就是對的實際分布 o_t 起了穩定的作用。

對於這種想法的拓展,就是希望 o_t 的實際分布能相對學習時的分布穩定,一種方法是,學慣用的數據不光是某種條件下的一條人類所走的路徑,而是希望正確的路徑有一個明確的概率分布(其中路徑分布是指) p(	au)=p(x_1,a_1...x_T,a_T) ,然後在這個概率分布中取正確的路徑,作為模仿學習的數據。因為實在正確路徑的概率分布中取路徑,因此其包含了許多偏差路徑修正的例子作為學習數據,可從下圖看出:

這樣實際操作中,機器由於學習了許多面對偏差的修正行為,能讓實際路徑分布相對學習時的分布穩定。而正確路徑的概率分布的生成可以用下一節會講的iLQR方法。

DAgger方法

為了讓 p_{data}(o_t)=p_{pi_{	heta}}(o_t) ,我們從數據來源出發,想讓數據來源和實際操作的分布相似,那麼很直接的一個想法是直接從 p_{pi_{	heta}}(o_t) 採樣學習數據,做法就是實際運行策略 pi_{	heta} ,但是需要對策略 pi_{	heta} 的運行結果做標記,使其成為訓練數據,然後更新策略 pi_{	heta} ,以此循環:

但DAgger方法的主要問題在第三步,即需要人來對策略 pi_{	heta} 的運行結果做上標記,這是十分耗費人力的事情。

總結

總而言之,直接用人類數據做監督學習,來讓機器模仿學習會遇到訓練數據和實際操作時的分布不匹配的問題,因此不可行。

但是用一些方法能讓模仿學習學的不錯:

  1. 和學習任務相關的技巧(如汽車自動駕駛時在兩邊裝攝像頭)
  2. 生成訓練數據的分布,然後大量採樣,使實際分布穩定(需要另外的學習演算法)
  3. 直接從 p_{pi_{	heta}}(o_t) 採樣學習數據(DAgger)

但即使用了一些方法,模仿學習始終有這些問題:

  1. 需要人類提供的大量數據(尤其是深度學習,然而常常沒有多人類數據)
  2. 人類對一些任務也做的不太好,對於一些複雜任務,人類能做出的動作有限(比如操作無人直升機)
  3. 我們希望機器能自動學習,即能不斷地在錯誤中自我完善,而不需要人類的指導。

作業指導

關於課程的第一次作業,需要從專家數據中模仿學習,以及用DAgger方法。

完整的tensorflow代碼已經上交到我的Github上了:github.com/futurebelong

僅做參考。


推薦閱讀:

淺析感知機(一)--模型與學習策略
人工智慧公開課
從AlphaGo Zero到應用:造一張「棋盤」
斯坦福CS231n課程作業# 3簡介

TAG:强化学习ReinforcementLearning | 机器学习 | 深度学习DeepLearning |