強(qiáng)化學(xué)習(xí)
主要分為兩個分支,一個是Q-Learning,一個是policy gradient decent,還有一個目前的主流研究就是把二者合并
本文所有圖片和文字來自https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/
一、Q-Learning
1、初始算法
通過Q-learning的算法我們可以看出,Q-learning首先采取了三個東西,一是epison-greedy,即以一定的概率隨機(jī)采樣,增加了action的隨機(jī)性,二是Q現(xiàn)實-Q估計,使得最后Q估計(表中的Reward)能夠靠近Q現(xiàn)實(現(xiàn)實的Reward),三是使用alpha來給每次更新一個系數(shù),gamma 是對未來 reward 的衰減值。
問題:由于初始的時候一般Q估計都是0,而Q現(xiàn)實只有當(dāng)下一個state有reward時,才會出現(xiàn)正向的激勵,所以在沒有到達(dá)目標(biāo)state之前的狀態(tài),Q表都是不更新的 。
2、Sarsa
通過Sarsa的算法可以看出,Sarsa更新Q表的時候沒有采用max的方式來更新,而是使用自己確實采用的a'的reward來更新。
所以Sarsa總會采取他認(rèn)為最優(yōu)的方式更新,而Sarsa會采取它當(dāng)前選擇的方式。
3、Sarsa(lambda)
在之前的Q-learning和Sarsa中,只有到達(dá)目標(biāo)的state時,才能夠獲取reward,然后更新Q表,這樣的效率是很低的。
而Sarsa(lambda)在每一部計算出E的時候,加了一個1(這個操作是為了使得更新的值永遠(yuǎn)大于1,防止隨著往后傳播的時候,值越來越?。缓笾貜?fù)之前的Q(s,a),給他們重新賦值。
4、DQN
deep Q Network
使用DQN的初衷是因為現(xiàn)代社會的問題越來越復(fù)雜,使用state-action表格(Q表)來存儲所有的可能是不太現(xiàn)實的(如果是指數(shù)爆炸式的action)。而神經(jīng)網(wǎng)絡(luò)的不同參數(shù)組合可以很好的提供記錄狀態(tài)的可能,所以就有了DQN。
具體的遷移方法如上兩圖,每次輸入狀態(tài),輸出action和Q估計,然后利用Q現(xiàn)實-Q估計來更新參數(shù)。
需要注意的是DQN需要維護(hù)兩個幾乎相同的網(wǎng)絡(luò),一個網(wǎng)絡(luò)(這個網(wǎng)絡(luò)隔一段時間才更新一次)產(chǎn)生Q現(xiàn)實,一個網(wǎng)絡(luò)(這個網(wǎng)絡(luò)不斷更新)產(chǎn)生Q估計
5、Double DQN
?Q-Learning 中有?Qmax,?Qmax?會導(dǎo)致?Q現(xiàn)實?當(dāng)中的過估計 (overestimate). 而 Double DQN 就是用來解決過估計的. 在實際問題中, 如果你輸出你的 DQN 的 Q 值, 可能就會發(fā)現(xiàn), Q 值都超級大. 這就是出現(xiàn)了 overestimate.
如何解決?
原本的?Q_next = max(Q_next(s', a_all)).
Double DQN 中的?Q_next = Q_next(s', argmax(Q_eval(s', a_all))).
解釋一下上面兩行的意思就是,DQN是使用Q現(xiàn)實網(wǎng)絡(luò)中的Q來預(yù)測Qtarget,而double DQN 是現(xiàn)在Q估計中找到需要的action,然后再在Q現(xiàn)實網(wǎng)絡(luò)中來取值。
6、Prioritized Experience Replay
對記憶庫中的樣本采樣方法進(jìn)行改進(jìn),使得盡量平衡不同reward的樣本.
通過上圖高亮的部分可以看出,每個樣本被賦予了一個優(yōu)先級p(這個p是erro確定的),每次采用的使用對所有的優(yōu)先級進(jìn)行歸一化,然后按照它們的概率采樣。
7、Dueling DQN

修改 DQN 中神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu), 就能大幅提升學(xué)習(xí)效果, 加速收斂.
用一句話來概括 Dueling DQN 就是. 它將每個動作的 Q 拆分成了 state 的 Value 加上 每個動作的 Advantage.
可以看到上圖中每個網(wǎng)絡(luò)主要預(yù)測的是動作和reward,而dueling DQN 還需要預(yù)測這個動作的advantage(有用性)
二、Policy Gradient
對比起以值為基礎(chǔ)的方法, Policy Gradients 直接輸出動作的最大好處就是, 它能在一個連續(xù)區(qū)間內(nèi)挑選動作, 而基于值的, 比如 Q-learning, 它如果在無窮多的動作中計算價值, 從而選擇行為, 這, 它可吃不消.

上圖簡單明了的說明了,就是把vt和pi乘到了梯度上,然后來更新參數(shù),pi代表的是某種策略的概率,vt是這種策略的獎勵。
三、合并二者
1、Actor-critic
用一個critic網(wǎng)絡(luò)(基于值的)評估actor網(wǎng)絡(luò)(基于策略的)的結(jié)果
2、DDPG
Deep Deterministic Policy Gradient
Google DeepMind 提出的一種使用?Actor Critic?結(jié)構(gòu), 但是輸出的不是行為的概率, 而是具體的行為, 用于連續(xù)動作 (continuous action) 的預(yù)測.?DDPG?結(jié)合了之前獲得成功的?DQN?結(jié)構(gòu), 提高了?Actor Critic?的穩(wěn)定性和收斂性.
3、A3C
Asynchronous Advantage Actor-Critic
Google DeepMind 提出的一種解決?Actor-Critic?不收斂問題的算法. 它會創(chuàng)建多個并行的環(huán)境, 讓多個擁有副結(jié)構(gòu)的 agent 同時在這些并行環(huán)境上更新主結(jié)構(gòu)中的參數(shù). 并行中的 agent 們互不干擾, 而主結(jié)構(gòu)的參數(shù)更新受到副結(jié)構(gòu)提交更新的不連續(xù)性干擾, 所以更新的相關(guān)性被降低, 收斂性提高.
4、DPPO
?Trust Region Policy Optimization
利用KL散度來控制前后兩個策略的差距,讓這個差距不要太大,同時還要學(xué)習(xí)一個A來控制新舊策略的更新步長
四、強(qiáng)化學(xué)習(xí)能做什么?提供了什么想法?
1、能做什么?
如果有一個Q現(xiàn)實和一個Q估計,就能夠利用DQN來進(jìn)行更新,問題就在如何定義Q現(xiàn)實和Q估計了
2、提供了什么想法?
更新的傳遞性(Sarsa(lambda))
樣本權(quán)重(PER)
為結(jié)果預(yù)測一個有用性advantage(dueling DQN)
網(wǎng)絡(luò)之間的異步更新