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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

本文轉載自知乎專欄「機器學習筆記」,原文作者「余帥」,鏈接
https://zhuanlan.zhihu.com/p/35882937

1 本文學習目標

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

2 用Q-Learning解決經典迷宮問題

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


圖1 房子原型圖


圖2 抽象關系圖

根據此關系,可以得到reward矩陣為

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

Q-Learning偽代碼

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

這里的迷宮問題,每一次episode的結束指的是到達終點狀態5。為了簡單起見,這里將學習率設為1,更新公式變為

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

最終Q表收斂為

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

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

3 值函數近似與DQN

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

其中ω稱為“權重”。那怎么把這個權重求出來,即擬合出這樣一個合適的函數呢?這里就要結合機器學習算法里的一些有監督學習算法,對輸入的狀態提取特征作為輸入,通過MC/TD計算出值函數作為輸出,然后對函數參數 進行訓練,直到收斂。這里主要說的是回歸算法,比如線性回歸、決策樹、神經網絡等。

這里,就可以引入DQN(Deep Q-Network)了,實際上它就是Q-Learning和神經網絡的結合,將Q-Learning的Q表變成了Q-Network。

好,現在關鍵問題來了。這么去訓練這個網絡呢?換句話說,怎么去確定網絡參ω呢?第一,我們需要一個Loss Function;第二,我們需要足夠的訓練樣本。

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

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

Q-Learning呢,就是

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

最后附上DQN的偽代碼

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

參考文獻

[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]一條咸魚的強化學習之路6之值函數近似(Value Function Approximation)和DQN

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。