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