成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網站建設、網站重做改版、碭山網站定制設計、自適應品牌網站建設、H5建站、商城網站建設、集團公司官網建設、外貿營銷網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為碭山等各大城市提供網站開發(fā)制作服務。
集智導讀:
本文會為大家展示機器學習專家 Mike Shi 如何用 50 行 Python 代碼創(chuàng)建一個 AI,使用增強學習技術,玩耍一個保持桿子平衡的小游戲。所用環(huán)境為標準的 OpenAI Gym,只使用 Numpy 來創(chuàng)建 agent。
各位看官好,我(作者 Mike Shi——譯者注)將在本文教大家如何用 50 行 Python 代碼,教會 AI 玩一個簡單的平衡游戲。我們會用到標準的 OpenAI Gym 作為測試環(huán)境,僅用 Numpy 創(chuàng)建我們的 AI,別的不用。
這個小游戲就是經典的 Cart Pole 任務,它是 OpenAI Gym 中一個經典的傳統(tǒng)增強學習任務。游戲玩法如下方動圖所示,就是盡力保持這根桿子始終豎直向上。桿子由于重力原因,會出現(xiàn)傾斜,到了一定程度就會倒下,AI 的任務就是在此時向左或向右移動桿子,不讓它倒下。這就跟我們在手指尖上樹立一支鉛筆玩“金雞獨立”一樣,只不過我們這里是個一維的簡單游戲(但是還是很有挑戰(zhàn)性的)。
你可能好奇最終實現(xiàn)怎樣的結果,可以在repl.it 上查看 demo:
https:// repl.it/@MikeShi42/Cart Pole
增強學習速覽
如果這是你第一次接觸機器學習或增強學習,別擔心,我下面介紹一些基礎知識,這樣你就可以了解本文使用的術語了:)。如果已經熟悉了,大可跳過這部分,直接看看編寫 AI 的部分。
增強學習(RL)是一個研究領域:教 agent(我們的算法/機器)執(zhí)行某些任務/動作,但明確告訴它該怎樣做。把它想象成一個嬰兒,以隨機的方式伸腿,如果寶寶偶然間走運站立起來,我們會給它一個糖果作為獎勵。同樣,Agent 的目標就是在其生命周期內得到最多的獎勵,而且我們會根據是否和要完成的任務相符來決定獎勵的類型。對于嬰兒站立的例子,站立時獎勵 1,否則為0。
增強學習 agent 的一個著名例子是 AlphaGo,其中的 agent 已經學會了如何玩圍棋以大化其獎勵(贏得游戲)。在本教程中,我們將創(chuàng)建一個 agent,或者說 AI,可以向左或向右移動小車,讓桿子保持平衡。
狀態(tài)
狀態(tài)是目前游戲的樣子。我們通常處理游戲的多種數字表示。在乒乓球比賽中,它可能是每個球拍的垂直位置和 x,y 坐標和球的速度。在我們這個游戲中,我們的狀態(tài)由 4 個數字組成:底部小車的位置,小車的速度,桿的位置(以角度表示)和桿的角速度。這 4 個數字都是給定的數組(或向量)。這個很重要,理解狀態(tài)是一個數字數組意味著我們可以對它進行一些數學運算來決定我們根據狀態(tài)采取什么行動。
策略
策略是一種函數,其輸入是游戲的狀態(tài)(例如棋盤的位置,或小車和桿的位置),輸出 agent應該在該位置采取的動作(例如,將小車向左邊移動)。在 agent 采取我們選擇的操作后,游戲將使用下一個狀態(tài)進行更新,我們會再次將其納入策略以做出決策。這種情況一直持續(xù)到游戲結束。策略非常重要,也是我們一直追求的,因為代表了 agent 背后的決策能力。
點積
兩個數組(向量)之間的點積簡單地將第一個數組的每個元素乘以第二個數組的對應元素,并將它們全部加在一起。假設我們想找到數組 A 和 B 的點積,只需計算是 A [0] * B [0] + A [1] * B [1] ......我們將使用這種運算將狀態(tài)(一個數組)乘以另一個數組(我們的策略)。
創(chuàng)建我們的策略
為了完成這個推車平衡游戲,我們希望讓我們的 agent(或者說 AI)學習策略贏得比賽或獲得大獎勵。
對于我們今天要開發(fā)的 agent,我們將策略表示為 4 個數字的數組,分別代表狀態(tài)的各個部分的“重要性”(小車位置,桿子的位置等)然后我們會計算狀態(tài)和策略數組的點積,得到一個數字。根據數字是正數還是負數,我們將向左或向右推動小車。
如果這聽起來有點抽象,那么我們選擇一個具體的例子,看看會發(fā)生什么。
假設小車在游戲中居中并且靜止,桿子向右傾斜且可能倒向右邊。它看起來像這樣:
相關狀態(tài)可能如下所示:
那么狀態(tài)數組將是 [0,0,0.2,0.05]。
從直覺上,我們要把小車推向右邊,將支桿拉直。我從訓練中得到了一個很好的策略,其策略數據如下:[ - 0.116,0.332,0.207 0.352]。我們快速計算一下,看看該策略會輸出怎樣的動作。
這里,我們將狀態(tài)數組 [0,0,0.2,0.05] 和上述策略數組結合計算點積。如果數字是正數,我們將車推向右邊,如果數字是負數,我們向左推。
結果為正,意味著策略會向右推動小車,符合我們的預期。
現(xiàn)在比較明顯了,我們需要 4 個像上面這樣的神奇數字來幫我們解決問題。那么我們該如何獲得這些數字?如果我們只是隨機挑選它們會怎樣?AI 的效果會怎樣?我們來一起看代碼!
啟動你的編輯器!
首先在repl.it 上打開一個 Python 實例。Repl.it 能讓我們快速啟動大量不同編程環(huán)境的云實例,并在任何地方都能訪問的強大云 IDE 中編輯代碼!
安裝軟件包
我們首先安裝這個項目所需的兩個軟件包:numpy 幫助進行數值計算;OpenAI Gym 作為我們代理的模擬器。
只需在編輯器左側的包搜索工具中輸入 gym 和 numpy,然后單擊加號按鈕即可安裝包。
創(chuàng)建基礎框架
我們首先將我們剛剛安裝的兩個依賴項導入到main.py 腳本中,并設置一個新的 gym 環(huán)境:
import gymimport numpy as npenv = gym.make('CartPole-v1')
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。