强化学习——Qlearning
前言
在控制決策領(lǐng)域里面強(qiáng)化學(xué)習(xí)還是占很重比例的,最近出了幾篇角色控制的論文需要研究,其中部分涉及到強(qiáng)化學(xué)習(xí),都有開(kāi)源,有興趣可以點(diǎn)開(kāi)看看:
A Deep Learning Framework For Character Motion Synthesis and Editing
Phase-Functioned Neural Networks for Character Control
Terrain-Adaptive Locomotion Skills Using Deep Reinforcement Learning
DeepLoco: Dynamic Locomotion Skills Using Hierarchical Deep Reinforcement Learning
DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills
為了看懂這些文章,還是得對(duì)強(qiáng)化學(xué)習(xí)做一個(gè)基本了解,看文章的時(shí)候再去針對(duì)具體的方法作深入了解,這里就先看看最基本的Q-learning,其實(shí)在強(qiáng)化學(xué)習(xí)中有一個(gè)很重要的理論知識(shí)叫做馬爾科夫決策過(guò)程(Markov Decision Process,MDP),建議沒(méi)事的時(shí)候看看
Markov Decision Processes
而Q-learnging就是解決馬爾科夫決策問(wèn)題的一個(gè)方法,參考博文:
增強(qiáng)學(xué)習(xí)入門之Q-Learning
走近流行強(qiáng)化學(xué)習(xí)算法:最優(yōu)Q-Learning
如何用簡(jiǎn)單例子講解 Q - learning 的具體過(guò)程?
理論
在學(xué)習(xí)馬爾科夫鏈的時(shí)候,我有一篇譯文《馬爾科夫鏈和馬爾科夫鏈蒙特卡洛方法》中提到了對(duì)于馬爾科夫鏈,存在唯一的一個(gè)穩(wěn)態(tài)分布,也就是說(shuō)當(dāng)馬爾科夫鏈達(dá)到穩(wěn)態(tài)分布以后,其后得到的所有轉(zhuǎn)移狀態(tài)都具有相同的概率分布。而Q-learning的最終目的就是利用價(jià)值迭代算法尋找最優(yōu)穩(wěn)態(tài)(策略)。
通俗點(diǎn)將Q-learning的根本目的就是尋找在某種狀態(tài)下采取某種策略得到的價(jià)值是多少,比如踩雷,在某個(gè)格子,我標(biāo)雷或者點(diǎn)開(kāi),如果炸了,就懲罰,如果沒(méi)炸就獎(jiǎng)勵(lì)
類似于隱馬爾科夫模型(HMM),我們也需要提前知道一些變量,以掃雷為例:
- S:狀態(tài),當(dāng)前在哪個(gè)格子上
- A:行為,對(duì)當(dāng)前格子標(biāo)雷還是踩下去
- r:長(zhǎng)期獎(jiǎng)勵(lì)和短期獎(jiǎng)勵(lì)的折扣因子,短期獎(jiǎng)勵(lì)就是說(shuō)炸了我就扣分扣到你懷疑人生,長(zhǎng)期獎(jiǎng)勵(lì)就是價(jià)值函數(shù),即根據(jù)以往經(jīng)驗(yàn),我去下一個(gè)格子標(biāo)雷或者踩下去是個(gè)啥情況
- P:狀態(tài)轉(zhuǎn)移矩陣,維度是[行為*狀態(tài)],與HMM不同的是,Qlearning是依據(jù)狀態(tài)轉(zhuǎn)移和采取的行動(dòng)得到下一個(gè)狀態(tài),即當(dāng)前格子選擇完處理行為后,下一個(gè)格子我會(huì)去哪里踩
- R:短期獎(jiǎng)勵(lì)
最終目的:
- Q:價(jià)值函數(shù)
更新價(jià)值函數(shù)的迭代流程:
- 初始化當(dāng)前狀態(tài):踩到哪個(gè)格子了
- 在當(dāng)前狀態(tài)下采取哪個(gè)行動(dòng)(標(biāo)雷,踩下去)
- 計(jì)算每種行動(dòng)獲得的反饋,計(jì)算哪個(gè)行動(dòng)得到最大的價(jià)值
- 根據(jù)狀態(tài)轉(zhuǎn)移矩陣得到下一次我可能去探雷的位置,重復(fù)2和3步驟
其中最主要的是怎么獲取行動(dòng)反饋,答案就是一句長(zhǎng)期獎(jiǎng)勵(lì)和短期獎(jiǎng)勵(lì),大概意思就是以下兩項(xiàng)的和:
- 短期獎(jiǎng)勵(lì):R[當(dāng)前狀態(tài)][當(dāng)前行為]
- 長(zhǎng)期獎(jiǎng)勵(lì):折扣因子* 依據(jù)當(dāng)前狀態(tài)和行為轉(zhuǎn)移到下一個(gè)狀態(tài)后再采取的所有可能行為中依據(jù)以往經(jīng)驗(yàn)?zāi)艿玫降淖畲螵?jiǎng)勵(lì),即
r×max(q[下一個(gè)狀態(tài)][所有的下一個(gè)行為])r\times max(q[下一個(gè)狀態(tài)][所有的下一個(gè)行為]) r×max(q[下一個(gè)狀態(tài)][所有的下一個(gè)行為])
然后根據(jù)這個(gè)最大獎(jiǎng)勵(lì)更新Q[當(dāng)前狀態(tài)][當(dāng)前行為]
Q[當(dāng)前狀態(tài)][當(dāng)前行為]=(1?α)Q[當(dāng)前狀態(tài)][當(dāng)前行為]+α(R+r×max(Q[下一個(gè)狀態(tài)][所有的行為]))Q[當(dāng)前狀態(tài)][當(dāng)前行為]=(1-\alpha)Q[當(dāng)前狀態(tài)][當(dāng)前行為]+\alpha (R+r\times max(Q[下一個(gè)狀態(tài)][所有的行為])) Q[當(dāng)前狀態(tài)][當(dāng)前行為]=(1?α)Q[當(dāng)前狀態(tài)][當(dāng)前行為]+α(R+r×max(Q[下一個(gè)狀態(tài)][所有的行為]))
其實(shí)這部分為看到了好幾種更新方法: - 莫凡Python上面的
你沒(méi)看錯(cuò),理論到此結(jié)束,最主要的就是如何依據(jù)短期利益和長(zhǎng)期利益去確定當(dāng)前狀態(tài)下采取行動(dòng)所獲得的最大獎(jiǎng)勵(lì)。
-
知乎上@牛阿的回答
-
參考博客1的方法
Q=R+r?max(Q[next_state][action_next])Q=R+r*max(Q[next\_state][action\_next]) Q=R+r?max(Q[next_state][action_next]) -
參考博客2的方法更奇怪,這里就不貼了額,有興趣自己去看看
不過(guò)所有的代碼意思幾乎都是在長(zhǎng)遠(yuǎn)利益中選擇最大值,但是長(zhǎng)遠(yuǎn)利益的計(jì)算方法有所不同,最后更新方法也有點(diǎn)區(qū)別,這個(gè)可能是屬于不同的更新算法,后續(xù)繼續(xù)學(xué)習(xí)應(yīng)該能知道
偽代碼實(shí)現(xiàn):
state=1;//把踩雷游戲的最左上角的格子當(dāng)做初始狀態(tài) while !finish_game:action=random(0,1);//0是標(biāo)記雷,1是踩下去next_state=P[state][action];//依據(jù)當(dāng)前狀態(tài)和行為得到下一個(gè)位置for next_action in [0,1]//踩雷和標(biāo)雷都計(jì)算temp_reward[next_state][next_action]=Q[next_state][next_action]Q[state][action]=(1-a)*Q[state][aciton]+a*[R+max(temp_reward[nextstate][:])]貌似看著不難,后面找個(gè)啥例子再深入了解一波。
后記
這里就是初步接觸強(qiáng)化學(xué)習(xí),了解何為行為與獎(jiǎng)勵(lì),這里有一個(gè)憤怒小鳥(niǎo)的強(qiáng)化學(xué)習(xí)代碼,有興趣去玩玩:
https://github.com/SarvagyaVaish/FlappyBirdRL
總結(jié)
以上是生活随笔為你收集整理的强化学习——Qlearning的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【TensorFlow-windows】
- 下一篇: 亚特兰大君临队签约LNL全员 设立亚特兰