機器學習中的強化學習:Q-learning學習指南
所謂強化學習就是智能系統(tǒng)從環(huán)境到行為映射的學習唁盏,以使獎勵信號(強化信號)函數(shù)值最大跃闹。如果Agent的某個行為策略導致環(huán)境正的獎賞(強化信號)匈辱,那么Agent以后產(chǎn)生這個行為策略的趨勢便會加強 -《百科》
簡單來說就是給你一只小白鼠在迷宮里面武花,如果他走出了正確的步子漾橙,就會給它正反饋(糖),否則給出負反饋(點擊)桑阶,那么,當它走完所有的道路后熙尉。無論比把它放到哪兒联逻,它都能通過以往的學習找到最正確的道路。
下面直接上例子:
假設我們有5間房检痰,如下圖所示包归,這5間房有些房間是想通的,我們分別用0-4進行了標注铅歼,其中5代表了是是出口公壤。
我們使用一副圖來表示,就是下面這個樣子
在這個例子里椎椰,我們的目標是能夠走出房間厦幅,就是到達5的位置,為了能更好的達到這個目標慨飘,我們?yōu)槊恳粋€門設置一個獎勵确憨。比如如果能立即到達5,那么我們給予100的獎勵瓤的,其它沒法到5的我們不給予獎勵休弃,權(quán)重是0了,如下圖所示
5因為也可以到它自己圈膏,所以也是給100的獎勵塔猾,其它方向到5的也都是100的獎勵。 在Q-learning中稽坤,目標是權(quán)重值累加的最大化丈甸,所以一旦達到5糯俗,它將會一直保持在這兒。
想象下我們有一個虛擬的機器人睦擂,它對環(huán)境一無所知得湘,但它需要通過自我學習知道怎么樣到外面,就是到達5的位置祈匙。
好啦忽刽,現(xiàn)在可以引出Q-learning的概念了,“狀態(tài)”以及“動作”夺欲,我們可以將每個房間看成一個state跪帝,從一個房間到另外一個房間的動作叫做action,state是一個節(jié)點些阅,而action是用一個剪頭表示伞剑。
現(xiàn)在假設我們在狀態(tài)2,從狀態(tài)2可以到狀態(tài)3市埋,而無法到狀態(tài)0黎泣、1、4缤谎,因為2沒法直接到0抒倚、1、4坷澡;從狀態(tài)3托呕,可以到1、4或者2频敛;而4可以到0项郊、3、5斟赚;其它依次類推着降。
所以我們能夠把這些用一個矩陣來表示:
這個矩陣就是傳說中的Q矩陣了,這個矩陣的列表表示的是當前狀態(tài)拗军,而行標表示的則是下一個狀態(tài)任洞,比如第三行的行標是2,如果取第四列发侵,比如說2侈咕,4就表示了從2->4的收益是0,而-1就表示了沒法從一個狀態(tài)到另外一個狀態(tài)器紧。
Q矩陣初始化的時候全為0,因為它的狀態(tài)我們已經(jīng)全部知道了楼眷,所以我們知道總的狀態(tài)是6铲汪。如果我們并不知道有多少個狀態(tài)熊尉,那么請從1個狀態(tài)開始,一旦發(fā)現(xiàn)新的狀態(tài)掌腰,那么為這個矩陣添加上新的行和列狰住。
于是我們就得出了如下的公式:
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
根據(jù)這個公式,Q矩陣值 = R的當前值 + ?Gamma(系數(shù))* Q最大的action(看不懂不要緊齿梁,后面有例子)
我們的虛擬機器人將通過環(huán)境來學習催植,機器人會從一個狀態(tài)跳轉(zhuǎn)到另一個狀態(tài),直到我們到達最終狀態(tài)勺择。我們把從開始狀態(tài)開始一直達到最終狀態(tài)的這個過程稱之為一個場景创南,機器人會從一個隨機的開始場景出發(fā),直到到達最終狀態(tài)完成一個場景省核,然后立即重新初始化到一個開始狀態(tài)稿辙,從而進入下一個場景。
因此气忠,我們可以將算法歸納如下
Q-learning算法如下:
1 設置gamma相關(guān)系數(shù)邻储,以及獎勵矩陣R
2 將Q矩陣初始化為全0
3 For each episode:
設置隨機的初使狀態(tài)
Do While 當沒有到達目標時?
選擇一個最大可能性的action(action的選擇用一個算法來做,后面再講)
根據(jù)這個action到達下一個狀態(tài)
根據(jù)計算公式:Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]計算這個狀態(tài)Q的值
設置當前狀態(tài)為所到達的狀態(tài)
End Do
End For
其中Gamma的值在0旧噪,1之間(0 <= Gamma <1)吨娜。如果Gramma接近0,對立即的獎勵更有效淘钟。如果接近1宦赠,整個系統(tǒng)會更考慮將來的獎勵。
以上就是整個算法了日月,并不是很難的袱瓮,下面來看個一段人肉算法操作,讓你徹底明白這個算法爱咬。
人肉算法步驟
首先將Q初始化一個全為0的矩陣尺借,Q是我們目標矩陣,我們希望能夠把這個矩陣填滿
然后初始化我們的R矩陣精拟,假設這個值我們都是知道的燎斩,如下圖所示
現(xiàn)在,假設我們的初始位置是state1蜂绎,首先檢查一下我們的R矩陣栅表,在R矩陣中發(fā)現(xiàn)從state1可以到2個位置:state3、state5师枣,我們隨機選擇一個方向怪瓶,比如我們現(xiàn)在從1到5,我們可以用公式
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q(1, 5) = R(1, 5) + 0.8 * Max[Q(5, 1), Q(5, 4), Q(5, 5)]= 100 + 0.8 * 0 = 100
來計算出Q(1,5)践美, 因為Q矩陣是初始化為0洗贰,所以 Q(5,1), Q(5,4),Q(5,5)都是0找岖,所以Q(1,5)的值為100,現(xiàn)在5變成了當前狀態(tài)敛滋,因為5已經(jīng)是最終狀態(tài)了许布,所以,這個場景就結(jié)束鳥绎晃,Q矩陣變成如下
然后我們再隨機的選擇一個狀態(tài)蜜唾,比如現(xiàn)在選了狀態(tài)3為我們的初始狀態(tài),好啦庶艾,來看我們R矩陣袁余;有3個可能性的1、2落竹、4我們隨機的選擇1泌霍,繼續(xù)用公式計算:
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q(3, 1) = R(3, 1) + 0.8 * Max[Q(1, 2), Q(1, 5)]= 0 + 0.8 * Max(0, 100) = 80
然后,更新矩陣述召,矩陣變成了這個樣子
我們的當前狀態(tài)變成了1朱转,1并不是最終狀態(tài),所以算法還是要往下執(zhí)行积暖,此時藤为,觀察R矩陣,1有1->3, 1->5兩個選擇夺刑,子這里我們選擇 1->5這個action有著較高回報缅疟,所以我們選擇了1->5, 重新計算Q(1,5)的值
Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]
Q(1, 5) = R(1, 5) + 0.8 * Max[Q(1, 2), Q(1, 5)]= 0 + 0.8 * Max(0, 100) = 80
為什么要重新計算呢?因為某些值可能會發(fā)生變化遍愿,計算完后更新矩陣
因為5已經(jīng)是最終狀態(tài)了存淫,所以結(jié)束我們本次場景迭代。
經(jīng)過循環(huán)迭代沼填,我們得出了最終結(jié)果桅咆,是這個樣子的
經(jīng)過正則化處理,矩陣最終會變成這個樣子
強化學習到此結(jié)束坞笙。我們的機器人自動學習到了最優(yōu)的路徑岩饼,就是按照最大獎勵值的路徑就可以啦
如圖紅線所示,代表了各個點到達終點的最優(yōu)路徑
這是一個級簡的算法薛夜,隱藏了很多細節(jié)籍茧,出去吹NB是夠了,實踐上實現(xiàn)起來還是有許多問題的梯澜。
下面就是細節(jié)代碼了寞冯,對實現(xiàn)剛興趣的繼續(xù)往下看。
我們之前說了,選擇動作的依據(jù)是“選擇一個最大可能性的action”吮龄,那么這個動作要怎么選呢檬某?
我們選擇最大收益的那個值,比如在R矩陣中螟蝙,總是選擇值最大的那個
算法我們可以通過代碼來表示就是這樣
大家想一下這樣是否會存在問題呢?當然有民傻,如果有幾個最大值怎么處理呢胰默?,如果有幾個最大值的話我們就隨機的取一個唄
是不是這樣就可以了呢漓踢?大家想一下牵署,萬一在當前動作收益很小,小收益到達的狀態(tài)的后續(xù)action可能會更大喧半,所以奴迅,我們不能直接選取最大的收益,而是需要使用一個新的技術(shù)來探索挺据,在這里取具,我們使用了epsilon,首先我們用產(chǎn)生一個隨機值扁耐,如果這個隨機值小于epsilon暇检,那么下一個action會是隨機動作,否則采用組大值婉称,代碼如下
但實際上這種做法還是有問題的块仆,問題是即使我們已經(jīng)學習完畢了,已經(jīng)知道了最優(yōu)解王暗,當我們選擇一個動作時悔据,它還是會繼續(xù)采取隨機的動作。有許多方法可以克服這個俗壹,比較有名稱之為mouse learns: 沒循環(huán)一次就減少epsilon的值科汗,這樣隨著學習的進行,隨機越來越不容易觸發(fā)策肝,從而減少隨機對系統(tǒng)的影響肛捍,常用的減少方法有以下幾種,大家可以根據(jù)情況選用
(本文完)