Kuidas luua oma AlphaZero AI Pythoni ja Kerase abil?

Õpetage masin, et õppida Connect4 strateegiat isemängimise ja sügava õppimise kaudu

Selles artiklis püüan käsitleda kolme asja:

  1. Kaks põhjust, miks AlphaZero on tehisintellekti jaoks tohutu samm edasi
  2. Kuidas luua AlfaZero metoodika koopia, et mängida mängu Connect4
  3. Kuidas saate koodi kohandada teiste mängude ühendamiseks

AlphaGo → AlphaGo Zero → AlphaZero

Deepmindi AlphaGo võitis 2016. aasta märtsis sarjas, mida vaatas üle 200 miljoni inimese, 18-kordne maailmameister Go-mängija Lee Sedol 4–1. Masin oli õppinud ülimugava strateegia Go mängimiseks, mis oli varem võimatu või vähemalt kümmekond aastat eemal teostatav.

AlphaGo ja Lee Sedoli 3. matš

See iseenesest oli tähelepanuväärne saavutus. DeepMind tegi aga 18. oktoobril 2017 hiiglasliku hüppe edasi.

Raamatus „Mängu õppimine ilma inimeste teadmisteta” tutvustati uut algoritmi varianti AlphaGo Zero, mis oli alistanud AlphaGo 100–0. Uskumatult oli ta seda teinud õppides ainult iseenda kaudu, alustades tabula rasa (tühi olek) ja leides järk-järgult strateegiaid, mis lööksid varasematest kehastustest üle iseenda. Enam polnud vaja ülitäpse AI loomiseks vajalike ekspertide mängude andmebaasi.

Graafik teemast „Mängu õppimine ilma teadmisteta”

Ainult 48 päeva hiljem, 5. detsembril 2017, avaldas DeepMind veel ühe paberi "Male ja shogi valdamine iseenda poolt koos üldise tugevdamise õppe algoritmiga", mis näitab, kuidas AlphaGo Zero-d saab kohandada maailmameistrite programmide StockFish ja Elmo maletõrjeks. ja shogi. Kogu õppeprotsess alates mängude esmakordsest näitamisest kuni maailma parimaks arvutiprogrammiks saamiseni oli kestnud vähem kui 24 tundi.

Sellega sündis AlphaZero - üldine algoritm millegi kiireks saamiseks, ilma eelteadmisteta inimese ekspertstrateegia kohta.

Selle saavutuse kohta on kaks hämmastavat asja:

1. AlphaZero nõuab sisendina null-ekspertteadmisi

Seda ei saa üle tähtsustada, kui oluline see on. See tähendab, et AlphaGo Zero aluseks olevat metoodikat saab igasuguse mängu puhul kasutada täiusliku teabega (mängu olek on mõlemale mängijale kogu aeg teada), kuna mängureeglitest kaugemale ei nõuta eelnevat asjatundlikkust.

Nii oli DeepMindil võimalik male- ja shogipaberid avaldada alles 48 päeva pärast AlphaGo Zero originaalartiklit. Sõna otseses mõttes oli muutmiseks vaja vaid sisendfaili, mis kirjeldab mängu mehaanikat ning näpistama närvivõrgu ja Monte Carlo puuotsingute hüperparameetreid.

2. Algoritm on naeruväärselt elegantne

Kui AlphaZero kasutaks ülikomplekseid algoritme, millest mõistis vaid käputäis inimesi maailmas, oleks see ikkagi uskumatu saavutus. Erakordseks teeb selle, et paljud paberil olevad ideed on tegelikult palju vähem keerulised kui eelmised versioonid. Selle keskmes on järgmine õppimiseks mõeldud kaunilt lihtne mantra:

Mängige vaimselt võimalike tulevikustsenaariumide kaudu, eelistades paljutõotavaid teid, arvestades ka seda, kuidas teised teie tegevusele kõige tõenäolisemalt reageerivad, ja jätkake tundmatu uurimist.
Pärast harjumatusse seisundisse jõudmist hinnake, kui soodsaks peate oma positsiooni, ja korrigeerige skoor tagasi varasemate positsioonide kaudu vaimsel teel, mis selleni viis.
Kui olete mõelnud tulevikuvõimaluste üle, võtke kasutusele toiming, mida olete kõige rohkem uurinud.
Mängu lõpus minge tagasi ja hinnake, kus te hindasite tulevaste positsioonide väärtust valesti, ja värskendage vastavalt oma arusaamu.

Kas see ei kõla palju, näiteks kuidas õppida mängude mängimist? Kui mängite halba käiku, siis selle põhjuseks oli see, et te hindasite valesti saadud positsioonide tuleviku väärtust või arvasite valesti, et teie vastane mängib teatud käiku, nii et te ei mõelnud seda võimalust uurida. Need on täpselt kaks mänguaspekti, mida AlphaZero on õppinud õppima.

Kuidas luua oma AlphaZero

Esiteks vaadake AlphaGo Zero petulehte, et saada kõrgetasemeline arusaam AlphaGo Zero toimimisest. Tasub seda mainida, kui kõnnime koodi igast osast läbi. Siit leiate ka suurepärase artikli, mis selgitab üksikasjalikumalt, kuidas AlphaZero töötab.

Kood

Kloonige see Giti hoidla, mis sisaldab koodi, millele viitan.

Õppimisprotsessi alustamiseks käivitage Jupyteri sülearvuti run.ipynb kaks ülemist paneeli. Kui see on mälu täitmiseks piisavalt mänguasendeid üles ehitanud, hakkab närvivõrk treenima. Täiendava enesemängu ja treenimise kaudu saab see järk-järgult paremini mängu väärtust ennustada ja järgmisi liigutusi mis tahes positsioonilt teha, tulemuseks on parem otsustamine ja nutikam üldine mäng.

Vaatame nüüd koodi üksikasjalikumalt ja näitame tulemusi, mis näitavad AI tugevnemist aja jooksul.

N.B - see on minu enda arusaam AlphaZero toimimisest, tuginedes ülaltoodud artiklites sisalduvale teabele. Kui mõni alltoodud vigadest on vale, vabandage ja püüan selle parandada!

Ühenda4

Mäng, mida meie algoritm õpib mängima, on Connect4 (või neli järjestikku). Pole just nii keeruline kui Go… kuid mänguasendeid on endiselt 4531 985 219 092.

Ühenda4

Mängureeglid on selged. Mängijad võtavad seda kordamööda, et sisestada mõni värvitükk mis tahes saadaoleva veeru ülaossa. Esimene mängija, kes saab neli oma värvi järjest - võidab vertikaalselt, horisontaalselt või diagonaalselt. Kui kogu ruudustik täidetakse ilma, et neli järjestikku oleks loodud, joonistatakse mäng.

Siin on kokkuvõte võtmefailidest, millest koodipõhi koosneb:

game.py

See fail sisaldab Connect4 mängureegleid.

Igale ruudule omistatakse arv vahemikus 0 kuni 41 järgmiselt:

Connect4 tegevusruudud

Fail game.py annab valitud toimingu korral ühest mänguriigist teise liikumise loogika. Näiteks tühja tahvli ja toimingu 38 korral tagastab takeAction meetod uue mängu oleku, stardimängija tükk on keskveeru allosas.

Saate mängu.py faili asendada mis tahes mängufailiga, mis vastab samale API-le ja algoritm õpib strateegia iseõppimise teel, lähtudes teile antud reeglitest.

run.ipynb

See sisaldab koodi, mis alustab õppeprotsessi. See laadib mängureeglid ja itreerib seejärel läbi algoritmi põhisilmuse, mis koosneb kolmest etapist:

  1. Enesemäng
  2. Neuraalvõrgu ümberõpe
  3. Neuraalvõrgu hindamine

Sellesse ahelasse on kaasatud kaks esindajat: best_player ja current_player.

Best_player sisaldab kõige paremini toimivat närvivõrku ja seda kasutatakse iseenda mälumängude genereerimiseks. Seejärel treenib praegune_mängija nende mälude jaoks oma närvivõrgu ümber ja asetatakse seejärel parima mängija vastu. Kui see võidab, lülitatakse best_playeri sees olev närvivõrk aktiivse_mängija sees oleva närvivõrgu jaoks ümber ja silmus algab uuesti.

agent.py

See sisaldab Agent klassi (mängu mängija). Iga mängija initsialiseerib oma närvivõrgu ja Monte Carlo otsingupuuga.

Simulatsioonimeetod käivitab Monte Carlo puuotsingu protsessi. Täpsemalt, agent liigub puu lehesõlme, hindab sõlme oma närvivõrguga ja täidab seejärel sõlme väärtuse puu kaudu üles.

Toimimismeetod kordab simulatsiooni mitu korda, et mõista, milline praegusest positsioonist liikumine on kõige soodsam. Seejärel naaseb valitud tegevus mängu, et käik sisse viia.

Kordusmeetod koolitab närvivõrku ümber, kasutades eelmiste mängude mälestusi.

mudel.py

Konversioonivõrgu jääkkonstruktsiooni proov Kerase abil

See fail sisaldab klassi Residual_CNN, mis määratleb, kuidas luua närvivõrgu eksemplari.

See kasutab AlphaGoZero paberis närvivõrgu arhitektuuri lühendatud versiooni - s.t konvolutsioonikihti, millele järgneb palju jääkkihte, jagades seejärel väärtuse ja poliitika peaks.

Konvolutsioonifiltrite sügavust ja arvu saab täpsustada konfiguratsioonifailis.

Võrgu ehitamiseks kasutatakse Kerase teeki koos Tensorflow taustaprogrammiga.

Üksikute konvolutsioonifiltrite ja närvivõrgus tihedalt ühendatud kihtide kuvamiseks käivitage sülearvuti run.ipynb sees järgmine:

current_player.model.viewLayers ()
Neuraalvõrgu konvolutsioonifiltrid

MCTS.py

See sisaldab Node, Edge ja MCTS klasse, mis moodustavad Monte Carlo otsingupuu.

MCTS-klass sisaldab varem mainitud meetodeid moveToLeaf ja backFill ning Edge klassi eksemplarid salvestavad statistika iga võimaliku käigu kohta.

config.py

Siin saate määrata algoritmi mõjutavad põhiparameetrid.

Nende muutujate reguleerimine mõjutab selle tööaega, närvivõrgu täpsust ja algoritmi üldist edukust. Ülaltoodud parameetrid tagavad kvaliteetse Connect4-mängija, kuid selle tegemine võtab kaua aega. Algoritmi kiirendamiseks proovige selle asemel järgmisi parameetreid.

funcs.py

Sisaldab funktsioone playMatches ja playMatchesBetweenVersions, mis mängivad kahe agendi omavahelist vastet.

Oma loomingu vastu mängimiseks käivitage järgmine kood (see on ka run.ipynbi märkmikus)

mängude importimängust
alates failidest impordib playMatchesBetweenVersions
impordi puuraidurid lg-na
env = mäng ()
playMatchesBetweenVersions (
env
, 1 # käivitatava versiooni number, kus arvutimängija asub
, -1 # esimese mängija versiooninumber (-1 inimese jaoks)
, 12 # teise mängija versiooninumber (-1 inimesele)
, 10 # kui palju mänge mängida
, lg.logger_tourney # kuhu mäng sisse logida
, 0 # milline mängija läheb esimesena - 0 juhuslikult
)

esialgne.py

Algoritmi käivitamisel salvestatakse kõik mudeli- ja mälifailid käivituskausta juurkataloogi.

Algoritmi hiljem sellest kontrollpunktist taaskäivitamiseks kandke käitamiskaust käsu_arhiiv kausta, lisades käitamisnumbri kausta nimele. Seejärel sisestage käivitusnumber, mudeli versiooninumber ja mäluversiooni number failisse Initise.py, mis vastab vastavate failide asukohale kaustas run_archive. Algoritmi tavapärane käitamine algab siis sellest kontrollpunktist.

mälu.py

Mäluklassi eksemplar salvestab eelmiste mängude mälestused, mida algoritm kasutab praeguse_mängija närvivõrgu ümberõppimiseks.

loss.py

See fail sisaldab kohandatud kadude funktsiooni, mis maskeerib ebaseaduslike käikude ennustused enne üleminekut entroopia ristfunktsiooni kaotamise funktsioonile.

settings.py

Käivituse ja run_archive kaustade asukohad.

puuraidurid.py

Logifailid salvestatakse käivituskausta sees olevasse logi kausta.

Logimise sisselülitamiseks seadke muutujate logger_disabled väärtused selles failis väärtusele Väär.

Logifailide vaatamine aitab teil mõista, kuidas algoritm töötab, ja näha selle mõistust. Näiteks siin on näide failist logger.mcts.

Väljund failist logger.mcts

Samamoodi failist logger.tourney näete hindamisfaasis iga käiguga kaasnevaid tõenäosusi:

Väljund failist logger.tourney

Tulemused

Paari päeva pikkuse koolituse tulemusel saadakse järgmine kaotuste diagramm, võrreldes mini-partii iteratsiooni arvuga:

Kaotus minipartii iteratsiooninumbri vastu

Ülemine rida on viga poliitika peas (MCTS-i liikumise tõenäosuste rist-entroopia tõenäosus närvivõrgu väljundi suhtes). Alumine rida on viga väärtuse peas (mängu tegeliku väärtuse ja väärtuse ennustamise närvivõrgu vahelise ruutkeskmine viga). Keskmine joon on nende kahe keskmine.

On selge, et närvivõrk saab paremini ennustada iga mängu oleku väärtust ja järgmisi tõenäolisi käike. Näitamaks, kuidas see annab tugevama ja tugevama mängu, jooksin 17 mängija vahel liigat, alates närvivõrgu 1. iteratsioonist kuni 49. mänguni. Iga paarimine mängis kaks korda, mõlemal mängijal oli võimalus mängida esimesena.

Siin on viimane edetabel:

On selge, et närvivõrgu hilisemad versioonid on varasematest versioonidest paremad, võites suurema osa oma mängudest. Samuti näib, et õppimine pole veel küllastunud - täiendava koolituse ajaga jätkavad mängijad tugevamaks muutumist, õppides üha keerukamaid strateegiaid.

Näiteks ühe selge strateegia, mida närvivõrk on aja jooksul soosinud, on kesksamba varajane haaramine. Vaadake algoritmi esimese versiooni erinevust ja öelge, et 30. versioon:

1. närvivõrgu versioon

30. närvivõrgu versioon

See on hea strateegia, kuna paljud read vajavad keskmist veergu - selle varakult väites tagatakse, et teie vastane ei saa seda ära kasutada. Seda on närvivõrk õppinud ilma inimese sisendita.

Erineva mängu õppimine

Mängude kaustas on mängu game.py fail nimega Metasquares. See hõlmab X- ja O-markerite paigutamist võrku, et proovida moodustada erineva suurusega ruute. Suuremad ruudud koguvad rohkem punkte kui väiksemad ruudud ja võidab mängija, kellel on kõige rohkem punkte, kui ruudustik on täis.

Kui lülitate faili Connect4 game.py failiks Metasquares game.py, õpib sama algoritm selle asemel, kuidas Metasquares mängida.

Kokkuvõte

Loodetavasti on see artikkel kasulik - andke mulle allolevates kommentaarides teada, kui leiate kirjavigu või teil on küsimusi koodipõhja või artikli kohta ja võtame teiega ühendust nii kiiresti kui võimalik.

Kui soovite saada lisateavet selle kohta, kuidas meie ettevõte Applied Data Science arendab ettevõtetele innovaatilisi andmeteaduste lahendusi, võtke julgesti ühendust meie veebisaidi kaudu või otse LinkedIni kaudu.

… Ja kui see teile meeldib, siis jätke julgelt mõni südamlik klapp :)

Applied Data Science on Londonis asuv nõustamisteenus, mis rakendab ettevõtetele otsemõõtmelisi andmeteaduslikke lahendusi, pakkudes mõõdetavat väärtust. Kui soovite oma andmetega rohkem tegeleda, siis räägime.