日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

强化学习扫盲贴:从Q-learning到DQN

發(fā)布時間:2024/7/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 强化学习扫盲贴:从Q-learning到DQN 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文轉(zhuǎn)載自知乎專欄「機器學(xué)習(xí)筆記」,原文作者「余帥」,鏈接
https://zhuanlan.zhihu.com/p/35882937

1 本文學(xué)習(xí)目標(biāo)

1. 復(fù)習(xí)Q-Learning;
2. 理解什么是值函數(shù)近似(Function Approximation);
3. 理解什么是DQN,弄清它和Q-Learning的區(qū)別是什么。

2 用Q-Learning解決經(jīng)典迷宮問題

現(xiàn)有一個5房間的房子,如圖1所示,房間與房間之間通過門連接,編號0到4,5號是房子外邊,即我們的終點。我們將agent隨機放在任一房間內(nèi),每打開一個房門返回一個reward。圖2為房間之間的抽象關(guān)系圖,箭頭表示agent可以從該房間轉(zhuǎn)移到與之相連的房間,箭頭上的數(shù)字代表reward值。


圖1 房子原型圖


圖2 抽象關(guān)系圖

根據(jù)此關(guān)系,可以得到reward矩陣為

Q-Learning是一種off-policy TD方法,偽代碼如圖所示

Q-Learning偽代碼

我們首先會初始化一個Q表,用于記錄狀態(tài)-動作對的值,每個episode中的每一步都會根據(jù)下列公式更新一次Q表

這里的迷宮問題,每一次episode的結(jié)束指的是到達(dá)終點狀態(tài)5。為了簡單起見,這里將學(xué)習(xí)率設(shè)為1,更新公式變?yōu)?/p>

另外,將衰減系數(shù)γ設(shè)為0.8。Q表初始化為一個5×5的全0矩陣。每次這樣更新,最終Q表會收斂到一個矩陣。

最終Q表收斂為

因此,也可以得到最優(yōu)路徑如下紅色箭頭所示

Python代碼:

import numpy as np GAMMA = 0.8 Q = np.zeros((6,6)) R=np.asarray([[-1,-1,-1,-1,0,-1],[-1,-1,-1,0,-1,100],[-1,-1,-1,0,-1,-1],[-1,0, 0, -1,0,-1],[0,-1,-1,0,-1,100],[-1,0,-1,-1,0,100]]) def getMaxQ(state):return max(Q[state, :]) def QLearning(state):curAction = Nonefor action in range(6):if(R[state][action] == -1):Q[state, action]=0else:curAction = actionQ[state,action]=R[state][action]+GAMMA * getMaxQ(curAction) count=0 while count<1000:for i in range(6):QLearning(i)count+=1 print(Q/5)

Q-Learning方法很好的解決了這個迷宮問題,但是這終究只是一個小問題(狀態(tài)空間和動作空間都很小),實際情況下,大部分問題都是有巨大的狀態(tài)空間或者動作空間,想建立一個Q表,內(nèi)存是絕對不允許的,而且數(shù)據(jù)量和時間開銷也是個問題。

3 值函數(shù)近似與DQN

值函數(shù)近似(Function Approximation)的方法就是為了解決狀態(tài)空間過大,也稱為“維度災(zāi)難”的問題。通過用函數(shù)而不是Q表來表示 ,這個函數(shù)可以是線性的也可以使非線性的。

其中ω稱為“權(quán)重”。那怎么把這個權(quán)重求出來,即擬合出這樣一個合適的函數(shù)呢?這里就要結(jié)合機器學(xué)習(xí)算法里的一些有監(jiān)督學(xué)習(xí)算法,對輸入的狀態(tài)提取特征作為輸入,通過MC/TD計算出值函數(shù)作為輸出,然后對函數(shù)參數(shù) 進行訓(xùn)練,直到收斂。這里主要說的是回歸算法,比如線性回歸、決策樹、神經(jīng)網(wǎng)絡(luò)等。

這里,就可以引入DQN(Deep Q-Network)了,實際上它就是Q-Learning和神經(jīng)網(wǎng)絡(luò)的結(jié)合,將Q-Learning的Q表變成了Q-Network。

好,現(xiàn)在關(guān)鍵問題來了。這么去訓(xùn)練這個網(wǎng)絡(luò)呢?換句話說,怎么去確定網(wǎng)絡(luò)參ω呢?第一,我們需要一個Loss Function;第二,我們需要足夠的訓(xùn)練樣本。

訓(xùn)練樣本好說,通過epsilon-greedy策略去生成就好。回憶一下Q-Learning,我們更新Q表是利用每步的reward和當(dāng)前Q表來迭代的。那么我們可以用這個計算出來的Q值作為監(jiān)督學(xué)習(xí)的“標(biāo)簽”來設(shè)計Loss Function,我們采用如下形式,即近似值和真實值的均方差

采用隨機梯度下降法(SGD)來迭代求解,得到我們想要的,具體公式和過程還請看參考資料,這里不展開了,其實就是求導(dǎo)啦。值得一提的是,上述公式中的q(·)根據(jù)不同方法算出來,其形式不一樣,比如利用MC,則為(回報);利用TD(0),則為

Q-Learning呢,就是

在David Silver的課里,他根據(jù)每次更新所參與樣本量的不同把更新方法分為增量法(Incremental Methods)和批處理法(Batch Methods)。前者是來一個數(shù)據(jù)就更新一次,后者是先攢一堆樣本,再從中采樣一部分拿來更新Q網(wǎng)絡(luò),稱之為“經(jīng)驗回放”,實際上DeepMind提出的DQN就是采用了經(jīng)驗回放的方法。為什么要采用經(jīng)驗回放的方法?因為對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練時,假設(shè)樣本是獨立同分布的。而通過強化學(xué)習(xí)采集到的數(shù)據(jù)之間存在著關(guān)聯(lián)性,利用這些數(shù)據(jù)進行順序訓(xùn)練,神經(jīng)網(wǎng)絡(luò)當(dāng)然不穩(wěn)定。經(jīng)驗回放可以打破數(shù)據(jù)間的關(guān)聯(lián)。

最后附上DQN的偽代碼

學(xué)到這里,其實可以做一個階段性總結(jié)了,強化學(xué)習(xí)算法的基本框架可以用下圖概括

參考文獻(xiàn)

[1]Reinforcement Learning: An Introduction - Chapter 9: On-policy Prediction with Approximation
[2]Reinforcement Learning: An Introduction - Chapter 10: On-policy Control with Approximation
[3]David Silver’s RL Course Lecture 6 - Value Function Approximation (video, slides)
[4]DQN從入門到放棄5 深度解讀DQN算法
[5]一條咸魚的強化學(xué)習(xí)之路6之值函數(shù)近似(Value Function Approximation)和DQN

總結(jié)

以上是生活随笔為你收集整理的强化学习扫盲贴:从Q-learning到DQN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。