強化學習實戰(zhàn)之QLearning實現(xiàn)滑動桿小游戲
嘿嘿!本篇也是學姐粉絲的投稿!“上次的征稿活動”還在繼續(xù)!投稿就會有獎品的!真不是學姐偷懶用粉絲的投稿發(fā)推文,是他們寫的真的很不錯,迫不及待的想把他們總結(jié)的精華都展現(xiàn)出來給大家!
廢話不多說,今天的學習從玩?zhèn)€游戲(滑動桿CartPole)開始,看下圖。我們的目標是,我們通過向左或向右滑動滑塊來保證桿子始終在滑塊的上方。下圖我設置隨機滑動滑塊,展現(xiàn)出來就是這樣一個效果。

經(jīng)過該篇文章學習后,你能通過強化學習操控滑塊,達到如下的一個效果。

首先需要安裝Gym,即游戲仿真平臺。使用pip install gym,即可完成安裝。需要注意的是,如果使用google colab等在線編程平臺就不能成功彈出可視化圖像。建議本地運行。
CartPole游戲比較有名,大多數(shù)強化學習入門教材都會使用這個例子。
文章后面有完整源代碼。
01?具體操作步驟
1.1 gym使用
如上代碼,?

看到這里不難發(fā)現(xiàn),該游戲的行為(action)只有向左或向右移動滑塊。也就是說,想要玩好這個游戲。我們需要有一個策略決定如何在不同的環(huán)境下,來向左或向右移動滑塊。
什么是不同的環(huán)境?在該游戲的背景下,滑塊的位置,滑塊的速度,滑塊的桿的角度以及滑塊桿的角速度,這四點確定,是不是我們就可以說環(huán)境確定下來了。OK,先不管這么多,看結(jié)果輸出。
結(jié)果:

對了,還有一個很重要的沒講。如下代碼env.step將返回四個值。
obs是一個數(shù)組,包含滑塊的位置,滑塊的速度,滑塊的桿的角度以及滑塊桿的角速度。
rew即reward,強化學習里面的概念。如果游戲始終進行,其值就為1;game over 該值為0。
done:要不怎么說這是游戲仿真器呢,如果滑塊上的桿不在滑塊上方,done為True,否則為False。當done為True是,也就意味著游戲結(jié)束??慈缦麓a,你的感觸會更深。
info:沒什么用。

結(jié)果:

1.2 QLearning介紹
就這個游戲進行展開:
問題定義:
玩好這個游戲,我們可以換一種具體的表述,即在環(huán)境觀察值 observation確定的情況下,如何對行為 action進行預測。
更具體點就是,給定滑塊的位置,滑塊的速度,滑塊的桿的角度以及滑塊桿的角速度,我們?nèi)绾闻袛嘞乱徊降男袨椋椿瑝K向左還是向右滑動。
這樣太斷然了,更合理的定義應該是:給定環(huán)境觀測值以及相應地行為標識,我們輸出對應行為的概率。

問題分析:
我們自然想到使用字典來維護這個映射。
字典的keys由環(huán)境觀察值的四元組+行為的標識組成(行為值為0向左,1向右)構(gòu)成。
values由一個數(shù)值構(gòu)成,代表進行對應行為概率(置信度)。
如此,只要我們成功維護該字典,玩游戲時,就能通過字典的key(環(huán)境觀察值及行為標識),找到其value,與環(huán)境觀察值相同的其他行為標識value值進行比較,進而選擇可能性更大的走法。
Qlearning中的Q,其實就是我們這里的字典
字典如何維護?
剛玩游戲時,字典Q是空的,代表我們沒有任何經(jīng)驗。引入一個概念,利用與探索(即經(jīng)驗與試錯)。在讓模型玩游戲的過程中,以一定的概率(?)來進行利用與探索。
利用:代表使用當前已有的Q字典進行決策,按照決策行動后,還沒有game over的話,那就給這個決策獎勵,即相應的行為probability增加。
探索:代表隨機進行決策,同樣的,按照決策行動后,還沒有game over的話,那就也給這個決策獎勵。
Tips:利用過程剛開始為字典空,那就意味著向左向右的概率相同,也就相當于探索。
那如何通過具體的獎勵(reward)來更新行動的概率值呢?QLearning這樣做,如下。
QLearning公式:

其中s就是當前環(huán)境觀察值,a就是行為標識,α就是學習率,r就是reward獎勵,s′與a′就是決策后的環(huán)境與行為,γ是對未來reward的衰減值。為什么如上公式有效,全網(wǎng)有很多理論證明,我這里就不細說了。
不斷玩游戲,Q字典就不斷得到完善。如上表示可能還不是很清晰,具體細節(jié)可看如下代碼,也很簡單。
1.3 生成Q表
其實講到現(xiàn)在還有個問題沒有解決。你想啊,我們的環(huán)境觀察值雖然是四元組,但是其中每一個值都是連續(xù)的。這不就代表游戲中有無數(shù)多種環(huán)境嗎?那這個字典還怎么維護的了。我們需要將其離散化。使用如下函數(shù)即可。
訓練生成Q表:
如上代碼進行了1萬次的游戲。Q表已經(jīng)維護的比較好了。接下來我們就要利用Q表信息,完成可視化。
1.4 Q表決策
結(jié)果:

02?源代碼
03?總結(jié)
關于QLearning中的超參數(shù)設置有講究。不同的超參數(shù)得到的實驗結(jié)果相差很大,如果是做一個陌生的課題,調(diào)參是很有必要的。
QLearning算法,像這種環(huán)境簡單,決策也簡單的模型,尚可駕馭。但象棋,圍棋甚至王者榮耀這種決策游戲,環(huán)境狀態(tài)可以多到比天上的星星還多,恐怕計算機內(nèi)存再大也無法存儲下Q表。這時候神經(jīng)網(wǎng)絡就來了,這兩者的結(jié)合就是天造地設。
神經(jīng)網(wǎng)絡能夠識別模式,也就是說環(huán)境狀態(tài)雖然多,但只要讓網(wǎng)絡學習到了環(huán)境狀態(tài)到?jīng)Q策的映射,我們無需維護Q表,使用網(wǎng)絡直接就能生成Q值。
參考資料:
https://mofanpy.com/tutorials/machine-learning/reinforcement-learning/intro-q-learning/
https://github.com/microsoft/ML-For-Beginners/tree/main/8-Reinforcement/1-QLearning
如有雷同文章,那就是學姐粉絲寫的【狗頭】
如果你有什么想法,可以來學姐的交流群,交流一下!關注【學姐帶你玩AI】公眾號后臺回復“加群”即可!
