כיצד ליצור AI AlphaZero משלך באמצעות Python ו- Keras

לימד מכונה ללמוד את אסטרטגיית Connect4

במאמר זה אנסה לכסות על שלושה דברים:

  1. שתי סיבות ש- AlphaZero מהווה קפיצת מדרגה ענקית לבינה מלאכותית
  2. כיצד ליצור העתק של מתודולוגיית AlphaZero לשחק במשחק Connect4
  3. כיצד להתאים אישית את הקוד להצטרפות למשחקים אחרים

AlphaGo → AlphaGo Zero → AlphaZero

במארס 2016 ניצחה Deepminds AlphaGo 4-1 את אלופת העולם של Go Lee Sedol 4-1 בסדרה שצפו בה למעלה מ -200 מיליון צופים. מכונה למדה אסטרטגיה על-אנושית לשחק go, הישג שנחשב בעבר כבלתי אפשרי, או לפחות עשור לפני שניתן היה להשיג אותו.

משחק 3 של AlphaGo נגד לי סדול

זה כשלעצמו היה הישג יוצא דופן. עם זאת, ב- 18 באוקטובר 2017, DeepMind לקחה צעד ענק קדימה.

הפרסום "Mastering the Game of Go Without Knowledge Human" חשף טוויסט חדש באלגוריתם AlphaGo Zero שהביס את AlphaGo 100-0. באופן לא ייאמן, היא עשתה זאת על ידי למידה אך ורק באמצעות משחק עצמי, התחלת הטאבולה ראסה (מצב ריק), ובהדרגה מציאת אסטרטגיות שתנצח את הגלגולים הקודמים של עצמם. כבר לא היה צורך במאגר של משחקים אנושיים מומחים ליצירת AI על אנושי.

תרשים מתוך

רק 48 יום לאחר מכן, ב- 5 בדצמבר 2017, שחררה DeepMind פרסום נוסף שכותרתו Mastering Chess and Shogi על ידי משחק עצמי באמצעות אלגוריתם למידה לחיזוק כללי, המראה כיצד ניתן להתאים את AlphaGo Zero כך שתתאים לתוכניות אלופת העולם StockFish ו- Elmo לנצח בשחמט ובשוגי. כל תהליך הלמידה, מהפעם הראשונה שהמשחקים הוצגו בפני תוכנת המחשב הטובה בעולם, לקח פחות מ -24 שעות.

AlphaZero נולד - האלגוריתם הכללי שבעזרתו תוכלו להשיג משהו במהירות וללא ידע מוקדם באסטרטגיית מומחים אנושיים.

ישנם שני דברים מדהימים בהצלחה זו:

1. AlphaZero אינה דורשת קלט אנושי לצורך קלט

אי אפשר להדגיש את החשיבות של זה מספיק. משמעות הדבר היא כי ניתן ליישם את השיטה הבסיסית של AlphaGo Zero בכל משחק עם מידע מושלם (סטטוס המשחק ידוע לשני השחקנים באופן מלא בכל עת), מכיוון שלא נדרש ידע מוקדם מעבר לכללי המשחק.

בדרך זו הצליח DeepMind לשחרר את עיתוני השחמט והשוגי רק 48 יום לאחר העיתון המקורי של AlphaGo Zero. במובן האמיתי ביותר של המילה, היה צורך לשנות רק את קובץ הקלט, המתאר את מכניקת המשחק ומייעל את ההיפרפרמטרים ביחס לרשת העצבית ולחיפוש העץ במונטה קרלו.

2. האלגוריתם אלגנטי עד כדי גיחוך

אם AlphaZero היו משתמשים באלגוריתמים מורכבים מדי שרק קומץ אנשים בעולם מבינים, זה עדיין יהיה הישג מדהים. מה שיוצא דופן הוא שרבים מהרעיונות בעיתון הם הרבה פחות מורכבים מגרסאות קודמות. בלבו טמונה המנטרה הפשוטה להפליא הבאה:

שחק בראשך תרחישים עתידיים אפשריים, העדיף נתיבים מבטיחים ושקול כיצד סביר להניח שאחרים יגיבו למעשיך והמשיכו לחקור את הלא נודע.
לאחר שהגעת למצב לא מוכר, דרג את מידת הנוחות שלדעתך המיקום סביר והפל את הציון דרך עמדות קודמות בדרך הנפשית שהובילה לנקודה זו.
לאחר שחשבתם על הזדמנויות עתידיות, בצעו את הפעולות אותם חקרתם בתדירות הגבוהה ביותר.
בסוף המשחק חזור והערך היכן לא הערכת נכון את שווי העמדות העתידיות ועדכן את הבנתך בהתאם.

זה לא נשמע כמו איך לומדים לשחק משחקים? אם אתה מבצע מהלך לא טוב, זה בגלל שלא הערכת נכון את הערך העתידי של העמדות שהתקבלו, או ששקלת נכון את הסבירות שהיריב שלך יעשה מהלך מסוים. אלה בדיוק שני ההיבטים של המשחק AlphaZero הוכשר להיות.

כיצד אוכל לבנות את AlphaZero משלי?

ראשית, בדוק את גיליון הבגידות של AlphaGo Zero כדי ללמוד כיצד AlphaGo Zero עובד. כדאי להתייחס אליו כשאנחנו עוברים על כל פיסת קוד. יש כאן גם מאמר נהדר שמסביר ביתר פירוט כיצד פועלת AlphaZero.

הקוד

שיבט את מאגר Git זה המכיל את הקוד אליו אני מתייחס.

כדי להתחיל בתהליך הלמידה, הפעל את שתי התצוגות העליונות במחברת Jupyter של run.ipynb. ברגע שהיא קבעה מספיק עמדות משחק כדי למלא את זיכרונה, הרשת העצבית מתחילה להתאמן. עם משחק עצמי ואימונים נוספים, זה משתפר בהדרגה בחיזוי ערך המשחק ומהלכים הבאים מכל עמדה, וכתוצאה מכך החלטות טובות יותר ומשחק כולל יותר חכם.

כעת אנו נסתכל מקרוב על הקוד ולהראות כמה תוצאות שמראות שה- AI מתחזק עם הזמן.

הערה - זו ההבנה שלי לגבי אופן הפעולה של AlphaZero, בהתבסס על המידע הקיים במסמכים לעיל. אם אחד מהדברים הבאים אינו נכון, אני מתנצל ואנסה לתקן זאת!

התחבר 4

המשחק האלגוריתם שלנו ילמד הוא Connect4 (או ארבעה בשורה). לא ממש מורכב כמו Go ... אבל עדיין יש 4,531,985,219,092 עמדות משחק.

התחבר 4

כללי המשחק הם פשוטים. שחקנים מתחלפים להזין פיסת צבע שלהם באחד העמודים הזמינים לעיל. השחקן הראשון שיש לו ארבעה צבעים ברצף - אנכית, אופקית או אלכסונית - זוכה. אם הרשת כולה מתמלאת בלי ליצור ארבעה ברצף, המשחק מצויר.

הנה סיכום של קבצי המפתח המרכיבים את בסיס הקוד:

game.py

קובץ זה מכיל את כללי המשחק עבור Connect4.

לכל ריבוע מוקצה מספר 0 עד 41 כדלקמן:

שדות פעולה עבור Connect4

הקובץ game.py מספק את ההיגיון לשינוי ממצב משחק אחד למשנהו לאחר פעולה שנבחרה. לדוגמא, אם לוח המשחק ופעולה 38 ריקים, שיטת takeAction מחזירה סטטוס משחק חדש, כאשר דמותו של השחקן ההתחלתי נמצאת בתחתית העמודה האמצעית.

אתה יכול להחליף את קובץ game.py בכל קובץ משחק שתואם לאותו API והאלגוריתם בעצם ילמד את האסטרטגיה על ידי משחק בכוחות עצמו באמצעות הכללים שנתת לו.

run.ipynb

זה מכיל את הקוד שמתחיל את תהליך הלמידה. הוא טוען את כללי המשחק ואז עובר דרך לולאת האלגוריתם הראשית, המורכבת משלושה שלבים:

  1. שחק בעצמך
  2. הסבה מחודשת לרשת העצבית
  3. הערכת הרשת העצבית

ישנם שני סוכנים המעורבים בלולאה זו, השחקן הטוב ביותר ומשחק הנוכחי.

ה- best_player מכיל את הרשת העצבית החזקה ביותר ומשמש להפקת זיכרונות המשחק העצמי. השחקן הנוכחי מכשיר את הרשת העצבית שלו בזכרונות אלה ואז נזרק נגד השחקן הטוב ביותר. אם היא מנצחת, הרשת העצבית בנגן הטוב ביותר עוברת לרשת העצבית בנגן הנוכחי והלולאה מתחילה מחדש.

agent.py

זה כולל את מחלקת הסוכנים (שחקן במשחק). כל שחקן מאותחל עם רשת עצבית משלו ועץ החיפוש של מונטה קרלו.

שיטת הסימולציה מבצעת את תהליך חיפוש עץ העץ במונטה קרלו. בפרט, הסוכן עובר לצומת עלים של העץ, מעריך את הצומת עם הרשת העצבית שלו ואז ממלא את ערך הצומת דרך העץ.

שיטת המעשה חוזרת על הסימולציה מספר פעמים כדי להבין איזו תנועה היא הטובה ביותר מהמצב הנוכחי. ואז הפעולה שנבחרה חוזרת למשחק כדי לבצע את הצעד.

בשיטת ההפעלה, הרשת העצבית עוברת הסבה מחדש באמצעות זיכרונות ממשחקים קודמים.

model.py

דוגמה לרשת הפיתול שנותרה שנוצרה עם Keras

קובץ זה מכיל את המחלקה Residual_CNN, המגדיר כיצד נוצרת מופע של רשת עצבית.

נעשה שימוש בגרסה דחוסה של ארכיטקטורת הרשת העצבית במאמר AlphaGoZero - כלומר. H. שכבת פיתול, ואחריה שכבות שאריות רבות, שמתפרקות לערך ולכותרת מדיניות.

ניתן לציין את עומק ומספר המסננים בקיבול בקובץ התצורה.

ספריית Keras משמשת לבניית הרשת עם backend של Tensorflow.

במחברת run.ipynb, בצע את הפעולות הבאות כדי להציג מסנני קונבולציה בודדים ושכבות מחוברות בצפיפות ברשת העצבית:

current_player.model.viewLayers ()
פילטר קונבולציה מהרשת העצבית

MCTS.py

זה מכיל את המחלקות Node, Edge ו- MCTS, המהווים עץ חיפוש במונטה קרלו.

מחלקת MCTS מכילה את השיטות moveToLeaf ו- backFill שהוזכרו קודם לכן, ומופעים של סטטיסטיקה של Edge בכיתה מאחסנים על כל מהלך אפשרי.

config.py

כאן אתה מגדיר את הפרמטרים החשובים ביותר המשפיעים על האלגוריתם.

התאמת משתנים אלה משפיעה על זמן הריצה, על דיוק הרשת העצבית ועל ההצלחה הכוללת של האלגוריתם. הפרמטרים שלעיל מייצרים נגן Connect4 איכותי, אך הם לוקחים הרבה זמן. במקום זאת, נסה את הפרמטרים הבאים כדי להאיץ את האלגוריתם.

funcs.py

מכיל את הפונקציות playMatches ו- playMatchesBetweenVersions, המשמשות להפעלת התאמות בין שני סוכנים.

הפעל את הקוד הבא (גם במחברת run.ipynb) כדי לשחק נגד היצירה שלך.

יבוא ממשחק משחק ייבוא ​​משחק מ funcs playMatchesBetweenVersions ייבא לוגר כ- lg
env = game () playMatchesBetweenVersions (env, 1 # מספר הגרסה שמתחתיו ממוקם המחשב, -1 # מספר הגרסה של השחקן הראשון (-1 לאנושי), 12 # מספר הגרסה של השחקן השני (-1 לאנושי), 10 # כמה משחקים לשחק, lg.logger_tourney # איפה צריך לאחסן את המשחק, 0 # איזה שחקן צריך ללכת ראשון - 0 באקראי)

initialize.py

כאשר אתה מפעיל את האלגוריתם, כל קבצי המודל והאחסון נשמרים בתיקיית הביצוע בספריית הבסיס.

כדי להפעיל מחדש את האלגוריתם ממחסום זה מאוחר יותר, העבר את תיקיית הביצוע לתיקיית run_archive והוסף מספר ביצוע לשם התיקיה. לאחר מכן הזן את מספר הריצה, מספר גרסת הדגם ומספר גרסת האחסון בקובץ initialise.py המתאים למיקום הקבצים הרלוונטיים בתיקיית run_archive. אם אתה מפעיל את האלגוריתם כרגיל, הוא יתחיל במחסום זה.

memory.py

מופע של מחלקת הזיכרון מאחסן זיכרונות ממשחקים קודמים, שבהם האלגוריתם משתמש כדי להכשיר מחדש את הרשת העצבית של השחקן הנוכחי.

loss.py

קובץ זה מכיל פונקציית אובדן מותאמת אישית המסווה חיזויים מהלכים לא חוקיים לפני העברתם לפונקציה של אובדן אנטרופיה צולבת.

settings.py

המיקומים של התיקיות run ו- run_archive.

loggers.py

קבצי יומן מאוחסנים בתיקיית היומן בתיקיית הביצוע.

להפעלת רישום, הגדר את הערכים של המשתנה logger_disabled בקובץ זה כ- False.

צפייה בקבצי היומן תעזור לך להבין כיצד האלגוריתם עובד ולזהות את "מחשבותיו". לדוגמא, הנה דוגמה מקובץ logger.mcts.

פלט מקובץ logger.mcts

כמו כן, בקובץ logger.tourney, אתה יכול לראות את ההסתברויות הקשורות לכל תנועה בשלב ההערכה:

פלט מקובץ logger.tourney

תוצאות

אם אתה מבצע פעילות גופנית במשך כמה ימים, תקבל את גרף ההפסד הבא ביחס למספר איטרציה של מיני-אצווה:

הפסד מול מספר איטרציה של מיני אצווה

השורה העליונה היא השגיאה בכותרת המדיניות (האנטרופיה הצולבת של הסתברויות התנועה MCTS לעומת הפלט מהרשת העצבית). השורה התחתונה היא השגיאה בכותרת הערך (השגיאה המרובעת הממוצעת בין ערך המשחק בפועל לרשת העצבית המנבאת את הערך). קו המרכז הוא ממוצע של השניים.

ברור שהרשת העצבית מסוגלת לחזות טוב יותר את הערך של כל מצב משחק ואת המהלכים הבאים הסבירים. כדי להראות כיצד זה מוביל למשחק חזק יותר ויותר, ניהלתי ליגה בין 17 שחקנים שנעו מהאיטרציה הראשונה של רשת העצבים לליגה 49. כל זוג שיחק פעמיים, כאשר לשני השחקנים יש סיכוי לשחק ראשון.

להלן התוצאות הסופיות:

ברור שהגרסאות המאוחרות של הרשת העצבית עדיפות על הגרסאות הקודמות ומנצחות ברוב המשחקים שלהן. נראה גם שהלמידה עדיין לא בשלה - כאשר השחקנים ממשיכים להתאמן, הם ימשיכו להתחזק וללמוד אסטרטגיות מורכבות יותר ויותר.

לדוגמא, אסטרטגיה ברורה שהרשת העצבית העדיפה לאורך זמן היא לקחת את העמוד האמצעי מוקדם. שימו לב להבדל בין הגרסה הראשונה של האלגוריתם לבין הגרסה ה -30:

1. גרסת רשת עצבית

30. גרסת רשת עצבית

זו אסטרטגיה טובה מכיוון ששורות רבות דורשות את העמודה האמצעית. אם אתה טוען זאת בשלב מוקדם, היריב שלך לא יוכל לנצל זאת. זה נלמד מהרשת העצבית ללא קלט אנושי.

למדו משחק אחר

בתוך תיקיית המשחקים נמצא קובץ game.py למשחק שנקרא Metasquares. לשם כך, סמני X ו- O ממוקמים ברשת כדי ליצור ריבועים בגדלים שונים. ריבועים גדולים יותר קולעים יותר נקודות מאשר ריבועים קטנים יותר, והשחקן עם הכי הרבה נקודות, כשהרשת מלאה, מנצח.

אם אתה מחליף את הקובץ Connect4 game.py לקובץ Metasquares game.py, אותו אלגוריתם לומד כיצד לשחק Metasquares במקום.

סיכום

אני מקווה שתמצא מאמר זה שימושי. ספר לי בתגובות למטה אם אתה מוצא שגיאות הקלדה או שאלות כלשהן בבסיס הקוד או במאמר. אני אחזור אליך בהקדם האפשרי.

אם ברצונך ללמוד עוד כיצד חברתנו מפתחת פתרונות חדשניים למדעי נתונים לעסקים, אנא אל תהסס לפנות אלינו דרך אתר האינטרנט שלנו או ישירות דרך LinkedIn.

... ואם אתה אוהב את זה, אתה מוזמן להשאיר כמה מחיאות כפיים לבבי :)

Applied Data Science הינה חברת ייעוץ בלונדון המיישמת פתרונות מקיפים למדעי נתונים לעסקים ומספקת ערך מדיד. אם תרצה לעשות יותר עם הנתונים שלך, בוא נדבר על זה.