Python və Keras istifadə edərək öz AlphaZero AI-nizi necə yaratmaq olar

Connect4 strategiyasını öyrənmək üçün bir maşın öyrət

Bu yazıda üç şeyi əhatə etməyə çalışacağam:

  1. AlphaZero-nun iki səbəbi süni intellekt üçün böyük bir sıçrayışdır
  2. Connect4 Oyunu Oynamaq üçün AlphaZero Metodologiyasının Kopyası necə yaradılır
  3. Digər oyunlara qoşulmaq üçün kodu necə fərdiləşdirmək olar

AlphaGo → AlphaGo Zero → AlphaZero

Mart 2016-cı ildə Deepminds AlphaGo, 200 milyondan çox izləyicinin izlədiyi serialda 18 qat Go Dünya çempionu Lee Sedol'u 4-1 məğlub etdi. Bir maşın, əvvəllər qeyri-mümkün hesab edilən bir nailiyyəti və ya əldə edilməsindən ən azı on il əvvəl fövqəladə bir strategiya öyrənmişdi.

Lee Sedol'a qarşı AlphaGo'nun 3-cü oyunu

Bunun özü də əlamətdar bir nailiyyət idi. Bununla birlikdə, 18 oktyabr 2017-ci ildə DeepMind nəhəng bir addım atdı.

"İnsanın Bilgisiz Get Oyununa Sahib Olma" nəşri, AlphaGo-nu 100-0 məğlub edən AlphaGo Zero alqoritmində yeni bir bükülmə ortaya qoydu. İnanılmaz dərəcədə bunu yalnız özünü oynayaraq öyrənmək, tabula rasaya (boş vəziyyət) başlamaq və tədricən özlərinin əvvəlki təcəssümlərini üstələyəcək strategiyalar tapmaqla etmişdi. Artıq insanüstü AI yaratmaq üçün mütəxəssis insan oyunları məlumat bazasına sahib olmaq lazım deyildi.

Yalnız 48 gün sonra, 5 dekabr 2017-ci ildə DeepMind, AlphaGo Zero-nu StockFish və Elmo dünya çempionu proqramlarına uyğunlaşdırmaq üçün necə özelleştirilebileceğini göstərən, Baş Gücləndirici Öyrənmə Alqoritmindən istifadə edərək Şahmat və Şoqi Öz-özünə Oynamaqla Başlıqlı başqa bir nəşr buraxdı. şahmat və shogidə döymək. Oyunların ilk dəfə təqdim olunduğu andan etibarən dünyanın ən yaxşı kompüter proqramına qədər bütün öyrənmə prosesi 24 saatdan az çəkdi.

AlphaZero dünyaya gəldi - bir şeyləri tez və insan ekspert strategiyasından əvvəlcədən xəbərsiz əldə edə biləcəyiniz ümumi alqoritm.

Bu müvəffəqiyyət haqqında iki təəccüblü şey var:

1. AlphaZero giriş üçün insan girişinə ehtiyac yoxdur

Bunun əhəmiyyətini kifayət qədər vurğulamaq olmur. Bu o deməkdir ki, AlphaGo Zero-nun əsas metodu hər oyun üçün mükəmməl məlumatla tətbiq oluna bilər (oyun vəziyyəti hər zaman hər iki oyunçuya tam məlumdur), çünki oyun qaydalarından əvvəl heç bir məlumat tələb olunmur.

Bu şəkildə DeepMind şahmat və shogi sənədlərini orijinal AlphaGo Zero kağızından cəmi 48 gün sonra sərbəst buraxa bildi. Sözün əsl mənasında, oyun mexanikasını təsvir edən və hiperparametrləri sinir şəbəkəsi və Monte Carlo ağac axtarışına uyğunlaşdıran yalnız giriş faylı dəyişdirilməli idi.

2. Alqoritm gülünc dərəcədə zərifdir

AlphaZero dünyada bir ovuc insanın başa düşdüyü həddindən artıq mürəkkəb alqoritmlərdən istifadə etsəydi, yenə də inanılmaz bir iş olardı. Qeyri-adi bir şey, məqalədəki fikirlərin bir çoxunun əvvəlki versiyalardan daha az mürəkkəb olmasıdır. Qəlbində öyrənmək üçün aşağıdakı ecazkar sadə mantranı yatır:

Başınızdakı gələcək mümkün ssenarilərdən istifadə edin, perspektivli yollara üstünlük verin və başqalarının hərəkətlərinizə necə reaksiya göstərəcəklərini və bilinməyənləri araşdırmağa davam etdiklərini düşünün.
Tanınmamış bir vəziyyətə gəldikdən sonra, vəziyyətin nə qədər əlverişli olduğunu düşündüyünüzü qiymətləndirin və bu nöqtəyə gətirib çıxaran zehni yoldakı əvvəlki mövqelərdən hesabı çırpın.
Gələcək fürsətləri düşündükdən sonra ən çox araşdırdığınız hərəkətləri edin.
Oyunun sonunda geri qayıdın və gələcək mövqelərin dəyərini səhv qiymətləndirdiyiniz yeri qiymətləndirin və anlayışınızı buna uyğun olaraq yeniləyin.

Bu oyun oynamağı necə öyrəndiyin kimi səslənmir? Pis bir hərəkət edirsinizsə, ya ortaya çıxan mövqelərin gələcək dəyərini səhv qiymətləndirdiyinizə görə, ya da rəqibinizin xüsusi bir hərəkət etməsi ehtimalını səhv qiymətləndirdiyinizə görədir. Bunlar AlphaZero'nun oyun alması üçün hazırlandığı iki cəhətdir.

Öz AlphaZero-nu necə qururam?

Əvvəlcə AlphaGo Zero-nun necə işlədiyini öyrənmək üçün AlphaGo Zero fırıldaqçı səhifəsinə baxın. Hər bir kod parçasından keçdiyimizə istinad etmək lazımdır. Burada AlphaZeronun necə işlədiyini daha ətraflı izah edən əla bir məqalə var.

Kod

İstifad etdiyim kodu ehtiva edən bu Git deposunu klonlaşdırın.

Öyrənmə prosesinə başlamaq üçün run.ipynb Jupyter dəftərində ilk iki ekranı çalıştırın. Yaddaşını dolduracaq qədər oyun mövqeyi qurduqdan sonra, sinir şəbəkəsi məşqə başlayır. Əlavə özünəməxsus oyun və məşqlə oyun dəyərini və hər mövqedən sonrakı hərəkətləri proqnozlaşdırmaqda tədricən daha yaxşı olur, nəticədə daha yaxşı qərarlar və daha ağıllı bir oyun alınır.

İndi kodu yaxından nəzərdən keçirəcəyik və AI-nin zamanla gücləndiyini göstərən bəzi nəticələr göstərəcəyik.

NB - Bu, yuxarıdakı sənədlərdə mövcud olan məlumatlara əsaslanaraq AlphaZeronun necə işlədiyini öz anlayışımdır. Aşağıdakılardan hər hansı biri səhvdirsə, üzr istəyirəm və düzəltməyə çalışacağam!

4

Alqoritmimizin öyrənəcəyi oyun Connect4 (və ya Dörddə Bir Sıra) dır. Go qədər o qədər də mürəkkəb deyil ... amma ümumilikdə 4,531,985,219,092 oyun mövqeyi var.

4

Oyunun qaydaları sadədir. Oyunçular növbə ilə yuxarıdakı mövcud sütunlardan birinə rənglərinin bir hissəsini daxil edirlər. Dörd rəngini üst-üstə - şaquli, yatay və ya çapraz olaraq - ilk olan oyunçu qazanır. Ardıcıl dörd yaratmadan bütün şəbəkə doldurulursa, oyun çəkilir.

Kod bazasını təşkil edən əsas sənədlərin xülasəsi:

game.py

Bu fayl Connect4 üçün oyun qaydalarını ehtiva edir.

Hər bir kvadrata aşağıdakı kimi 0-dan 41-ə qədər bir rəqəm verilir:

Connect4 üçün fəaliyyət sahələri

Game.py faylı, seçilmiş bir hərəkətlə bir oyun vəziyyətindən digərinə dəyişmə məntiqini təmin edir. Məsələn, oyun lövhəsi və hərəkət 38 boşdursa, takeAction metodu yeni oyun statusu qaytarır, başlanğıc oyunçunun xarakteri orta sütunda aşağı hissədədir.

Game.py faylını eyni API-yə uyğun olan hər hansı bir oyun faylı ilə əvəz edə bilərsiniz və alqoritm əsasən verdiyiniz qaydaları istifadə edərək özbaşına oynayaraq strategiyanı öyrənəcəkdir.

run.ipynb

Bu, öyrənmə prosesinə başlayan kodu ehtiva edir. Oyunun qaydalarını yükləyir və sonra üç mərhələdən ibarət olan əsas alqoritm döngəsindən keçir:

  1. Özün oynayır
  2. Sinir şəbəkəsinin yenidən hazırlanması
  3. Sinir şəbəkəsinin qiymətləndirilməsi

Bu halqada iştirak edən iki agent var: best_player və current_player.

Best_player ən güclü sinir şəbəkəsini ehtiva edir və özünəməxsus oyun xatirələrini yaratmaq üçün istifadə olunur. Mövcud oyunçu daha sonra sinir şəbəkəsini bu xatirələrə öyrədir və sonra ən yaxşı oyunçuya qarşı atılır. Qalib gəlsə, best_playerdakı sinir şəbəkəsi current_playerdakı sinir şəbəkəsinə keçir və döngə yenidən başlayır.

agent.py

Buraya agent sinif (oyundakı oyunçu) daxildir. Hər bir oyunçu öz sinir şəbəkəsi və Monte Carlo axtarış ağacı ilə işə salınır.

Simulyasiya metodu Monte Carlo Tree Axtarış prosesini həyata keçirir. Xüsusilə agent, ağacın yarpaq düyününə doğru hərəkət edir, düyünü sinir şəbəkəsi ilə qiymətləndirir və sonra düyünün dəyərini ağac vasitəsilə doldurur.

Akt metodu, mövcud hərəkətdən hansı hərəkətin ən əlverişli olduğunu anlamaq üçün simulyasiyanı bir neçə dəfə təkrarlayır. Sonra seçilmiş hərəkət hərəkət etmək üçün oyuna qayıdır.

Oynatma metodunda, sinir şəbəkəsi əvvəlki oyunların xatirələrini istifadə edərək yenidən hazırlanır.

model.py

Keras ilə yaradılan qalan konvolüsiya şəbəkəsinin nümunəsi

Bu fayl sinir şəbəkəsinin bir nümunəsinin necə yaradıldığını təyin edən Residual_CNN sinifini ehtiva edir.

AlphaGoZero məqaləsindəki sinir şəbəkəsi arxitekturasının sıxılmış bir versiyası istifadə olunur - yəni. H. Konvolyusiya qatını, ardından bir çox qalıq qatını izlədi, daha sonra bir dəyərə və siyasət başlığına bölündü.

Konvolyusiya filtrlərinin dərinliyi və sayı konfiqurasiya sənədində göstərilə bilər.

Keras kitabxanası şəbəkəni Tensorflow-un arxa tərəfi ilə qurmaq üçün istifadə olunur.

Run.ipynb noutbukunda, sinir şəbəkəsindəki fərdi konvol filtrləri və sıx birləşdirilmiş təbəqələri görmək üçün aşağıdakıları edin:

current_player.model.viewLayers ()
Sinir şəbəkəsindən dönüşüm filtri

MCTS.py

Bu, Monte Carlo axtarış ağacını təşkil edən Node, Edge və MCTS siniflərini ehtiva edir.

MCTS sinfi, əvvəllər bəhs edilən moveToLeaf və backFill metodlarını və Edge sinifinin mümkün hər hərəkətdə saxlama statistikasını ehtiva edir.

config.py

Burada alqoritmi təsir edən ən vacib parametrləri təyin etmisiniz.

Bu dəyişənlərin tənzimlənməsi işləmə müddətinə, sinir şəbəkəsinin dəqiqliyinə və alqoritmin ümumi uğuruna təsir göstərir. Yuxarıda göstərilən parametrlər yüksək keyfiyyətli Connect4 pleyer istehsal edir, lakin çox vaxt aparır. Bunun əvəzinə alqoritmi sürətləndirmək üçün aşağıdakı parametrləri sınayın.

funcs.py

İki agent arasında qarşılaşma oynamaq üçün istifadə olunan playMatches və playMatchesBetweenVersions funksiyalarını ehtiva edir.

Yaradılışınıza qarşı oynamaq üçün aşağıdakı kodu çalıştırın (run.ipynb dəftərində də).

oyundan idxal oyun funksiyalarından oyun idxal playMatchesBetweenVersions lg olaraq log logger
env = game () playMatchesBetweenVersions (env, 1 # kompüterin yerləşdiyi versiya nömrəsi, -1 # ilk pleyerin versiya nömrəsi (insan üçün -1), 12 # ikinci pleyerin versiya nömrəsi (insan üçün -1), 10 # neçə oyun oynanacaq, lg.logger_tourney # oyunun saxlanması lazım olan yer, 0 # əvvəl hansı oyunçu getməlidir - təsadüfi üçün 0)

initialise.py

Alqoritmi işə saldığınız zaman, bütün model və saxlama sənədləri kök qovluğundakı icra qovluğunda saxlanılır.

Alqoritmi bu nəzarət nöqtəsindən daha sonra yenidən başlamaq üçün icra qovluğunu run_archive qovluğuna köçürün və qovluq adına icra nömrəsi əlavə edin. Sonra run_archive qovluğundakı müvafiq faylların yerləşdiyi yerə uyğun olan startise.py sənədinə işləmə nömrəsini, model versiya nömrəsini və saxlama versiyası nömrəsini daxil edin. Alqoritmi həmişəki kimi işləsəniz, bu nəzarət nöqtəsindən başlayacaq.

yaddaş.py

Yaddaş sinifinin bir nümunəsi, alqoritmin mövcud oyunçu sinir şəbəkəsini yenidən hazırlamaq üçün istifadə etdiyi əvvəlki oyunların xatirələrini saxlayır.

itki.py

Bu fayl, çapraz entropiya itkisi funksiyasına keçmədən əvvəl qanunsuz hərəkət proqnozlarını maskalanan istifadəçi tərəfindən müəyyən edilmiş zərər funksiyasını ehtiva edir.

settings.py

Run və run_archive qovluqlarının yerləri.

loggers.py

Günlük faylları icra qovluğundakı günlük qovluğunda saxlanılır.

Qeyd etməyi aktivləşdirmək üçün bu fayldakı logger_disabled dəyişəninin dəyərlərini False olaraq təyin edin.

Günlük sənədlərinə baxmaq, alqoritmin necə işlədiyini və "düşüncələrini" anlamağa kömək edəcəkdir. Məsələn, logger.mcts faylından bir nümunə.

Logger.mcts faylından çıxış

Eynilə, logger.tourney faylında qiymətləndirmə mərhələsində hər hərəkətlə əlaqəli ehtimalları görə bilərsiniz:

Logger.tourney faylından çıxış

Nəticələr

Bir neçə gün ərzində idmanla məşğul olsanız, minibatch iterasiya nömrəsi ilə əlaqədar aşağıdakı zərər qrafiki əldə edəcəksiniz:

Mini partiyalı iterasiya nömrəsinə qarşı itki

Üst sətir siyasət başlığındakı səhvdir (MCTS hərəkət ehtimallarının sinir şəbəkəsindən çıxma ilə çarpaz entropiyası). Alt sətir dəyər başlığındakı səhvdir (faktiki oyun dəyəri ilə dəyəri proqnozlaşdıran sinir şəbəkəsi arasındakı orta kvadrat səhv). Orta xətt ikisinin ortalamasıdır.

Aydındır ki, sinir şəbəkəsi hər oyun vəziyyətinin dəyərini və ehtimal olunan növbəti hərəkətləri daha yaxşı proqnozlaşdıra bilər. Bunun getdikcə daha güclü bir oyuna necə səbəb olduğunu göstərmək üçün 17 oyunçu arasında sinir şəbəkəsinin ilk təkrarlanmasından 49-cu diviziona qədər bir liqada çalışdım. Hər bir cüt iki dəfə oynadı, hər iki oyunçunun da ilk oynamaq şansı var.

Son nəticələr:

Aydındır ki, sinir şəbəkəsinin sonrakı versiyaları əvvəlki versiyalardan üstündür və oyunlarının çoxunu qazanır. Görünür, öyrənmə hələ yetişməyib - oyunçular məşq etməyə davam etdikcə daha da güclənməyə və getdikcə daha mürəkkəb strategiyalar öyrənməyə davam edəcəklər.

Məsələn, zamanla sinir şəbəkəsinin üstünlük verdiyi açıq bir strategiya, orta sütunu erkən götürməkdir. Alqoritmin ilk versiyası ilə 30-cu versiya arasındakı fərqə diqqət yetirin:

1. sinir şəbəkəsi versiyası

30. neyron şəbəkə versiyası

Bu yaxşı bir strategiyadır, çünki bir çox xətt orta sütuna ehtiyac duyur. Buna erkən iddia etsəniz, rəqibiniz bundan istifadə edə bilməyəcək. Bu, insan girişi olmadan sinir şəbəkəsindən öyrənildi.

Başqa bir oyun öyrənin

Oyunlar qovluğunun içərisində Metasquares adlı oyun üçün game.py faylı var. Bunu etmək üçün X və O markerləri müxtəlif ölçülü kvadratlar meydana gətirmək üçün bir şəbəkəyə yerləşdirilir. Daha böyük kvadratlar kiçik kvadratlardan daha çox xal toplayır və şəbəkə dolu olarsa, ən çox xal toplayan oyunçu qalib gəlir.

Connect4 game.py faylını Metasquares game.py faylı ilə dəyişdirsəniz, eyni alqoritm bunun əvəzinə Metasquares-in necə oynanacağını öyrənir.

Xülasə

İnşallah bu məqaləni faydalı tapacaqsınız. Kod bazasında və ya məqalədə hər hansı bir səhv və ya hər hansı bir sualınız varsa, aşağıdakı şərhlərdə mənə bildirin. Ən qısa müddətdə sizə qayıdacağam.

Firmamızın müəssisələr üçün yenilikçi məlumat elmi həlləri inkişaf etdirməsi haqqında daha çox məlumat əldə etmək istəyirsinizsə, xahiş edirik veb saytımız və ya birbaşa LinkedIn vasitəsilə bizimlə əlaqə qurmaqdan çəkinməyin.

... Və bunu sevirsinizsə, ürəkaçan alqışlar buraxmaqdan çəkinməyin :)

Tətbiqi Məlumat Elmləri, müəssisələr üçün hərtərəfli məlumat elmi həlləri tətbiq edən və ölçülə bilən dəyər verən London mərkəzli bir konsaltinq şirkətidir. Verilərinizlə daha çox şey etmək istəyirsinizsə, gəlin bu barədə danışaq.