《深入淺出機(jī)器學(xué)習(xí)》之強(qiáng)化學(xué)習(xí)

機(jī)器學(xué)習(xí)中的強(qiáng)化學(xué)習(xí):Q-learning學(xué)習(xí)指南

所謂強(qiáng)化學(xué)習(xí)就是智能系統(tǒng)從環(huán)境到行為映射的學(xué)習(xí),以使獎(jiǎng)勵(lì)信號(hào)(強(qiáng)化信號(hào))函數(shù)值最大。如果Agent的某個(gè)行為策略導(dǎo)致環(huán)境正的獎(jiǎng)賞(強(qiáng)化信號(hào)),那么Agent以后產(chǎn)生這個(gè)行為策略的趨勢(shì)便會(huì)加強(qiáng) -《百科》

簡(jiǎn)單來(lái)說(shuō)就是給你一只小白鼠在迷宮里面,如果他走出了正確的步子,就會(huì)給它正反饋(糖),否則給出負(fù)反饋(點(diǎn)擊),那么,當(dāng)它走完所有的道路后。無(wú)論比把它放到哪兒,它都能通過(guò)以往的學(xué)習(xí)找到最正確的道路。

下面直接上例子:

假設(shè)我們有5間房,如下圖所示,這5間房有些房間是想通的,我們分別用0-4進(jìn)行了標(biāo)注,其中5代表了是是出口。

我們使用一副圖來(lái)表示,就是下面這個(gè)樣子

在這個(gè)例子里,我們的目標(biāo)是能夠走出房間,就是到達(dá)5的位置,為了能更好的達(dá)到這個(gè)目標(biāo),我們?yōu)槊恳粋€(gè)門(mén)設(shè)置一個(gè)獎(jiǎng)勵(lì)。比如如果能立即到達(dá)5,那么我們給予100的獎(jiǎng)勵(lì),其它沒(méi)法到5的我們不給予獎(jiǎng)勵(lì),權(quán)重是0了,如下圖所示

5因?yàn)橐部梢缘剿约?,所以也是給100的獎(jiǎng)勵(lì),其它方向到5的也都是100的獎(jiǎng)勵(lì)。 在Q-learning中,目標(biāo)是權(quán)重值累加的最大化,所以一旦達(dá)到5,它將會(huì)一直保持在這兒。

想象下我們有一個(gè)虛擬的機(jī)器人,它對(duì)環(huán)境一無(wú)所知,但它需要通過(guò)自我學(xué)習(xí)知道怎么樣到外面,就是到達(dá)5的位置。

好啦,現(xiàn)在可以引出Q-learning的概念了,“狀態(tài)”以及“動(dòng)作”,我們可以將每個(gè)房間看成一個(gè)state,從一個(gè)房間到另外一個(gè)房間的動(dòng)作叫做action,state是一個(gè)節(jié)點(diǎn),而action是用一個(gè)剪頭表示。

現(xiàn)在假設(shè)我們?cè)跔顟B(tài)2,從狀態(tài)2可以到狀態(tài)3,而無(wú)法到狀態(tài)0、1、4,因?yàn)?沒(méi)法直接到0、1、4;從狀態(tài)3,可以到1、4或者2;而4可以到0、3、5;其它依次類推。

所以我們能夠把這些用一個(gè)矩陣來(lái)表示:

這個(gè)矩陣就是傳說(shuō)中的Q矩陣了,這個(gè)矩陣的列表表示的是當(dāng)前狀態(tài),而行標(biāo)表示的則是下一個(gè)狀態(tài),比如第三行的行標(biāo)是2,如果取第四列,比如說(shuō)2,4就表示了從2->4的收益是0,而-1就表示了沒(méi)法從一個(gè)狀態(tài)到另外一個(gè)狀態(tài)。

Q矩陣初始化的時(shí)候全為0,因?yàn)樗臓顟B(tài)我們已經(jīng)全部知道了,所以我們知道總的狀態(tài)是6。如果我們并不知道有多少個(gè)狀態(tài),那么請(qǐng)從1個(gè)狀態(tài)開(kāi)始,一旦發(fā)現(xiàn)新的狀態(tài),那么為這個(gè)矩陣添加上新的行和列。

于是我們就得出了如下的公式:

Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]

根據(jù)這個(gè)公式,Q矩陣值 = R的當(dāng)前值 + ?Gamma(系數(shù))* Q最大的action(看不懂不要緊,后面有例子)

我們的虛擬機(jī)器人將通過(guò)環(huán)境來(lái)學(xué)習(xí),機(jī)器人會(huì)從一個(gè)狀態(tài)跳轉(zhuǎn)到另一個(gè)狀態(tài),直到我們到達(dá)最終狀態(tài)。我們把從開(kāi)始狀態(tài)開(kāi)始一直達(dá)到最終狀態(tài)的這個(gè)過(guò)程稱之為一個(gè)場(chǎng)景,機(jī)器人會(huì)從一個(gè)隨機(jī)的開(kāi)始場(chǎng)景出發(fā),直到到達(dá)最終狀態(tài)完成一個(gè)場(chǎng)景,然后立即重新初始化到一個(gè)開(kāi)始狀態(tài),從而進(jìn)入下一個(gè)場(chǎng)景。

因此,我們可以將算法歸納如下

Q-learning算法如下:

1 設(shè)置gamma相關(guān)系數(shù),以及獎(jiǎng)勵(lì)矩陣R

2 將Q矩陣初始化為全0

3 For each episode:

  設(shè)置隨機(jī)的初使?fàn)顟B(tài)

  Do While 當(dāng)沒(méi)有到達(dá)目標(biāo)時(shí)?

選擇一個(gè)最大可能性的action(action的選擇用一個(gè)算法來(lái)做,后面再講)

   根據(jù)這個(gè)action到達(dá)下一個(gè)狀態(tài)

   根據(jù)計(jì)算公式:Q(state, action) = R(state, action) + Gamma * Max[Q(next state, all actions)]計(jì)算這個(gè)狀態(tài)Q的值

   設(shè)置當(dāng)前狀態(tài)為所到達(dá)的狀態(tài)

  End Do

End For

其中Gamma的值在0,1之間(0 <= Gamma <1)。如果Gramma接近0,對(duì)立即的獎(jiǎng)勵(lì)更有效。如果接近1,整個(gè)系統(tǒng)會(huì)更考慮將來(lái)的獎(jiǎng)勵(lì)。

以上就是整個(gè)算法了,并不是很難的,下面來(lái)看個(gè)一段人肉算法操作,讓你徹底明白這個(gè)算法。

人肉算法步驟

首先將Q初始化一個(gè)全為0的矩陣,Q是我們目標(biāo)矩陣,我們希望能夠把這個(gè)矩陣填滿

然后初始化我們的R矩陣,假設(shè)這個(gè)值我們都是知道的,如下圖所示

現(xiàn)在,假設(shè)我們的初始位置是state1,首先檢查一下我們的R矩陣,在R矩陣中發(fā)現(xiàn)從state1可以到2個(gè)位置:state3、state5,我們隨機(jī)選擇一個(gè)方向,比如我們現(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

來(lái)計(jì)算出Q(1,5), 因?yàn)镼矩陣是初始化為0,所以 Q(5,1), Q(5,4),Q(5,5)都是0,所以Q(1,5)的值為100,現(xiàn)在5變成了當(dāng)前狀態(tài),因?yàn)?已經(jīng)是最終狀態(tài)了,所以,這個(gè)場(chǎng)景就結(jié)束鳥(niǎo),Q矩陣變成如下

然后我們?cè)匐S機(jī)的選擇一個(gè)狀態(tài),比如現(xiàn)在選了狀態(tài)3為我們的初始狀態(tài),好啦,來(lái)看我們R矩陣;有3個(gè)可能性的1、2、4我們隨機(jī)的選擇1,繼續(xù)用公式計(jì)算:

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

然后,更新矩陣,矩陣變成了這個(gè)樣子

我們的當(dāng)前狀態(tài)變成了1,1并不是最終狀態(tài),所以算法還是要往下執(zhí)行,此時(shí),觀察R矩陣,1有1->3, 1->5兩個(gè)選擇,子這里我們選擇 1->5這個(gè)action有著較高回報(bào),所以我們選擇了1->5, 重新計(jì)算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

為什么要重新計(jì)算呢?因?yàn)槟承┲悼赡軙?huì)發(fā)生變化,計(jì)算完后更新矩陣

因?yàn)?已經(jīng)是最終狀態(tài)了,所以結(jié)束我們本次場(chǎng)景迭代。

經(jīng)過(guò)循環(huán)迭代,我們得出了最終結(jié)果,是這個(gè)樣子的

經(jīng)過(guò)正則化處理,矩陣最終會(huì)變成這個(gè)樣子

強(qiáng)化學(xué)習(xí)到此結(jié)束。我們的機(jī)器人自動(dòng)學(xué)習(xí)到了最優(yōu)的路徑,就是按照最大獎(jiǎng)勵(lì)值的路徑就可以啦

如圖紅線所示,代表了各個(gè)點(diǎn)到達(dá)終點(diǎn)的最優(yōu)路徑

這是一個(gè)級(jí)簡(jiǎn)的算法,隱藏了很多細(xì)節(jié),出去吹NB是夠了,實(shí)踐上實(shí)現(xiàn)起來(lái)還是有許多問(wèn)題的。

下面就是細(xì)節(jié)代碼了,對(duì)實(shí)現(xiàn)剛興趣的繼續(xù)往下看。

我們之前說(shuō)了,選擇動(dòng)作的依據(jù)是“選擇一個(gè)最大可能性的action”,那么這個(gè)動(dòng)作要怎么選呢?

我們選擇最大收益的那個(gè)值,比如在R矩陣中,總是選擇值最大的那個(gè)

算法我們可以通過(guò)代碼來(lái)表示就是這樣

大家想一下這樣是否會(huì)存在問(wèn)題呢?當(dāng)然有,如果有幾個(gè)最大值怎么處理呢?,如果有幾個(gè)最大值的話我們就隨機(jī)的取一個(gè)唄

是不是這樣就可以了呢?大家想一下,萬(wàn)一在當(dāng)前動(dòng)作收益很小,小收益到達(dá)的狀態(tài)的后續(xù)action可能會(huì)更大,所以,我們不能直接選取最大的收益,而是需要使用一個(gè)新的技術(shù)來(lái)探索,在這里,我們使用了epsilon,首先我們用產(chǎn)生一個(gè)隨機(jī)值,如果這個(gè)隨機(jī)值小于epsilon,那么下一個(gè)action會(huì)是隨機(jī)動(dòng)作,否則采用組大值,代碼如下

但實(shí)際上這種做法還是有問(wèn)題的,問(wèn)題是即使我們已經(jīng)學(xué)習(xí)完畢了,已經(jīng)知道了最優(yōu)解,當(dāng)我們選擇一個(gè)動(dòng)作時(shí),它還是會(huì)繼續(xù)采取隨機(jī)的動(dòng)作。有許多方法可以克服這個(gè),比較有名稱之為mouse learns: 沒(méi)循環(huán)一次就減少epsilon的值,這樣隨著學(xué)習(xí)的進(jìn)行,隨機(jī)越來(lái)越不容易觸發(fā),從而減少隨機(jī)對(duì)系統(tǒng)的影響,常用的減少方法有以下幾種,大家可以根據(jù)情況選用

(本文完)

作者:方老司

鏈接:http://www.itdecent.cn/p/cfab6ff434cd

來(lái)源:簡(jiǎn)書(shū)

簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容