לקט שבועי מתמלא של סקירות קצרות של #shorthebrewpapereviews, שבוע 11.09.23-18.09.23
11.09.2023: Explaining grokking through circuit efficiency
https://arxiv.org/abs/2309.02390
יש תופעה מעניינת, הנקראת גרוקינג (grokking) המתרחשת (לפעמים) במהלך אימון של רשתות נוירונים. למעשה גרוקינג מחלק אימון של רשת נוירונים לשני שלבים עיקריים: הראשון הוא שלב השינון (memorization) כאשר הרשת משננת את הדוגמאות(overfit) ושלב ההכללה (למידה אמיתית). היום ב-#shorthebrewpapereviews אנחנו סוקרים מאמר המנסה להסביר למה התופעה הזו מתרחשבת. למה בכלל רשת נוירונים ״משננת״ את הדוגמאות בהתחלת האימון ועם מרכע מסוים עוברת למשטר ההכללה, כלומר למידה אמיתית. קודם כל המחברים שמו לב שבסוף משטר השינון הדיוק של המודל הוא כמעט מושלם והלוס מאד נמוך ולמרות זאת מרגע מסוים הרשת מתחילה ללמוד להכליל משום מה למרות זאת. המחברים טוענים שהסיבה לכך היא הרשת מצליחה להוריד את הלוס עוד יותר (במצב של דיוק כמעט מושלם על הטריין סט) על ידי כך שהיא מתחילה להוציא חיזויים בטוחים יותר (עבור הקטגוריות הנכונות). אני חושב שראיתי מאמרים(לדעתי בנושא double descent) שטוענים שהירידה בלוס כזו במצב של ערכי לוס מאוד נמוכים הופכת את הפונקציה שהרשת ממדלת ליותר פשוטה (מאפס הרבה פרמטרים ומגדיל את האחרים). הם גם מתארים תופעה מעניינת נוספת: כאשר במשטר השינון מקפיעים את לוג'יטים (שמהם מחשבים את הסתברות הקטגוריות) הנורמה של פרמטרי הרשת עולה עם הגדלת הדאטהסט. לעומת זאת במשטר ההכללה נורמה של פרמטרי הרשת לא תלויה בגודל הדאטהסט. בנוסף הם שמו לב שלפעמים ניתן לצפות תופעה שהם קראו לה semi-grokking כאשר המעבר למצב שינון מתרחש אבל הרשת מצליחה להגיע למצב ההכללה אבל לא מצליחה להגיע להכללה טובה ונתקעת איפהשהו באמצא (semi-overfit). בקיצור מאמר מאוד מעניין – מומלץ בחום!
12.09.23: Transformers as Support Vector Machines
https://arxiv.org/abs/2308.16898.pdf
13.09.23: Textbooks Are All You Need II: phi-1.5 technical report
https://arxiv.org/abs/2309.05463.pdf
סקירה זו נכתבה על ידי עדן יבין
בזמן האחרון עם שחרור מודלי שפה כגון Falcon-180b, שגודל המודל הוא האינדקטור העיקרי לביצועי המודל, כלומר מודל גדול יותר שווה מודל טוב יותר. חוקרים ממיקרוסופט הראו שזה לא בהכרח נכון עם שחרור של מודל חדש קטן עם ביצועים מצוינים. איך הם עשו את זה? היום נגלה ב-#shorthebrewpapereviews.
מבחינה טכנית אין משהו מיוחד בארכיטקטורה של המודל: טרנספורמר עם 24 שכבות ו-32 ראשיattention. הם השתמשו ב-flash attention לצורך אימון מהיר יותר (לא משהו מיוחד) וטוקנייזר שלcodegen-mono. אז מה כן מיוחד? ובכן העבודה העיקרית שלהם הייתה המידע לאימון. מבחינה טכנית אין משהו מיוחד בארכיטקטורה של המודל: טרנספורמר עם 24 שכבות ו-32 ראשיattention. הם השתמשו ב-flash attention לצורך אימון מהיר יותר (לא משהו מיוחד) וטוקנייזר שלcodegen-mono.
אז מה כן מיוחד? ובכן העבודה העיקרית שלהם הייתה המידע לאימון. המידע לאימון הורכב מ-7 מיליארד שהיו שייכים לדאטה סט של המודל הקודם שלהם – phi-1. אליו הם הוסיפו עוד 20 מיליארד טוקונים בצורת ספר לימוד(textbook) על 20 אלף תחומים שונים כגון מדע, תאורית המוח, פעילויות יומיומיות ועוד. לא הוצג כיצד ספרים אלו נוצרו אלא רק שהם לא נוצרו על ידי אדם. המטרה בספרים אלו הייתה לשפר את יכולת הסקת המסקנות והידע הכולל של המודל לגבי העולם. החוקרים ציינו שהם הוסיפו גם 6 מיליארד טוקונים של קוד שהיו היחידים בכל הדאטה סט (30 מילארד טוקונים עד כה) שנכתבו על ידי אדם ולא על ידי מכונה. עם דאטה סט זה הם אימנו את phi-1.5 אך לא עצרו כאן. החוקרים רצו לבדוק את השפעת הוספת מידע שנאסף מהאינטרנט (כלומר נכתב על ידי אדם) ומחקו מידע לא חינוכי על ידי השיטה הבאה:
- שימוש במודל שפה כדי להחליט עד כמה דגימה היא ״בעלת ערך חינוכי״
- אימון מסווג שבהינתן אמבדינג של דגימה מסווג את הערך החינוכי
- מחיקה של כל דגימות ללא ערך זה.
חשוב לציין שהחוקרים לא השתמשו בשום שיטה של אימון נוסף (fine-tune) על מעקב אחר הוראות או שיטות כגון RLHF, ובכל זאת הגיעו לביצועים מצוינים מול מודלים שכן עברו את אחד או כל תהליכים אלו. לטענתם, זה רק מוכיח עד כמה הדאטה הוא הדבר החשוב ביותר. סה״כ מאמר מאוד טכני ופחות תיאורטי עם פינות קטנות שמייקרוסופט לא חושפת אך עדיין אפשר ללמוד ממנו לא מעט על הפרטים הטכנים הקשורים לאימון מודלי שפה גדול אלו.
14.09.23: Reinforced Self-Training (ReST) for Language Modeling
https://arxiv.org/abs/2308.08998.pdf
שמעתם על RLHF? ראשי תיבות אלו הפכו להיות מאוד פופולריים לאור הצלחתו של ChatGPT שאומן בשיטה הזו. מאז לא מעט מודלי שפה מאומנים עם השיטה הזו למרות שיש טוענים שניתן להשיג את אותו הדבר עם SFT (self-supervised fine-tuning). אבל היום ב-#shorthebrewpapereviews נסקור מאמר שמציע שיטה לשיפור של RLHF. שיפור הביצועים המיוחל מושג על ידי שיפור איכות הדאטה on-the-fly. אבל קודם כל בואו נבין מה זה בעצם RLHF לאימון מודל שפה יסודי (foundational). הוא תהליך המורכב מ- 4 שלבים:
- הוא אימון מקדים (pretraining) על קורפוס ענק
- כיול מפוקח (SFT) או instruction tuning – אימון נוסף על דאטהסט מאוד איכותותי (בד״כ שאלות-תשובות)
- אימון מודל תגמול (reward) משערך את איכות הפלט(ציון סקאלרי) של מודל שפה
- הרצה של אלגוריתם RL (למשל PPO שהוא אלגוריתם on-policy אונליין) כדי לגרום למודל שפה להיות ״מיושר יותר״ עם הציפיות שלנו על ידי מקסום פונקצית התגמול ותוך שמירת המודל קרוב לזה בסוף שלב 2
כאמור המאמר הנסקר מציע שיטה לשיפור של RLHF אבל לעומת RLHF הקודם השלב האחרון מבוצע באמצעות אלגוריתם RL אופליין שמאפשר שימוש חוזר בדאטה. האלגוריתם מכיל את השלבים הבאים (הם ניסו זאת על משימת התרגום):
- גנרוט דאטה ממדול שפה מאומן מהשלב הקודם וחישוב ציון (תגמול) עבור כל זוג של (טקסט, טקסט מתורגם)
- בוחרים סף של הציון ומסננים את כל הנקודות שהציון שלהם קטן מהסף
- מכיילים מודל על הדטאסט הזה תוך שימוש באלגוריתם של אופליין RL (דאטה חדש לא מיוצר) – שזה סוג של למידת חיקוי (imitation learning)
- מעלים את הסף ומבצעים את שלב 3 עד שהביצועים על סט אבלואציה נתון מפסיקים להשתפר
- אם ביצענו שלב 1 למשך פחות מ G איטרציות חוזרים לשלב 1 אחרת מסיימים
זהו זה…
16.09.23: Generative Image Dynamics
https://huggingface.co/papers/2309.07906
נתחיל מזה שזה מאמר מאוד יפה רק בגלל זה מופיע בו התמרת פוריה (עבדתי בתחום עיבוד אותות כמה שנים ויש לי זכרונות חמים ממנו). שנית, המאמר עוסק במודלי דיפוזיה וביצירת וידאו עם תמונה שאני מאוד אוהב. אוקיי, אז היום ב-#shorthebrewpapereviews סוקרים מאמר ש״מוסיף״ תנועה לאובייקט בתמונה, כלומר מגנרט וידאו קצר המראה אובייקט בדינמיקה( למשל פרח ברוח). יש כמה גישות למידול של תנועה בוידאו למשל שדה תנועה שמסמן תזוזה של כל פיקסל בתמונה. כלומר וידאו המורכב מ-T פריימים ניתן לייצוג על ידי TxHxW מספרים לתמונה בגודל HxW. כלומר יש לנו HxW מערכים באורך T מספרים המתארים את המסלול של כל פיקסל בתמונה. אז הנה באה הקטע של התמרת פוריה שאני כה אוהב. במקום לחזות את המערך הזה בואו נעשה זאת עם התמרת הפוריה שלו. כמובן שבמקרה שלנו ההתמרה דו מימדית כי כל פיקסל יכול לנוע בשני הכיוונים (למעשה 4 מספרים ממשים פר פיקסל כי התמרת פוריה היא מרוכבת). אוקיי, אז מאמנים מודל דיפוזיה שמטרתו לגנרט התמרת פוריה של תנועתו של כל פיקסל. הבעיה אבל שקצת קשה לאמן רשת שחוזה וקטור ארוך (של תדרים) לכל פיקסל בתמונה (לטענת המאמר). אז הם שמים לב שתנועה של כל פיקסל מתוארת בעיקר על ידי תדרים נמוכים (תנועה איטית) כאשר התדרים הגבוהים מקבלים ערכים נמוכים. אז המחברים מחליטים לקחת רק 16 התדרים הנמוכים ביותר לגנרוט (יש איזה נרמול של התדרים כדי למנוע ערכים גבוהים מדי של תדרים מסוימים). טוב, איך מאמנים מודל דיפוזיה. לוקחים תמונה בדינמיקה (סרטון קצר), מחשבים את שדה התמונה, מעבירים את זה דרך התמרת פוריה וזה מהווה הקלט למודל דיפוזיה שאותו מרעישים ואז מסירים את הרעש לאט לאט עם המודל. בנוסף מכניסים למודל את התמונה וגם תיאור טקסטואלי (אופציאונלי). ב-inference מעבירים את התמרת פוריה של שדה התנועה דרך התמרת פוריה הפוכה ומרנדרים את הוידאו. והדבר האחרון כמובן משתמשים במודל דיפוזיה לטנטי….
17.09.23: Knowledge Graph Prompting for Multi-Document Question Answering
https://arxiv.org/abs/2308.11730
סקירה זו נכתבה על ידי עדן יבין
אנחנו יודעים שמודלי שפה יודעים לענות על שאלות על גבי מסמכים אם בצורת zero shot או בצורת few shot אבל מה עם המקרה שבו צריך להסתכל על מסמכים שונים כדי לקבל תשובה? או להשוות בין שני מסמכים בעלי מבנה שונה (טבלה וטקסט חופשי)? ספוילר, לא טוב. היום ב-#shorthebrewpapereviews קבלו את הסקירה הבאה:
החוקרים מראים ששיטות קיימות כגון chain of though שיכולות להתמודד עם הבעיה מביאות איתן מחיר לא קטן. הם אומרים (ולדעתי בצדק) ששיטות אלו לא יעילות כי הן צורכות המון קריאות יקרות למודל השפה. כתוצאה מכל אלו, החוקרים פיתחו שיטה חדשה לה קראו KGP המשתמשת בגרף ידע. הם בונים את גרף הידע(Knowledge Graph) שבו קודקודים מסמלים פסקאות / מבנה מסמך וקשת מסמך קשר מסנטי או שייכות מבנה (למשל מסמך A הוא *מסוג* טבלה). מכאן כאשר מגיעה שאלה חדשה נחלק אותה למקרים. כל מקרה צורך לוגיקה קצת שונה.
- שאלה על מבנה העמוד, למשל ״על מה מדובר בעמוד 1?״ כדי לענות על מקרה זה, השיטה משתמשת במודל שפה כדי לסווג את סוג העמוד. למשל במקרה זה מדובר במסמך טקסט, כלומר אוסף של פסקאות. לאחר שנדע את סוג המסמך נוכל לבצע הליכה בגרף מקודקוד העמוד אל כל הקודקודים התואמים את סוגו (למשל כלל הפקסאות במסמך הטקסט). החוקרים מציינים שהם התייחסו לשני סוגי טקסט היכולים להופיע בעמוד והתייחסו לכל אחד באופן שונה: – מסמך טקסט: אוסף של פסקאות, כל פיסקה היא קודקוד. – טבלה: התוכן הוא הטבלה עצמה מיוצגת כ-markdown בקודקוד. צוין שניתן יהיה להרחיב את השיטה לעוד סוגים של טקסט.
- מבנה על תוכן עמוד מסוים, למשל: באיזו שנה נולד יוצר הסדרה הסימפסונים? כדי לענות על שאלה זו מבוצע התהליך הבא: מאחזרים את הקודקוד עם המידע הרלוונטי ביותר לשאלה. מוסיפים את המידע כקונטקס לשאלה ומבקשים ממודל השפה לייצר את המידע הבא שנצטרך כדי לענות על השאלה. נסתכל על השכונה של הקודקוד בו אנו נמצאים כרגע ונחפש את הקודקוד הדומה ביותר למידע שמודל השפה ייצר ״כצעד הבא״. כך נמשיך עד שיש בידינו את כל המידע כדי לענות על השאלה. נשים לב שניתן לבחור יותר מקודקוד אחד בשלב החיפוש, כלומר נוכל לאחזר מידע משני קודקודים בצעד אחד. זוכרים שבהתחלה דיברנו שבעיה נוספץ הינה מספר קריאות רב למודל השפה (chain of thought)? אובכן כדי להתמודד עם הבעיה הוצע לבצע אימון נוסף (fine tune) שבו מודל שפה אומן על מעקב אחר הוראות. במקרה הזה, ההוראה הינה לחזות את הראיה הבאה הרלוונטית כדי לענות על השאלה בהינתן המידע עד כה. אני יודע שמעניין אתכם הפיל שבחדר, איך נבנה הגרף עצמו? ואובכן נחלק זאת למקרים:
- סוג: באמצעות Extract-PDF מחלצים את סוג המידע במסמך ומסוסיפים זאת כקודקוד.
- טבלה: קודקוד של טבלה מכיל את סוגו ובנוסף את כל הטבלה כ-markdown.
- במקרה של טקסט: ראשית נחלק אותו לפקסאות. כל פיסקה מקודדת לשיכון באמצעות מודל אמבדינג או באמצעות TF-IDF. לאחר מכן נחבר בקשת מסמכים דומים. 4. קשתות: בנוסף לקשתות בין פסקאות דומות קיימות קשתות נוספות בין קודקוד העמוד לפסקה הראשונה בו / הטבלה שהוא מכיל בקשר של ״מכיל״.
התוצאות נראות טוב ובנוסף מביאות פחות הזיות ממודל השפה. מודלי שפה נוסו מסוגים שונים: T5, Llama, MDR ודווקא T5 הביא המון פעמים לחיפוש הטוב ביותר בגרף.
18.09.23: Ambiguity-Aware In-Context Learning with Large Language Models
https://arxiv.org/abs/2309.07900.pdf
למידת in-context: מתברר שמודלי שפה גדולים מסוגלים ללמוד מההקשר (לפעמים אפילו לא צריך הקשר שנקרא zero-shot). למשל עבור משימת ניתוח סנטימנט אתם נותנים דוגמא אחת של (משפט, סנטימנט) ואז המודל מסתדר בעצמו. אז היום ב-#shorthebrewpapereviews סוקרים מאמר המציע שכלול של למידת in-context ומציע שיטה לבחירת דוגמת הקשר הטובה ביותר לדוגמת טסט נתונה. למה זה חשוב? יש דוגמאות די קשות ויש צורך לתת דוגמת הקשר ממש ״דומה״ כדי לכוון את המודל לכיוון הנכון. למשל עבור קטגוריות קרובות (כמו joy ו-amusement) או (אכזבה ועצב) מודל שפה עלול להתבלבל ואז חשוב לתת לו דוגמא ש״מסבירה לו״ את המשימה בדרך המיטבית ביותר. אז המאמר מציע גישה אלגנטית ואינטואטיבית לבחירה של דוגמת הקשר כזו:
- בוחרים את הדוגמאות הקרובות ביותר מבחינה סמנטית לדוגמת טסט (עם מודל pretrained המחשב ייצוג הטקסט).
- מחשבים את שתי הקטגריות בעלות הסתברויות הגבוהות ביותר (עם הפרומפט שגורם למודל להפיק הסתברות לכל קטגוריה) עבור דוגמת הטסט ובוחרים מה דוגמאות המתויגות מהשלב הקודם כאלו עם אותן הקטגוריות.
- מדוגמאות מהשלב הקודם בוחרים את אלו שהמודל טועה בהם ומשתמשים בהם בתור דוגמת ההקשר.
משתמשים בדוגמאות אלו בשביל לבצע ניתוח סנטימנט של מודל עבור דוגמאות טסט (עם פרומפט מהונדס היטב)