RLPrompt: Optimizing Discrete Text Prompts with Reinforcement Learning, סקירה
סקירה זו היא חלק מפינה קבועה בה שותפיי ואנוכי סוקרים מאמרים חשובים בתחום ה-ML/DL, וכותב גרסה פשוטה וברורה יותר שלהם בעברית. במידה ותרצו לקרוא את המאמרים הנוספים שסיכמתי, אתם מוזמנים לבדוק את העמוד שמרכז אותם תחת השם deepnightlearners.
לילה טוב חברים, היום אנחנו שוב בפינתנו deepnightlearners עם סקירה של מאמר בתחום הלמידה העמוקה. היום בחרתי לסקירה את המאמר שנקרא:
RLPrompt: Optimizing Discrete Text Prompts with Reinforcement Learning
פינת הסוקר:
המלצת קריאה ממייק וסתיו: מומלץ בחום לעוסקים בחקר LLMs ובהנדסת פרומפטים
בהירות כתיבה: בינונית פלוס
ידע מוקדם:
-
- היכרות עם עקרונות מודלי שפה גדולים
- הבנה בסיסית בהנדסת פרומפטים
- היכרות עם עקרונות של למידה באמצעות חיזוקים (Reinforcement Learning -RL)
יישומים פרקטיים:
-
- פרומפטים משופרים למודלי שפה
- פרומפטים משופרים למודלי שפה
פרטי מאמר:
לינק למאמר: זמין להורדה.
לינק לקוד: לא אותר
פורסם בתאריך: 22.10.22, בארקיב.
הוצג בכנס: —
תחומי מאמר:
- מודלי שפה גדולים
- הנדסת פרומפטים
- למידה באמצעות חיזוקים
כלים מתמטיים, מושגים וסימונים:
- מודלי שפה גדולים – LLMs
- למידה באמצעות חיזוקים – RL
- הנדסת פרומפרטים
מבוא:
פרומפט (promptֿ, הנחיה בעברית) היא דרך תקשורת עם LLM-ים מאומנים. למעשה פרומפט היא טכניקת ניסוח של שאילתות ל-LLM-ים בשפה שהם מבינים שמאפשרת לנו לנצל את הידע החבוי בפרמטרים שלהם לביצוע מגוון משימות קצה. יותר ספציפית, פרופמט הוא פיסת טקסט שמכילה לרוב את הגדרת המשימה ולאחר מכן קלט, כך שמודל שפה יכול לייצר את התשובה בפורמט האהוב עליו – ע"י פתרון בעיית "מיסוך" וכו' (masking problem). כלומר המודל מתבקש להשלים את המקומות הממוסכים בקלט. למשל עבור משימת תרגום, הפרומפט יכול להיראות באופן הבא (למשימת few-shot learning):
איור 1: דוגמא של פרומפט (נלקח מבלוג)
נושא של הנדסת פרומפטים הפך להיות מאוד פופולרי בשנים האחרונות. בתקופה זו יצאו מאות מאמרים המציעים גישות שונות להנדסת פרומפטים. רוב השיטות להנדסת פרומפטים מנסות לאתר פרומפט אופטימלי רך (soft prompt) כלומר שיכון (embedding) של הפרומפט האופטימלי. לשיטה זו יש כמה חסרונות בולטים:
- קושי ב-explainability.
- פרומפטים רכים עלולים לא לעבוד עם מודלי שפה שונים.
- לא ניתן לבנות פרומפט אם אין לנו גישה לגרדיאנטים של מודל שפה (למשל כאשר אנו עובדים עם מודל שפה דרך API) .
תמצית מאמר:
המאמר שנסקור היום מציע שיטה המאפשרת חיפוש פרומפטים עצמם ולא וקטור השיכון שלהם. כלומר הפלט של השיטה הוא סדרת הטוקנים המרכיבים את הפרומפט. שיטה זו לא דורשת ידע על מודלי שפה שעבורו נבנה הפרומפט ועקב כך מאפשרת מציאת פרומפט אופטימלי כאשר מודל שפה נגיש דרך API.
נזכיר כי מציאת פרומפט אופטימלי (ולא ייצוגו) היא בעיית אופטימיזציה דיסקרטית (מרחב החיפוש הוא מרחב הטוקנים). נובע מכך שאנו לא יכולים לחשב גרדיאנטים (לפחות לא באופן ישיר) ולבצע gradient descent וזה די טבעי שהמחברים בחרו להשתמש בשיטה מלמידה באמצעות חיזוקים (RL) למשימה זו. אבל איך בכלל מפעילים טכניקות RL למודלי שפה (למשימות גנרוט טקסט). בשביל כך אנו צריכים להגדיר מה היא פעולה, מצב (state), אסטרטגיה ותגמול. הפעולה כאן היא יצירת טוקן הבא, האסטרטגיה היא בעצם פונקציית softmax המגדירה הסתברות של כל טוקן והתגמול (reward) מודד את הדמיון בין פלט לבין ה-ground truth.
כדי ליצור פרומפט אופטימלי הכותבים מאמנים מודל, שהוא LM מוקפא (לא חייב להיות זהה ל-LLM שעבורו נבנה הפרומפט) עם תוספת של רשת MLP שאותה מאמנים לייצר פרומפטים. רשת זו נקראת במאמר Policy LM (מודל שפה לבניית הפרומפטים). המאמר משתמש באלגוריתם RL מסוג on-policy לאימון של Policy LM, כאשר המטרה לאמן את ה-MLP ב-Policy LM כך שהיא תמקסם פונקציית תגמול. באופן טבעי פונקצית התגמול אומדת עד כמה הצלחנו להפיק תוצאה רצויה מהפרומפטים, שנבנו באמצעות Policy LM.
הסבר של רעיונות בסיסיים:
אחד האתגרים המרכזיים לאימון מודל RL היא בחירה של פונקציית תגמול. כאמור במקרה שלנו פונקציה תגמול לפרומפט נתון מודדת את ״איכותו״, כלומר עד כמה הצלחנו להוציא איתו תשובות טובות מה-LLM. מרחב התגמולים הינו מאוד דליל כי התגמול מתקבל רק לאחר סיום בניית הפרומפט ולא לגמרי ברור איך לשערך אותו במהלך בניית הפרומפט (אחרי כל טוקן). בנוסף לרוב המוחלט של פרומפטים התגמול קרוב לאפס (כי הם לא מתאימים) שמונע הגדיאנט של האסטרטגיה להתעדכן באופן מהותי.
עקב כך הכותבים מציעים שיטת בניית תגמול ייחודית פר מטלה. למשל למשימת הסיווג few-shot המאמר מנסה לא סתם למקסם את ההסתברות של קטגוריית היעד אלא ממקסם את ההפרש בין הסתברות קטגוריית היעד לבין הקטגוריה בעלת הסתברות מקסימלית בין שאר הקטגוריות. בנוסף הכותבים ״מצ'פרים״ (מגדילים את התגמול) את Policy LM כאשר הפרש זה הוא חיובי (ראה פרק 3.1 במאמר להסבר יותר מעמיק).
אחרי שהבנו איך נבנית פונקציית התגמול, כעת נפרט איך הכותבים ממקסמים אותה. המאמר בגרסת on-policy של אלגוריתם שנקרא (SQL (Soft Q-Learning. נזכיר כי אלגוריתמי on-policy הם משםחת אלגוריתמי RL שבהם הסוכן משתמש באסטרטגיה (policy) הנוכחית כדי לקבוע את הפעולות ולומד מתגמולים שהוא מקבל. המשמעות היא שהסוכן מעדכן את האסטרטגיה על סמך התגמולים מהסביבה, מה שמביא לאסטרטגיה חדשה שמשמשת אותו לאחר מכן.
בגדול SQL ממקסם את התגמול הכולל אבל יחד עם זאת מנסה למקסם את ״האקראיות״ של האסטרטגיה (שהיא בעצם אנטרופיה של התפלגות הטוקנים). איך משיגים זאת? פשוט מוסיפים איבר אנטרופיה לביטוי של פונקציית התגמול המקורית. בהמשך SQL מנצל את הקשר בין הקלט לשכבת softmax של מודל שפה לבין Q-value (שהיא תגמול ממוצע למצב = t-1 הטוקנים הראשוניים) ופעולה (=הטוקן הנבחר בסיבוב t) נתונים כדי לבנות פונקציית תגמול ״נוחה״.
כלומר האימון של RLPrompt מתבצע באופן הבא:
- מכניסים את ״הגדרת המשימה״ ל Policy LM (ראה אפנדיקס A2 להסבר מפורט יותר).
- מזינים את השיכון (embedding) של המשימה ל- MLP שמוציא לנו פרומפט עבור המשימה.
- מכניסים פרומפט זה למודל שפה שעבורו אנו מייצרים אותו יחד עם הדוגמאות שיש לנו (few shot learning).
- מחשבים ערך פונקצית התגמול (וגם Q-value) עבור הפלט של מודל שפה
- מבצעים עדכון של האסטרטגיה (בגדול מעדכנים את המשקלים של ה-MLP) על סמך הערכים שחישבנו בסעיף הקודם.
ניתוח תוצאות:
משימות שנבחנו:
השיטה המוצעת ניתנת ליישום עבור מרחב גדול של משימות. הכותבים התרכזו בשתי משימות עיקריות: סיווג וגנרוט.
- סיווג: משימת Few-Shot Text Classification: סיווג של טקסט תוך שימוש במספר קטן של דוגמאות אימון. משימת הסיווג שקולה למשימה של בחירת טוקנים אשר תואמים לסט מסויים של קטגוריות ידועות מראש (verbalizers). כך למשל, עבור משימת סיווג סנטימנט, נשתמש בטמפלייט מהצורה “[Input] [Prompt] [MASK]”, ובאוסף של verbalizers הכולל מילים אינדיקטיביות לסנטימנט כמו "terrible" ו- "great". בזמן החיזוי, נמלא בטמפליייט הנ״ל את הפרומפט ואת משפט הקלט, ואז נבחר את ה- verbalizer token אשר ממקסם את ההסתברות עבור ה- MASK token, ומכאן נסיק את הסנטימנט של משפט הקלט (MASK = "terrible" ← סנטימנט = שלילי).
- גנרוט: משימת Unsupervised Text Style Transfer Text: בהינתן טקסט מקור, יש לכתוב אותו מחדש בסגנון יעודי. לדוגמא, משפט בסנטימנט חיובי שנרצה לכתוב מחדש בסנטימנט שלילי (״האוכל טעים״ ← "האוכל מגעיל״). המדידה נעשית באמצעות הערכה ידנית של מתייגים, וכן באמצעות מדדים אוטומטיים להערכה של טקסט מג׳ונרט, הכוללים:
- מדד Content: מידת שימור התוכן. נרצה לוודא שהטקסט המגונרט מכיל את כל האינפורמציה, ורק את האינפורמציה מטקסט המקור. בהתאם לכך, מדד ה- Content מכמת את המידה שבה כל מילה בטקסט הפלט היא מיושרת, או דומה סמנטית, למילה בטקסט הקלט, ולהפך. (מקור: [1])
- מדד Style: מידת הדיוק בסגנון הרצוי.
- מדד Fluency: מידת הרהיטות/שטף.
ניתוח תוצאות:
עבור משימת הסיווג, השיטת המוצעת מראה שיפור משמעותי על פני שיטות אחרות כמו Prompt Tuning ו-Instructions, ולמעשה משיגה ביצועים משופרים על כל ה-benchmarks המדווחים.
עבור משימת הגנרוט, השיטה המוצעת מסוגלת ללמוד פרופמטים ללא שימוש במידע מתויג. בהשוואה לשיטות אחרות, מדד ה-Content השיג ביצועים מעט נמוכים יותר, ואילו במדד ה-Fluency נרשם שיפור משמעותי.
כמו כן, התוצאות מראות כי בהרבה מהמקרים פרומפטים שטובים עבור משימות downstream הם חסרי קוהרנטיות, דוגמא לפרופמט נלמד עבור משימת סנטימנט: “Parameters Comparison )=( Compare either”. חוסר קוהרנטיות של הפרומפטים מקשה באספקט של פרשנות והבנה, ומכאן שמודלי שפה עושים שימוש שונה בפרומפטים מאשר משתמש אנושי.
סיכום:
המאמר מציע שיטה, מבוססת על למידת באמצעות חיזוקים, למציאה פרומפט אופטימלי. השיטה באה לאתר את הפרומפט הקשיח (כלומר הטוקנים עצמם). השיטה מצליחה להשיג ביצועים טובים יותר משיטות SOTA עבור משימות סיווג בכל המבחנים. במשימת העברת סגנון הביצועים הם ברי השוואה ממודלי SOTA.
deepnightlearners#
הפוסט נכתב על ידי מיכאל (מייק) ארליכסון, PhD, Michael Erlihson ו-Stav Shemesh
מיכאל עובד בחברת הסייבר Salt Security בתור Principal Data Scientist. מיכאל חוקר ופועל בתחום הלמידה העמוקה, ולצד זאת מרצה ומנגיש את החומרים המדעיים לקהל הרחב.
סתיו היא חוקרת NLP בחברת Amenity Analytics.