用TensorFlow構(gòu)建你的第一個(gè)游戲AI入門教程
本文通過(guò)一種簡(jiǎn)單的 Catch 游戲介紹了深度強(qiáng)化學(xué)習(xí)的基本原理,并給出了完整的以 Keras 為前端的 TensorFlow 代碼實(shí)現(xiàn),是入門深度強(qiáng)化學(xué)習(xí)的不錯(cuò)選擇。
去年,DeepMind 的 AlphaGo 以 4-1 的比分打敗了世界圍棋冠軍李世乭。超過(guò) 2 億的觀眾就這樣看著強(qiáng)化學(xué)習(xí)(reinforce learning)走上了世界舞臺(tái)。幾年前,DeepMind 制作了一個(gè)可以玩 Atari 游戲的機(jī)器人,引發(fā)軒然大波。此后這個(gè)公司很快被谷歌收購(gòu)。
很多研究者相信,強(qiáng)化學(xué)習(xí)是我們創(chuàng)造通用人工智能(ArTIficial General Intelligence)的最佳手段。這是一個(gè)令人興奮的領(lǐng)域,有著許多未解決的挑戰(zhàn)和巨大的潛能。
強(qiáng)化學(xué)習(xí)起初看似非常有挑戰(zhàn)性,但其實(shí)要入門并不困難。在這篇文章中,我們將創(chuàng)造一個(gè)基于 Keras 的簡(jiǎn)單機(jī)器人,使它能玩 Catch 游戲。
Catch 游戲
原始的 Catch 游戲界面
Catch 是一個(gè)非常簡(jiǎn)單的街機(jī)游戲,你可能在孩提時(shí)代玩過(guò)它。游戲規(guī)則如下:水果從屏幕的頂部落下,玩家必須用一個(gè)籃子抓住它們;每抓住一個(gè)水果,玩家得一分;每漏掉一個(gè)水果,玩家會(huì)被扣除一分。這里的目標(biāo)是讓電腦自己玩 Catch 游戲。不過(guò),我們不會(huì)使用這么漂亮的游戲界面。相反,我們會(huì)使用一個(gè)簡(jiǎn)單的游戲版本來(lái)簡(jiǎn)化任務(wù):
簡(jiǎn)化的 Catch 游戲界面
玩 Catch 游戲時(shí),玩家要決定三種可能的行為。玩家可以將籃子左移、右移或保持不動(dòng)。這個(gè)決定取決于游戲的當(dāng)前狀態(tài)。也就是說(shuō),取決于果子掉落的位置和籃子的位置。我們的目標(biāo)是創(chuàng)造這樣一個(gè)模型:它能在給定游戲屏幕內(nèi)容的情況下,選擇導(dǎo)致得分最高的動(dòng)作。
這個(gè)任務(wù)可以被看做一個(gè)簡(jiǎn)單的分類問(wèn)題。我們可以讓游戲?qū)<叶啻瓮孢@個(gè)游戲,并記錄他們的行為。然后,可以通過(guò)選擇類似于游戲?qū)<业摹刚_」動(dòng)作來(lái)訓(xùn)練模型。
但這實(shí)際上并不是人類學(xué)習(xí)的方式。人類可以在無(wú)指導(dǎo)的情況下,自學(xué)像 Catch 這樣的游戲。這非常有用。想象一下,你如果每次想學(xué)習(xí)像 Catch 一樣簡(jiǎn)單的東西,就必須雇傭一批專家玩這個(gè)游戲上千次!這必然非常昂貴而緩慢。
而在強(qiáng)化學(xué)習(xí)中,模型不會(huì)根據(jù)標(biāo)記的數(shù)據(jù)訓(xùn)練,而是通過(guò)以往的經(jīng)歷。
深度強(qiáng)化學(xué)習(xí)
強(qiáng)化學(xué)習(xí)受行為心理學(xué)啟發(fā)。我們并不為模型提供「正確的」行為,而是給予獎(jiǎng)勵(lì)和懲罰。該模型接受關(guān)于當(dāng)前環(huán)境狀態(tài)的信息(例如計(jì)算機(jī)游戲屏幕)。然后,它將輸出一個(gè)動(dòng)作,就像游戲手柄一樣。環(huán)境將對(duì)這個(gè)動(dòng)作做出回應(yīng),并提供下一個(gè)狀態(tài)和獎(jiǎng)懲行為。
據(jù)此,模型學(xué)習(xí)并尋找最大化獎(jiǎng)勵(lì)的行為。
實(shí)際上,有很多方式能夠做到這一點(diǎn)。下面,讓我們了解一下 Q-Learning。利用 Q-Learning 訓(xùn)練計(jì)算機(jī)玩 Atari 游戲的時(shí)候,Q-Learning 曾引起了轟動(dòng)。現(xiàn)在,Q-Learning 依然是一個(gè)有重大意義的概念。大多數(shù)現(xiàn)代的強(qiáng)化學(xué)習(xí)算法,都是 Q-Learning 的一些改進(jìn)。
理解 Q-Learning