增强学习之入门 这个很明白
本文首發(fā)于集智:https://jizhi.im/blog/post/intro_q_learning
“機(jī)器學(xué)習(xí)”的話題一直很火熱,相關(guān)的概念也是層出不窮,為了不落后于時代,我們都還是要學(xué)習(xí)一個。
第一次聽到“增強(qiáng)學(xué)習(xí)”(Reinforcement Learning)的時候,我以為只是在“深度學(xué)習(xí)”的基礎(chǔ)上又玩兒的新花樣。后來稍微了解了一下,發(fā)現(xiàn)其實是完全不同的概念,當(dāng)然它們并非互斥,反而可以組合,于是又有了“深度增強(qiáng)學(xué)習(xí)”(Deep Reinforcement Learning)。
這讓人不由得感慨起名的重要性,“增強(qiáng)”這個名稱就給人感覺是在蹭“深度”的熱點(diǎn),一個下五洋,一個上九天。而“卷積神經(jīng)網(wǎng)絡(luò)”(Convolutional Neural Network)這個名字就好的多,其實這里的“卷積”跟平時說的那個卷積并不是一回事,但是就很有科技感、Geek范。更好的還有“流形學(xué)習(xí)”(Manifold Learning),洋溢著古典人文主義氣息。
天地有正氣,雜然賦流形。——文天祥《正氣歌》
軍師,就是掌握了決策藝術(shù)的人。
增強(qiáng)學(xué)習(xí)是關(guān)于決策優(yōu)化的科學(xué),其背后正是生物趨利避害的本能。
“熊瞎子掰苞米”就是一個典型的決策過程。因為胳肢窩只能夾一個苞米,所以對每個苞米,熊瞎子都要做一個決策——掰,還是不掰?這是個問題。
在俗話故事里,熊瞎子并不知道自己掰一個丟一個,所以他的決策就是“掰掰掰”(Buy, Buy, Buy),最后結(jié)果就是拿了一個很小的苞米,后悔地想要剁手。而聰明的智人卻選擇“只掰比自己胳肢窩里大的”,那么理想狀況下,就是得到了最大的。
熊瞎子不高興
這里,熊瞎子或智人表示Agent,也就是決策過程里的行為主體。玉米地就是Environment,而現(xiàn)在胳肢窩里的苞米大小則是State,而眼前一個等待采摘的苞米,是熊瞎子對環(huán)境的Obervation。掰還是不掰?無論哪一種,都是對環(huán)境做出的Action。
當(dāng)你走出玉米地時,最終拿到的苞米,才是自己的,這是你的Reward。“掰掰掰”,“只掰大的”或是“只掰貴的,不掰貴對的”——這些都是Policy。以上就是增強(qiáng)學(xué)習(xí)里的幾個核心基本概念。
增強(qiáng)學(xué)習(xí)所解決的問題,介于“有監(jiān)督”和“無監(jiān)督”之間。決策是有目標(biāo)的,或是“最大的苞米”,或是“贏下這盤棋”,這就與聚類任務(wù)不同。但是這個“目標(biāo)”又不是固定明確的,最終獲勝的棋路,就一定是最佳的嗎?未必,不像圖片分類或是價格預(yù)測,能評判個準(zhǔn)確率。
如果要用知乎的方式來描述增強(qiáng)學(xué)習(xí),應(yīng)該是“如何評價”。比如一手“炮五平二”,是好是壞呢?不是立即就能得到反饋的,而可能是在終盤才能體現(xiàn)出來,這就是Reward的滯后性。所以做增強(qiáng)學(xué)習(xí),心里應(yīng)該時刻裝著“婆婆婆婆這是真的嗎?我不信,等反轉(zhuǎn)!”
你從昏迷中醒來,發(fā)現(xiàn)自己被鎖著,面前一個電視自動打開了。畫面上有一個眼神和善的玩偶,用Kaiser一樣的山東口音說"I wanna to play a game."
Game的規(guī)則是這樣的,一個4x4的方格代表迷宮。你是奪寶奇兵、摸金校尉、古墓麗影,從左上角出發(fā),直到右下角挖寶。但是這個迷宮里面不太平,有很多陷阱,踩上就是一個“大俠請重新來過”。
總有一款適合你
這里的方格,就是Environment。雖然對于電腦前的我們,似乎很容易,但是對Agent來說,他尚且對力量一無所知的。不過,只要Agent知道生命的可貴(Reward),就可以訓(xùn)練出一個Policy。
游戲的目的是讓分?jǐn)?shù)最大化,比如踩到陷阱了,-10。拿到寶貝了,+10。同樣是最終拿到了寶貝,我們希望的是最短路徑,那么如果走了多余的路,就要?-1。
Q-Learning的目的就是學(xué)習(xí)特定State下、特定Action的價值。Q并不是某個本質(zhì)騎士取的字母,而是表示Quality。
Q-Learning的方法是建立一個表,以state為行、action為列。迷宮共有16個格,每個格子都有5個方向,所以Q-table就是16x5的一個表,對應(yīng)總共80種可能的決策。
首先以0填充Q-table進(jìn)行初始化,然后觀察每一個決策帶來的回饋,再更新Q-table。更新的依據(jù)是Bellman Equation:
- s: 當(dāng)前狀態(tài)state
- a: 從當(dāng)前狀態(tài)下,采取的行動action
- s': 今次行動所產(chǎn)生的新一輪state
- a': 次回action
- r: 本次行動的獎勵reward
- \gamma : 折扣因數(shù),表示犧牲當(dāng)前收益,換區(qū)長遠(yuǎn)收益的程度。
那么最關(guān)鍵的問題是:如何計算Q?
Agent所做的每一輪決策(即一盤游戲),稱為一個episode,跟美劇里的“集”單位一樣。每一次行動,都會更新Q-table。為了簡化過程方便理解,我們換一個更小的迷宮:
初始Q-table如下(行:state,列:action):
UDLR——上下左右;N——靜靜地看著你。
相應(yīng)的Q-table如下(E表示不可能的行動):
但是這個Q-table是我們希望得出或逼近的,在游戲開始時,Agent所知的Q-table還是一個全0的矩陣。
算法的基本流程:
比如,從state-1開始,可能的action有D, R, N。然后我們選擇了D,到了state-3,這個state踩中了陷阱,所以-10。
在state-3又有三種可能的action:U, R, N。 又因為此時Q-table還沒有經(jīng)過更新,所以當(dāng)然就是0。假設(shè)折扣因數(shù),則有:
第一次更新Q-table的結(jié)果是:
現(xiàn)在,我們來到了state-3,如果選擇R,就到達(dá)了state-4,+10。再次更新Q-table為:
以上就是一個episode。重復(fù)這個過程,就像中學(xué)生物書里,用電擊訓(xùn)練蚯蚓,去訓(xùn)練我們的Agent。經(jīng)過不斷的練習(xí),Agent一定會變強(qiáng)(當(dāng)然,也可能變禿)。
實踐環(huán)節(jié):
以下代碼可以在集智的https://jizhi.im/blog/post/intro_q_learning中的在線代碼運(yùn)行器中直接運(yùn)行和修改,不用再復(fù)制代碼到你的pycharm中了。
[python]?view plaincopy
至此,我們已經(jīng)完成了一個最簡單的增強(qiáng)學(xué)習(xí)應(yīng)用,沒有任何跟神經(jīng)網(wǎng)絡(luò)相關(guān)的概念。那么前面提到的“深度增強(qiáng)學(xué)習(xí)”又是個什么鬼呢?其實就是把神經(jīng)網(wǎng)絡(luò)用在Q-Learning上,后文會詳細(xì)探討。
總結(jié)
以上是生活随笔為你收集整理的增强学习之入门 这个很明白的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记:ActiveMQ + Spri
- 下一篇: tcpdump命令无法使用