OpenAI

אלגוריתם Reinforce – Vanilla Policy Gradients

מיועד ל- מטיבי לכת (כתבה מאוד טכנית)

נכתב על ידי תמיר נווה

כשמתפרסם מאמר ב Science  בתחום שלי (Machine Leaning) זה משהו מיוחד כי זה לא קורה כל יום.

אתם מוזמנים לקרוא על איך OpenAI  מביאים מודל לשחק את המשחק הרב משתתפים “תפוס את הדגל” ברמת מיומנות אנושית ואולי יותר מעניין מזה איך מאמנים מודל לגרום לסוכנים שמשחקים מחבואים לשתף בינהם פעולה באופן יצירתי:

בימים אלו אני בונה קורס חדש (Reinforcement Learning), והחלטתי גם לסדר את החומרים לפוסט שיאמלק לכם את הבסיס האלגוריתמי לחידושים אלו.

לא הצלחתי למצוא תירגום טוב למונח: גראדיאנטים של מדיניות (אשמח לעזרה…)

אבל Policy Gradient הינה גישה אלגוריתמית לפתירת בעיות Reinforcement Learning שנגזרו ממנה אלגוריתמים רבים כגון: Actor Critic, A2C, A3C, TRPO, PPO, SAC ועוד ועוד…

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

רקע קצר על למידה באמצעות חיזוקים (Reinforcement Learning)

יש סוכן (Agent) שחי בסביבה דינאמית (Environment) ויש לו סט של פעולות (Actions) שהוא יכול לעשות בסביבה. הפעולות שלו עשויות לשנות את המצב (State) של הסביבה, ועל כל פעולה שלו הוא עשוי לקבל פידבק מהסביבה שנקרא תגמול (Reward) שיכול להיות חיובי או שלילי. מטרתינו למצוא את המדיניות (Policy) שהינו אלגוריתם שמחליט בעבור הסוכן איך לפעול בסביבה (איזו פעולה לבחור בכל רגע) באופן כזה שיביא למקסימום ההחזר (Return) שזה סך כל התגמולים שמקבל הסוכן.

השפה המתמטית לתיאור בעיה זו היא תהליך החלטות מרקובי MDP=Markov Decision Process:

מקור: https://he.wikipedia.org/wiki/%D7%AA%D7%94%D7%9C%D7%99%D7%9A_%D7%94%D7%97%D7%9C%D7%98%D7%94_%D7%9E%D7%A8%D7%A7%D7%95%D7%91%D7%99

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

עידן הלמידה העמוקה חולל מהפיכה גם בתחום ה Reinforcement Learning במובן הזה שרשת נוירונים עמוקה מהווה את המדיניות (Policy), ז”א מקבל כקלט את ה State ומחזירה את הפעולה (Action) הרצוייה.

כעת חלק הכיפי,

פורמליזם מתמטי לתיאור הבעיה

בכל נקודת זמן t יש לנו מצב, פעולה ותגמול:

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

שמשמעותה: מה ההסתברות שאם התחלנו במצב St והסוכן בחר לבצע פעולה At הסביבה עברה למצב St+1.

למשל אם הסוכן שלנו הוא רכב, המצב שלנו הוא מיקומו במרחב (x,y) והפעולה היא לקחת הגה ימינה, מה ההסתברות שהרכב יעבור למצב (x+5,y). אז בהסתברות גבוהה זה יקרה. אבל לא תמיד זה יקרה כי אולי יש שמן על הכביש והפעולה הביאה את הרכב למצב אחר (x+500,y).

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

מסלול (Trajectory) סופי הינו וקטור של השלשות הבאות:

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

כל אחד מהאלמנטים במסלול 𝜏 הינו וקטור אקראי, וההסתברות לקבל מסלול שלם הינה:

ההסתברות לקבל מסלול 𝜏 היא מכפלת ההסתברות להיות במצב הראשון S1 כפול

 ההסתברות לבחור פעולה A1 כפול ההסתברות לעבור למצב S2 כפול ההסתברות לבחור פעולה A2 וכו’…

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

פונקציית המטרה שלנו J שאותה נאפטם (ז”א נשאף למצוא לה מקסימום) הינה התוחלת של סכום התגמולים:

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

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

נשים לב ש  כולל בתוכו למעשה גם את  על אף שהסימון אינו מייצג זאת.

מדוע לא פשוט לאמן מודל עם פונקציית מטרה?

התחום Reinforcement Learning אומנם יושב תחת המטריה הרחבה של עולם ה Machine Learning אבל הוא אינו Supervised Learning וגם אינו Unsupervised Learning כי זה לא שיש לנו Ground Truth של אילו החלטות היה הסוכן אמור לבחור בכל צעד שלו, אבל מצד שני גם לא יהיה נכון לומר שלא קיים ברשותינו מידע לגבי מה נכון ומה לא כי יש לנו את התגמולים. ולכן זה מן תחום כלאיים בין Supervised לבין Unsupervised.

אם באימון של מודלי Machine Learning אחרים נזין בכל איטרציית אימון סט של דוגמאות (וב Supervised גם סט תואם של Labels) בבעיות Reinforcement Learning ניתן לסוכן לפעול (בין אם באופן אקראי בהתחלה ובין אם בדרך אחרת) ונשמור בזכרון מסלולים (Trajectories) שעשה. באמצעות כל מסלול (הכולל סדרה של מצב, פעולה, תגמול) נוכל לבצע איטרציית אימון למודל רשת נוירונים שלנו, כזה שימקסם את פונקציית המטרה שהגדרנו.

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

כידוע בלמידה עמוקה משתמשים ב Gradient Descent (או בשיכלולים שלו) כדי לאמן את המודל:

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

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

אז מה עושים בכל זאת ?

מכיוון שלכל f(x) מתקיים:

נוכל להשתמש בזה לטובתינו:

ולקבל:

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

נשים לב שההסתברות לקבלת מסלול   תלויה ב θ אבל סך התגמולים  אינו תלוי ב θ עבור מסלול מסויים 𝜏.

הטריק הזה שהוסיף לנו log עזר לנו להמנע מנגזרת של מכפלות.

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

וכשמפעילים על מכפלות אלו לוג זה הופך לסכומי הסתברויות:

ואז הגרדיאנט שלנו לפי θ נהיה פשוט יותר כי כל מה שלא תלוי בו מתאפס:

 

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

 

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

 

כאשר i רץ על פני כל ה trajectories שהקלטנו ו t הוא האינדקס בכל trajectory.

 

פירוש לתוצאה:

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

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

צעד אחרון לפני מימוש

אז אפילו שיש נוסחה שימושית מפורשת לקח לי לא מעט זמן להבין קודים לדוגמא המממשים Vanilla Policy Gradient (אלגוריתם Reinforce), ורק בזכות הקורס של ברקלי הבנתי שאם מניחים התפלגות נורמלית למדיניות ומשתמשים בפרדיקציה של הרשת  fלהיות וקטור התוחלות:

אז עידכון המשקולות נהיה בפועל:

 

הלוג ביטל את האקספוננט של הגאוסיאן ונשארים עם הביטוי לטובת עידכון המשקולות של הרשת:

 

לשם הפשטות נתעלם ממטריצת הקוואריאנס ומהחצי המופיע בביטוי. (נניח שמטריצת הקוואריאנס הינה מטריצת היחידה וממילא החצי נבלע ב Learning Rate):

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

וכעת כשמסתכלים על מימושים הכל נראה ברור יותר… לא כך ?

מקורות

Posted by תמיר נווה in deep

סיכום מיטאפ – Reinforcement Learning

בשבוע שעבר ערכנו מיטאפ וירטואלי של AI-ML מבית IsraelClouds ו-Ai-Blog, כאשר התמקדנו בנושא: Taxi Navigation with Q-Learning.

במהלך האירוע הועברו שתי הרצאות מקצועיות, כאשר ההרצאה הראשונה היוותה תיאוריה ומבוא ל-Q-Learning, וההרצאה השנייה הייתה Live Hands-On דמו עם דגש מעשי, עבור יישום של Q-Learning ב-Jupyter.

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

מילות פתיחה  ע”י צוות IsraelClouds והצגת ה-Moderator, איילת ספירשטיין

הרצאה 1: Q-Learning for Beginners

תמיר נווה, Algorithms Expert, Ai-Blog הסביר על התאוריה של Reinforcement Learning.

הרצאה 2: Teach a Taxi to navigate with Watson Studio

טל נאמן, Developer Advocate, IBM Center, העביר דמו ב-Live על יישום של Reinforcement Q-Learning תוך שימוש ב – Jupyter Notebook וב- OpenAI Gym toolkit.

מאת: מערכת Ai-Blog

Posted by Stav Altfiru in כנסים

איך מחוללים טקסט ומי מפחד מפייק ניוז ?

מיועד ל- מתחילים (כתבה קצת טכנית)

נכתב על ידי Vered Shwartz

בתחילת השנה OpenAI הכריזה על GPT-2, מודל שפה שפיתחה שמסוגל לג׳נרט (לחולל) טקסט שנראה כאילו נכתב ע״י אנשים. בעוד שבדרך כלל הכרזות כאלה מלוות בשחרור של מודל מאומן, OpenAI בחרו שלא לפרסם את המודל שלהם בטענה שהמודל ״מסוכן מדי״ ועלול לשמש לייצור של פייק ניוז. המהלך גרר ביקורת בטענה שהמטרה הייתה יחצ״נות למודל (אכן, הרשת דיווחה על המודל בהגזמה, כפי שבדרך כלל קורה), אך גם עורר דיונים מעניינים באתיקה ובאחריות של המפתחים לשימוש לרעה במודל שפיתחו. המודל המלא שוחרר לבסוף רק לאחרונה, כחצי שנה לאחר הפרסום. ברשומה זו אדבר על ג׳נרוט אוטומטי (generation) של טקסטים באמצעות מודלי שפה – איך מודלים כאלה מאומנים, איך משתמשים בהם לג׳נרט טקסט, והאם הם באמת מסוכנים?

מה זה מודל שפה?

מודל שפה הוא פונקציה המקבלת כקלט טקסט ומחזירה את ההתפלגות למילה[1] הבאה עפ״י כל המילים במילון. השימוש הכי מוכר ואינטואיטיבי של מודל שפה הוא השלמה אוטומטית, שמציעה את המילה או המילים הכי סבירות בהינתן מה שהמשתמש הקליד עד כה. מודל שפה טוב יתן הסתברות גבוהה למשפטים תחביריים (״מה אתה _״ ייתן הסתברות גבוהה לפעלים) ולמשפטים יותר הגיוניים מבחינת משמעות (״אני עייפה, אני רוצה _״ ישלים ״לישון״ לעומת ״אני רעבה, אני רוצה _״ שישלים ״לאכול״).

למה כולם מדברים פתאום על מודלי שפה?

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

איך מג׳נרטים טקסט?

בהנחה שיש ברשותנו מודל שפה מאומן, איך מג׳נרטים באמצעותו טקסט? נניח שנתון לנו טקסט התחלתי w1 … wn (הטקסט ההתחלתי לא הכרחי, לצורך העניין n יכול להיות אפס). תהליך הג׳נרוט מתבצע מילה-מילה: מייצרים את המילה ה-n+1 כתלות ב-n המילים הקודמות, ואז את המילה ה-n+2 כתלות ב-n+1 המילים הקודמות (הטקסט ההתחלתי והטקסט שהמודל ג׳נרט) וכן הלאה. איך ״מג׳נרטים״ מילה?

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

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

הפתרון הפשוט הוא שילוב של שתי הגישות: ראשית בוחרים את k המילים הכי סבירות (עבור קבוע כלשהו k) ואז דוגמים מביניהן. k גדול יהיה דומה יותר לדגימה מכל ההתפלגות בעוד ש-k קטן יהיה קרוב יותר לאלגוריתם החמדני. לחילופין, אפשר לקחת את המילים הכי סבירות שמסת ההסתברות שלהם מסתכמת בלכל היותר p (עבור קבוע p בין 0 ל-1) ולדגום מהן. גם כאן p קטן דומה לאלגוריתם חמדני ו-p גדול לדגימה מכל ההתפלגות. השיטה הזו נותנת יותר גמישות בכך שמס׳ המילים מהן דוגמים משתנה לפי ההקשר. יש הקשרים שבהן מעט מאוד מילים מתאימות (״אני עייפה, אני רוצה _״) לעומת הקשרים הרבה יותר כלליים (״אני _״).

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

איך מאמנים מודל שפה?

שימו לב שאנחנו מדברים ספציפית על מודל שפה מבוסס רשתות נוירונים. מודל שפה מאומן באופן עצמוני (״self-supervised״), והדאטה שהוא צריך עבור האימון הוא פשוט קורפוס טקסט (למשל, כל וויקיפדיה). בזמן האימון, עוברים על הקורפוס משפט-משפט. עבור משפט נתון w1 … wn, ועבור כל מילה במשפט wi, המודל מנסה לחזות את wi בהינתן ההקשר (במודל פשוט ההקשר יהיה התחילית w1 … wi-1) ומעדכנים את הפרמטרים של המודל בהתאם.[2]

לצורך החיזוי, התחילית מקודדת לייצוג ווקטורי. המקודד (encoder) מקבל כקלט ווקטורי מילים של רצף מילים ומחזיר ווקטור המייצג את הרצף. המקודד יכול להיות מבוסס רשתות נוירונים רקורסיביות (RNN), או Transformer שמתבסס רק על מנגנון ה-Attention. הווקטור המייצג את הרצף נכנס למסווג שמחזיר ווקטור באורך אוצר המילים (גודל המילון), המייצג את ההתפלגות על המילה הבאה. כך תיראה ארכיטקטורת רשת של מודל שפה מבוסס RNN:

ארכיטקטורות שונות

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

איך מודדים את האיכות של מודל לג׳נרוט טקסט?

במשימות סיווג ניתן להפיק מספר בודד שמודד את רמת ההצלחה של המודל (למשל הדיוק שלו על סט הבדיקה), ולהשוות בין המדדים של מודלים שונים. במקרה של ג׳נרוט טקסט אין לנו פלט צפוי, מה שהופך את האבלואציה של מודלים כאלה ליותר מורכבת. בעיקר כשמדובר על ג׳נרוט טקסט ״פתוח״ לעומת תרגום, סט הבדיקה הוא פשוט אוסף של טקסטים שהמודל לא התאמן עליהם. האינדיקציה היחידה שהמודל איכותי, חוץ מאבלואציה ידנית יקרה, היא שהוא מייצר טקסט דומה לטקסט בסט הבדיקה מבחינת הסגנון (בין היתר, שהוא למד את התחביר, ואולי גם את הנושא, אם קורפוס האימון בדומיין מסוים). המדד המקובל להערכת מודלים לג׳נרוט טקסט הוא perplexity, שמודד עד כמה סביר לג׳נרט את סט הבדיקה ע״י מודל השפה (ככל שהוא נמוך יותר, המודל טוב יותר). ההסתברות של סט הבדיקה מחושבת ע״י מעבר מילה-מילה וחישוב ההסתברות לג׳נרט כל מילה במודל השפה בהינתן המילים שקדמו לה. מודל שפה טוב יתן הסתברות גבוהה למילה ה״נכונה״ (המילה שהופיעה בפועל) והסתברות נמוכה למילים אחרות.

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

אז… יש לנו ממה לחשוש?

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

למודלים אין אג׳נדה

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

טקסט מג׳ונרט שונה מטקסט אנושי

אחד המודלים הבודדים שמסוגלים לג׳נרט טקסט מבוקר הוא גרובר, שנבנה לג׳נרוט של פייק ניוז מותנה בפרמטרים של תאריך, עיתון, עיתונאי, וכותרת. אמנם השימוש לרעה במודל די ברור מאליו, אך הג׳נרטור של גרובר פותח יחד עם מסווג שיודע להבדיל בדיוק של למעלה מ-90% בין חדשות אמיתיות למג׳ונרטות. הוא למד לזהות את ההבדלים הקטנים בסגנון שבין טקסט שנכתב ע״י אנשים וכזה שנכתב ע״י מכונה, והוא מצליח לזהות גם טקסט שג׳ונרט ע״י מודל גנרטיבי אחר (למשל GPT). וזוהי בדיוק החולשה השנייה של מודלי שפה כיום – הטקסט שהם מג׳נרטים הוא לא ממש אנושי, רק ליד.

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

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

קריאה נוספת:

Text Generation (אותה הכתבה באנגלית, מהבלוג שלי)

[1] רוב מודלי השפה היום לא מבוססי מילה אלא תו או רצפי תווים (חלקי מילה). לצורך פשטות, ברשומה זו נעסוק במודל שפה מבוסס מילה.

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

Posted by Vered Shwartz in deep

בטיחות ב AI – אימון סוכנים מבוקר אנשים

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי תמיר נווה

1) לא יפגע רובוט לרעה בבן אדם, ולא יניח, במחדל, שאדם ייפגע.

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

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

 

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

 

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

 

OpenAI (אותו ארגון ללא כוונת רווח של אלון מאסק) בשיתוף עם DeepMind (החברה שפיתחה את האלגוריתם שניצח את אלוף העולם ב GO ונרכשה ע”י גוגל בחצי מיליארד דולר) פרסמו גישת אימון המשלבת פיקוח אנושי מינימליסטי שנועד לפתור בעיה זו.

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

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

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

למעשה OpenAI’s Safety Team היא שעומדת מאחורי מחקר זה כי כאמור אם נותנים מטרת על רחוקה ונותנים לתהליך האימון לרוץ לבד, קשה לנבא מה יקרה. שיטות אלו יותר מבוקרות, לעיתים יותר יעילות ועשויות למנוע אסונות.

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

במאמר הם מציגים גם אימון של סוכן המשחק במשחקי אטארי מגוונים:

אימון סוכן לשחק משחקי אטארי

בהנחיות שלהם לנותני הפידבקים האנושיים הם אומרים: שחק בעצמך במשחק כמה דקות, ואז קבל בכל פעם שתי קטעי וידאו קצרים ותן תגמולים טובים יותר על דברים כמו כשהסוכן יורה לעומת כשלא יורה (במשחק יריות), כשאתה עוקף ולא כשעוקפים אותך (במרוץ מכוניות), וכו’…

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

Posted by תמיר נווה in deep

על מה עבדו Google Brain בשנה שעברה ?

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי תמיר נווה

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

בכתבה זו אסקור כמה מנושאי המחקר היותר מעניינים עליהם עבדו ב Google Brain בשנת 2017 על פי הבלוג שלהם.

אוטומציה של למידת מכונה AutoMl – המטרה במחקר זה הוא לבנות אוטומציה לבניית פתרונות Machine Learning מבלי התערבות של חוקרים אנושיים. ז”א מדובר באלגוריתמים שבונים אלגוריתמים (בתרשים למטה ניתן לראות ארכיטקטורת רשת שנבנתה ע”י אלגוריתם) , ומסתבר שהאלגוריתמים שנבנים ע”י אלגוריתמים מצליחים לא פחות טוב מאלגוריתמים שמפתחים בני אדם. החזון של המחקר הזה הינו יצירת בינה מלאכותית אמיתית וכללית.

https://ai.google/research/pubs/pub45826

Speech Understanding and Generation – שיפור היכולות של זיהוי ושל יצירה של קול אנושי. בפרט בעיית המרת טקסט לדיבור Text to Speech בה חלה פריצת דרך כשמערכת Tacotron  (תרשים המציג את הארכיטקטורה למטה) מדברת מתוך טקסט כלשהוא באופן כזה שעובר את מבחן טיורינג, ז”א שלא ניתן להבדיל אם בן אנוש או מחשב מקריא את הטקסט. האזינו להדגמה כאן!

https://arxiv.org/abs/1712.05884

בתחום Privacy and Security –

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

https://arxiv.org/pdf/1610.05755.pdf

Understanding Machine Learning Systems –

הרבה מחקר נעשה כדי להבין איך רשתות למידה עמוקה עובדות, איך לפרש אותן ואיך להנגיש אותן בצורה ברורה לקהילה. בהקשר זה התאגדו Google, OpenAI, DeepMind, YC Research והשיקו מגזין אונליין בשם Distill שנועד לעזור לאנשים להבין למידת מכונה. האתר גם מספק כלים ויזואליים להמחשה של אלגוריתמים – שווה להכיר!

Posted by תמיר נווה in deep

מהי למידה עמוקה

מיועד ל- כל אחד (כתבה לא טכנית)

נכתב על ידי תמיר נווה

“למידה עמוקה” (Deep Learning) הינו ענף ברשתות ניורונים שעשה מהפכה כמעט בכל תחומי האלגוריתמיקה.

המהפיכה התחילה בראייה ממוחשבת (computer vision) והמשיכה לנושאים שונים כמו עיבוד שפה טבעית (NLP), תרגום, עיבוד אות שמע (speech, voice), מכוניות אוטונומיות, רובוטיקה, התנהגות ברשת ועוד ועוד… רבים מכנים זאת (באופן שגוי) כבינה מלאכותית (AI=Artificial Intelligence) אך למעשה זה רק ענף של התחום.

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

כמו כן קיימים מגוון מוצרים ושירותים שכולנו משתמשים בהם, אשר מבוססים על למידה עמוקה כמו למשל siri, תירגום סימולטני בסקייפ, google photos, ועוד ועוד…

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

ידוע שבתחום למידת המכונה (machine learning) יש צורך בהרבה רקע מתמטי ויש הרבה משוואות מתמטיות “מפחידות”

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

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

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

Posted by תמיר נווה in deep