Reinforcement Learning
https://www.bilibili.com/video/av9770302/?p=24
https://www.bilibili.com/video/av24724071/?p=3
https://zhuanlan.zhihu.com/p/25239682
?
強(qiáng)化學(xué)習(xí)概覽
分為幾個(gè)要素,
首先我們可以觀察到state,observation
然后我們采取Action
環(huán)境會(huì)對(duì)我們采取的Action,給與Reward,由此可以知道action的效果的好壞
最終我們學(xué)習(xí)的目的是,policy,即state和action的匹配關(guān)系
?
那么強(qiáng)化學(xué)習(xí)和傳統(tǒng)的supervised learning有啥區(qū)別,為什么需要強(qiáng)化學(xué)習(xí)
傳統(tǒng)supervised learning的場(chǎng)景,是人可以知道明確答案的,比如圖片分類(lèi)等,這樣才能訓(xùn)練集去supervise機(jī)器
但是有些問(wèn)題,人也無(wú)法決定如何做事正確答案,比如玩游戲,這是就需要強(qiáng)化學(xué)習(xí),通過(guò)經(jīng)驗(yàn)去試錯(cuò)
?
用video game來(lái)舉例看下,實(shí)際的強(qiáng)化學(xué)習(xí)的過(guò)程,
每次看到游戲畫(huà)面observation就是state
采取的actions,包含左移,右移,fire
殺死外星人就可以得到一定的reward
游戲從開(kāi)始玩到gameove,稱(chēng)為一個(gè)episode,我們的目標(biāo),就是在一個(gè)episode中得到盡可能多的reward
?
強(qiáng)化學(xué)習(xí),可以這樣分類(lèi),
首先是Model-based和model-free,
model-based就是對(duì)環(huán)境有先驗(yàn)知識(shí),比如下圍棋,你讀過(guò)棋譜,知道規(guī)則,那么你可以對(duì)環(huán)境后續(xù)的變化做出預(yù)判
model-free就是比較盲目的,不了解環(huán)境,只能試錯(cuò)
顯然model-based的效率要好,但是很多場(chǎng)景沒(méi)辦法model-based,因?yàn)槟愦_實(shí)也沒(méi)有先驗(yàn)知識(shí)
在Model-free里面,又分成Policy-based和Value-based
我們上面說(shuō)強(qiáng)化學(xué)習(xí)的目標(biāo),就是學(xué)習(xí)policy,即即state和action的匹配關(guān)系
所以Policy-based的方法,是比較直接的方法,我把Actor/policy作為一個(gè)function,那么只要學(xué)習(xí)出這個(gè)function,問(wèn)題就解決了
在Policy-based里面又可以分成on-policy和off-policy,一般看到的都是on-policy,就是和環(huán)境互動(dòng)的agent就是學(xué)習(xí)agent本身
off-policy,和環(huán)境互動(dòng)的agent和學(xué)習(xí)agent分開(kāi),不是同一個(gè)
?
而Value-based的方法,比較曲折,直接學(xué)習(xí)出policy function比較抽象,換個(gè)思路,學(xué)習(xí)一個(gè)critic,它會(huì)評(píng)價(jià)在某個(gè)state下的每個(gè)action
如果能學(xué)習(xí)出critic,那我們就可以通過(guò)他的評(píng)價(jià),來(lái)選擇最好的action,這個(gè)問(wèn)題也就解決了
Q-learning就是典型的Value-based的方法,它是根據(jù)之前所有的經(jīng)驗(yàn)來(lái)統(tǒng)計(jì)出當(dāng)前state選擇某個(gè)action,會(huì)得到的最終的Reward;但這種方法,缺乏泛化能力,對(duì)于沒(méi)見(jiàn)過(guò)的case,無(wú)法處理,所以出現(xiàn)DQN用nn來(lái)擬合critic
?
Policy-based Actor
由于policy-based是比較新的技術(shù),也是當(dāng)前比較主流的技術(shù),所以先介紹policy-based的方法,
Policy-based的方法,可以分成三步,
第一步先定義一個(gè)function,那么這里就用nn來(lái)作為一個(gè)actor
輸入是游戲畫(huà)面,輸出是每個(gè)actions的probability,一般在選擇action的時(shí)候要加入random,否則會(huì)缺乏exploration的能力,即每次相同選擇,沒(méi)有機(jī)會(huì)發(fā)現(xiàn)新大陸
?
第二步,怎么判斷function的好壞?
判斷一次episode的好壞,就是這個(gè)過(guò)程中獲得的reward和
那么一個(gè)actor,會(huì)產(chǎn)生很多各種各樣的episode,或trajectory,只要算出所有episode的R的期望,就可以用來(lái)衡量actor function的好壞
而期望實(shí)際上算不出來(lái),所以用sample來(lái)近似,最終得到了右邊的結(jié)果
?
第三步,如何找到其中最好的actor function
答案就是用Gradient Asent,來(lái)得到最優(yōu)的actor function
那么下面就是對(duì)R的期望求gradient的問(wèn)題,
?最終R期望的梯度公式如下,
?
Tips
但這樣的問(wèn)題在于,比如對(duì)于游戲它的R可能都是正的,這樣b, c會(huì)被sample到,那么他們的概率會(huì)被放大,而a其實(shí)reward比c大,但是由于沒(méi)有被sample到,所以概率反而會(huì)被減小
所以增加一個(gè)baseline,大于這個(gè)baseline的reward才認(rèn)為是正向reward,小于就認(rèn)為是負(fù)向的reward?
上面的算法還有一個(gè)明顯的問(wèn)題,我們?cè)诳紤]一個(gè)action是正向還是負(fù)向的時(shí)候,考慮的是整個(gè)episode的reward和
很直覺(jué)的想法就是,最終的結(jié)果是正向的,并不代表過(guò)程中的所有action都是正向的,比如下左圖,R=3基本都是由于a1這個(gè)action的reward,而a2,a3沒(méi)有啥貢獻(xiàn),甚至產(chǎn)生負(fù)的reward
那么這個(gè)情況當(dāng)sample足夠多的情況下,是可以克服的,但是普通情況下sample都是不足夠的
所以一個(gè)想法,當(dāng)前的action只會(huì)對(duì)它后面的reward有作用,并且越靠近的reward受到的影響應(yīng)該越大
所以這里會(huì)用action之后的reward和來(lái)替換整個(gè)episode的reward和,并且要乘上discount factor,讓action的影響遞減
替換部分稱(chēng)為advantage function,這個(gè)在后面的A3C算法中會(huì)看到
?
PPO (Proximal Policy Optimization)?
前面的policy的方法都是on-policy的方法,下面介紹的PPO,當(dāng)前是OpenAI的默認(rèn)RL算法,是一種off-policy的方法
off-policy,就是和環(huán)境互動(dòng)的agent和我訓(xùn)練的agent是兩個(gè)不同的agent
為什么要用off-policy這么trick的方法?
因?yàn)閛n-policy,每次收集和環(huán)境互動(dòng)得到的data,然后更新參數(shù),更新完參數(shù)后,之前收集的data就沒(méi)法繼續(xù)用了,需要再和環(huán)境互動(dòng)收集新的data
這樣非常耗費(fèi)時(shí)間
如果我們有個(gè)一個(gè)agent,它的參數(shù)是fix的,專(zhuān)門(mén)去和環(huán)境交互并收集data,然后用這些data去訓(xùn)練我們的當(dāng)前的agent,這些收集的data就是可以被重用的
這個(gè)方法類(lèi)比,你看別人打球,或下棋,然后從你觀察到數(shù)據(jù)來(lái)用于自己學(xué)習(xí)
具體怎么做,這個(gè)首先基于一個(gè)理論,importance sampling,
如果我們要算一個(gè)分布P中x,對(duì)于f(x)的期望,如果不能直接求解,我們用的方式就是sample,在P中sample n個(gè)x,然后算平均
那么如果我們這時(shí)沒(méi)法在P中做sample,我們有任意一個(gè)分布Q,我們?cè)赒中做sample,仍然能算出f(x)在P上的期望
這個(gè)感覺(jué)很神奇,但是上面的推導(dǎo)確實(shí)給出公式?
用這個(gè)理論還是有些問(wèn)題的,
問(wèn)題在于這個(gè)理論保證期望不變,但是方差是變化的,所以如果兩個(gè)分布相差太遠(yuǎn),方差會(huì)有較的差異
比較形象的例子,右圖,如果P,Q的分布式相反的,這樣去sample會(huì)導(dǎo)致,如果在P中sample那么絕大部分情況會(huì)集中在左邊,而在Q中sample會(huì)集中在右邊
這樣會(huì)導(dǎo)致得到的期望完全不一樣,當(dāng)然如果sample足夠多,這個(gè)問(wèn)題是可以被克服的,因?yàn)樾「怕适录€是有可能會(huì)發(fā)生的,你在Q中也是有小概率會(huì)sample到左邊的點(diǎn)
現(xiàn)在回到off-policy,我們要做的就是,用在一個(gè)agent上sample的數(shù)據(jù),來(lái)計(jì)算在另一個(gè)agent上的reward和的期望
上面說(shuō)到過(guò),這里會(huì)用advantage function來(lái)優(yōu)化這個(gè)R
第二步做的就是importance sampling的轉(zhuǎn)換
第三步假設(shè)不同agent出現(xiàn)某個(gè)state的概率相同,所以把這項(xiàng)消掉,因?yàn)閟tate和你選擇啥policy沒(méi)關(guān)系,也說(shuō)的通
第四步得到off-policy的目標(biāo)函數(shù)
這個(gè)算法就稱(chēng)為PPO,但是上面說(shuō)了兩個(gè)agent的分布如果差的很遠(yuǎn)會(huì)影響算法效果
所以一般會(huì)加上一個(gè)正則項(xiàng),即兩個(gè)分布的KL,這樣會(huì)讓兩個(gè)分布盡可能的接近
?
這個(gè)PPO算法的問(wèn)題是實(shí)現(xiàn)比較麻煩,尤其后面的那個(gè)KL
所以出現(xiàn)PPO2,這里去掉了KL,但是用clip來(lái)限制兩個(gè)分布不相差太遠(yuǎn)
如果A是正向的,那么我們要盡可能增加學(xué)習(xí)agent的state|action的概率,但是當(dāng)逼近和環(huán)境交互的agent的概率,就會(huì)停止,因?yàn)閙in會(huì)限制住它
如果A是負(fù)向的,反之盡量降低這個(gè)概率,但是同樣只能逼近另一個(gè)概率
?
?Value-based Critic
Critic不決定采取什么action,而只是評(píng)價(jià)actor好壞
對(duì)于Critic,就是要訓(xùn)練一個(gè)function V,輸入是某個(gè)actor和state,輸出是從state到episode結(jié)束的reward總和
那么如何訓(xùn)練Critic?
兩種方法,
Monte-carlo方法,直覺(jué)的方法,V不就是要擬合整個(gè)episode的reward嗎,那就對(duì)于該actor和一個(gè)state,會(huì)得到實(shí)際的reward G,那么V只要去逼近G就可以完成訓(xùn)練
Temporal-difference方法,這個(gè)就有些trick,兩個(gè)相鄰狀態(tài)V應(yīng)該相差這步的reward,那么就用這個(gè)差值來(lái)擬合V,這個(gè)方法的好處就是不需要等episode結(jié)束,每一步都可以train
兩個(gè)方法的不同,
MC方法的varianc會(huì)比較大,因?yàn)槊看螐腟a出發(fā),最終得到的結(jié)果G可能會(huì)有很大的差異,因?yàn)榄h(huán)境和model都有隨機(jī)性,而G是多步疊加的結(jié)果,所以Var會(huì)很大
TD方法,因?yàn)閞只是一小步的reward,所以這個(gè)Var就會(huì)相對(duì)比較小,但是TD,根據(jù)一步訓(xùn)練,所以會(huì)有偏差
Q-learning?
上面學(xué)習(xí)到V,只是知道當(dāng)前state下最終會(huì)得到的reward是多少,但是并沒(méi)有辦法根據(jù)V去選擇action
所以我們需要一種新的Critic,Q,給出在當(dāng)前state下,選取某個(gè)action得到的reward和
如果我們得到Q,那么就很容易選擇下一步的action,選reward最大的好
這樣就不需要訓(xùn)練單獨(dú)的actor和policy,因?yàn)橥ㄟ^(guò)Q可以推導(dǎo)出policy,這就是Q-learning
由于Q-learning,每步需要找出最大的Q,所以如果action是連續(xù)的,就會(huì)比較麻煩,需要gradient descend;但是對(duì)于離散的action就會(huì)很簡(jiǎn)單,窮舉就好
這里形式化的表達(dá),只需要每一步state都選取最大的Q,我就可以得到一個(gè)更好的actor
這是非常直覺(jué)的一個(gè)事情,如果我通過(guò)Q可以知道選取哪個(gè)action可以得到更大的reward,那么當(dāng)然應(yīng)該選擇該action
這里給出形式化證明,
Q-learning算法
那現(xiàn)在的問(wèn)題就是如何學(xué)習(xí)Q?訓(xùn)練的時(shí)候有一些tips
Target Network
你可以用TD的方法,仍然是兩部之間差一個(gè)rt
實(shí)現(xiàn)的時(shí)候,這里有兩個(gè)Q,雖然參數(shù)上應(yīng)該是一樣的,但是訓(xùn)練的時(shí)候會(huì)fix住一個(gè)的參數(shù),稱(chēng)為T(mén)argetNetwork,讓另一個(gè)去逼近;然后再把參數(shù)同步過(guò)去,再去逼近,這樣實(shí)現(xiàn)更容易些
Exploration
增強(qiáng)學(xué)習(xí)的時(shí)候,要去嘗試新的選擇,因?yàn)楸J氐倪x取之前嘗試過(guò)的case,可能會(huì)錯(cuò)過(guò)最優(yōu)解
基本策略是加入隨機(jī)性,比如大概率選MaxQ,但有小概率會(huì)random;在訓(xùn)練的前期,exploration比較關(guān)鍵,而到了后期,你已經(jīng)嘗試過(guò)所有case的情況下,exploration就沒(méi)有那么關(guān)鍵了,所以這個(gè)概率可以隨著學(xué)習(xí)的過(guò)程decay
Replay Buffer
不光當(dāng)前policy actor和環(huán)境交互的數(shù)據(jù)被記錄下來(lái),之前的actor和環(huán)境交互的數(shù)據(jù)也會(huì)被記錄下來(lái)
訓(xùn)練的時(shí)候從buffer中選取一個(gè)batch,這個(gè)里面有可能包含一些其他actor的交互數(shù)據(jù),這樣訓(xùn)練的魯棒性會(huì)比較強(qiáng),而且大大節(jié)約actor的交互時(shí)間
?
加上這些tips,典型的Q-learning算法,
兩個(gè)Q,一個(gè)作為target network
在和環(huán)境互動(dòng)的時(shí)候,加入epsilon greedy,增加exploration的能力
將互動(dòng)得到的數(shù)據(jù)放入buffer,然后從buffer中隨機(jī)sample一批數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)去計(jì)算target network Q^
不斷的讓Q去逼近這個(gè)Q^,n部后,把Q的參數(shù)同步給Q^
?
?
Adanced Q-learning
Double DQN
DQN有個(gè)問(wèn)題,就是Q的value會(huì)被over estimate
因?yàn)镼一定是有誤差的,或大或小,但是由于訓(xùn)練過(guò)程中總是選Max Q,所以會(huì)總是選到被高估的action
Double DQN,就是用兩個(gè)Q函數(shù)而不是一個(gè),這樣一個(gè)Q決定如何選擇action,另一個(gè)Q用于計(jì)算reward,這樣只要不是兩個(gè)Q都o(jì)ver estimate某一個(gè)action,就不會(huì)有太大的問(wèn)題
?
Dueling DQN
這個(gè)方法其實(shí)就是改了下網(wǎng)絡(luò)結(jié)構(gòu),加了一層,但是這樣為何就比原來(lái)的好?
右圖,這個(gè)方法會(huì)通過(guò)加約束,讓算法傾向于修改Vs,而不是A,這樣通過(guò)sample到case的學(xué)習(xí)的結(jié)果,就可以影響到未sample到的case
?
Prioritized Reply
從buffer里面sample測(cè)試集的時(shí)候,不是隨機(jī)的sample,而是挑選那些在上一次training中TD error比較大的data
?
Multi-step
MC是整個(gè)完整的episode做完后,才能train
而TD是完成一步以后就可以train
自然的想法是balance一下,mini-batch,若干步后用TD training
?
Noisy Net
增加noise是為了增加模型的exploration能力
之前的方法是noise on action,即選擇action的時(shí)候,會(huì)小概率加入隨機(jī)action
當(dāng)前的方法稱(chēng)為noise on parameter,即在episode開(kāi)始的時(shí)候,在Q的nn的參數(shù)上加入一定的noise
這樣做的好處見(jiàn)右圖,noise action不確定性太大
?
Distributional Q-function
原先Q,是一個(gè)期望,在s狀態(tài),采取a后,得到的reward總和的期望,平均值
但平均值不能很好的反應(yīng)出數(shù)據(jù),左圖中兩個(gè)分布的平均值一樣,但是分布相差很遠(yuǎn)
所以對(duì)于Q我們不光只輸出一個(gè)期望值,而是輸出一個(gè)期望的分布,比如右圖,對(duì)于每個(gè)action,輸出5個(gè)值,表示不同期望區(qū)間的概率分布
那么這些技術(shù)tips的效果到底如何?
Rainbow是結(jié)合所有的tips所達(dá)到的效果,可以看到還是非常不錯(cuò)的
其他的線(xiàn)表示單獨(dú)加上一種tip時(shí)候,對(duì)性能的影響
右圖,是反映在rainbow中,去掉某一種tip時(shí)的效果,可以看到去掉multi-step或priority時(shí),性能會(huì)下降很大
?
Continuous Action
Q-learing對(duì)于離散的action是比較好處理的,如果是連續(xù)的action應(yīng)該如果去做
Sample是比較簡(jiǎn)單的方法,但是不準(zhǔn)確;gradient asent太費(fèi)了
第三種方法,比較匪夷所思,設(shè)計(jì)一種網(wǎng)絡(luò)Q,讓他比較容易算出max,如下圖定義Q(s,a),當(dāng)a=u(s),第一項(xiàng)為0,整個(gè)就取到max值
?
A3C
A3C,一共3個(gè)A,一個(gè)C
其中一個(gè)A和C,表示同時(shí)使用Actor和Critic,即policy-based和value-based
那么直接用policy-based,有啥不好?
可以看到policy-based做梯度上升的時(shí)候,是需要用到G,即整個(gè)episode的reward和
這樣要求一個(gè)episode結(jié)束后才能開(kāi)始訓(xùn)練,并且這個(gè)G的variance是非常大的,就是非常不穩(wěn)定
?
?
那么既然現(xiàn)在我們有一個(gè)critic,而critic可以預(yù)測(cè)出G的期望,那么是否可以用來(lái)替換G?這樣就可以做到每一步都能訓(xùn)練,并且提供穩(wěn)定性
如下左圖,G的期望就等價(jià)于Q,而baseline,我們用V來(lái)替換,因?yàn)閂表示在狀態(tài)St所得到的reward期望,而我們采取的action a時(shí),所得到的reward要高于這個(gè)才是有價(jià)值的
但是這樣,我們要同時(shí)訓(xùn)練Q和V兩個(gè)function,所以Advantage Actor-Critic,所做的是用V來(lái)近似表示Q,這樣我們只需要訓(xùn)練V這一個(gè)function,
Advantage Function的定義也很直覺(jué),后面括號(hào)中的部分是用Critic預(yù)測(cè)走這一步所會(huì)得到的reward,這個(gè)可以看做是一個(gè)baseline
如果我們實(shí)際這一步得到的reward大于baseline,那么我們就認(rèn)為這步是正向的,否則是負(fù)向的
?
A3C設(shè)計(jì)的Tips,
首先actor和critic可以共享部分網(wǎng)絡(luò),這個(gè)是顯然的,因?yàn)檩斎攵际莝,比如游戲畫(huà)面,輸出雖然有不同,但是前面大部分的網(wǎng)絡(luò)可以共享
用output entropy作為Actor輸出的正則項(xiàng),即Actor會(huì)有機(jī)會(huì)傾向于去嘗試不確定的action,這樣模型會(huì)比較好的泛化能力
?
最后一個(gè)A,異步,這個(gè)比較工程的想法,就是用多組actor-critic同時(shí)來(lái)訓(xùn)練和更新參數(shù),更快的收斂
?
?
Pathwise derivative policy gradient
本身Q-learning得到的Q,就可以決定選擇哪個(gè)action,前面說(shuō)了這樣對(duì)于連續(xù)性的action就很麻煩
這個(gè)方法說(shuō),不,critic只能評(píng)價(jià),不能直接決定action
還是要訓(xùn)練一個(gè)actor決定采取什么樣的action
這時(shí)其實(shí)是把Q作為supervisor
訓(xùn)練的方式就是把a(bǔ)ctor和Q連成一個(gè)大的nn,固定住訓(xùn)練好的Q的參數(shù),訓(xùn)練actor的參數(shù),使得最終的輸出最大化
然后再用更新過(guò)的actor和環(huán)境互動(dòng),進(jìn)一步去訓(xùn)練Q,周而復(fù)始
最終使用的時(shí)候,直接用actor就可以,不用管Q
這個(gè)方法的最大價(jià)值,是它可以類(lèi)比GAN,
Actor是generator,Q是Discriminator,很有意思
這里有兩個(gè)tips,
第一個(gè),replay buffer,即在訓(xùn)練Q的時(shí)候,會(huì)把所有actor和環(huán)境的互動(dòng)的過(guò)程都記錄下來(lái),用于訓(xùn)練Q,這樣更加robust
第二個(gè),actor的輸出要加隨機(jī)noise,泛化和exploration的能力
?
這里給出一個(gè)實(shí)際的算法實(shí)現(xiàn)對(duì)比,左邊是經(jīng)典的Q-learning,右邊通過(guò)4步的變化,成為Pathwise Derivative Policy Gradient
第一步,用actor π來(lái)覺(jué)得采取什么action,而不是用Q
第二步,用target actor π^的輸出作為Q^的輸入
第三步,Fix住Q,調(diào)整actor π的參數(shù),使得Q最大化
第四步,更新π^,Q^
?
?
Imitation learning
有些場(chǎng)景下,不太好定義出reward
比如說(shuō)自動(dòng)駕駛或chatbot
如果不能明確定義出reward function,我們就無(wú)法用RL去訓(xùn)練
這時(shí)的思路,就是imitation learning,意思是用expert的示范來(lái)告訴你應(yīng)該怎么做,比如比較典型的是自動(dòng)駕駛,通過(guò)看大量人類(lèi)駕駛的錄影來(lái)學(xué)習(xí)
這里最直觀的就behavior cloning,即expert怎么做,你照搬就好,這就是典型的supervised學(xué)習(xí)
這個(gè)方法的缺點(diǎn),就是會(huì)有盲區(qū),如果沒(méi)有看到過(guò)這個(gè)場(chǎng)景的例子,機(jī)器會(huì)不知道該怎么辦,比如人開(kāi)車(chē)很少會(huì)撞墻,所以機(jī)器當(dāng)快撞墻時(shí),就沒(méi)有經(jīng)驗(yàn)可以借鑒
第二個(gè)缺點(diǎn),就是expert并不是所有的行為都是有用的,或有益的,而單純的clone這些行為是沒(méi)有意義的
所以比較科學(xué)的方法,加做Inverse Reinforcement Learning
普通的RL,是通過(guò)定義reward function,來(lái)訓(xùn)練出actor
而如果我們不知道reward function,就需要先通過(guò)一堆demonstration來(lái)找到真正的reward function
?
如何找?
類(lèi)似GAN的過(guò)程,
我們用Expert的一堆操作作為positive的例子,而隨機(jī)產(chǎn)生一個(gè)actor的操作作為negative的例子,這里actor是一個(gè)nn,可以看成generator
我們來(lái)訓(xùn)練一個(gè)Reward function,也是一個(gè)nn,使得它能分辨出expert的操作優(yōu)于actor的操作,可以看出Discriminator
然后我們用新的reward function來(lái)訓(xùn)練一個(gè)新的actor,再用新actor產(chǎn)生的操作作為negative例子,進(jìn)一步的去更新reward function。。。。。。
?
轉(zhuǎn)載于:https://www.cnblogs.com/fxjwind/p/9512202.html
總結(jié)
以上是生活随笔為你收集整理的Reinforcement Learning的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自测题.
- 下一篇: 小程序-demo:小程序示例-page/