集智導(dǎo)讀:
本文會為大家展示機(jī)器學(xué)習(xí)專家 Mike Shi 如何用 50 行 Python 代碼創(chuàng)建一個(gè) AI,使用增強(qiáng)學(xué)習(xí)技術(shù),玩耍一個(gè)保持桿子平衡的小游戲。所用環(huán)境為標(biāo)準(zhǔn)的 OpenAI Gym,只使用 Numpy 來創(chuàng)建 agent。
各位看官好,我(作者 Mike Shi——譯者注)將在本文教大家如何用 50 行 Python 代碼,教會 AI 玩一個(gè)簡單的平衡游戲。我們會用到標(biāo)準(zhǔn)的 OpenAI Gym 作為測試環(huán)境,僅用 Numpy 創(chuàng)建我們的 AI,別的不用。
這個(gè)小游戲就是經(jīng)典的 Cart Pole 任務(wù),它是 OpenAI Gym 中一個(gè)經(jīng)典的傳統(tǒng)增強(qiáng)學(xué)習(xí)任務(wù)。游戲玩法如下方動圖所示,就是盡力保持這根桿子始終豎直向上。桿子由于重力原因,會出現(xiàn)傾斜,到了一定程度就會倒下,AI 的任務(wù)就是在此時(shí)向左或向右移動桿子,不讓它倒下。這就跟我們在手指尖上樹立一支鉛筆玩“金雞獨(dú)立”一樣,只不過我們這里是個(gè)一維的簡單游戲(但是還是很有挑戰(zhàn)性的)。
你可能好奇最終實(shí)現(xiàn)怎樣的結(jié)果,可以在repl.it 上查看 demo:
https:// repl.it/@MikeShi42/Cart Pole

增強(qiáng)學(xué)習(xí)速覽
如果這是你第一次接觸機(jī)器學(xué)習(xí)或增強(qiáng)學(xué)習(xí),別擔(dān)心,我下面介紹一些基礎(chǔ)知識,這樣你就可以了解本文使用的術(shù)語了:)。如果已經(jīng)熟悉了,大可跳過這部分,直接看看編寫 AI 的部分。
增強(qiáng)學(xué)習(xí)(RL)是一個(gè)研究領(lǐng)域:教 agent(我們的算法/機(jī)器)執(zhí)行某些任務(wù)/動作,但明確告訴它該怎樣做。把它想象成一個(gè)嬰兒,以隨機(jī)的方式伸腿,如果寶寶偶然間走運(yùn)站立起來,我們會給它一個(gè)糖果作為獎勵。同樣,Agent 的目標(biāo)就是在其生命周期內(nèi)得到最多的獎勵,而且我們會根據(jù)是否和要完成的任務(wù)相符來決定獎勵的類型。對于嬰兒站立的例子,站立時(shí)獎勵 1,否則為0。
增強(qiáng)學(xué)習(xí) agent 的一個(gè)著名例子是 AlphaGo,其中的 agent 已經(jīng)學(xué)會了如何玩圍棋以最大化其獎勵(贏得游戲)。在本教程中,我們將創(chuàng)建一個(gè) agent,或者說 AI,可以向左或向右移動小車,讓桿子保持平衡。
狀態(tài)
狀態(tài)是目前游戲的樣子。我們通常處理游戲的多種數(shù)字表示。在乒乓球比賽中,它可能是每個(gè)球拍的垂直位置和 x,y 坐標(biāo)和球的速度。在我們這個(gè)游戲中,我們的狀態(tài)由 4 個(gè)數(shù)字組成:底部小車的位置,小車的速度,桿的位置(以角度表示)和桿的角速度。這 4 個(gè)數(shù)字都是給定的數(shù)組(或向量)。這個(gè)很重要,理解狀態(tài)是一個(gè)數(shù)字?jǐn)?shù)組意味著我們可以對它進(jìn)行一些數(shù)學(xué)運(yùn)算來決定我們根據(jù)狀態(tài)采取什么行動。
新聞熱點(diǎn)
疑難解答
圖片精選