הבחינה ב-SEB והתוכן כמעט ללא שינוי משנים קודמות חוץ מ- 1. יהיו שאלות על RL 2. יהיו 2 שאלות קוד 3. השאלות יהיו בעברית 4. לא למדנו: 1. הנושאים Disentanglement ו-Compositionality 2. קצת פחות על Diffusion (אבל דומה ל-Flow Matchign) 3. שאלה 17 ממועד א 2023 4. "מטאפורמר לא ממש למדנו כמו שצריך אז לא צריך לדעת השנה" אבל כדאי להכיר את הסכמה של מטאפורמר ורזנט 5. סיכוי "פחות" שישאל איך ה-Attention של GPT שונה מ-BERT כי בשנים קודמות היה את זה בתרגיל (?) וגם פחות דיברנו על זה
איך ללמוד? - על כל שיטה שלמדנו לכתוב עליה קצת, מה היתרונות שלה, מה החסרונות שלה! - לוקח כל מיני לוסים שלמדנו בקורס ולכתוב אותם בפייטורצ'. (עד 5 שורות). - ידיד רומז שצריך לזכור את הנוסחאות. - לרוב המודלים למדנו 3 דברים - לוס, דגימה ו-Point Estimation.
$$ L_{Emp} = \mathbb{E}{(x,y) \in \hat{q}} \ell (f\theta(x), y) = \frac{1}{n}\sum_{i=1}^{n} \ell (f_\theta(x_i), y_i) $$ - כאשר $\hat{q}$ היא ההתפלגות על הדגימות שלנו (מוגדרת בעזרת פונקציות דלטא כך שהאינטגרל שלה הוא 1). - על סמך זה מוגדר עקרון ה-Empirical Risk Minimization (ERM)
$$ KL(Q|P) = \mathbb{E}{y \in q} \log \left( \frac{q(y)}{p\theta (y)} \right) = \sum_{y \in q} q(y) \cdot \log \left( \frac{q(y)}{p_\theta (y)} \right) $$ - דרך בסיסית למדוד מרחק בין התפלגויות
במקרה של למידה: $$ KL(Q|P) = \mathbb{E}{y \in q} \log \left( \frac{q(y|x)}{p\theta (y|x)} \right) $$
$$ H(Q) = -\sum_{y \in q} q(y) \log q(y) $$ - מינוס לוג ההסתברות זה כמה המאורע "מפתיע" - להתפלגות האחידה יש את האנטרופיה הכי נמוכה
$$ CE(Q|P) = \mathbb{E}{y \in q} -\log p\theta(y) = -\sum_{y \in q} q(y) \log p_\theta(y) $$ - אינטואיטיבית בהקשר למידה זה כמה $p_{\theta}$ מופתע לפי ההתפלגות האמפירית - יכול להיות אינסוף אם p ממש נמוך מתי ש-q לא נמוך
במקרה אמפירי: $$ CE(Q|P) = -\frac{1}{n} \sum_{i \in [n]} \log p_\theta(y) $$ וזה בדיוק ה-Negative Log Likelihood!!!!
מתקיים: $$ KL(Q|P) = CE(Q|P) - H(Q) $$ - כשנעשה אופטימיזציה על KL, לא אכפת לנו מהרכיב השני כי הוא קבוע ב-$\theta$ (תיאורטית היינו יכולים לאפטם על פני שניהם ואז זה לא היה נכון)
בכל מודל יהיו נרצה להכיר את שלושת הדברים הבאים (אבל לא בכל מקרה יהיה אפשר לעשות את כולם): 1. שערוך - מציאת p שמשערכת את ההתפלגות האמיתית q 2. דגימה - למצוא דרך יעילה לדגום דגימות y לפי p(y) 3. שערוך נקודתי - בהינתן נקודה y, מה הצפיפות שלה ב-p. למה 1 שונה מ-3? ב-3 אני עושה מינימזציה לאיזה מדד הפרש כמו KL. יכול להיות שאני רק יודע לחשב אותו גלובלית ולא עבור נקודה מסוימת.
נראה המון פרדיגמות ולכל אחת יש ייתרונות וחסרונות ונכיר אותם.
מודלים אוטו רגרסיבים מתבססים על חוק השרשרת. המודל של העולם הוא $$ q(y^{\leq d}) = q(y^d | y^{<d}) \cdot q(y^{d-1} | y^{< d-1}) \cdot ... \cdot q(y^2 | y^1) \cdot q (y^1) $$ ואנחנו לרוב נניח כי ה-y-ים הם משתנים דיסקרטיים (יכול להיות מקבוצה בגודל מיליון, למשל מילים) המטרה שלנו היא ללמוד לכל i את $$ p_\theta(y^i | y^{<i}) $$ שישערך כמה שיותר טוב את q.
מאמנים נגיד רשת נוירונים שבהינתן המילים עד עכשיו חוזה את המילה הבאה
עושים את זה עם עקרון ה-Maximum likelihood / מינימום לוג לייקליהוד. שראינו (שגם כאן יוצא כמו Cross Entropy)! $$ L(\theta) = -\sum_{i=1}^d \mathbb{E}{q(y^{\leq i})} \log p\theta (y^i | y^{<i}) $$ ובהנחה שיש לי n משפטים שונים בסט האימון: $$ L(\theta) = -\sum_{i=1}^d \sum_{k=1}^n \log p_\theta (y^i_k | y^{<i}_k) $$ (בעצם בתוחלת של הקרוס אנטרופי במקרה האמפירי יש לי רק ערך אחד נכון ולכן נרצה שרק הוא יקבל את הלייקליהוד המקסימלי) (אבל יש לי כמה משפטים אז כן יכולות להיות כמה אפשרויות :))
- מחשבים את ההסתברות כל מילה לפי הפונקציה $p_\theta$ שמצאנו, בהינתן המילים הקודמות. - אפשר לקחת את המקסימלית אבל אז אין שונות וזה לא כזה - אפשר לדגום לפי ההתפלגות שקיבלנו - אפשר לדגום לפי k המילים הכי טובות בהתפלגות שקיבלנו
ההסתברות עבור המשפט השלם היא בדיוק חוק השרשרת אבל עם הפונקציה שלמדנו: $$ \log p_\theta(y) = \sum_{i=1}^d \log p_\theta(y^i | y^{<i}) + log(y^1) $$
הסיבה שעושים הכול עם לוגים זה יציבות נומרית. בהכללה למודלים Conditional פשוט מוסיפים בהינתן x.
חסרונות: 1. זמן Inference לינארי באורך הסדרה O(n). אז בעייתי אם הסדרות ארוכות. 2. דורש סדר מסוים על הדאטא 3. לא מנצל Low Rank (?)
$$ p(y) = \sum_{z=1}^k \alpha_z \cdot \mathcal{N}(y|\mu_z, \Sigma_z) $$ - אפשר לשערך באמצעות מקסימום לייקליהוד (בהנחה על כמות גאוסיאנים כלשהו). וגם יש טריק להתכנס מהר בעזרת אלגוריתם EM (אבל לא רלוונטי)
מודל Varational Autoencoder הוא סוג של הכללה של GMM למקרה שבו יש לנו אינסוף גאוסיאנים/מחלקות.
איך זה מכליל GMM? $$ p_\theta(y) = \sum_z p_\theta(y|z) \cdot p_\theta(z) = \mathbb{E}{z \in p_Z} p\theta(y|z) $$ אבל יש אינסוף z-ים. אז איך נחשב את זה בצורה יעילה? גם כאן המטרה שלנו היא מינימום מינוס לוג לייקליהוד: $$ \arg \min_\theta L(\theta) = \sum_{i=1}^n - \log (p_\theta (y_i)) $$ הדרך להתמודד עם אי היעילות היא דגימה.
נניח שאנחנו רוצים לחשב את התוחלת של f(z) לפי Z ואנו יודעים לדגום מהמשתנה המקרי Z. אז במקום לחשב את האיטגרל המלא פשוט נדגום מלא פעמים מ-Z ונחשב את: $$ \tilde{f} \approx \frac{1}{M} \sum_{i=1}^M f(z_i) $$ ואם יהיו לנו אינסוף דגימות זה באמת יהיה הערך הנכון. אבל אם לא, תהיה בעיה כי תהיה שונות גבוהה בשערוך. זה מאוד תלוי התפלגות. למשל אם f(z) מאוד גבוהה רק במקום אחד, אבל p(z) יוניפורמית, אז סביר שלא נתפוס את הנקודה הזאת כשנדגום מ-p(z). כאן נכנס הרעיון הבא:
במקום לדגום מ-p(z), נבחר מה שנקרא Proposal Distribution שנמצאת סביב האיזור המעניין ונדגום משם (r). הבעיה היא שאז אנחנו משערכים את התוחלת לפי r ולא לפי z. אז ניתן משקולות importance כדי לנרמל את זה כראוי: $$ \mathbb{E}{z \in p}f(z) = \sum_z f(z) \cdot p(z) = \sum_z f(z) \cdot \frac{p(z)}{r(z)} \cdot r(z) = \mathbb{E}{z \in r} f(z) \cdot w(z) $$ תהיה שונות נמוכה בדגימה כאשר r(z) גבוה מתי ש-$p(z) \cdot f(z)$ גבוה
בהגדרה למעלה בהקשר שלנו f היא בעצם $p_\theta(y)$. אז איך נמצא את r? התשובה: נלמד רשת נוירונים שבהינתן y חוזה את r (בתור גאוסיאן).
הלוס שנאפטם לפיו ה-ELBO (Evidence Lower Bound) $$ ELBO(y) = \mathbb{E}_{z \in r} \log \left( p(y|z) \right) - KL(r|p_z) $$ וזה נובע מלעשות לוג ללייקליהוד עם ה-Importance sampling אבל מתקיים: $$ log(p(y)) \geq ELBO(y) $$ - הצד השמאלי אומר שהתחזית שלנו בהינתן z במרחב הלטנטי תהיה טובה. - הצד הימני אומר שלא נתרחק מהמשתנה הנורמלי הסטנדרטי. - אפשר להוכיח שהערך האופטימלי של r הוא p(z|y) - ניקח ממוצע של ה-ELBO של כל הדגימות בדאטאסט - בפועל ב-VAE לומדים שני דברים: 1. פונקציית ג'נרטור/דיקודר G שבהינתן z מחזירה את המרכז של p(y|z) 2. פונקציית אנקודר שבהינתן y מחזירה mu ו-Sigma של גאוסיאן במרחב של z (שזה בעצם r)!!!!!!!!
יש פה את טריק הרה-פרמטריזציה שבמקום לדגום מ-r אנחנו דוגמים ממשתנה סטנדרטי וכופלים אותו בפרמטרים שלנו (כי זה מוזר לגזור דרך משתנה מקרי)
כבר יש לנו את האנקודר שנותן את r בהינתן y. אז פשוט מחשבים את $$ p(y) = \mathbb{E}{z \in p_z} p(y|z) = \mathbb{E}{z \in r} p(y|z) \cdot \frac{p(z)}{r(z|y)} $$ (שוב עם דגימה ומומלץ לדגום איזה 100 פעם)
$$ p_y(y) = p_z(\phi^{-1}(y)) |\det \frac{\partial \phi^{-1}(y)}{\partial y^T}| $$
אז פשוט נגדיר מודל מקסימום לייקליהוד, ונלמד את פי ככה! $$ L(\phi) = -\frac{1}{n}\sum_{i\in[n]} \log p_{y}(y_i) = -\frac{1}{n}\sum_{i\in[n]} \log \left( p_z(\phi^{-1}(y)) |\det \frac{\partial \phi^{-1}(y)}{\partial y^T}| \right) $$ אבל נצטרך שני דברים! 1. שפי תהיה הפיכה ונוכל למצוא את ההופכית. 2. שנוכל לחשב את הדטרמיננטה של היעקוביאן שלה.
מיפויים: 1. מיפוי אפיני: $$ \phi(z) = s \cdot z + b $$ קל להפוך ולחשב את הדטרמיננטה אבל לא אקספרסיבי מספיק 2. מיפוי Coupling: 1. מחלקים את z לשתי חתיכות, $z=(z_l,z_r)$ 2. חוזים עם רשת נוירונים, בהינתן $z_r$, מיפוי אפיני ל-$z_l$. כלומר חוזים $\hat{s}, b$ 3. מגדירים $y_r = s \cdot z_r + b$, $s = e^\hat{s}$ 4. מחזירים $y = (z_l, y_r)$ - בהינתן את המשקולות של הרשת, קל לחשב את ההופכי - לגבי דטרמיננטת יעקוביאן - היעקוביאן משולשית עליונה אז הדטרמיננטה זה האלכסון וזה יוצא $$ \prod_{k\in[d_r]} |s_k^{-1}| $$ 3. מיפוי פרמוטציה: להפוך בין הקואורדינות
בפועל משרשרים בין מיפויי Coupling ופרמוטציה. והדטרמיננטה היא מכפלת הדטרמיננטות!
$$ L(\phi) = -\frac{1}{n}\sum_{i\in[n]} \log (p_{y}(y_i)) = -\frac{1}{n}\sum_{i\in[n]} \log \left( p_z(\phi^{-1}(y)) |\det \frac{\partial \phi^{-1}(y)}{\partial y^T}| \right) $$ $$ = -\frac{1}{n}\sum_{i\in[n]} \log (\prod s_k^{-1}) + \log (p_z(\phi^{-1}(y_i))) $$
נדגום מ-z ונעביר דרך פי.
בהינתן y נחשב את ה-z המתאים בעזרת ההופכית של פי, ואז נחשב את ההסתברות (בדרך כלל המרחב של z הוא פשוט גאוסיאן סטנדרטי אז קל לחשב) $$ log(p(y)) = \log (\prod s_k^{-1}) + \log (p_z(\phi^{-1}(y))) $$
חסרונות: 1. המימד של הפריור והדאטא צריך להיות זהה 2. אי אקספרסיביות 1. כל שכבה חייבת להיות הפיכה ובערת דטרמיננטת יעקוביאן חשיבה 2. צריך בדרך כלל המון שכבות 3. ארכיטקטורה לא סטנדרטית
המודלים עד עכשיו השתמשו ב-Maximum likelihood / קירוב שלו. כאן לא
נניח שיש לנו דגימות משתי התפלגויות (ואנו לא יודעים כלום על ההתפלגויות). Two Sample Tests מנסים לענות לנו האם זו אותה התפלגות או לא. למשל: KL.
אבל KL Divergence בעייתי! כי בין התפלגויות אמפיריות זה יהיה אינסוף תמיד :(. זה נכון לא רק ל-KL, אלא לכל F-test.
רעיון ל-Two Sample Tests שמטרתו היא למצוא פונקציה שמקבלת ערכים גבוהים עבור ההתפלגות האחת וערכים נמוכים עבור ההתפלגות השנייה. מודדים את המרחק בין ההתפלגויות לפי כמה טובה הפונקציה שמצאנו. $$ IPM(p,q|\mathcal{F}) = \max_{f \in \mathcal{F}} \mathbb{E}{y \in p}f(y) - \mathbb{E}{y \in q}f(y) $$
מאמנים שני מודלים במקביל. אחד שמג'נרט (נגיד תמונות), G, ודיסקרימנטור f שמנסה להבדיל בין תמונות אמיתיות למג'ונרטות. הלוס דומה ל-Two Sample Test: $$ L(\phi, \theta) = \mathbb{E}{z \in p_z}\log(f\theta(G_\phi(z))) + \mathbb{E}{y \in q}\log(1-f\theta(y)) $$
בעיות: 1. ההיפרפרמטרים של כמה עדכונים ל-G לעומת f וכו מאוד משפיעים על התוצאה. האימון לא יציב. 2. בהתחלה לדיסקרימינטור תהיה עבודה מאוד קלה, והוא יגיד שכל מה שמג'נרטים לא אמיתי, אז המודל הגנרטיבי לא ידע לאיזה כיוון ללכת כי הגרדיאנט לא אינפורמטיבי.
בעיה 3 - טענה: - אם הדיסקרימנטור הוא בעל כוח אינסופי/מספיק אקספרסיבי, הלוס של GAN אקוויולנטי ללוס JS. - זו בעיה כי זה דומה ל-KL וסיכוי גבוה שזה יקבל סתם log2 (לא אינסוף אבל קבוע ולא עוזר)! אז למה GAN סטנדרטי בכל זאת אפקטיבי לפעמים: זה לא בהכרח נכון שהדיסקרימנטור אופטימלי (כי מבוסס על רשת נוירונים שהיא בדר"כ חלקה) ועל כן לא תמיד יהיה אקוויולנטי.
==אז כדי לפתור את זה, מכריחים את הדיסרימנטור להיות ליפשיצי, וכשהוא ליפשיץ 1 ואופטמלי, הוא אקוויוולנטי למרחק וושרסטיין!!!== זה נקרא WGAN.
(כנראה לא צריך לזכור בע"פ את הנוסחא) מחפש את ההתאמה האופטימלית בין זוגות של נקודות אחת מההתפלגות הראשונה ואחת מההתפלגות השנייה, כך שהמרחק הכולל ביניהן מינימלי.
אבל איך מכריחים את הדיסקרימנטור להיות ליפשיצ 1? הרי הוא רשת נוירונים. יש כמה דרכים:
נרצה לעשות משהו דומה ל-Flow Matching מבלי חישובים מוזרים של הפיכות ויעקבואין ובלי ארכיטקטורות מוזרות. גם כאן יש לנו פריור בזמן t=0 (גאוסיאן), ונרצה להגיע להתפלגות האמיתית בזמן t=1. זה יתפתח בצורה רציפה שתי נקודות מבט: 1. לגרנג'יאן: פונקציית צפיפות שלמה על המרחב בכל נקודת זמן (probablity path). נסמן $p_t(y)$ 2. אוילר: מעקב אחר חלקיק ספציפי לאורך זמן. נסמן $\phi_t(y)$ (מתאר קואורדינטות)
$$ \frac{d \phi_t (y)}{dt} = v_t(\phi_t(y)) $$ חלקיק בנקודה $\phi_t(y)$ זז במהירות $v_t(\phi_t(y))$ בזמן t.
נרצה לשערך את השדה הווקטורי $v_t$, ונעשה זאת בעזרת רשת נוירונים. אבל כדי לעשות זאת נצטרך להבין מה השדה האמיתי שאותו אנו משערכים, $u_t$. $$
\arg \min_{v_t} \mathbb{E}{y\sim p_t} ||v_t(y) - u_t(y)||^2 $$ ואז קל לחשב את המיקום בנקודה הבאה, פשוט מוסיפים למיקום $v_t\cdot \varDelta_t$. אז מה הprobablity path שלנו? אם היינו רוצים רק להגיע לנקודה אחת $y_1$ זה היה: $$ p_t(y|y_1) = N(y|\mu_t(y_1), \sigma_t^2I) $$ כאשר ב-t=1 מתקיים כי התוחלת היא y1 וב-t=0 היא 0. אבל אנחנו רוצים להגיע לכמה נקודות אז ניקח ממוצע משוקלל שלהם $$ p_t = \sum{y_1} p_t(y|y_1)q(y_1) $$ (בחישוב של זה עם ההתפלגות האמפירית נגיד לתמונות, סביר שיש לנו רק עותק אחד מכל תמונה ואז-q(y_1) יהיה אחיד לכל הנקודות). אבל נזכור שאנו רוצים את זה מנקודת המבט של שדה ווקטורי. נגדיר את השדה הווקטורי ה-Unconditional להיות: $$ u_t(y) = \sum_{y_1} u_t(y|y_1) \cdot p_t(y_1|y) = \sum_{y_1} u_t(y|y_1) \cdot \frac{p_t(y|y_1) \cdot q(y_1)}{p_t(y)} $$ ניתן להוכיח בעזרת ה-Continuity Equation כי השדה הווקטורי הזה מתאים לProbality path לעיל. ניתן להראות כי ביטויי האופטימיזציה הבאים שווים $$
\arg \min_{v_t} \mathbb{E}{y\sim p_t} ||v_t(y) - u_t(y)||^2 = \arg \min{v_t} \mathbb{E}_{y_1 \sim q, y\sim p_t|y_1} ||v_t(y) - u_t(y|y_1)||^2
$$
וכך באמת נאמן את הרשת.
אבל מה השדות הווקטורים ה-Conditional??? במקרה הכי פשוט הקו הישר בין כל נקודה לy1.
$$
\arg \min_{v_t} \mathbb{E}_{y_1 \sim q, y_0\sim p_0, t \sim U[0,1]} ||v_t(t\cdot y_1 + (1-t) \cdot y_0) - (y_1-y_0)||^2
$$
נדגום מגאוסיאן ונלך בצעדים בגודל $\varDelta_t$ קטן כלשהו. כל פעם נחשב את $v_t$ לפי רשת הנוירונים ונוסיף את המכפלה של שניהם לנקודה הנוכחית עד שנגיע לזמן t=1.
בהינתן y הולכים בכיוון ההפוך של הווקטור שרשת הנוירונים נותנת לנו עד שמגיעים לזמן 0 ואז פשוט עושים Point estimation לגאוסיאן.
במקרה הליניארי הרגיל של FLow Matching מתקיים כי: $$ u_t(y) = \frac{\sum_{y_1}y_1p_t(y_1|y) - y}{1 - t} = \frac{D(y) - y}{1 - t} $$ הביטוי הזה אומר לנו מה נקודת הסיום הצפויה שלנו. זה יוצא בדיוק ה-Ideal Denoiser התוחלת על פני כל הסיומים האפשריים עם ההסתברויות שלהם. מנקודת מבט דואלית, זה כאילו שהוספנו רעש לתמונות האימון שלנו, ואנחנו מנסים להעיף את הרעש. לא נוכל להגיד בדיוק מאיזו תמונה התחלנו, אבל נוכל לבחור ממוצע משוקלל שלהם. - לא יודע שום דבר על ההיסטוריה שלנו - לא תמיד יודע את הפתרון, משקלל אותם
ניתן ליצור גרסא Conditional ל-Flow Matchign יחסית בקלות (מוסיפים את הקלאס או Embedding בתור קלט לרשת הנוירונים). אבל זה לא תמיד עובד כזה טוב. דרך אלטרנטיבית כי Classifier free guidance: $$ v_t^{CFG} = v_t(y) + \lambda (v_t(y|x) -v_t(y)) $$ - בפועל זה משפר. (כמובן תלוי ב-$\lambda$) - משלבים מודל Conditional עם מודל Uncoditional.
חסרונות: - הרשת במימד גבוה. בתמונות זה בעייתי אז לרוב עושים את זה ב-Latent Space שמשיגים בעזרת AutoEncoder
| Model | Discrepency | Sampling | Point Estimate | Pros | Cons |
|---|---|---|---|---|---|
| Single Gaussian | Maximum Likelihood | simple with cdf | equation | +fast, simple | - Not Expressive |
| GMM | Maximum Likelihood | pick gaussian, then sample | equation (sum of gaussians) | +stronger | - hard to estimate - need a lot of gaussians |
| Variational Inference | ELBO (proved to be greater than mle) | sample latent -> get gaussian -> sample it | get the mu, var of the gaussian in latent with net -> sample from it a bunch of times -> equation | +strong +kinda efficient sample |
- gaussian prior is weak, hard to replace - not optimizing exactly log likelihood |
| Autoregressive | Maximum likelihood | sequentially | whole sentence equation with chain rule | +general architectures work + can paraellelize easily |
- needs ordering - serial sampling |
| Inverse Flow | Maximum likelihood | sample latent -> run through layers | inverse and normalize!!! with det jacobian | +quick LL optimization | - high dim - non-standard architectures - layers invertible |
| GAN | JS Divergence (for optimal), otherwise trained | just sample | - | - collapse - no point estimate - hyperparameter sensitive |
|
| WGAN | Wasserstein Distance | just sample | - | - no point estimate | |
| Flow Matching | vector fields... L2 | sample gaussian -> flow forward dt | flow back? (yedid said didnt learn) | + works well + needs less steps than autoregressive |
- high dim - iterative |
הסכמה הקלאסית של לימוד ייצוגים הוא שמירה על מרחק. יש לנו פונקציה d שמודדת מרחק בין זוגות של דגימות. נרצה שהמרחק בין דגימות ובין ה-Embeddings שלהם יהיה דומה. אם אנחנו מגדירים את המרחק שלנו בתור מרחק אוקלידי - זה PCA.
בעיה: - זה בסופו של דבר פונקציה ליניארית. לא מספיק חזק עבור מידע מורכב. לא נצליח לעבור לייצוג עם מרחקים סמנטיים. אז נעבור לשיטות לוקאליות. בהן יש הנחה שהדאטא נמצא על Manifold ממימד נמוך.
בעיות עם זה: 1. אפשר שכל הנקודות יהיו באותה נקודה, ותהיה נקודה אחת רחוקה (וכך נעקוף את ההגבלה של הקווריאנס)
בעיות כלליות עם שיטות קלאסיות: 1. איך מסווגים נקודות test עכשיו? למדנו רק את ה-Embedding של האימון 2. הסתמכנו מאוד על המרחק האוקלידי, אבל הוא לרוב לא מעניין 3. לא כזה עובד טוב
המודל מהווה סוג של אמורטיזציה עם למידה עמוקה של Laplacian Eigenmaps.
שיטות מודרניות עושות שני שינויים: 1. אמורטיזציה - במקום ללמוד z לכל דוגמא, נלמד רשת שתמפה מ-x ל-z. 2. במקום למצוא שכנים, נייצר שכנים (אוגמנטציה).
מה טוב באוגמנטציות? 1. יכול למדל שונות סמנטית 2. לא דורש kNN O(n^2)
מה רע באוגמנטציות? 1. צריך להחליט על ווריאציות 2. לא כל אוגמנטציה קל לייצר
$$ \mathcal{L}{VIC} = \alpha \cdot \sum{k=1}^K \max (0, 1 - \sqrt{Cov(Z){k,k}}) + \beta \sum{j=1, j \neq k}^K Cov(Z)^2_{k,j} + \frac{\gamma}{N} \sum_{i=1}^N \sum_{j=1}^N (G){i,j} ||Z{i,\cdot} - Z_{j,\cdot}||2^2 $$ 1. הרכיב הראשון מכריח את האלכסון של הקווריאנס להיות לפחות 1. (נועד למנוע Collapse) 2. הרכיב השני מכריח את כל מה שמחוץ לאלכסון של הקווריאנס להיות קרוב ל-0. (נועד למנוע Collapse) 3. הרכיב השלישי הוא המשמעותי. לוקחים זוגות של ייצוגים של דוגמא והאוגמנטציה שלה. כלומר $(G){i,j}$ הוא 0 כאשר i הוא לא אוגמנטציה של j. ונרצה שהם יהיו כמה שיותר קרובים :).
דרך אחרת לחשוב על זה זה כמו בעיית קלסיפיקציה שכל מחלקה היא מכלול האוגמנטציות של תמונה אחת.
$$ L(E_\theta) = \sum_i -log(p(i'|i)) = \sum_i - E_\theta(x_i) \cdot E_\theta(x_i') + \log (\sum_{j=1}^n e^{E_\theta(x_i) \cdot E_\theta(x_j')}) $$ - כמו למעלה. - הרכיב הראשון אומר שנהיה קרובים לאוגמנטציה - הרכיב השני אומר שנהיה רחוקים מהשאר - (הכול על מעגל היחידה)
יש מודל אחר שפישט את הרעיון והשאיר רק את הרכיב הראשון על ידי כך שעושים Stop-Grad לאחד הקידודים, מסתבר שזה עובד.
$$ L(E_\theta) = \sum_i R(E_\theta(x_i)) \cdot E_{SG(\theta)}(x_i') $$ - לא חשוב מה זה R זה ה-Prediction head בלה
מבוסס על CCA ומעניין אותנו יותר הרעיון הכללי ופחות הניסוח המדויק. ב-CCA יש לנו זוגות של דברים שמתארים את אותו דבר למשל תמונה וטקסט שמתאר אותה, או תמונה ואוגמנטציה. CCA מנסה ללמוד ייצוג במימד d כך ש: 1. הקורלציה בין הווקטור בגודל n שמתאר את המימד ה-i של הייצוג של הקבוצה הראשונה, יהיה קורלטיבי לווקטור בגודל n שמתאר את המימד ה-i של הייצוג של הקבוצה השנייה. 2. המימד ה-i ו-j (אם הם שונים) לא קורלטיבי (או אנטי קורלטיבי). מתמטית: $$ C_{i,j} = \frac {\sum_{(z,z') \in (Z, Z')}z_i \cdot z_j'} {\sqrt{\sum_{z \in Z}z_i^2}\cdot \sqrt{\sum_{z' \in Z}{z'}_j^2}} $$
למה זה עובד? 1. זה המימדים יהיו אינפורמטיבים בגלל דרישת הקורלציה (בשביל הקורלציה צריכה להיות ווריאציה גם בתוך הווקטור שבגודל n) 2. לא יהיה קולפס כי לא תהיה קורלציה בין המימדים השוניפ.
אז מה עושים בBarlow Twins. קודם כל שני הדאטאסטים זה תמונות ואוגמנטציות.
$$ L(\theta) = \sum_{i=1}^d (1-C_{ii})^2 + \alpha \sum_{i=1}^d \sum_{j \neq i} C_{ij}^2 $$ כלומר פשוט נרצה שהקווריאנס תהיה מטריצת היחידה.
מה העלות החישובית של Barlow Twins לעומת Contrastive Learning: - ב-Contrastrive Learning זה $O(n^2 \cdot d)$ - ב-CCA זה $O(d^2 \cdot n)$ זה ייתרון!
השיטות הבאות אינן מבוססות שכנויות וזה היתרון שלהן!
שיטה קלה וקלאסית של לימוד ייצוגים אבל לא בהכרח מאפטם את מה שצריכים $$ L(E,G) = \mathbb{E}_{x \in q} || G(E(x) - x) || ^2 $$
דוחס ל-Embedding דיסקרטי. לא נכנסים לאיך בדיוק מאפטמים דבר כזה
מודל BERT לטקסט מודל BEIT לתמונות
| Model | Pros | Cons |
|---|---|---|
| Contrastive | +Works Well | -O(n^2 d) -Need to know augmentations |
| Barlow Twins | +O(n d^2) | -O(n d^2) |
| SimSiam | +O(nd) | -Might Collapse if not careful |
| VICRreg | ??? כמו קונטרסטיב | |
| BERT | +Works Well | -Doesn't reduce dimension |
| BEIT | - | - |
| MAE | +Good for pretraining | -Doesn't learn good representations |
סימונים: 1. מצב: x 2. פעולה: y 3. פוליסי (ההתפלגות של הפעולות בהינתן מצב): $\pi (y|x)$ 4. ריוורד (דטרמניסטי שקיים בעולם, הפרס על לעשות את פעולה x בהינתן y): $r(x,y)$ סט האימון בלמידת חיזוק הוא הניסיון: שלשות $(x, y, r(x,y))$. זה ההבדל המרכזי בין RL ל-Supervised Learning. אנו לא תמיד יודעים מה הפעולה האופטימלית!
פונקציית $v$ (התוחלת של ה-Reward מסטייט x כשמשתמשים בפוליסה $\pi$): $$ v_\pi (x) = \mathbb{E}_\pi r(x,y) = \sum_y \pi (y|x) r (x,y) $$
פונקציית $q$ (התוחלת של ה-Reward מסטייט x כשמבצעים את פעולה $y$ ומשתמשים בפוליסה $\pi$): $$ Q_\pi (x,y) = r(x,y) $$
הפוליסה האופטמלית תקיים את הדבר הבא: $$ \pi^* = \arg \max_{\pi \in \Pi} \sum_x p(x) \cdot v_\pi(x) = \mathbb{E}_{x \sim p_x, y \sim \pi(\cdot | x)} r(x,y) $$
אבל איך מוצאים אותה?
הפוליסה האופטמלית תקיים את הדבר הבא: $$ \pi^*(x) = \arg \max_y r(x,y) $$ - זה לא פיזבילי לא תמיד נוכל לנסות את כל הפעולות בהינתן סטייט מסויים - גם אם כן זה יכול לקחת מלא זמן - יכול להיות שעד שנגיע לפעולה הנכונה נבחר פעולה קטסטרופלית - יכול להיות גם שמרחב הפעולות שלנו אינסופי
איך מתגברים על זה? משתמשים ב:
פשוט לומדים את פונקציית ה-Reward: $$ L(\theta) = \sum_{i=1}^n ||Q_\theta(x_i, y_i) - r(x_i, y_i)||^2 $$ - בעיה: אם הדאטאסט שלנו מגיע מפוליסי ספציפי, אז בכלל לא נבדוק פעולות חדשות טובות שאנחנו כרגע מגדירים כלא. - (משלבים את זה עם ה-argmax מהבלוק הקודם בצורה איטרטיבית)
שיטה אלטרנטיבית ונפוצה:
ראינו כי אנו רוצים למצוא את הפוליסה עם ה-Excpected Reward המקסימלי. $$ R(\pi_\theta) = \mathbb{E}{x \sim p_x, y \sim \pi\theta(\cdot | x)} r(x,y) $$ אז נגזור את זה לפי הפרמטרים של פונקציית הפוליסי: $$ \nabla_\theta R(\pi_\theta) = \mathbb{E}{x \sim p_x, y \sim \pi\theta(\cdot | x)} \nabla_\theta \log \pi_\theta (y|x) r(x,y) $$ - (יש שם איזה טריק עם הלוג של הגרדיאנט) - עכשיו פשוט עושים Gradient Descent כדי למצוא את הפוליסי האופטימלי ביחס ל-Expected Rewards. - לרוב הפוליסי תהיה רשת נוירונים עכשיו - למה זה טוב לעומת reward model? פותר את בעיית ה-Bias, עושים יותר אקספלורציה לסטייטים שלא ראינו. - עובד טוב עבור המקרה שיש לנו מרחב פעולות אינסופי!
שינוי קטן לזה - Supervised Fine Tuning: (Only Positive actions): נגיד אנחנו רוצים לשפר LLM. ניקח רק את הפלטים הטובים ואת הLLM הקיים (הפוליסה) ונאפטם לפי: $$ \nabla_\theta L(\theta) = \mathbb{E}{y \sim \pi\theta(\cdot | x), r(x,y) > 0} \nabla_\theta \log \pi_\theta(x,y) $$ נשים לב שזה פשוט מקסימום לייקליהוד.
בעיה: אם כבר בהתחלה יש לכל הדגימות יש Reward חיובי, ייקח ל-Reinforce המון המון זמן להתכנס. הפתרון:
קבוע (פר סטייט) שמוסיפים / מחסירים מה-Reward כדי שיהיו גם חיוביים וגם שליליים. נקודה חשובה: בתוחלת של הגרדיאנט, כל פני כל הפעולות, זה לא משפיע (על פעולות ספציפיות משפיע) איך בוחרים? מפחיתים את ה-Value (ה-Reward הממוצע בסטייט) מהפונקציית Q שלנו (שבמקרה של צעד אחד זה פשוט הריוורד האמפירי).
שיטת REINFORCE שראינו היא on-policy, כלומר, בכל פעם שאנחנו מעדכנים את הפוליסי, אנחנו צריכים גם להשיג Experience חדש (שלשות -מצב, פעולה, ריוורד). זה לרוב בעייתי כי זה משהו שצריך לדגום מהעולם וזה קשה ויקר. אז נציג כאן שיטת Off policy, שמאפשרת להשתמש ב-Experience שלא בהכרח הושג על ידי הפוליסי הנוכחי.
$$ \nabla_\theta R(\pi_\theta) = \mathbb{E}{x \sim p_x, y \sim \pi_0(\cdot | x)} \frac{\pi\theta(y|x)}{\pi_0(y|x)} \nabla_\theta \log \pi_\theta (y|x) r(x,y) $$ אנו משתמשים פה ב-Importance Weighting
$$ \nabla_\theta R(\pi_\theta) = \mathbb{E}{x \sim p_x, y \sim \pi_0(\cdot | x)} r(x,y) - \beta \cdot KL(\pi\theta (y|x) | \pi_0 (y|x)) $$ - כאן לא עושים Importance Weighting אבל מוסיפים רכיב שאומר שאי אפשר להתרחק יותר מדי מהפוליסה המקורית. - מסתבר שיש לזה פתרון Closed Form! - כש-beta היא אינסוף נשמור את הפוליסה הישנה - כש-beta היא 0 זה מאפטמים גם לפי ה-Experience הישן כאילו הוא היה חדש - בפועל אנחנו לא יודעים את כל r(x,y) וזה נקרא Reward Weighted Regression
שיטה היוריסטית עושים קליפ ל-Importance weights כך שיוכל להיות עד +20% אם הריוורד חיובי, ועד -20% אם הריוורד שלילי. (או מספר אחר)
מה נרצה לאפטם?
נמצא את הפוליסה שתאפטם את: $$ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ... = R_{t+1} + \gamma G_{t+1} $$ - יותר מעניין אותי הריוורד הקרוב מהרחוק כתלות ב-$\gamma$. זה גם פותר את הבעיה שזה סכום אינסופי, כי אז זה נסכם למשהו סופי.
פונקציית $v$ (התוחלת של ה-Reward מסטייט x כשמשתמשים בפוליסה $\pi$): $$ v_\pi (x) = \mathbb{E}\pi [G_t | x] = \mathbb{E}{y \sim \pi(\cdot | x)}[r(x,y) + \gamma G_{t+1} | x] $$
פונקציית $q$ (התוחלת של ה-Reward מסטייט x כשמבצעים את פעולה $y$ ומשתמשים בפוליסה $\pi$): $$ q_\pi (x,y) = \mathbb{E}\pi [G_t | x, y] = \mathbb{E}{\pi}[r(x,y) + \gamma G_{t+1} | x, y] $$
$$ v_\pi (x) = \sum_y \sum_{x'} \pi (y|x) p(x'|x,y) [r(x,y) + \gamma v_\pi(x')] $$
$$ q_\pi (x,y) = \sum_{x'} p(x' | x,y)[r(x,y) + \gamma \sum_y' \pi(y'|x') q_\pi (x' y')] $$
אז איך משפרים את הפוליסי? - בהחנה שהצלחנו לחשב את ה-q להכול, ניקח את פוליסת ה-argmax כמו במקרה ה-Single Step. - ואז בצורה איטרטיבית -> חישוב פונקציות Value, שיפור policy
כאן פשוט דוגמים את העולם ואין את הדרישה שצריך שיהיה לנו מודל של העולם כמו מקודם.
במקום החישוב הרקורסיבי של ה- Expected Returns, פשוט "משחקים את המשחק" לפי הפוליסה שלנו בעולם פעם אחת או הרבה והממוצע של התוצאות זה זה.
עכשיו אפשר לאמן רשת שמהווה reward model או פוליסה. חסרונות: 1. אם לא לומדים רשת ומנסים להכליל, יהיו המון חוויות שיהיו חסרות 2. זה On Policy
כזכור תיאורטית היינו רוצים לחשב את $$ q_\pi (x,y) = \sum_{x'} p(x' | x,y)[r(x,y) + \gamma \sum_y' \pi(y'|x') q_\pi (x' y')] $$ אבל זה קשה מדי כשאין מודל. אז נשערך את זה על ידי דגימה של x' אחד ו-y' אחד ואז משערכים כך: $$ q_{t+1} (x,y) = r(x,y) + \gamma q_t(x', y') $$ אבל יש לזה שונות גבוהה אז נשתמש ב-Learning Rate: $$ q_{t+1} (x,y) = (1-\alpha) \cdot q_t(x,y) + \alpha [r(x,y) + \gamma q_t(x', y')] $$
זו דרך Off Policy לשערך את ה-q של הפוליסה האופטימלית. דוגמים רק x' $$ q_{t+1} (x,y) = (1-\alpha) \cdot q_t(x,y) + \alpha [r(x,y) + \gamma \max_{y'} q_t(x', y')] $$