איך מאמנים מודלים ענקים ממש מהר?
זוכרים את השבוע הזה שלכולם היו תמונות פרופיל מAI?
ככה זה עבד:
מודלים גדולים המתרגמים טקסט לתמונה עושים עבודה יפה, לא צריך להרחיב. לאותם המודלים החלו להופיע שיטות אימון מיוחדות המאפשרות התאמה אישית של המודלים לייצר תמונות של אובייקטים חדשים מהטקסט.
דוגמה: לאמן אותם על תמונות של עצמי וללמד אותם שלאדם הספציפי החדש קוראים "המלך"
אותן השיטות בהינתן כקלט רק כמה תמונות בודדות של אותו הקונספט החדש יודעות להכווין את מודל הטקסט לתמונה מאומן מראש כך שילמד לקשר את התמונות עם המילים הספציפיות הללו. לאחר שהנושא נלמד אל תוך המודל, ניתן להשתמש באותו שם העצם כדי ליצר תמונות המכילות את אותו הטקסט בתוך התמונה וגם על סמך על היכולות הקודמות שהיו למודל. במקרה של Stable Diffusion לשיטת אימון מיוחדת זו קוראים: Dreambooth.
רגע.
רק שניה.
אז אתם רוצים לאמר שרשת שכוח החישוב שנדרש כדי לאמן אותה נמדד ב"שנות GPU" יכולה פתאום משום מקום להתאמן על 4 תמונות במשך חמש דקות על מחברת הקולאב החינמית שלי וזה גם עובד?
בדיוק.
לא נראה לי.
יש פה טריק.
רשתות לא מתנהגות ככה בFine Tuning, יש פה איזה טריק ובואו ננסה להבין אותו.
איך מאמנים רשתות ענקיות ממש מהר:
ניקח את Dreambooth כדוגמה לשיטה הכללית אבל את אותה השיטה אפשר להפעיל על כל רשת גדולה
אחת הבעיות הגדולות בFine Tuning של מודלים בכללי הוא הרס הידע הקודם הקיים בתוך הרשת. במקרה של מודלי טקסט לתמונה, אם ננסה פשוט לאמן את Stable Diffusion על סמך צמדי טקסט ותמונות אנחנו מסתכנים בכך שנהרוס ידע אחר השמור בתוך הרשת (וזה גם יקח המון זמן וידרש המון דוגמאות).
באופן כללי מאוד מאתגר ללמד את המודל להבין את הקונספט מספיק לעומק כך שהמודל יוכל להבין אותו בהקשרים שונים ויהיה "אינטואיטיבי". אפילו אחרי עשרות איטרציות על פני טקסטים מותאמים אישית המכילים תיאור מפורט של הקונספט בצורות שונות ובוריאציות שונות.
הטריק:
הטריק של Dreambooth יחסית פשוט: אם פשוט נאמן את המודל על התמונות והטקסט הוא יכנס מיד לאוברפיטינג. במקום זאת: נייצר וריאציות שונות לטקסט הקרובות לטקסט עליו נרצה לאמן ואיתן נייצר דוגמאות תמונה שונות מהמודל הישמשו כדי לדחוף את הגרדיאנט "גם לכיוון" של המודל הישן בזמן האימון. (יש היפרפרמטר המחליט על המשקול בין הדוגמאות החדשות לישנות).
לפרטים:
השיטה עצמה מקבלת כקלט כמה תמונות (בדרך כלל 3-5 תמונות מספיקות) של האובייקט ואת שם האובייקט.
לאחר מכאן המודל מתחיל להתאמן כך שבנוסף ללוס הדיפוזיה הרגיל מתווסף גם לוס מיוחד השומר על יצוג המודל קרוב למודל המקורי.
למה לא לאמן רק חלקים מהמודל? כי זה לא עובד טוב. הם ניסו במאמר גם פשוט לאמן רק כמה שכבות במודל אך הגיעו למסקנה שהשיטה הנפוצה כרגע עובדת הרבה יותר טוב ואמין.
עם שימוש בארכיטקטורה זו הם מאמנים כ200 אפוקים (!!!!11) ואת התוצאות המרהיבות אתם כולכם כבר מכירים בעצמכם.
ישנה עוד רשת קטנה המשתמש לסופר רזולוציה אבל אימונה פחות מעניין ומכיל פחות "טריקים". לכן לא נעבור עליו.
איך הם יודעים מה הטקסט הנכון?
המטרה שלנו היא "להשתיל" זוג (טקסט, תמונה) ב"מילון" של המודל, כך שבהינתן הטקסט, נוכל ליצור תמונות חדשות לגמרי המכילות את אותו האובייקט הספציפי הזה עם שינויים נוספים.
עוד טריק: טוקן מיוחד
אחד הטריקים המעניינים שהם משתמשים בו הוא שבמקום לאמן את המודל ממש רק על טקסט לתמונה (שיכול להכיל פריור חזק לתמונות אחרות ולהקשות על המודל) הם מוסיפים עוד טוקן "נדיר" לטקסט המסמן למודל שזה "אתם". אותו הטוקן מכיוון שכמעט ולא נעשה בו שימוש לפני כן מלמד את המודל שבכל פעם שהוא רואה את אותו הטוקן עליו לייצר "אתכם".
רעיון מגניב!
חשוב להוסיף: ישנם באינטרנט המון טריקים היום לשפר את הביצועים בין אם לייצר טקסט מהתמונות "הפוך" כדי להוסיף פרטים קטנים לטקסט שלהם ובין עם טריקים אחרים. רובם משתמשים באותה השיטה הכללית שתיארנו כאן כדי לייצב את האימון.
אקסטרפולציה
לא צריך להרחיב, הדוגמאות נמצאות בכל מקום היום. שיטה זו כל כך פשוטה ו"דבילית" ובכל זאת מובילה למודלים המסוגלים לבצע אקסטרפולציה בצורה מדהימה [וליצור לנו תמונות כמו התמונה המצורפת לפוסט].