close menu

מה לומדים מודלי שפה? ניסיון פרשנות ליצוג הפנימי של GPT

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

אמבדינגס -> בלוק אטנשן -> בלוק אטנשן -> … בלוק אטנשן -> אנ-אמבדינגס (Unembeddings).

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

זה לא לגמרי נכון: GPT לומד "להזיז את המשפט אחורה" והמילה האחרונה במשפט "מגיעה מהעתיד" – לאחר שהמשפט זורם בשכבות המודל, במקום המילה במיקום הi המודל מנסה להציב את המילה במיקום i+1. (התפלגות על המילה במיקום i+1.)

למודל מימד כניסה של N_v=50257, אבל ליבת GPT פועלת פנימית במרחב וקטורי קטן יותר, בממד N_e.
לדוגמה, במודל GPT-2 XL, המימד הפנימי הוא 1600.

עליו גם מבוצעים כל הניסויים בפוסט זה

אמבדינגס – מילון דו כיווני: AI <-> בני אדם
המודל מטיל את הקלט באמצעות מטריצת אמבדינגס שמטילה את מרחב הקלט לתוך המרחב הפנימי בו עומד המודל ולהיפך (אותה המטריצה Transposed, המודל לומד עם Weight Tying).
בלוקי אטנשן – ליבת המודל
בתוך ליבת המודל היצוג ממימד 1600 המתקבל לאחר הפעלת האמבדינגס עובר דרך בלוקים רבים של אטנשן שכל אחד מהם מחזיר וקטור נוסף בגודל 1600.
אנ-אמבדינגס – אותו האמבדינגס מתחילת המודל
הווקטור הסופי (עדיין בגודל 1600) מוכפל באנ-אמבדינגס ומוטל חזרה אל מרחב בני האדם (המילים).
על הווקטור המתקבל בגודל 50257 מופעלת הפונקציה softmax ומתקבלת התפלגות ההסתברות של המילים בפלט.
פעולת המודל באופן כללי פשוטה:
  • הטל את הקלט למרחב נסתר בגודל 1600.
  • עשה "כל מיני דברים" לווקטור הזה ב-בגודל 1600.
  • הטל את הווקטור האחרון חזרה אל מרחב הטקסט.

ואז כתוב בטוויטר: "AYE GEE EYE"

מימד הקלט למודלי השפה בדרך כלל גדול משמעותית ממימד בלוקי האטנשן כך שאפשר להסתכל על האמבדינגס כשכבת "דחיסה" הדוחסת את הטקסט לתוך ליבת המודל ועל השכבה האחרונה כמפענחת את ליבת המודל חזרה לשפת בני האדם.
"מילון AI <-> בני אדם"
זאת אומרת שיש לנו "מילון" שמאפשר לנו להמיר בין בני האדם למרחב "המחשבות של המודל" בכל נקודה שאנחנו רק רוצים.
השימוש במילון:
  • על הקלט: וקטורי הקלט הראשונים ישוחזרו חזרה לקלט.
  • על הפלט: ווקטורי הפלט האחרונים ישוחזרו לפלט המודל.
  • על כל דבר אחר: ?!
מה לגבי כל שאר הוקטורים במרחב הנסתר שנמצאים באמצע המודל?
מה יקרה אם נפענח את שכבה 12 או 33? נקבל טקסט הגיוני?

כן.

חד משמעית כן.

הפתעה.

שכבות פנימיות במודל יודעות גם הן "לדבר"
באופן מפתיע נקבל טקסטים הגיוניים לגמרי גם אם נשתמש ב"חצי מודל". מצוין, בואו נשתמש בתופעה הזו כדי לפרש חלקים פנימיים בGPT.
נעבור המודל לעומק ובכל שלב נבדוק מה GPT מאמין שצריך להיות המשך המשפט וכיצד מעדכן אמונה זו בכל שלב. ננסה לפענך מה החישוב שGPT מבצע שלב אחרי שלב כדי להחזיר אלינו את התשובה הסופית.
אקטבציות המודל מתכנסות בהדרגה להתפלגות הסופית לאורך שכבות הרשת.
  • תצפית: התצפית הראשונה היא שלעתים קרובות ההתפלגות מתקרבת להתפלגות הסופית הרבה לפני סוף המודל.
בשלב מסוים באמצע, GPT מגיע ל"ניחוש לא רע" לגבי המילה הבאה, ונראה שהשכבות המאוחרות יותר רק מחדדות ומדייקות את הניחוש.
מבנה החישוב הכללי הוא שככל שעוברים משכבות מוקדמות למאוחרות יותר, המילים הופכות מ"שטויות / לא ניתן לפירוש" –> "ניחושים כלליים הגיוניים (מילים שמתאימות בתחביר אבל לא במשמעות)" –> "ניחושים טובים יותר".
  • תצפית: (תופעה מוזרה): לאורך המודל לא נלמדת פונ' "רציפה". רק הקלט נראה כמו הקלט.
השכבות המוקדמות בדרך כלל נראות כמו שטויות ולפעמים נראות כמו ניחושים פשוטים מאוד לגבי הפלט. הן "קרובות לקלט" כמעט אף פעם.
ככל הנראה, המודל לא "שומר את הקלט בצד" מעבד אותו בהדרגה לכדי ייצוג ביניים כלשהו ואז לתחזית.
במקום זאת, הקלט מומר מיד לייצוג שונה מאוד, אשר מתחדד בצורה חלקה לתחזית הסופית.
תעדוף החישוב בGPT
בGPT יש רק מפענחים. המשמעות היא ש-GPT צריך בכל שלב לתעדף בין שמירה של הקלט לבין הפקת הפלט.
בסופו של דבר הוא צריך לייצר את המילה הבאה, כך שככל שהוא משקיע זמן רב יותר (מבחינת עומק) בעיבוד יצוג שנראה כמו המילה i, כך יש לו פחות "זמן" להמיר אותה למילה i+1.
נראה ש-GPT מבצע את החלק העיקרי של החישוב קרוב למרחב הפלט, הוא ממיד מיד את הקלט לניחוש "בסדר" כלשהו של הפלט ואז מחדד את הניחושים ומעדן את כל ההתפלגויות.
תצפית (מצבים הקשים למודל): גם במצבים "הקשים יותר" למודל: בשכבות מוקדמות יותר במודל כשהמודל עדיין אינו סיים לבצע את החישוב, לרוב "הניחוש הנכון" כן יימצא בין עשרת או חמשת המילים בעלות ההסתברות הגבוהה ביותר.
תצפית (מצבים הקלים למודל): ברוב המקרים, חוסר הוודאות של הרשת ירד באופן משמעותי בשכבות האמצע של המודל. סדר המועמדים המובילים אולי לא יהיה נכון וכמו כן ההסתברויות אולי לא יהיו מכוילות, אבל המודל כבר "הבין" את העיקר וגם הניחושים "לא נכונים" מתאימים להיות המשך הגיוני למשפט.
תצפית (העתקת מילה נדירה):
לפעמים על המודל "להעתיק" מילה קודמת (למשל שמות אנשים). החישוב אותו המודל לומד לבצע: "כל דבר שהיה במיקום הx" -> כתוב אותו שוב"
הינו מצפים שבמצב זה, מדד הKL בין ההתפלגויות לאורך המודל יהיו קרובות בין הקלט לפלט שכן ביקשנו "להעתיק".

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

מה קורה במקום? נראה שהמודל לומד לאחזר את יצוג המילים הנדירות רק בשכבות האחרונות!

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

ניחוש והסבר לכך שהמודלים לומדים "לבצע שינויים קטנים":
  • טרנספורמרים הם רשתות Resnet. כל חיבור בהם מהצורה x + f(x) כאשר f היא הפונקציה הנלמדת. קל מאוד ללמוד את פונ' הזהות.
  • טרנספורמרים מאומנים בדרך כלל עם Weight Decay (רגולריזצית L2) שדוחף את המשקולות לנורמת L2 קטנה. אז המדל ינסה "לפזר" חישוב על פני כמה שיותר שכבות (סכום הריבועים קטן מריבוע הסכומים).
אז במשימה של הפיכת קלט לפלט, המודל יעדיף בדרך כלל לשנות את הקלט קצת, בכל שלב.
החלק שקשה להסביר: המודל פועל במרחב הפלט
החלק המפתיע הוא שהקלט לא משתנה בצורה חלקה, הוא "נמחק" בצורה לא רציפה.
היינו מצפה לתבנית U, שבה השכבות המוקדמות דומות לקלט, השכבות המאוחרות דומות לפלט, ויש "מעבר" הדרגתי באמצע בין שני היצוגים.
במקום זאת, מרחב הקלט משתנה מיד ואנחנו מבצעים את החישוב במרחב הפלט לאורך כל הדרך.

בתמונה: השכבות הראשונות מנחשות "לGPT3 יש 175 מיליארד דולר" והשכבות האחרונות מנחשות "לGPT3 יש 175 מיליארד פרמטרים"

מקורות:
[2] – ניסויים שלי במודל.
עוד בנושא: