close menu

איך מדבגים טרנספורמרים?

המודל שמייצר תמונות – צייר אותי גרוע.

ועם 15 אצבעות.

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

מאד מלאכותית

אבל למה?!
למה? מה נדפק? למה המודל למה מה שהוא למד?

מדריך: איך מדבגים טרנספורמרים?

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

בימים אלה: הכל. (חוץ מטבלאות. אבל הכל.)

בהנתן שטות שהמודל אמר, לדוגמה:

"האם הית קונה כרטיס לוטו שסיכוי הזכיה במיליון דולר בו הם 99% אבל אם אתה מפסיד (בסבירות של 1%) אתה מת?"

מודל: "קונה שניים."

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

"אבל יםםםם (אתם תאמרו) טרנספורמרים לא מבינים מה הם מספרים בכלל! הוא לא יכול לקבל החלטה הסתברותית!" –

לא נכון: מבחינת טרנספורמרים מספרים הם באמת "עוד אותיות" אבל טרנספורמרים בהחלט יכולים ללמוד לבצע חישובים במספרים (כן כן! נסו לאמן את GPT2 לעשות את זה). כדי לבדוק את זה אימנתי בעצמי טרנספורמרים לפתור תרגילי חשבון במספרים עד 4 ספרות בסט האימון ואחרי זה בולידציה בדקתי את המודל על מספרים בעלי 8 ספרות ומעלה. המודל הגיע ל100% תרגילים פתורים נכון. (עגול.) אני חושב שאפשר לאמר שהוא הכליל. [חשוב רק להוסיף את הספרות כאותיות בודדות כי אחרת הוא פשוט לא יראה אותן].

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

(המודל GPT2-XL)

נראה כי 1564 מחולקת לשני טוקנים: "15" ו-"64" וGPT2-XL ביצירת הטוקן הראשון 53% מהחשיבות מיוחסת לשם "שייקספיר" ומיד לאחר מכן בחשיבות נראה כי הטוקנים החשובים הבאים הם "בשנת" (22%) ו"נולד" (14%). ביצירת הטוקן השני להשלמת התאריך, השם שייקספיר עדיין הוא החשוב ביותר עם חשיבות של 60%, ואחריו החלק הראשון של התאריך.
איך מחשבים מפת חום זו?
יחסית פשוט:
בטרנספורמרים ליצירת שפה מטילים את המצב הנסתר על עוצר המילים (Unembeddings) ואז מתקבל ניקוד מספרי עבור כל טוקן באוצר המילים של המודל. הפעלת softmax על וקטור ניקוד זה הופכת ניקוד זה להסתברות.
בצורה פשוטה: נבחר את הטוקן עם ההסתברות הגבוהה ביותר (או על ידי Sampling כלשהו) ואז נחשב גרדיאנטים חזרה דרך המודל כל הדרך אל הקלט. בצורה זו נקבל במרחב הקלט "מפת חום" המראה לנו מה חשיבות "כל איבר" בקלט על מנת להגיע אל המילה שנבחרה בפלט. הבעיה כאן היא שהוקטור הזה הוא בגודל המימד הנסתר ולא "מימד האותיות", פתרון לבעיה זו הוא טריק נוסף המשפר ביצעי שיטה זו במודלי שפה והוא הכפלה ביצוג הנסתר של כל טוקן בקלט ולקיחת ניקוד החשיבות הסופי כנורמת L2.
תחקור אקטיבציות:
בתוך בלוק האטנשן, שכבת הFeed Forward היא אחד משני הרכיבים העיקריים והיא מהווה 66% מהפרמטרים של הבלוק (ובכך גם מספקת חלק גדול מביצועי המודל הסופי).
המשימה, לספור: 1, 2, 3, ___

מיותר לציין: המודל מצליח..

נשתמש בטריק עליו דיברתי בפוסט אחר לפני כמה ימים:
"חצי מודל – יודע גם הוא לדבר".
נבדוק בתוך המודל מה תהיה התחזית הבאה לאורך עומק המודל וננסה להבין מהאקטיבציות הפנימיות האם ישנה תבנית כלשהי היכולה להצביע על קבלת ההחלטות של המודל.
אנו נקבל השכבות הראשונות במודל מבינות מצוין שעליהן לחזות פסיקים לאחר כל ספרה אך הספרות עצמן (מסובך יותר) מגיעות משכבות עמוקות יותר במודל – מחזק את הטענה כי "החוכמה" של המודלים מקודדת בשכבות התחתונות של המודל בדרך כלל.
קלאסטרינג לאקטיבציות
כשמבצעים קלאסטרינג (והורדת מימדיות בהתאם לצורך) לאקטיבציות המודל בצורה זו מתקבלת תמונה מעניינת מאד.
לכל טוקן במשפט – המודל מייחס חשיבות לאיזורים שונים במשפט בצורה שניתן להסביר אותה אנושית!
למשל עבור משימת הספירה: האקטיבציות מתחלקות לשתיים כשהקלאסטר הראשון לומד ליצר "," והקלאסטר השני לומד לייצר ספרות.
אם למשל נמשיך את משימת הספירה מעבר ל10 נקבל עוד תופעה מעניינת!
הקלאסטר האחרי על ספירה מקבל פחות ופחות חשיבות ככל שמתקדמים ל10 ובמקומו עולה קלאסטר חדש הלוקח את מקומו ביצירת הספרות החדשות (כנראה כי כדי יצור מספר בעל שתי ספרות דרוש מבחינת המודל "חישוב אחר").
עוד תצפיות:
מניסוים בשיטה זו עולות כמה תצפיות שחוזרות על עצמן:
  • טוקן ראשון: כמעט תמיד ישנו קלאסטר שכל מטרתו היא להסתכל על הטוקן הראשון במשפט.
  • ירידות שורה: כמו כן, בטקסט בעל כמה שורות נוצר קלאסטר המסתכל רק על ירידות שורה
  • מחזוריות: אותו הדבר עבור כל רכיב מחזורי בטקסט (כמו סוגריים למשל).
  • חלוקה לפי משמעות: המודל לומד מפרק את המשפט לרכיבים לפי משמעותם: למשל ביצירת רשימת "מדינות באירופה": ישנו קלאסטר שלם המוקדש רק לשמות מדינות.
התבוננות לתוך שכבות בודדות:
אפשר באותה השיטה בדיוק גם להסתכל לתוך שכבות בודדות על מנת להבין מה הן לומדות (או מה נלמד בחלקים שונים במודל).
תצפיות משיטה זו מראות תבניות נפוצות ללמידה ברשת, למשל:
  • איזורים המתמקדים בחלקים ספציפיים של הטקסט לפי האורך (התחלה , אמצע, סוף). זה מעניין כי המידע היחיד שיש לשכבות אלו לגבי המיקום מגיע מהpositional encoding (שבGPT2 הוא נלמד).
  • איזורים הלומדים מאפיינים לשוניים, למשל, גוף דיבור ("הוא", "הם"), פעלים, מילות קישור, ואיזור הלומד צמדי שמות עצם ושמות תואר צמודים.
  • איזורים הלומדים להסתכל על תכונות תחביריות כמו פסיקים ונקודות.
  • איזורים המסתכלים על הטוקנים הראשונים (תמיד יש כאלו).
אז מה אנחנו יכולים ללמוד מכל זה?
האמת שהמון.
  • ביצירת טקסט, אנחנו יכולים להשתמש בשיטות אלו כדי לדעת בבירור אילו חלקים במשפט גרמו למודל לאמר את מה שאמר (ומאיזה חלקים התעלם) ובכך לשנות את הפרומפטים שלנו \ לאמן את המודל על משפטים המכילים את החלקים שהתעלם מהם.
  • דוגמה פשוטה ביצירת תמונות: כולנו כבר יודעים שמודלים לא טובים בציור אצבעות. אנשי האינטרנט הטובים מנסים בכל כוחם לתקן בעיה זו על ידי פרומפטים מתוחכמים.

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

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