Q-Learning是強化學習初期提出的一種較爲簡單的方法,其核心思想爲對每個狀態下的每一種行爲進行打分,然後根據分數的高低進行選擇,接着根據選擇此行爲後獲得的實際獎賞來對打分系統進行更新。傳統Q-Learning面對的是有限狀態空間、有限動作空間,並且空間大小都足夠簡單,因此可以維護一張表格來進行存儲,即存儲狀態-動作及相應的分數。
其運行的基本流程爲:
隨機初始化Q-table;
設計合適的reward;
對每一次學習 k=0:Max:
初始化狀態爲s0;
對於每一個狀態(i=0:T(terminal)):
查詢Q-table選擇分數最高的一項a(i)執行;
此時狀態轉移爲s(i+1);
對於新狀態s(i+1),其分數爲 reward + gamma * maxof ( Q( s(i+1) , a(i+1) ); //即此刻獲得的回報加上未來預計會獲得的回報,gamma爲一定的折扣因子
//那麼因爲之前的打分中是沒有估計到reward的,則如果產生reward而之前未能估計到,則會與之前的Q值產生較大的區別,這是更新Q表的動力來源
於是利用這一誤差就可以實現Q表的更新
end
end
從算法流程中可以看出,Q-learning的主要思路在於用行爲後的“現實”糾正行爲前的估計,而兩者之間的最大的可能造成差異的來源則是“reward”這一人工設計的準則,因此實際上Q-learning是在幹一件根據人告訴它的好壞標準來學習相應的應對策略的事情。
Q-learning作爲強化學習的鼻祖之一,其開創性的地位是不容否定的,但其較爲簡單的設計也決定了其只適合一些簡單的場合,要求狀態空間極小、動作空間簡單,具有以下問題:
1、對大空間(如下圍棋)這樣複雜的工作無法用有限的Q表來存儲,同時即使每個自由度的空間有限,但有多個維度,則Q表的複雜度增長是指數形式的。
2、在線學習並且一步只學習該次的數據,學習效率較低。
針對以上問題,趁着深度學習的熱潮,研究者們提出了Deep Q-Network這一結合了深度學習與強化學習的產物,可以說從一定意義上將強化學習拯救出了中看不中用的窘境。