一、介紹
Q-learning 算法本質(zhì)上是在求解函數(shù)Q(s,a). 如下圖毅否,根據(jù)狀態(tài)s和動作a, 得出在狀態(tài)s下采取動作a會獲得的未來的獎勵衡蚂,即Q(s,a)。 然后根據(jù)Q(s,a)的值伪很,決定下一步動作該如何選擇。
二奋单、算法
- Q-learning 算法中我們通過獲得Q(s,a)函數(shù)來尋找在某個狀態(tài)下的最好的動作锉试,使得最終獲得的累計獎勵最大
- 其Q(s,a)的計算方法是利用貝爾曼方程
-
如下圖是常見的兩種形式:
image.png - 它最簡單的版本,算法可描述如下:
- 初始化狀態(tài) s
- 進入 episode 循環(huán)
- 基于狀態(tài)s根據(jù)Q 或隨機選擇一個動作 a
- 執(zhí)行動作a, 從環(huán)境獲得 獎勵r和下一個狀態(tài)
- 更新Q值:
- 若 episode未結(jié)束览濒,回到 2
還有另一種形式的Q-learning呆盖, 它是基于 value function (
), 如下圖所示
這種形式更多的用在 Actor-Critic 算法中贷笛,它表示一個狀態(tài) s, 在某個策略下应又,其 value function 是多少,即狀態(tài) s 在當(dāng)前策略 下會獲得多少未來的獎勵乏苦。其V值的更新方式也是利用了貝爾曼方程丁频。這里不做太多的討論。
三、例子
下面舉一個例子加深以下了解席里。
以下是一個迷宮, s 表示起始點拢驾,e表示終點奖磁, t表示陷阱。規(guī)則:每走一步繁疤,reward 減 1, 若進入陷阱咖为, reward 減100, 若到達終點, reward 加 100.
用 Q-table 解決
Q-table 的關(guān)鍵就是要建立一張映射表,這張表是 狀態(tài)-動作 到 Q值的映射稠腊。如根據(jù)上面的問題躁染,我們建立如下表格:
其中行表示狀態(tài)(用坐標表示), 列表示動作架忌, 表格的值就是 Q(s,a)吞彤, 其實這個Q就表示 quality的意思。
具體過程:
- 初始化表格叹放,一開始表格沒有任何數(shù)據(jù)
- 初始化狀態(tài) s, 狀態(tài) s從起點開始
- 根據(jù)Q-table 查詢狀態(tài) s 對應(yīng)的 Q(s,a), 如果查不到饰恕,向表格插入新的數(shù)據(jù),Q(s,a)可以初始化為0; 若能查找到Q(s,a)井仰,那么我們根據(jù) e-greedy 算法埋嵌,以一定的概率隨機選擇動作,或挑選最大的Q(s,a)值所對應(yīng)的動作作為下一個動作俱恶。
- 執(zhí)行動作a, 從環(huán)境獲得 獎勵r和下一個狀態(tài)
- 更新Q值:
- 若 episode未結(jié)束雹嗦,回到 3
用 network 解決
假設(shè)我們的狀態(tài)空間特別大,在這種情況下如果還堅持用 Q-table 來計算Q(s,a)的話合是,那么最終的Q-table對特別大了罪,甚至計算機無法存儲。為了解決這個問題端仰,我們引入帶參數(shù)的神經(jīng)網(wǎng)絡(luò)去近似Q(s,a)函數(shù)捶惜。
把原來的 Q-table 替換成 神經(jīng)網(wǎng)絡(luò)后,其算法并沒有太大的變化荔烧。需要注意的是吱七, 網(wǎng)絡(luò)的Loss 函數(shù)是
引用
https://jizhi.im/blog/post/intro_q_learning
https://blog.csdn.net/Young_Gy/article/details/73485518
http://mnemstudio.org/path-finding-q-learning-tutorial.htm
https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-2-A-q-learning/
https://www.bilibili.com/video/av24724071/?p=3