הנדסת פיצ'רים אוטומטית באמצעות אוטו-אנקודרים
אז יש לכם טבלה. ככל הנראה יש לכם איזה עץ שאימנתם לטבלה. אתם רוצים לשפר את העץ.
אבל לא בדרך משעממת כמו "לחשוב". אתם רוצים לשפר את העץ עם GPU.
כך תהנדסו פיצ'רים אוטומטית עם Auto Encoderים
השיטה היתה חלק מפתרונות מנצחים בשלוש בתחרויות שונות בקאגל [מקום ראשון]
הרעיון הכללי הוא לאמן Auto Encoder על הטבלה שלכם ולהשתמש במרחב הנסתר שלו כפיצ'רים לעץ.
נשמע נחמד והגיוני, אחסוך לכם את הכאב ראש: זה לא יעבוד. קשה מאד לאמן רשת טובה בשיטה זו ויש המון טריקים שצריך להוסיף אליה כדי לגרום לה לעבוד.
למה שזה יעבוד בכלל?
התשובה הראשונה היא: זה כבר הוכיח את עצמו שוב ושוב ושוב.
התשובה השניה היא: הרעיון הכללי של DAE (Denoising Auto Encoder מעכשיו) הוא ללמוד כיצד נבנה סט הנתונים. הרשת עושה זאת על ידי כך שאנו מוסיפים רעש לנתוני האימון ומטרת הרשת לנקות נתונים אלו כך שהמודל יחזיר אלינו נתונים נקיים.
אם פעולה זו נעשית מספיק טוב: משקולות הרשת יכילו את האינטרקציה בין העמודות השונות בטבלה ויצוג הטבלה בתוך הרשת ישמש כקופסה שחורה שבהפעלתה אין צורך יותר בהנדסת פיצ'רים ידנית.
אפס אחוז הסבר, מאה אחוז ביצועים – כמו שמדע נתונים צריך להיות!
איך בונים רשת טובה?
אז Auto Encoders מודרנים מוכרים לכולם בעיקר בתמונות – נכנסת תמונה מורעשת ועל הרשת לשחזר את התמונה הנקיה מתוך הקלט.
זה רק נשמע כמו מודלי דיפוזיה ליצירת תמונה. הרעיון כאן קצת שונה.
ישנן בגדול שתי גישות עיקריות לבנית רשתות Auto Encoder: צוואר בקבוק ורעש, צוואר הבקבוק: לקבוע את המימד הפנימי של הרשת להיות מימד קטן יותר מכניסת הרשת ובכך "להכריח" את הרשת לדחוס את הטבלה ולא ללמוד "להחזיר אותה".
הסיבה העיקרית להוספת רעש היא בגישה השניה בה לא נקבע את מימד הרשת הפנימי להיות קטן ממימד הטבלה ולכן רעש זה מקטין את הסיכון שהרשת תלמד את פונקצית הזהות: להחזיר את הקלט.
אוגמנטציות למידע טבלאי – "רעש החלפה"
כולנו מכירים אוגמנטציות לתמונות: סיבובים, מתיחות, zoom.. אבל מה עם טבלה? אי אפשר "לסובב" טבלה. מה עושים?
אפשר להחליף ערכים: הרעיון העיקרי הוא להחליף ערכים ספציפים בערכים מאותה העמודה (חשוב) ובכך לגרום ליצוג העמודה כולה להשמר.
סוגי רעש החלפה
ישנם בגדול שלושה סוגים עיקריים של רעש החלפה:
רעש החלפת עמודות
בחירת עמודות באופן אקראי בכל באצ' ועמודות אלו יעברו החלפה.
רעש החלפה אקראי
בחירה אקראית של אינדקסים ודגימות בכל באצ' והחלפתם בערך רנדומלי מאותה העמודה.
רעש החלפה בשורות
לכל שורה בבאצ', בחירת אחוז מסוים מערכי השורה והחלפתם בערכים אחרים מעמודות מתאימות.
בדרך כלל רעש החלפה בשורות ורעש החלפה רנדומלי עובדים הכי טוב.
היפרפרמטרים, טיפים וטריקים
קודם כל: זה קשה. קשה לגרום לזה לעבוד. הכל עניין של ניסוי וטעיה.
לגבי הLR: קשה למצוא את הLearning Rate האופטימלי לבעיה: רשתות מסוג זה רגישות במיוחד לLearning Rate שלהן ויש להשקיע הרבה בחיפושו.
גודל הבאצ': קשה גם למצוא את גודל הבאצ' האופטימלי, ולפעמים כדי לחפש אותו במקביל לLearning Rate.
היפרפרמטר: אחוז הרעש אותו יש להוסיף, פרמטר חשוב שיש לכייל.
הלוס: בדרך כלל הלוס בו משתמשים הוא MSE או MAE וחישוב הלוס צריך להתבצע רק על הערכים אותם הרעשנו.
שיפור מאוחר יותר לשיטה: הוספת לוס נוסף "האם הערך הורעש או מקורי?".
עוד שיפור נוסף: טרנספורמר.