一文帶你理解深度強(qiáng)化學(xué)習(xí)!

這里貼上一篇好的知乎回答:https://zhuanlan.zhihu.com/p/25239682

接下來就是WYY博主的邊學(xué)邊整理的筆記了~

這位正在看屏幕的同學(xué),你知道什么是深度強(qiáng)化學(xué)習(xí)嗎?如果你不知道,請往下看吧~

第一部分:DRL的基礎(chǔ)知識(shí)

? ? ? DRL(Deep Reinforcement Learning)分為model-based和model-free兩種方法。Model of the environment:model是對真實(shí)世界(environment)的模擬,model建模的是agent采樣action后環(huán)境的反應(yīng)。RL中,使用model和planning的方法被稱為model-based,反之不使用model而是通過try-and-error學(xué)習(xí)policy的方法被稱為model-free。本文范疇即是model-free。其中model-free中有Value-based和Policy-base兩種主要的方法,由于我接下來的工作需要用到Value-based中的DQN算法,所以我主要學(xué)習(xí)這種算法,關(guān)于其他的,大家可以看上面的知乎中的鏈接,寫的很好。

好啦,跟著阿鴕一起來看一下深度強(qiáng)化學(xué)習(xí)的基礎(chǔ)知識(shí)吧!

? ? ? ?深度強(qiáng)化學(xué)習(xí)的四元組是:狀態(tài)、動(dòng)作、獎(jiǎng)勵(lì)和策略,最不好理解的便是“策略(policy)”,?Policy是指Agent是在狀態(tài)s時(shí),所要做出action的選擇。policy可以視為在Agent感知到環(huán)境s后到動(dòng)作a的一個(gè)mapping。如果策略是隨機(jī)的,policy是根據(jù)每個(gè)動(dòng)作概率選擇動(dòng)作;如果策略是確定性的,policy則是直接根據(jù)狀態(tài)s選擇出動(dòng)作。(好啦,看了上面的話,不僅沒有搞清楚什么是策略,反而把策略和動(dòng)作搞混了,不要緊,再繼續(xù)看一下下面的,或許會(huì)清晰一些)

大神說,策略不就是,怎么動(dòng)作嘛~

? ? ? ?獎(jiǎng)勵(lì),是指智能體和環(huán)境交互之后,環(huán)境給智能體的反饋,即這個(gè)動(dòng)作是好還是壞。智能體的目標(biāo)并不是當(dāng)前獎(jiǎng)勵(lì)最大,而是平均累計(jì)回報(bào)最大。

? ? ? ?Value function(值函數(shù))是策略在某狀態(tài)下的長期期望收益。與之類似的一個(gè)函數(shù)是Q函數(shù),在某狀態(tài)下,采取某動(dòng)作的長期期望收益。

哦!原來是這么一回事啊,我總算對以上的概念有了一個(gè)清晰的理解了。對了,最近剛用上粉底液和粉撲,感覺一秒磨皮!我去喝點(diǎn)水,回來繼續(xù)寫!(聽說戴口罩可以保持臉部皮膚濕潤喲,怪不得最近感覺皮膚也挺好的)

? ? ? ?繼續(xù)看,強(qiáng)化學(xué)習(xí)最重要的基礎(chǔ)是MDP(Markov Decision Process)馬爾可夫決策過程。馬兒最明顯的一個(gè)特征是,在某狀態(tài)下,采取某動(dòng)作之后的獎(jiǎng)勵(lì),只跟當(dāng)前的狀態(tài)和動(dòng)作有關(guān),與歷史狀態(tài)無關(guān)(如果跟歷史狀態(tài)有關(guān),就把這個(gè)狀態(tài)封裝到當(dāng)前狀態(tài)就好了)。?Bellman等式:

Bellman等式是指某狀態(tài)下,采取某策略后,下一時(shí)刻獎(jiǎng)勵(lì)值以及折扣因子乘以值函數(shù)后的平均獎(jiǎng)勵(lì)。Bellman最優(yōu)等式是指,把上面的策略,換成能夠使獎(jiǎng)勵(lì)最大的策略。

? MC、TD方法:

Monte-Carlo method適用于“情節(jié)式任務(wù)”(情節(jié)任務(wù)序列有終點(diǎn),與“情節(jié)式任務(wù)”相對應(yīng)的是“連續(xù)型任務(wù)”)。Q(s,a)就是整個(gè)序列的期望回報(bào)。MC增量更新中的Monte-Carlo error:



TD(Time Difference) method
,是Monte-Carlo和Dynamic Programming 方法的一個(gè)結(jié)合。相比MC方法,TD除了能夠適用于連續(xù)任務(wù)外,和MC的差異從下圖可以清楚看到。MC需要回退整個(gè)序列更新Q值,而TD只需要回退1步或n步更新Q值。因?yàn)?b>MC需要等待序列結(jié)束才能訓(xùn)練,而TD沒有這個(gè)限制,因此TD收斂速度明顯比MC快,目前的主要算法都是基于TD。下圖是TD和MC的回退圖,很顯然MC回退的更深。

知乎文章作者舉的這個(gè)例子特別好:

直觀理解MC error和TD error的差異,假設(shè)RL的任務(wù)要預(yù)估的是上班的"到公司時(shí)長",狀態(tài)是目前的位置,比如“剛出門”“到地鐵了”“到國貿(mào)站了”...。MC方法需要等到真正開到公司才能校驗(yàn)“剛出門”狀態(tài)時(shí)預(yù)估的正確性,得到MC error;而TD則可以利用“剛出門”和“到地鐵了”兩個(gè)狀態(tài)預(yù)測的差異的1-step TD error來迭代。

1-step TD error:

n-steps TD error:

TD(\lambda )error:

事實(shí)上,MC error可以視為一個(gè)情節(jié)任務(wù)的max-step TD error。另外,一般來說,在TD error中,n越大,用到的真實(shí)回報(bào)信息更多,收斂也會(huì)越快。

大神說,那TD不是就是貪心的嗎?
好啦,恭喜你,已經(jīng)把DL相關(guān)的基礎(chǔ)知識(shí)都看完了,接下來開始進(jìn)修了!

第二部分.DRL:from Q-learning to DQN

確認(rèn)過眼神,是餓了的人。但是還是要寫一會(huì),再學(xué)習(xí)20min。

? ? ? ? Q-learning是一種TD方法,也是一種Value-based的方法。所謂Value-based方法,就是先評估每個(gè)action的Q值(Value),再根據(jù)Q值求最優(yōu)策略的方法。強(qiáng)化學(xué)習(xí)的最終目標(biāo)是求解policy,因此Value-based的方法是一種“曲線救國”。Q-learning算法的核心就是我們前面Bellman optimality equation,即:

? ? ? ?Q-learning是RL的很經(jīng)典的算法,但有個(gè)很大的問題在于它是一種表格方法,也就是說它根據(jù)過去出現(xiàn)過的狀態(tài),統(tǒng)計(jì)和迭代Q值。一方面Q-learning適用的狀態(tài)和動(dòng)作空間非常??;另一方面但如果一個(gè)狀態(tài)從未出現(xiàn)過,Q-learning是無法處理的。也就是說Q-learning壓根沒有預(yù)測能力,也就是沒有泛化能力。

太神奇了吧,昨天大神就說那是不是一個(gè)狀態(tài)如果沒出現(xiàn),就沒辦法┐(?~?)┌處理。

? ? ? ?為了能使得Q-learning能夠帶有預(yù)測能力,熟悉機(jī)器學(xué)習(xí)的同學(xué)很容易想到這就是一個(gè)回歸問題啊!用函數(shù)擬合Q:

\theta 代表的是模型參數(shù)

? ? ? ?模型有很多種選擇,線性的或非線性的。傳統(tǒng)的非深度學(xué)習(xí)的函數(shù)擬合更多是人工特征+線性模型擬合。這幾年伴隨著深度學(xué)習(xí)最近幾年在監(jiān)督學(xué)習(xí)領(lǐng)域的巨大成功,用深度神經(jīng)網(wǎng)絡(luò)端到端的擬合Q值,也就是DQN,似乎是個(gè)必然了。

DQN終于出現(xiàn),也就是說DQN是利用了深度神經(jīng)網(wǎng)絡(luò)來擬合Q值,使Q-learning帶有預(yù)測能力。

? ? ? deepmind 在2013年的?Playing Atari with Deep Reinforcement Learning?提出的DQN算是DRL的一個(gè)重要起點(diǎn)了,也是理解DRL不可錯(cuò)過的經(jīng)典模型了。網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)方面,DQN之前有些網(wǎng)絡(luò)是左圖的方式,輸入為S,A,輸出Q值;DQN采用的右圖的結(jié)構(gòu),即輸入S,輸出是離線的各個(gè)動(dòng)作上的Q值。之所以這樣,左圖方案相對右圖最大的缺點(diǎn)是對于每個(gè)state,需要計(jì)算|A|次前向計(jì)算,而右圖則只需要一次前向計(jì)算即可,因此左圖的前向計(jì)算成本與action的數(shù)量成正比

論文中,解決的問題是Atari游戲問題,輸入數(shù)據(jù)(狀態(tài)S)就是游戲原始畫面的像素點(diǎn),動(dòng)作空間是搖桿方向等。
問:為啥是左圖做了A次前向運(yùn)算但是右圖做了1次呢?答:?右圖中輸出是離線的各個(gè)動(dòng)作上的Q值。? 即根據(jù)現(xiàn)在狀態(tài)預(yù)測所有動(dòng)作的獎(jiǎng)勵(lì)。也就是只進(jìn)行了一次前向計(jì)算。

先寫這么多,回來再繼續(xù)寫。不能趕,要保證理解和質(zhì)量。

毛血旺可真辣,甜點(diǎn)叫豌豆黃~
繼續(xù)開始了下午的學(xué)習(xí),大神說他做一個(gè)研究的一般步驟是:1)先看一下這個(gè)領(lǐng)域的資料,對該領(lǐng)域有一個(gè)大致了解;2)讀一下最新的論文,看看解決了什么問題;3)思考一下未解決的問題是什么,應(yīng)該如何解決。
DQN具體的網(wǎng)絡(luò)結(jié)構(gòu)見下:實(shí)際輸入是游戲的連續(xù)4幀畫面,不只使用1幀畫面是為了感知環(huán)境的動(dòng)態(tài)性,接兩層CNN,兩層FNN,輸出各個(gè)動(dòng)作的Q值。

? ? ? ?因?yàn)镈QN本身是個(gè)回歸問題,模型的優(yōu)化目標(biāo)是最小化1-step TD error的平方loss,梯度的計(jì)算也很直接了,見下圖。

DQN最終能夠取得成功的一方面是采用了DNN網(wǎng)絡(luò)進(jìn)行Q值的函數(shù)擬合,end-to-end的模型訓(xùn)練。更重要的是引入了以下兩個(gè)點(diǎn):

(1)Experience Replay: Deep Learning取得重大進(jìn)展的監(jiān)督學(xué)習(xí)中,樣本間都是獨(dú)立同分布的。而RL中的樣本是有關(guān)聯(lián)的,非靜態(tài)的(highly correlated and non-stationary),訓(xùn)練的結(jié)果很容易難以收斂。Experience Replay機(jī)制解決這個(gè)問題思路其實(shí)很簡單,構(gòu)建一個(gè)存儲(chǔ)把樣本都存儲(chǔ)下來,通過隨機(jī)采樣去除相關(guān)性。(當(dāng)然沒有天下免費(fèi)的午餐,這種方法也有弊端,比如off-policy受到了限制,也不是真正的online-learning,具體在A3C部分會(huì)展開分析)

上述加粗部分的內(nèi)容,在文章開頭的知乎里面,想了解的可以看一下。

(2)separate Target Network:原始的Q-learning中,在1-step TD return,樣本標(biāo)簽y使用的是和訓(xùn)練的Q-network相同的網(wǎng)絡(luò)。這樣通常情況下,能夠使得Q大的樣本,y也會(huì)大,這樣模型震蕩和發(fā)散可能性變大。而構(gòu)建一個(gè)獨(dú)立的慢于當(dāng)前Q-Network的target Q-Network來計(jì)算y,使得訓(xùn)練震蕩發(fā)散可能性降低,更加穩(wěn)定。

昨天記得筆記(最上面的粉色字)部分就是在說這樣一件事,大概意思就是有一個(gè)target q network,更新的比q network要慢,然后用它來學(xué)習(xí)策略。如果是同步的,那就是q越大的策略 采取這個(gè)策略的可能就越大。
具體解釋:所以這個(gè)v是根據(jù)之前采取的策略學(xué)習(xí)的,然后采取什么策略又是根據(jù)v決定的,所以如果同步更新那就會(huì)一開始偏好哪個(gè)策略,然后就會(huì)哪個(gè)策略越來越多,然后就會(huì)越來越偏。因?yàn)檫@個(gè)表格里面只有這個(gè)策略有值,然后就會(huì)不斷的選擇它,然后這個(gè)表格里的這個(gè)策略就更多了。但是如果這個(gè)v比較慢,就有可能遍歷更多的策略,這樣就學(xué)的好。

另外,TD-error也被clip到[-1,1]區(qū)間,增加模型的穩(wěn)定性。部分思路和我們后續(xù)分享的的TRPO算法的置信區(qū)間相關(guān)。

我們前面提到的兩種方法都以依賴于 Q-Table,但是其中存在的一個(gè)問題就是當(dāng) Q-Table 中的狀態(tài)比較多,可能會(huì)導(dǎo)致整個(gè) Q-Table 無法裝下內(nèi)存。因此,DQN 被提了出來,DQN 全稱是 Deep Q Network,Deep 指的是通的是深度學(xué)習(xí),其實(shí)就是通過神經(jīng)網(wǎng)絡(luò)來擬合整張 Q-Table。

DQN 能夠解決狀態(tài)無限,動(dòng)作有限的問題;具體來說就是將當(dāng)前狀態(tài)作為輸入,輸出的是各個(gè)動(dòng)作的 Q 值。以 Flappy Bird 這個(gè)游戲?yàn)槔?,輸入的狀態(tài)近乎是無限的(當(dāng)前 bird 的位置和周圍的水管的分布位置等),但是輸出的動(dòng)作只有兩個(gè)(飛或者不飛)。實(shí)際上,已經(jīng)有人通過 DQN 來玩這個(gè)游戲了,具體可參考這個(gè)DeepLearningFlappyBird

所以在 DQN 中的核心問題在于如何訓(xùn)練整個(gè)神經(jīng)網(wǎng)絡(luò),其實(shí)訓(xùn)練算法跟 Q-Learning 的訓(xùn)練算法非常相似,需要利用 Q 估計(jì)和 Q 現(xiàn)實(shí)的差值,然后進(jìn)行反向傳播。

這里放上提出 DQN 的原始論文Playing atari with deep reinforcement learning中的算法流程圖

原博客鏈接:https://www.cnblogs.com/shixiangwan/p/11351782.html

詳細(xì)的DQN算法:

附DQN15年發(fā)表在nature的文章?Human-level control through deep reinforcement learning

補(bǔ)充一個(gè)我自己畫的圖:

發(fā)現(xiàn)了一個(gè)寫的很好的:

上面的算法跟 Q-Learning 最大的不同就是多了Experience Replay這個(gè)部分,實(shí)際上這個(gè)機(jī)制做的事情就是先進(jìn)行反復(fù)的實(shí)驗(yàn),并將這些實(shí)驗(yàn)步驟獲取的 sample 存儲(chǔ)在 memory 中,每一步就是一個(gè) sample,每個(gè)sample是一個(gè)四元組,包括:當(dāng)前的狀態(tài),當(dāng)前狀態(tài)的各種action的 Q 值,當(dāng)前采取的action獲得的即時(shí)回報(bào),下一個(gè)狀態(tài)的各種action的Q值。拿到這樣一個(gè) sample 后,就可以根據(jù)上面提到的 Q-Learning 更新算法來更新網(wǎng)絡(luò),只是這時(shí)候需要進(jìn)行的是反向傳播。

Experience Replay 機(jī)制的出發(fā)點(diǎn)是按照時(shí)間順序所構(gòu)造的樣本之間是有關(guān)的(如上面的?(st+1)會(huì)受到?(st)的影響)、非靜態(tài)的(highly correlated and non-stationary),這樣會(huì)很容易導(dǎo)致訓(xùn)練的結(jié)果難以收斂。通過 Experience Replay 機(jī)制對存儲(chǔ)下來的樣本進(jìn)行隨機(jī)采樣,在一定程度上能夠去除這種相關(guān)性,進(jìn)而更容易收斂。當(dāng)然,這種方法也有弊端,就是訓(xùn)練的時(shí)候是 offline 的形式,無法做到 online 的形式。

除此之外,上面算法流程圖中的 aciton-value function 就是一個(gè)深度神經(jīng)網(wǎng)絡(luò),因?yàn)樯窠?jīng)網(wǎng)絡(luò)是被證明有萬有逼近的能力的,也就是能夠擬合任意一個(gè)函數(shù);一個(gè) episode 相當(dāng)于 一個(gè) epoch;同時(shí)也采用了??greedy??greedy策略。

后續(xù)關(guān)于DQN有三個(gè)主要改進(jìn)點(diǎn):

(1)Double Q-Network:思路并不新鮮,仿照Double Q-learning,一個(gè)Q網(wǎng)絡(luò)用于選擇動(dòng)作,另一個(gè)Q網(wǎng)絡(luò)用于評估動(dòng)作,交替工作,解決upward-bias問題,效果不錯(cuò)。三個(gè)臭皮匠頂個(gè)諸葛亮么,就像工作中如果有double-check,犯錯(cuò)的概率就能平方級別下降。Silver15年論文Deep Reinforcement Learning with Double Q-learning

(2)Prioritized replay:基于優(yōu)先級的replay機(jī)制,replay加速訓(xùn)練過程,變相增加樣本,并且能獨(dú)立于當(dāng)前訓(xùn)練過程中狀態(tài)的影響。這個(gè)replay權(quán)重還是和DQN error(下圖)有關(guān),Silver16年論文PRIORITIZED EXPERIENCE REPLAY。

(3)Dueling network:在網(wǎng)絡(luò)內(nèi)部把Q(s,a) 分解成 V(s) + A(s, a),V(s)與動(dòng)作無關(guān),A(s, a)與動(dòng)作相關(guān),是a相對s平均回報(bào)的相對好壞,是優(yōu)勢,解決reward-bias問題。RL中真正關(guān)心的還是策略的好壞,更關(guān)系的是優(yōu)勢,另外在某些情況下,任何策略都不影響回報(bào),顯然需要剔除。ICML 2016 Best Paper:DUELING NETWORK ARCHITECTURES FOR DEEP REINFORCEMENT LEARNING?。Dueling Network網(wǎng)絡(luò)架構(gòu)如下,Dueling Network把網(wǎng)絡(luò)分成一個(gè)輸出標(biāo)量V(s)另一個(gè)輸出動(dòng)作上Advantage值兩部分,最后合成Q值。非常巧妙的設(shè)計(jì),當(dāng)然還是end-to-end的,效果也是state-of-art。Advantage是一個(gè)比較有意思的問題,A3C中有一個(gè)A就是Advantage。

上面提到的 DQN 是最原始的的網(wǎng)絡(luò),后面Deepmind 對其進(jìn)行了多種改進(jìn),比如說 Nature DQN 增加了一種新機(jī)制separate Target Network,就是計(jì)算上圖的yjyj的時(shí)候不采用網(wǎng)絡(luò)QQ, 而是采用另外一個(gè)網(wǎng)絡(luò)(也就是 Target Network)Q'Q′, 原因是上面計(jì)算yjyj和 Q 估計(jì)都采用相同的網(wǎng)絡(luò)QQ,這樣使得QQ大的樣本,yy也會(huì)大,這樣模型震蕩和發(fā)散可能性變大,其原因其實(shí)還是兩者的關(guān)聯(lián)性較大。而采用另外一個(gè)獨(dú)立的網(wǎng)絡(luò)使得訓(xùn)練震蕩發(fā)散可能性降低,更加穩(wěn)定。一般Q'Q′會(huì)直接采用舊的QQ, 比如說 10 個(gè) epoch 前的QQ.

除此之外,大幅度提升 DQN 玩 Atari 性能的主要就是 Double DQN,Prioritised Replay 還有 Dueling Network 三大方法;這里不詳細(xì)展開,有興趣可參考這兩篇文章:DQN從入門到放棄6 DQN的各種改進(jìn)深度強(qiáng)化學(xué)習(xí)(Deep Reinforcement Learning)入門:RL base & DQN-DDPG-A3C introduction。

問題突然就來了

第三部分、Policy-Based method:概率輸出&連續(xù)動(dòng)作空間

DQN雖然在Atari游戲問題中取得了巨大的成功,但適用范圍還是在低維、離散動(dòng)作空間。DQN是求每個(gè)action的max_{a} Q(s,a),在連續(xù)空間就不適用了,原因如下:

(1) 如果采用把連續(xù)動(dòng)作空間離散化,動(dòng)作空間則會(huì)過大,極難收斂。而且每個(gè)動(dòng)作空間劃分成很多個(gè)離散動(dòng)作無法做到fine-tuning,劃分本身也帶來了信息損失。

(2)即便是有些DQN的變種如VAE能夠給出連續(xù)動(dòng)作的方案,DQN的第二個(gè)問題是只能給出一個(gè)確定性的action,無法給出概率值。而有些場景,比如圍棋的開局,只有一種走法顯然太死板了,更多例子不再介紹了。

從另外一個(gè)角度看,DQN是Value-based方法,上一節(jié)講到了Value-based的方法還是在間接求策略。一個(gè)自然的邏輯是為什么我們不直接求解Policy?這就是Policy Gradient方法了。

有人突然的吹口哨,也是挺奇怪的。

Deep Q-learning

2013年,DeepMind 在 NIPS workshop上提出了 Deep Q-learning,主要工作是能讓 AI 從像素輸入學(xué)會(huì)完 Atari游戲,后來進(jìn)行了一些改進(jìn)后上了 2015 年的 nature 封面。

如果狀態(tài)空間是連續(xù)的,動(dòng)態(tài)規(guī)劃的狀態(tài)數(shù)就是無限的,所以我們用深度學(xué)習(xí)網(wǎng)絡(luò)去擬合這個(gè) Q 函數(shù),這就是 DQN。

通常 DQN 的實(shí)現(xiàn)中,會(huì)把收集的(狀態(tài)、動(dòng)作、執(zhí)行動(dòng)作后的狀態(tài)和獎(jiǎng)勵(lì))存在內(nèi)存中,訓(xùn)練的時(shí)候多次使用,稱為 memory replay。

注意到每個(gè)(狀態(tài),動(dòng)作)的 Q 值要擬合 (當(dāng)前得到的獎(jiǎng)勵(lì)加上(執(zhí)行動(dòng)作后的新狀態(tài),新動(dòng)作)的 Q 值),一個(gè)函數(shù)擬合自己可能引入額外的噪聲,所以通常使用一個(gè)延遲更新的函數(shù) Q' 來求新的 Q 值,稱為 target network。

不要慌,我們接下來的工作,符合這個(gè)要求。

DQN的控制空間,至少必須是離散的。

因?yàn)樗惴▋?yōu)化Q網(wǎng)絡(luò)的時(shí)候用的Bellman Equation里面有一個(gè)求max的函數(shù)。

離散空間還能遍歷一下找到max,連續(xù)空間這個(gè)過程非常耗時(shí)。

所以…離散空間DQN才適用。

連續(xù)空間請搜索DDQN,哈哈。

發(fā)現(xiàn)了更好的一個(gè)博客:https://blog.csdn.net/qq_16234613/article/details/80268564

寫的可真是太好了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容