【强化学习】一文带你理清强化学习
整理不易,希望留個(gè)贊再走哦!!
學(xué)習(xí)路線
這個(gè)圖描述的比較清晰,藍(lán)框里是整個(gè)強(qiáng)化學(xué)習(xí)的一些概念基礎(chǔ)了,橙色是一些學(xué)習(xí)方法,可以針對(duì)性的選擇一些,廢話不多說(shuō),接下來(lái)就按照這個(gè)路線圖展開。
1. 馬爾可夫鏈
馬爾科夫鏈:用來(lái)描述智能體和環(huán)境互動(dòng)的過(guò)程
2. V值和Q值
接下來(lái)是V值和Q值,從某個(gè)狀態(tài),按照策略 ,走到最終狀態(tài)很多很多次;最終獲得獎(jiǎng)勵(lì)總和的平均值,就是V值。從某個(gè)狀態(tài)選取動(dòng)作A,走到最終狀態(tài)很多很多次;最終獲得獎(jiǎng)勵(lì)總和的平均值,就是Q值。這就是Q值,這兩個(gè)值有什么區(qū)別呢?
一個(gè)狀態(tài)的V值,就是這個(gè)狀態(tài)下的所有動(dòng)作的Q值,在策略下的期望。
Q就是子節(jié)點(diǎn)的V的期望!但要注意,需要把R計(jì)算在內(nèi)。
V值和Q值之后我們?cè)賮?lái)了解一下蒙特卡羅(MC)和時(shí)序差分(TD)。MC和TD都是估算V值的一種方式,不同點(diǎn)是蒙地卡羅會(huì)讓智能體從某個(gè)狀態(tài)S出發(fā),直到最終狀態(tài),然后回過(guò)頭來(lái)給每個(gè)節(jié)點(diǎn)標(biāo)記這次的價(jià)值G。
G代表了某次,智能體在這個(gè)節(jié)點(diǎn)的價(jià)值。
而時(shí)序差分是一步一回頭。用下一步的估值,估算當(dāng)前狀態(tài)的估值。
于是得到S - A - G 的數(shù)據(jù)。這里的G就是對(duì)于狀態(tài)S,選擇了A的評(píng)分。也就是說(shuō), - 如果G值正數(shù),那么表明選擇A是正確的,我們希望神經(jīng)網(wǎng)絡(luò)輸出A的概率增加。(鼓勵(lì)) - 如果G是負(fù)數(shù),那么證明這個(gè)選擇不正確,我們希望神經(jīng)網(wǎng)絡(luò)輸出A概率減少。(懲罰) - 而G值的大小,就相當(dāng)于鼓勵(lì)和懲罰的力度了。
3. Q-Learning和SARSA
接下來(lái)我們開始正式了解一些常用的強(qiáng)化學(xué)習(xí)。首先是Q-learning和SARSA,這兩種方法的主要思路在于,用同一個(gè)策略下產(chǎn)生的動(dòng)作A的Q值替代V(S_(t+1))。
可以看到他們倆的更新公式長(zhǎng)得很像,只差一個(gè)max,SARSA的想法是,用同一個(gè)策略下產(chǎn)生的動(dòng)作A的Q值替代V(St+1)。Q-learning用所有動(dòng)作的Q值的最大值替代V(St+1)。
4. 深度強(qiáng)化學(xué)習(xí) DQN
開始進(jìn)入深度強(qiáng)化學(xué)習(xí)的部分了。為什么深度強(qiáng)化學(xué)習(xí)這么強(qiáng),是因?yàn)樯疃葟?qiáng)化學(xué)習(xí)增加了一個(gè)很強(qiáng)的武器——深度神經(jīng)網(wǎng)絡(luò)。
深度神經(jīng)網(wǎng)絡(luò)就是一個(gè)函數(shù)。函數(shù)其實(shí)也很簡(jiǎn)單,就是描述兩個(gè)東西的對(duì)應(yīng)關(guān)系。F(x) = y , 描述的就是x和y之間的關(guān)系。
以前的函數(shù),需要我們?nèi)ゾ脑O(shè)計(jì)的,要設(shè)計(jì),就要描述其中的關(guān)系。但有些東西我們明明知道他們有關(guān)系,但又不好描述清楚。
例如,手寫數(shù)字識(shí)別,一個(gè)正常人寫的數(shù)字8,我們?nèi)祟惗寄苷J(rèn)出來(lái)。但我們卻描述不出來(lái),我們知道是兩個(gè)圈是8,但有些人的圈明明不閉合,我們也認(rèn)得出是8…
但深度神經(jīng)網(wǎng)絡(luò)這個(gè)工具就能自己學(xué)會(huì)這些關(guān)系。
我們先設(shè)一個(gè)Magic’(X),其中的X就是輸入的圖片;計(jì)算結(jié)果是各個(gè)數(shù)字的概率。這個(gè)判斷一開始通常都是錯(cuò)的,但沒關(guān)系,我們會(huì)慢慢糾正它。
糾正就需要有一個(gè)目標(biāo),沒有目標(biāo)就沒有對(duì)錯(cuò)了。這里的目標(biāo)是我們?nèi)祟惤o他們標(biāo)注的,告訴Magic’:這是數(shù)字8。
目標(biāo)和現(xiàn)實(shí)的輸出總是有一段距離的,這段距離我們稱為損失(loss).
我們調(diào)整我們Magic’函數(shù)的參數(shù),讓損失最小化。也就是說(shuō),離目標(biāo)越來(lái)越近。
這就是深度強(qiáng)化學(xué)習(xí)的主要思想。
Q-learning有一個(gè)問(wèn)題:只能解決格子類型離散型狀態(tài)問(wèn)題,對(duì)連續(xù)型狀態(tài)束手無(wú)策。
這是因?yàn)镼-learning在實(shí)做的時(shí)候用的是Q表格(Q-table)。表格這玩意兒注定就只能存離散的東西。但我們剛才說(shuō)的神經(jīng)網(wǎng)絡(luò),正好就能解決這個(gè)問(wèn)題,因?yàn)樯窠?jīng)網(wǎng)絡(luò)是個(gè)函數(shù),可以處理連續(xù)型的問(wèn)題。兩者一拍即合!DQN相當(dāng)于Q-learning的Qtable換成深度神經(jīng)網(wǎng)絡(luò),相當(dāng)于用一根曲線穿過(guò)離散狀態(tài)下所有的點(diǎn)。
Policy Gradient(PG)
這個(gè)時(shí)候我們發(fā)現(xiàn),我們前面的方法都是通過(guò)Q值和V值來(lái)計(jì)算,也就是基于價(jià)值value。而PG用了一種全新的思路,用蒙特卡羅方法的G值來(lái)更新網(wǎng)絡(luò)。也就是說(shuō),PG會(huì)讓智能體一直走到最后,然后回溯計(jì)算G值。PG的思路比較新穎,但是缺點(diǎn)在于實(shí)際效果不太穩(wěn)定,在某些環(huán)境下學(xué)習(xí)比較困難。所以我們希望用TD來(lái)代替MC,我們可不可以把PG和DQN結(jié)合起來(lái)呢?
如果你想詳細(xì)學(xué)習(xí)這個(gè)模型,可以移步其他博客。當(dāng)然也是我學(xué)習(xí)的過(guò)程中整理出來(lái)的,會(huì)有用別人圖的情況,如果你覺得侵權(quán)可以隨時(shí)跟我說(shuō)我刪帖。如果你想問(wèn)原貼在哪也歡迎私信我哦!以下同理
PG原理:【強(qiáng)化學(xué)習(xí)】Policy Gradient原理
PG代碼及注釋:【強(qiáng)化學(xué)習(xí)】Policy Gradients代碼注釋版本
Actor-Critic
這個(gè)就是actor-critic思路的來(lái)源,AC準(zhǔn)確來(lái)說(shuō)是PG的TD版本。通過(guò)定義兩個(gè)網(wǎng)絡(luò),actor網(wǎng)絡(luò)和Critic網(wǎng)絡(luò)。Critic網(wǎng)絡(luò)負(fù)責(zé)估算Q值 Actor網(wǎng)絡(luò)負(fù)責(zé)估算策略。AC方法相對(duì)PG來(lái)說(shuō)具有更好的性能,同時(shí)也解決了連續(xù)動(dòng)作空間的問(wèn)題。
AC原理:【強(qiáng)化學(xué)習(xí)】Actor Critic原理
AC代碼及注釋:【強(qiáng)化學(xué)習(xí)】AC注釋版本
A3C原理:【強(qiáng)化學(xué)習(xí)】A3C原理
A3C代碼及注釋:【強(qiáng)化學(xué)習(xí)】A3C代碼注釋版本
PPO
下一種PPO,這是目前使用最廣泛的一種強(qiáng)化學(xué)習(xí)方法。PPO基于Actor-Critic框架,因此PPO也有兩個(gè)網(wǎng)絡(luò),這是因?yàn)锳C可以解決連續(xù)動(dòng)作空間這一優(yōu)點(diǎn)。PPO在AC的基礎(chǔ)上主要做了兩點(diǎn)改進(jìn),一個(gè)是延展的AC的TD(0),變成TD(N)的N步更新。第二點(diǎn)是在AC的基礎(chǔ)上使用重要性采樣,將在線策略變成了離線策略。
PPO代碼及注釋:【強(qiáng)化學(xué)習(xí)】PPO代碼注釋版本
DDPG
DDPG就是為了解決DQN連續(xù)控制型問(wèn)題而產(chǎn)生的。
DQN的神經(jīng)網(wǎng)絡(luò)就相當(dāng)于用線把Q-table的狀態(tài)連起來(lái)。那到DDPG中,Critic網(wǎng)絡(luò)就相當(dāng)于我們用一張布,把整個(gè)Q-table的所有柱子都覆蓋了。
DDPG的Actor接受輸入一個(gè)狀態(tài),就相當(dāng)于在這塊布切沿著這個(gè)狀態(tài)S切一個(gè)面。Actor的任務(wù)就是希望在這個(gè)面上找尋最高點(diǎn),也就是最大的Q值。
所以和AC不同,DDPG預(yù)估的是Q而不是V。而DDPG的Actor采用的是梯度上升的方式找出最大值。而AC和PPO的Actor采用帶權(quán)重更新的方法。
DDPG起源于DQN,是DQN解決連續(xù)控制問(wèn)題的一個(gè)解決方法。
而DQN有一個(gè)眾所周知的問(wèn)題,就是Q值會(huì)被高估。這是因?yàn)槲覀冇胊rgmaxQ(s’)去代替V(s’),去評(píng)估Q(s)。當(dāng)我們每一步都這樣做的時(shí)候,很容易就會(huì)出現(xiàn)高估Q值的情況。
而這個(gè)問(wèn)題也會(huì)出現(xiàn)在DDPG中。而要解決這個(gè)問(wèn)題的思路,也在DQN的優(yōu)化版本中。相信大家很快就明白,就是double DQN。
TD3
在TD3中,我們可以用了兩套網(wǎng)絡(luò)估算Q值,相對(duì)較小的那個(gè)作為我們更新的目標(biāo)。這就是TD3的基本思路。
我們可以再次回到我們關(guān)于“布”的想象。
在DDPG中,計(jì)算target的時(shí)候,我們輸入時(shí)s_和a_,獲得q,也就是這塊布上的一點(diǎn)A。通過(guò)估算target估算另外一點(diǎn)s,a,也就是布上的另外一點(diǎn)B的Q值。
在TD3中,計(jì)算target時(shí)候,輸入s_到actor輸出a后,給a加上噪音,讓a在一定范圍內(nèi)隨機(jī)。這又什么好處呢。
好處就是,當(dāng)更新多次的時(shí)候,就相當(dāng)于用A點(diǎn)附近的一小部分范圍(準(zhǔn)確來(lái)說(shuō)是在s_這條線上的一定范圍)的去估算B,這樣可以讓B點(diǎn)的估計(jì)更準(zhǔn)確,更健壯。
總結(jié)
以上是生活随笔為你收集整理的【强化学习】一文带你理清强化学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从拉格朗日乘数法到KKT条件
- 下一篇: module ‘tensorflow_c