Q-Learning
q-learning 是強化學習中的一個方法,他是屬於value basic方法(在之前Markov Decision Process有提到,其實都是 Approximate)
Approximate 我自己解讀是相似的方法意思,如果常看paper的應該這個單字非常熟悉
我們在做強化學習中的環境會是這樣......
當環境初始化後……
Agent會給予一個行動At ,輸入至環境. 環境則會回應這個行動,更新當前狀態(state+1)以及給予這個狀態一個獎勵(reward+1).
這邊有一個比較重要部分就是,獎勵並不是給行動,而是給狀態的.
好,既然我們有獎勵,其實我們的Agenet可以透過這個獎勵去學習.到底做什麼好.我們舉一個最經典的例子
我們會先需要繪製一個矩陣(matrix)作為Q-learning更新用的矩陣
恩...第一次看到這個矩陣一定會很莫名其妙:這些數字怎麼來的.其實這些數字很直觀,解釋一次後就會印象深刻了.
矩陣中的-1 是指兩個房間之間是沒辦法互通的,像是: 0號不能直接走到1, 3, 2……只能走到4號
矩陣中的0是指兩個房間是互通的,像是4號可以走到3號.我們接下來會不段更新其值利用 q-learning方法
矩陣中的100是指走到終點了.
Ok.那我們接下來要解釋 Q-learning了
我們先來了解一些超參數(hyperparameters)的功能:
alpha :這邊我們解釋為learning rate,控制 alpha 可以改變每次學習的影響力.Lambda: Lambda功能跟 alpha近似,但他是在控制下一個狀態獎勵(Q(s+1,a))的值.
更新的部分就相當簡單了,我們每次動作環境會給予一個 reward(Rt+1) 這個獎勵我們稱為立即獎勵(immediate reward),然後我們還會再加上一個比較長遠的獎勵,但這個獎勵我們會從 矩陣中的(St+1)中選擇最大的值,假設我們的St+1是1號房,那我可選的陣列就是:
[-1 , -1 ,-1, 0, -1, 100]
最大的是100,我們就會選出100作為思考長遠的獎勵.為什麼需要思考比較長遠呢?玩遊戲時最常遇到的寶箱怪 就可以拿來解釋了. 當你發現一個寶箱(Q(s,a) = 100)當你去開這個寶箱後可能被裡面的寶箱怪吃掉了導致你輸了這場遊戲(Q(s+1,a) = -1000). 這樣更新完.你下一次在遇到這個寶箱你就不敢再去開他了XD
那為什麼後面還要再減掉一個 Q(s,a)呢? 這個可以想像成我們在做反向傳播(back propagation)前計算的誤差值(loss)利用預測值(predict)和實際值(actually)來計算,這個Q(s,a)就是我們的預測值了.
所以通過Q-learning算法不斷更新我們矩陣最後就可以得到一個不錯的選擇
在選擇行為(choose action)一開始我們採用隨機亂數去探索這個環境到底有甚麼東西,過了一段時間後才會開始使用我們訓練出來的獎勵矩陣.獎勵矩陣選擇方法跟上述的 QMax一樣,都是選擇陣列中最大值作為行動.
整個更新算法可以參考這篇.
Deep Q-learing也是差不多方法,有興趣的可以先看我的github.下一次會解釋如何利用神經網路來做強化學習.