雷鋒網[AI科技評論]按:本文根據俞揚博士在中國人工智慧學會AIDL第二期人工智慧前沿講習班"機器學習前沿"所作報告《強化學習前沿》編輯整理而來,雷鋒網在未改變原意的基礎上略作了刪減,並經俞揚博士指正確認,特此感謝。全文分為上下兩篇,本文為下篇。
上篇傳送門:《南京大學俞揚博士:強化學習前沿(上)》
俞揚博士、副教授,主要研究領域為人工智慧、機器學習、演化計算。分別於2004年和2011年獲得南京大學計算機科學與技術系學士學位和博士學位。
2011年8月加入南京大學計算機科學與技術系、機器學習與數據挖掘研究所(LAMDA)從事教學與科研工作。曾獲2013年全國優秀博士學位論文獎、2011年中國計算機學會優秀博士學位論文獎。發表論文40餘篇,包括多篇Artificial Intelligence、IJCAI、AAAI、NIPS、KDD等國際一流期刊和會議上,研究成果獲得IDEAL'16、GECCO'11、PAKDD'08最佳論文獎,以及PAKDD』06數據挖掘競賽冠軍等。
任《Frontiers of Computer Science》青年副編輯,任人工智慧領域國際頂級會議IJCAI』15/17高級程序委員、IJCAI'16/17 Publicity Chair、ICDM'16 Publicity Chair、ACML'16 Workshop Chair。指導的學生獲天貓「雙十一」推薦大賽百萬大獎、Google獎學金等。
在此列出俞揚老師講課目錄,以供讀者參考:
一、介紹(Introduction)
二、馬爾可夫決策過程(Markov Decision Process)
三、從馬爾可夫決策過程到強化學習(from Markov Decision Process to Reinforce Learning)
四、值函數估計(Value function approximation)
五、策略搜索(Policy Search)
六、遊戲中的強化學習(Reinforcement Learning in Games)
七、強化學習總結
八、強化學習資源推薦
上篇介紹了前兩個小節的內容,以下為下篇內容:
在強化學習任務中,獎賞和轉移都是未知的,需要通過學習得出。具體解決辦法有兩個:
一種是還原出獎賞函數和轉移函數。首先把MDP還原出來,然後再在MDP上解這個策略,這類方法稱為有模型(Model-Based)方法,這裡的模型指的是MDP。
還有一類和它相對應的方法,免模型(Model-Free)法,即不還原獎賞和轉移。
在這類方法中,智能體會維護Model(即MDP),然後從Model中求解策略。
從隨機策略開始,把策略放到環境中運行,從運行的序列數據中把MDP恢復出來。因為序列數據可以提供環境轉移和獎賞的監督信息,簡單的做一個回歸,就能知道一個狀態做了一個動作下面會轉移到哪兒,以及能得到的獎賞是多少。
這裡有一個非常簡單的環境探索方法——RMax,它用了計數這個非常簡單的回歸模型。
雖然看起來很簡單,但是還原MDP的樣本複雜度是狀態數的平方,遠高於前面說到的求解策略的複雜度。從這裡可以看出學習MDP的複雜度極高,所以大量的研究工作都集中在免模型學習上。
免模型學習簡單介紹兩種方法。一種叫做蒙特卡羅採樣方法(Monte-Carlo method),一種是時序差分法(Temporal difference method)
免模型學習和之前講到的策略迭代的思路很像,首先,評估當前策略怎麼樣;第二,提高當前策略。
第一步 評估策略
在MDP裡評估策略的時候,由於獎賞和轉移都是知道的,所以可以直接用這兩個函數算評估值。現在這兩個函數都不知道,那怎麼辦呢?
這個Q值函數實際上是個期望,所以直接用採樣來替代期望就可以了。換句話說,就是拿該策略在環境裡面去跑,看跑出來什麼結果。
比如跑了之後我得到一條軌跡:先是出太陽,接著是多雲,最後是出太陽;再跑第二次得到一條軌跡,再跑第三次又得到一個軌跡。最後得到很多軌跡。我知道每條軌跡的獎賞是多少,然後把這些軌跡的獎賞平均起來,作為這個策略的值函數的估計,用頻率來逼近期望。
第二步 更新/提高策略
如此一來,我們就可以去評價一個策略的好壞。評價完一個策略以後,就可以和剛才一樣,取Q值函數指示最好的動作作為新的策略,更新過程是一樣的。
整個算法寫出來比較簡單。我們要做m次採樣,每一次都把當前的策略拿到環境裡面運行,然後會得到一個序列,根據序列讓獎賞求和,然後更新Q值,這個Q值就是歷史上採樣的均值,c是計數。
在一條軌跡下來以後,更新Q值後,做第二條軌跡,這樣就做到了不依賴MDP模型的強化學習方法。
然而該方法缺乏環境探索,難以更新策略
但是,這個有一個問題——如果得到了確定性策略,那麼有可能採100個樣本出來的軌跡都是一樣的,導致無法評估策略在所有狀態上的表現,所以無法提高策略。這裡的關鍵在於它缺乏對環境的探索。
如何探索環境,以獲得最大回報?
怎麼探索?我們可以考慮一個最簡單的強化學習問題:一個狀態,兩個動作,一個動作的回報高一點,一個動作回報低一點,但是這兩個回報來自於兩個分布。這個時候你選哪個動作,或者你怎麼做能收到最大的回報?這其實就是bandit模型。
第一種情況是要有足夠多的探索(即exploration),第二種情況是不需要過多的探索而有更好的投資(即exploitation),我們要在這兩點之間找到平衡。
解決這個問題有多種方法。第簡單的方法是,以1-ε的概率,現在看好哪個,就去投資它,剩下的ε概率就完全隨機,每個動作都去嘗試。這個方法稱為ε-greedy。
該方法可以保證所有狀態都有一定的概率,哪怕是很小的概率,被訪問到。所以當運行一段時間以後,它能夠找到最優的策略。
但這個方法也有缺點,就是必須要指定一個ε值。通常這個值應當不斷衰減,直到收斂到一個比較好的結果。還有一個效率問題,比如A動作嘗試了10次以後,平均回報是1萬,B動作嘗試了10次以後是0.1,這個時候就已經沒有必要嘗試下去了,因為距離非常遠。但是ε-greedy的探索不會停下來,所以有了其他的方法,比如softmax——它會考慮到Q值本身,如果兩個動作的值差別很大,探索的概率就很小。另一個在理論上比較漂亮的方法是UCB(Upper Confidence Bound):
所以,按照Q值加上置信度的上界來選擇動作,它就會自動平衡。
不過,最常用的還是第一種ε-greedy方法。給出一個策略π以後,把它變成探索的策略,即隨機挑選一個動作,把這個帶探索的策略放到蒙特卡羅的算法裡面。並且,這個軌跡並不是從π中產生的,而是從帶探索的πε中產生的,這就能保證策略可以不斷更新了。
下面介紹On/Off Policy:學習帶探索/不帶探索的策略。
大家可能常聽On/Off Policy策略這個詞。
在蒙特卡洛採樣中使用了πε策略來採樣,學的並不是π,是帶探索的πε。因為用來評估的數據,是從帶探索的策略產出來的,而不是從我們想要學的策略上產生出來的。這個區別會導致把探索也作為策略的一部。這種採樣與更新的策略是一樣的算法叫做On Policy。
但很多時候,我們想學的實際是不帶探索的策略,也就是說要從帶探索的策略中採樣,但更新的只是策略本身,即Off Policy。這裡面臨一個問題就是,採樣並不來自於當前的策略,常用的重要性採樣(Importance Sampling)技術通過修改採樣的分布,改成想要的樣子。可以通過加權重這個簡單的方法,修改策略的分布,然把這個分布加到具體算法裡面去。也就是把獎賞加了一個權重,這樣的算法就變成一個Off Policy的算法,這樣它學習的就是π自己了。
總體來說,蒙特卡洛的算法不是一個效率很高的算法,但是能夠展現免模型類算法的特性。
我們要做這個策略的評估,然後做完評估以後找到一個改進的方向,就可以改進這個算法了;這裡,為了使策略能夠有效更新,需要引入對環境的探索;而對環境的探索裡面,要注意On/Off Policy這麼兩個概念。
另外,蒙特卡洛的算法有一個很顯然的缺陷:一定要拿到整個軌跡以後,才能更新模型。
那能不能每走一步都更新模型呢?蒙特卡洛算法裡面有一個性質——即更新Q值的時候,實際上是在更新均值。
更新均值還可以寫成:μt = μt-1 + α(xt _ μt-1),意思是剛才我們更新的是Q值(算式如下圖顯示),其中R − Q(st, at)叫做蒙特卡羅誤差。我們知道,Q是對獎賞的一個估計,R是是採完這個軌跡以後得到的真實的獎賞。換句話說,Q值d餓更新就是加上就是真實值和估計值的差別,即蒙特卡羅誤差。
在TD算法裡,我們走了一步得到了一步真實的獎賞,再往後走還沒走,所以不知道後面真實的獎賞是多少,但可以通過之前的Q值來估計之後的獎賞,這兩個加起來就是當前知道的信息,用它來替代這個R,來減去老的預估值,我們稱這個過程為時序差分。
如果用蒙特卡羅的話,需要先走到底,知道總體的結果之後,每一步的差別就能算出來;而對於TDL來說,只需要記錄一步的信息,所以可以在線更新自己。
動態規劃記錄的是所有狀態上面的信息。而把剛才的蒙特卡羅的error換成了TD errpr,就可以得到新的TD方法的強化學習方法。這個方法就不是採集整個軌跡了,而是根據探索的策略,用TDL來更新Q值,每走一步就更新一下對當前策略的評判,然後再更新策略。這個算法叫做SARSA,屬於On Policy,而變成Off Policy的策略,只修改一處,用非探索策略來計算TD error,就得到Q-Learning算法。
這是一個爬格子的問題,是典型的經典強化學習問題。
動作是上下左右的走,每走一步就會有一個-1的獎賞。從初始狀態走到最終的狀態,要走最短的路才能使獎賞最大。圖中有一個懸崖,一旦走到懸崖獎賞會極小,而且還要再退回這個初始狀態。
在這裡用On Policy SARSA會有一定的概率去探索,也就有可能會掉到這個懸崖下面去,所以獎賞就會比較小;而用Q Learning,因為最後的策略是不帶任何探索的,沒有任何的隨機性,所以路徑最短。
這就是兩類強化學習算法的區別。你在學習過程中可以看到,Q Learning的值較低,這是因為學習的時候一定要帶探索的學習,所以你訓練的過程中一定是不斷的去訓練。
另外,前面講的TD誤差更新是走一步後的更新,實際上還可以做兩步的更新、走N步的更新,都是可以的。所以有一種方法就是做很多步的,按照一個概率加權把它綜合起來,綜合起來以後到一個叫做λ—return,就是走一步、走兩步和走多步的TD。
剛才講的所有問題,前提是都能用表格表示。但是很多真實環境是無法用表格表示的。所以在強化學習發展的早期,一直沒辦法用在大規模的真實問題上去。後來大家就想,怎麼把這個強化學習放在一個連續狀態空間去,甚至說放在動作也是連續的情景中,比如控制一架直升機的。
大家可能覺得強化學習的學習過程和監督學習之間的差別比較大,算法、模型好像都完全不一樣。但進入連續狀態空間以後,兩者就會出現很多相似的地方。
離散狀態下可以用表格來表示值函數或策略;但進入連續狀態空間就要用一個函數的近似來表示,這個方法叫做值函數近似。
比如,我們可以用一個線性函數來表示,V值是表示狀態s下面的一個值,狀態s先有一個特徵的向量φ(s),這個V值表達出來就是一個線性的參數乘以特徵的內積。Q值裡面有一個動作,假設這個動作是離散的,一種方式是把這個動作和狀態放在一起變成一個特徵,另一種方法是給每一個動作單獨做一個模型。
當遇到連續空間的問題時,用近似來表示值函數V和Q,這個做法看起來很自然,但是近似以後會發現,以往很多的理論結果就不成立了。
但我們現在先不管那些問題,先看做了近似以後怎麼來學?我們想知道的是,這裡的Q值,是希望Q值近似以後,夠儘量逼近真實的Q值。如果已經知道真實的Q值,怎麼逼近呢?最簡單的方法就是做一個最小二乘回歸。其中一種解法是求導。求導以後,導數表示為,真實的Q和估計的Q的差值,然後再乘對Q值模型的導。可以看到,導數表達的含義與之前的模特卡羅誤差、TD誤差是一致的,只不過更新的是參數w。把這種更新方式套進Q learning裡,其他地方都沒有變,只得到了用值函數逼近的Q-Learning方法。
這個模型用什麼函數呢?最簡單就是用線性函數。但是線性函數有很多局限的,需要在特徵的設計上下功夫,這需要很好的人工設計。
把它變成非線性函數,一個常用方法是用神經網絡,直接用神經網絡表示Q值。在更新的時候也很簡單,只需要把梯度傳到神經網絡中去就可以了,因為神經網絡的BP算法本身也是求梯度。
還有一些改進的方式。比如說我們在訓練近似模型的時候,在一個樣本上訓練可能會不穩定,所以可以用Batch Models的方式,積累一批數據來訓練這個模型。
剛才講的所有訓練方法,都是先把V值或者Q值估計出來,然後再從中把這個策略導出來。我們稱這種方法為基於值函數的強化學習方法。
但是用值函數估計會有一個問題——這種方法可以收斂到最優策略,但前提必須是用表格的表達方式;如果用的是函數近似,則會出現策略退化,即對Q值估計越大,策略越差。
舉一個簡單的例子,現在有兩個狀態,一個是狀態1,一個是狀態2,狀態1的特徵為2,狀態2的特徵為1。我們設定獎賞,使得狀態2的最優V值比狀態1的要大。這時如果用一個線性函數來表示這個V,也就是用W乘以特徵,這個特徵只有一維,最優的這個V值2是比1大的,1的特徵值要高一點,2的特徵值要小一點,所以最優的W就應該是個負數,這樣會使得V(2)比V(1)大,因而能導出最優策略。
但是基於值函數的做法是要使得V值儘量靠近最優的V值,最優的V值又是正值,這樣會導致這個W一定是正的,無法得到最優的策略。這樣值函數估計得越準,策略越差的現象被稱為策略退化。
為了避免策略退化,我們的方法是直接去找策略,這就是策略搜索。
先把策略參數化,對於離散動作來說,參數可以做成像Gibbs Policy一樣,即每個動作有一個參數,然後把它歸一,變成每一個動作有一個概率。如果是一個連續動作的話,可以用高斯分布來描述。裡面這個參數,我在這裡寫的是一個線性的過程,但也可以用神經網絡來替代。
直接優化策略的參數,使得收到的總回報達到最大的方法,就是策略搜索(Policy Search)。
策略搜索和基於值函數的方法相比,優缺點各是什麼?
第三點用處很大,比如說玩「剪刀石頭布」,如果選擇確定性策略,那一定會輸;一定要做一個帶概率的輸出才會贏。
還有另外一個例子,跟大家講解一下為什麼需要隨機性策略。
骷髏代表走到這就死掉了;最優策略肯定是往中間走,但是這裡有兩個灰色格子,它們代表的是不完全觀測的狀態,即走到灰格子之後不知道該往左邊還是右邊;
這也體現了策略搜索的優勢。
第四,策略搜索和監督學習的兼容性比較好。
這個策略是用參數表達的,它的目標是最大化的獎賞。最大化獎賞的意思就是說,把空間裡所有的軌跡枚舉出來。因為策略產生這些軌跡是有一定概率的,在某個狀態上,策略做出相應動作的概率是由策略決定的,把所有一條軌跡上所有動作的概率相乘,就得出產生這條軌跡的概率。所以它總體的期望回報,就是所有軌跡的期望,也就是每條軌跡的概率乘以每條概率能獲得的獎賞,這也是總回報的另外一種寫法。這種寫法有的好處就在於,它和策略參數目標有關,所以我可以對獎賞直接求導,來求解策略。另外一種寫法用的是穩態分布(Stationary Distribution),用和上面寫法完全等價,意思是完全一樣的,在這裡就跳過不講了。
策略搜索也有一個缺點,其中一個缺點就是有很多局部最優解,失去了全局最優的收斂性保障,其次是訓練過程方差非常高。
相信大家都會求導,不過有一種方式大家可能沒有見過——有限差分(Finite Difference),這是早期用來做策略求導的方法。
那什麼時候會用到有限差分呢?可能是這個系統可能太複雜了,不容易求導,那就可以用一個簡單的方式來逼近這個導數。拿到一個參數θ,θ的導數就是看一下周圍哪個方向走的比較快,這樣給θ加一個很小的擾動的值,對θ周圍的局部進行採樣,對那個採樣增長得最快,這個方向就當成是一個導數方向。這是最簡單的方法,當然這個方法有很多缺陷,特別是在高維度的情況下,會需要很多採樣,所以更直接的方法還是直接求導。
最後得到的一個導數,導數形式如下所示:
E是期望,1到T代表考慮的是T步的軌跡,每一步軌跡對策略輸出值的對數取導數,然後乘以真實的獎賞(獎賞不取對數)。獎賞是個常數,即軌跡得到的獎賞值。
可以通過採樣可以來逼近期望,對一個策略以後,去跑一些軌跡,然後計算平均梯度,作為梯度期望的逼近。
我們剛剛說到,這種方式有一個很大的缺陷,就是它的方差很大,直接用計算的梯度來更新策略(vallina policy gradient),基本上得不到好的策略,因為它的方差太大,不穩定。
控制方差有多種方式,其中一種叫做Actor-Critic。用比如直接求導的方式把策略求出來,叫做Actor;對值函數進行估計,並用於評估策略,是Critic,意為它是一個評價者。
我們要維護一個值函數Q的模型。另外,用導數的方法來求策略的梯度的時候,不做直接使用獎賞,而是使用Criitic提供的Q值。所以Actor-Critic會維護兩個模型,第一個是策略的模型,第二個是Q函數的模型。
對Q函數求近似的時候,式子和上面的那個導數形式一樣,裡面的經驗獎賞換成了Q值。在求策略梯度時,Q值是一個常數,是不更新的,它有自己的更新方式,且通常是真實的Q值。
另一種控制方差的形式,是引入偏差項,只要這個函數是一個只跟狀態有關、跟動作無關的函數,它的積分就是0,不影響梯度方向,而會影響梯度的方差。
對於簡單的形式,我們可以直接求出來最優的偏差是什麼。更一般的形式,我們可以用V值來替代bias。因為V值就是關於狀態的估計值,和動作沒有關係,所以它帶到積分裡面去的時候會是0。
把V值帶進去,後面的Q就變成了Q-V,叫做Advantage Function,意思指:在這個狀態上,V值相當於是一個平均值,Q值指某個動作比平均值高出來多少。用Advantage Function會使得做策略梯度以後,方差控制得比較好,只有當方差控制好了,這類算法才能真正起作用。
梯度的改進方法還有Nature Policy Gradient。在監督學習裡面,隨機梯度是很容易並行的。最近有一些理論的工作,也探討了它的並行不會影響到它的理論性質。在策略梯度裡面,我們同樣可以把這個梯度並行來做,這樣可以使得它的速度下的很快。
還有對策略直接求導的方法,比如無梯度的優化(Derivative-Free Optimization)。這類方法不管強化學習是在做什麼,而是直接優化策略裡面的參數。優化完參數以後,試一下策略,得出這個值具體是多少。
這樣,優化過的算法可以通過總體獎賞值來調整模型裡面的參數。通常來說它比用Gradient Policy效率差,由於中間過程是忽略不計的,所以它對特別複雜的問題,反而有比較好的效果,比如俄羅斯方塊遊戲。
最後一部分,講一下強化學習和遊戲。
為什麼講遊戲?一方面,是因為在遊戲裡面需要克服的一些問題,在真實應用中也常遇到;另外一方面,用遊戲來做強化學習任務的成本比較低。
2015年,DeepMind在Atari遊戲上使用深度網絡直接從屏幕圖像訓練強化學習,直接推動了「深度強化學習」的發展。
用深度神經網絡,放在Policy Gradient裡面,作為一個策略的模型;或者放在基於值函數的方法裡面,作為值函數Q值的一個估計。這樣的方法就稱為深度強化學習。
其實,深度強化學習裡很多工作是在研究怎麼讓網絡更穩定。特別是當輸入數據比較少的時候,網絡方差的浮動會比較大。這就可以用「延後更新」來解決——如果用深度神經網絡,那麼每走一步都更新模型會導致模型抖動非常大。而用「延後更新」,例如可以在100步裡不更新策略,只是把神經網絡更新一下,這個神經網絡沒有放到新的策略裡面來,等神經網絡有一個比較穩定的上升以後,再更新策略。還有,積累的數據不要丟掉,也拿出來,讓這個神經網絡更穩定一點。這兩個技巧合起來放在Q-Learning裡面,就是DQN。
DQN可以說是第一個聲稱深度強化學習算法,可能也是最廣為人知的一個。基本上,它的整體結構就是一個函數近似的Q Learning,只不過用CNN做了近似函數。
在玩這個遊戲的時候,它已經有了100萬個記錄歷史。每次訓練神經網絡的時候,要抓32個出來訓練一次,並且訓練完以後不去更新策略,而是在走一定的步數以後,再更新這個策略。除此之外,並不是直接從屏幕上把一幀圖像拿進來,而是把歷史上好幾幀的屏幕拼起來,得到一個當前幀和前面好幾幀合起來的一個總體的圖作為CNN的輸入。不過在最新的一些工作中,這個過程已經被被遞歸神經網絡替代了,不再是把好幾層拼起來,而是讓好幾幀分別輸入例如LSTM的網絡。
很多運用強化學習尋找策略的遊戲已經比人玩得都好了,它玩的好的優勢主要體現在反應速度上。但是在需要深入思考邏輯關係的遊戲中,強化學習沒有人做得好。
我們來看看它的遊戲報告結果。
這裡面,「with replay」和「without replay」的意思是有沒有用到歷史數據,「with target Q」和「without target Q」就用了CNN還是線性網絡。我們可以看到,神經網絡在這裡貢獻並不是最大的。如果我們只用神經網絡而不用replay的話,效果還不如用了replay,但只用線性模型而不用CNN。當然,同時使用深度模型和強化學習是最好的,這可以完成一些過去完成不了的事情。
AlphaGo系統的基礎框架是蒙特卡洛樹搜索,這是經典的樹搜索的方法。但是單憑蒙特卡洛樹搜索本身並不能取得很好的效果,只用樹搜索大概只能達到業餘的五六段。AlphaGo裡面的一個創新的點就是引入強化學習來改進搜索樹的深度和寬度。
這裡面用了三個神經網絡。
第一個policy network,在展開蒙特卡羅樹搜索節點的時候起作用。這個網絡是用策略梯度方法訓練出來的。
第二個是一個很小的神經網絡,蒙特卡羅樹搜索裡再往下做很深的搜索時會用到,這樣它可以算得很快。這個小的網絡是通過監督學習學出來的。
第三個網絡是用來修正值的。它是通過強化學習中間產生的數據來學習。
由於大家對DQN比較熟悉,所以在嘗試深度學習的時候,首先想到的算法大多是DQN。但因為它是一個基於值函數估計的強化學習方法,所以這種方法在稍微複雜一點的應用環境中可能運行不了,大家會感覺用DQN做強化學習效果沒那麼好。但同樣是DeepMin做的圍棋遊戲,它的強化學習方法已經改成了Policy Gradient,而且以後的很多算法也都是以Policy Gradient為主的,用這種方法處理複雜問題效果更好。
正是由於在計算機中模擬遊戲的代價很低,所以不斷有研究者藉助遊戲來發展強化學習。比如,有用在3D第一人稱射擊遊戲中,可以在這個世界裡面行走,並且尋找東西。去年有一個「DOOM」遊戲比賽,參賽者要用計算機控制遊戲角色,以第一視角進行3D射擊。有了強化學習,參賽者就能控制遊戲角色,讓它做一些動作。由於這個遊戲額環境比較複雜,所以在玩遊戲的過程中,也發展出了一些創新方法。
例如,在遊戲裡面,如果讓一個強化學習直接到遊戲環境裡面學習,那它又要撿醫療箱,又要去撿武器等等,太複雜了。而其中一個團隊,就採取了這樣的做法:他們讓強化學習從簡單到複雜,一步一步的去學習——首先學一個策略,比如撿起醫療箱,然後在這個策略的基礎上再來學怎麼樣來開槍、怎麼樣來射擊敵人等等。
實際上遊戲裡面有很多很高難度的挑戰,其中一個非常複雜遊戲叫做StarCraft。這個遊戲已經有很多年的歷史了,現在有不少人,包括DeepMind,都希望在這麼複雜的遊戲上面能表現出一個比較好的性能,因為這個遊戲的複雜度已經大到和很多真實應用的複雜度相當,即使人去學這個遊戲,也要花很長時間才能學會。以前用強化學習,只是先取其中一個小問題來解決。比如說我和對方各派三個兵,想辦法看這六個兵怎麼打。這是一個很局部的戰役,但能學到這樣的東西也已經比較不錯了。如果要學到整盤的打法,它裡面涉及到很多問題,第一,它的規模遠大於圍棋的規模;第二,有很多對手的信息是觀測不到的,比如敵方的行動。雖然在今年年初,德州撲克遊戲上機器已經打贏了人類玩家,但德州撲克其實是一類很簡單的牌類遊戲,想讓強化學習在大規模遊戲任務中,在無法觀測到對手信息的情況下,指揮200多個單位做連續的運動,還要持續半個多小時走幾十萬步,目前還做不好。
七、強化學習總結
之前介紹的只是強化學習的其中一小部分,強化學習還包括很多內容:
比如在MDP中如果出現了不可觀測的情況,它就不屬於Markov了,有一個專門的方向如POMDP來解決這個問題。
還有Learning from Demonstrations,意為人先做出示範,然後從示範數據中教智能體。例如AlphaGo,一開始訓練的時候並不是直接上強化學習,而是首先搜集了很多人類對打的數據。
而怎麼去設計獎賞函數也會有很多不同的方法。
下面總結一下兩個大家比較關心的問題。
如果碰到比較簡單的強化學習問題,可以用基於值函數的方法,比如DQN,更複雜的問題可以用Policy Gradient的方法做策略梯度。
但是從目前的發展現狀兩看,強化學習的成熟度遠遠不夠,也就是說在強化學習領域,還有很大的提升的空間,有可能能做出一個性能更好的全新的算法。但大規模的問題現在還是很難解決。這個大規模指是它的狀態空間大,並且步數特別多。
1、 強化學習需要探索,在很多場景帶來風險。
以推薦股票為例。我本來已經有一個還可以的推薦策略,每天能給我帶來100萬的收入。但是現在為了訓練強化學習,要做探索,嘗試一些隨機的股票。假如告訴你這個探索會導致今天一下子要損失好幾百萬,而一個月以後可以賺回1個億,那你就要衡量一下這裡看面的風險有多高,敢不敢用了。
2、 為什麼強化學習在很多遊戲上面用的比較多?
遊戲在計算機中運行,速度高、代價低。如果放到現實世界中來運行,比如放在推薦系統線上運行,那它就必須和真實的環境打交道。它的學習過程需要不斷探索,而部署在真實環境裡可能會遇到很多麻煩,如果能有一個比較好的模擬器,就可以減少這些麻煩;另外,如果有比較好的監督學習數據的話,也可以做一個初始的策略,不過這個策略可能一開始起點要稍微高一點。做機器人一般也有一個機器人模擬器,所以一般先在模擬器裡面做,做好策略再放到機器人身上來學。但是其他現實世界問題,在模擬器裡可能就沒有那麼好做了。
強化學習的書不多,最經典的書是Richard S. Sutton的教科書;Masashi Sugiyama的書屬於專著;Reinforcement Learning: State-of-the-Art屬於文集,覆蓋面比較廣,但需要讀者有一定基礎;還有一些講述MDP的書;另外,在機器學習的書裡面也會提到強化學習。
OpenAI Gym:一個基礎的強化學習平臺,裡面很多環境,研究人員可以在上面做實驗,它對這個領域有很大的促進。還有AlphaGo技術負責人David Silver的線上教學視頻,講的非常好。
強化學習論文主要發表在AI期刊和會議上,期刊有Artificial Intelligence, JAIR, JMLR, Machine Learning, JAAMAS等,會議有IJCAI, AAAI, NIPS, ICML, ICLR, AAMAS, IROS等等。
以上就是俞揚博士的演講,更多內容請繼續關注雷鋒網(公眾號:雷鋒網)。
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。