HyperOpt Demystified

כיצד להפוך את כוונון הדגמים לאוטומטי עם HyperOpt

האם אתה אוהב כוונון דגמים? אם התשובה שלך היא "כן", הפוסט הזה הוא לֹא בשבילך.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
סרט מצויר מסבא שלי - אתר אינטרנט.

בבלוג זה נסקור את אלגוריתם כוונון היפרפרמטרים האוטומטי הפופולרי ביותר שנקרא אומדני פרזן מבוססי עצים (TPE). TPE נתמך על ידי חבילת הקוד הפתוח, HyperOpt. על ידי מינוף HyperOpt ו-TPE, מהנדסי למידת מכונה יכולים לפתח במהירות דגמים בעלי אופטימיזציה גבוהה ללא כל כוונון ידני.

ללא התייחסות נוספת, בואו נצלול פנימה!

HyperOpt היא חבילת python בקוד פתוח המשתמשת באלגוריתם הנקרא Tree-based Parzen Esimtors (TPE) לבחירת היפרפרמטרים של מודל אשר מייעלים פונקציית יעד מוגדרת על ידי המשתמש. פשוט על ידי הגדרת הצורה הפונקציונלית והגבולות של כל היפרפרמטר, TPE מחפש ביסודיות אך ביעילות דרך היפר-מרחב מורכב כדי להגיע לאופטימומים.

TPE הוא אלגוריתם רציף הממנף עדכון בייסיאני ועוקב אחר הרצף שלהלן.

  1. אמן מודל עם מספר קבוצות של היפרפרמטרים שנבחרו באקראי, תוך החזרת ערכי פונקציה אובייקטיבית.
  2. חלקו את ערכי הפונקציות האובייקטיביות הנצפות שלנו לקבוצות "טובות" ו"רעות", לפי גמא סף כלשהו (γ).
  3. חשב את ציון ה"מבטיחות", שהוא צודק P(x|טוב) / P(x|רע).
  4. קבע את הפרמטרים ההיפר שממקסמים את המבטיחות באמצעות מודלים של תערובת.
  5. התאם את המודל שלנו באמצעות ההיפרפרמטרים משלב 4.
  6. חזור על שלבים 2-5 עד לקריטריון עצירה.

הנה דוגמה לקוד מהיר.

אוקי אלו היו הרבה מילים גדולות. בואו נאט את הקצב ונבין באמת מה קורה.

1.1 - המטרה שלנו

מדעני נתונים עסוקים. אנחנו רוצים לייצר דגמים ממש טובים, אבל עושים זאת בצורה יעילה ובאופן אידיאלי ללא ידיים.

עם זאת, שלבים מסוימים במחזור החיים של מודלים של ML קשים מאוד לאוטומציה. ניתוח נתונים חקרניים (EDA) והנדסת תכונות, למשל, הם בדרך כלל ספציפיים לנושא ודורשים אינטואיציה אנושית. כוונון דגמים, לעומת זאת, הוא תהליך איטרטיבי שבו מחשבים יכולים להצטיין.

המטרה שלנו לאורך הפוסט הזה היא להבין איך למנף אלגוריתמים כדי להפוך את תהליך כוונון המודל לאוטומטי.

כדי לעזור לנו לחשוב על המטרה הזו, בואו נשתמש באנלוגיה: אנחנו פיראטים שמחפשים אוצר קבור. חשוב גם לציין שאנחנו פיראטים מאוד יעילים שמחפשים למזער את הזמן שלנו בחיפוש אחר האוצר הקבור. אז איך אנחנו צריכים למזער את הזמן המושקע בחיפוש? התשובה היא השתמש במפה!

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
תרשים 1: מרחב חיפוש היפרפרמטר תלת-ממדי לדוגמה. המיקום של תיבת האוצר הוא אופטימום עולמי. תמונה מאת מחבר.

באיור 1, יש לנו מפה פיקטיבית שמראה היכן נמצא האוצר שלנו. אחרי הרבה טיפוסים וחפירות, לא יהיה קשה מדי להגיע לאוצר הזה כי אנחנו יודעים בדיוק היכן הוא ממוקם.

אבל מה קורה כשאין לנו מפה?

כשמוטל עלינו לכוון דגם, לצערנו לא ניתנת לנו מפה. השטח שלנו, המתאים למרחב החיפוש היפרפרמטר, אינו ידוע. יתר על כן, מיקומו של האוצר שלנו, התואם את הסט האופטימלי של היפרפרמטרים, אינו ידוע גם הוא.

עם ההגדרה הזו, בואו נדבר על כמה דרכים אפשריות לחקור ביעילות את המרחב הזה ולמצוא איזה אוצר!

1.2 - פתרונות פוטנציאליים

השיטה המקורית לכוונון המודל היא "ידנית" - המהנדס למעשה יבדוק ידנית תצורות רבות ושונות ויראה איזה שילוב היפרפרמטרים מייצר את הדגם הטוב ביותר. אמנם אינפורמטיבי, אך תהליך זה אינו יעיל. חייבת להיות דרך טובה יותר…

1.2.1 - חיפוש רשת (הגרוע ביותר)

אלגוריתם האופטימיזציה הראשון שלנו הוא חיפוש רשת. חיפוש רשת בודק באופן איטרטיבי את כל השילובים האפשריים של היפרפרמטרים בתוך רשת שצוינה על ידי המשתמש.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 2: דוגמה לפריסת חיפוש רשת. תמונה מאת מחבר

לדוגמה, באיור 2, בכל מקום שבו אתה רואה נקודה אדומה הוא המקום שבו נאמן מחדש ונעריך את המודל שלנו. המסגרת הזו לא יעילה בגלל שהיא עושה שימוש חוזר בהיפרפרמטרים גרועים. לדוגמה, אם להיפרפרמטר 2 יש השפעה מועטה על הפונקציה האובייקטיבית שלנו, עדיין נבדוק את כל השילובים של הערכים שלו, ובכך נגדיל את מספר האיטרציות הנדרש פי 10 (בדוגמה זו).

אבל לפני שממשיכים הלאה, חשוב לציין שחיפוש רשת עדיין פופולרי למדי, כי מובטח שהוא ימצא אופטימום בהינתן רשת שצוינה נכון. אם תחליט להשתמש בשיטה, ודא שאתה משנה את הרשת שלך כדי לשקף את הצורה הפונקציונלית של ההיפרפרמטרים שלך. לדוגמה, max_depth עבור a מסווג יער אקראי הוא מספר שלם - אל תאפשר לו לחפש במרחב רציף. זה גם לא סביר שיש לו התפלגות אחידה - אם אתה יודע את הצורה הפונקציונלית של ההיפרפרמטר שלך, שנה את הרשת כדי לשקף אותה.

לסיכום, חיפוש רשת נתון לקללת הממדיות ומחשב מחדש מידע בין הערכות, אך עדיין נמצא בשימוש נרחב.

1.2.2 - חיפוש אקראי (טוב)

האלגוריתם השני שלנו הוא חיפוש אקראי. חיפוש אקראי מנסה ערכים אקראיים בתוך רשת שצוינה על ידי המשתמש. שלא כמו בחיפוש רשת, אנחנו לא נדחקים לבדיקת כל שילוב אפשרי של היפרפרמטרים, מה שמגביר את היעילות.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 3: דוגמה לחיפוש אקראי. תמונה מאת מחבר.

הנה עובדה מגניבה: חיפוש אקראי ימצא (בממוצע) תצורה של 5% היפרפרמטרים המובילים בתוך 60 איטרציות. עם זאת, כמו בחיפוש ברשת, עליך לשנות את מרחב החיפוש שלך כך שישקף את הצורה הפונקציונלית של כל היפרפרם.

חיפוש אקראי הוא קו בסיס טוב לאופטימיזציה של היפרפרמטרים.

1.2.3 - אופטימיזציה בייסיאנית (טוב יותר)

המועמד השלישי שלנו הוא האלגוריתם הראשון שלנו לאופטימיזציה מבוססת מודלים ברצף (SMBO). ההבדל הרעיוני המרכזי מהטכניקות הקודמות הוא אנחנו השתמש באופן איטרטיבי בריצות קודמות כדי לקבוע נקודות חקר עתידיות.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 4: דוגמה לאופטימיזציה בייסיאנית - src. תמונה מאת מחבר.

אופטימיזציה של היפרפרמטרים בייסיאנית מחפשת לפתח התפלגות הסתברותית של מרחב החיפוש ההיפרפרמטרי שלנו. משם, הוא משתמש בפונקציית רכישה, כמו שיפור צפוי צפוי, כדי להפוך את ה-hyperspace שלנו להיות יותר "ניתן לחיפוש". לבסוף, הוא משתמש באלגוריתם אופטימיזציה, כגון ירידה בשיפוע סטוכסטי, כדי למצוא את הפרמטרים ההיפרמטרים שממקסמים את פונקציית הרכישה שלנו. ההיפרפרמטרים האלה משמשים כדי להתאים את המודל שלנו והתהליך חוזר על עצמו עד להתכנסות.

אופטימיזציה בייסיאנית בדרך כלל גוברת על חיפוש אקראי, אולם יש לה כמה מגבלות ליבה כגון דרישת היפרפרמטרים מספריים.

1.2.4 - אומדני פרזן מבוססי עצים (הטובים ביותר)

לבסוף, בואו נדבר על כוכב התוכנית: Tree-Based Parzen Estimators (TPE). TPE הוא אלגוריתם SMBO נוסף שבדרך כלל עולה על אופטימיזציה בייסיאנית בסיסית, אך נקודת המכירה העיקרית היא שהוא מטפל ביחסי היפרפרמטר מורכבים באמצעות מבנה עץ.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 5: דוגמה למבנה היררכי עבור TPE — src. תמונה מאת מחבר.

בואו נשתמש באיור 5 כדי להבין זאת מבנה עץ. כאן אנו מאמנים סיווג Support Vector Machine (SVM). נבדוק שני גרעינים: linear ו RBF. linear הקרנל לא לוקח פרמטר רוחב אבל RBF עושה זאת, אז על ידי שימוש במילון מקונן נוכל לקודד את המבנה הזה ובכך להגביל את מרחב החיפוש.

TPE תומך גם במשתנים קטגוריים שאופטימיזציה בייסיאנית מסורתית לא תומכת בהם.

כתב ויתור מהיר לפני שממשיכים הלאה, יש חבילות כוונון היפרפרמטרים רבות אחרות. כל אחד מהם תומך במגוון אלגוריתמים, שחלקם כוללים יער אקראי, תהליכי גאוס ואלגוריתמים גנטיים. TPE הוא אלגוריתם מאוד פופולרי ושימושי כללי, אבל הוא לא בהכרח הטוב ביותר.

באופן כללי, TPE הוא פתרון אופטימיזציה של היפרפרמטרים חזק ויעיל באמת.

כעת, לאחר שיש לנו הבנה כללית של כמה אלגוריתמים פופולריים לאופטימיזציה של היפרפרמטרים, בואו נצלול לעומק כיצד TPE עובד.

אם נחזור לאנלוגיה שלנו, אנחנו פיראטים שמחפשים אוצר קבור אבל אין לך מפה. הקפטן שלנו צריך את האוצר בהקדם האפשרי, אז אנחנו צריכים לחפור במקומות אסטרטגיים שיש להם סבירות גבוהה להחזיק אוצר, תוך שימוש בחפירות קודמות כדי לקבוע את מיקומן של חפירות עתידיות.

2.1 - אתחול

כדי להתחיל, אנחנו להגדיר את האילוצים על המרחב שלנו. כפי שצוין לעיל, להיפרפרמטרים שלנו יש לרוב צורה פונקציונלית, ערכי מקסימום/דקה ויחס היררכי לפרמטרים אחרים. בעזרת הידע שלנו על אלגוריתמי ה-ML והנתונים שלנו, נוכל להגדיר את מרחב החיפוש שלנו.

הבא, אנחנו חייבים להגדיר את הפונקציה האובייקטיבית שלנו, המשמש להערכת כמה "טוב" שילוב ההיפרפרמטרים שלנו. כמה דוגמאות כוללות פונקציות אובדן ML קלאסיות, כגון RMSE או AUC.

גדול! עכשיו, כשיש לנו מרחב חיפוש מוגבל ודרך למדוד הצלחה, אנחנו מוכנים להתחיל בחיפוש...

2.2 - אופטימיזציה בייסיאנית איטרטיבית

אופטימיזציה בייסיאנית היא אלגוריתם רציף שמוצא נקודות במרחב היפר עם סבירות גבוהה להיות "מוצלח" לפי פונקציה אובייקטיבית. TPE ממנפת אופטימיזציה בייסיאנית אך משתמשת בכמה טריקים חכמים כדי לשפר ביצועים ולטפל במורכבות מרחב החיפוש...

2.2.0 - ההגדרה המושגית

הטריק הראשון הוא דוגמנות P(x|y) במקום P(y|x)…

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 6: הסתברות מותנית ש-TPE מחפש לפתור. תמונה מאת מחבר.

אופטימיזציה בייסיאנית נראית בדרך כלל למודל P(y|x), שהיא ההסתברות לערך פונקציה אובייקטיבית (y), נתון היפרפרמטרים (x). TPE עושה את ההיפך - זה נראה לדגמן P(x|y), שהיא ההסתברות של ההיפרפרמטרים (x), בהינתן ערך הפונקציה האובייקטיבית (y).

בקיצור, TPE מנסה למצוא את ערכי הפונקציות האובייקטיביות הטובות ביותר, ולאחר מכן לקבוע את ההיפרפרמטרים המשויכים.

עם ההגדרה המאוד חשובה הזו, בואו ניכנס לאלגוריתם האמיתי.

2.2.1 - פצל את הנתונים שלנו לקבוצות "טובות" ו"רעות".

זכור, המטרה שלנו היא למצוא את ערכי ההיפרפרמטר הטובים ביותר לפי פונקציה אובייקטיבית כלשהי. אז איך נוכל למנף P(x|y) לעשות את זה?

ראשית, TPE מחלק את נקודות הנתונים שנצפו שלנו לשתי קבוצות: טוב, מסומן g(x), ו רע, מסומן l(x). החתך בין טוב לרע נקבע על ידי פרמטר גמא (γ) המוגדר על ידי המשתמש, התואם לאחוזון הפונקציה האובייקטיבית המפצל את התצפיות שלנו (y*).

אז, עם γ = 0.5, ערך הפונקציה האובייקטיבית שלנו שמפצל את התצפיות שלנו (y*) יהיה החציון של הנקודות הנצפות שלנו.

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 7: פירוק של p(x|y) לשתי קבוצות. תמונה מאת מחבר.

כפי שמוצג באיור 7, אנו יכולים ליצור פורמליזציה p(x|y) באמצעות המסגרת הנ"ל. ואם להתגלגל עם האנלוגיה הפיראטית...

פרספקטיבה של פיראטים: מסתכלים על המקומות שכבר חקרנו, l(x) מפרטת מקומות עם מעט מאוד אוצר ו-g(x) מפרטת מקומות עם הרבה אוצר.

2.2.32- חשב את ציון ה"מבטיחות".

שנית, TPE מגדיר כיצד עלינו להעריך שילוב היפרפרמטרים שלא נצפה באמצעות ה- ציון "מבטיח"..

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 8: הגדרת ציון מבטיח. תמונה מאת מחבר.

איור 8 מגדיר את ציון המבטיחות שלנו (P), שהוא רק יחס עם הרכיבים הבאים...

  • מוֹנֶה: ההסתברות לצפייה בקבוצה של היפרפרמטרים (x), בהינתן ערך פונקציית המטרה המתאים הוא "טוב".
  • מְכַנֶה: ההסתברות לצפייה בקבוצה של היפרפרמטרים (x), בהינתן ערך פונקציית המטרה המתאים הוא "רע".

ככל שערך ה"מבטיח" גדול יותר, כך גדל הסיכוי שההיפרפרמטרים שלנו x ייצור פונקציה אובייקטיבית "טובה".

פרספקטיבה של פיראטים: המבטיחות מראה את מידת הסבירות שלמיקום נתון בשטח שלנו יהיה הרבה אוצר.

רגע בצד לפני שתמשיך הלאה, אם אתה מכיר את האופטימיזציה בייסיאנית, משוואה זו פועלת כפונקציית רכישה והיא פרופורציונלית ל- שיפור צפוי (EI).

2.2.3- צור אומדני צפיפות הסתברות

שלישית, TPE מחפש להעריך את ציון ה"מבטיחות" באמצעות דגמי תערובת. הרעיון של מודלים של תערובת הוא לקחת התפלגויות הסתברות מרובות ולחבר אותן יחד באמצעות שילוב ליניארי - src. התפלגויות הסתברות משולבות אלה משמשות לאחר מכן לפיתוח אומדני צפיפות הסתברות.

בדרך כלל, תהליך דוגמנות התערובת הוא...

  1. הגדר את סוג ההתפלגות של הנקודות שלנו. במקרה שלנו, אם המשתנה שלנו הוא קטגורי אנו משתמשים בהתפלגות קטגורית משוקללת מחדש ואם המשתנה שלו אנו משתמשים בהתפלגות גאוסית (כלומר נורמלית) או אחידה.
  2. חזור על כל נקודה והכנס התפלגות באותה נקודה.
  3. סכם את המסה של כל ההתפלגויות כדי לקבל אומדן צפיפות ההסתברות.

שים לב שתהליך זה מופעל בנפרד עבור שתי הקבוצות l(x) ו g(x).

בואו נעבור על דוגמה באיור 9...

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 9: דוגמה להתפלגות גאוס קטומות בהתאמה ל-3 תצפיות היפרפרמטר. תמונה מאת מחבר.

עבור כל תצפית (נקודות כחולות על ציר ה-x), אנו יוצרים התפלגות נורמלית ~N(μ, σ), כאשר...

  • μ (מו) הוא הממוצע של ההתפלגות הנורמלית שלנו. הערך שלו הוא המיקום של הנקודה שלנו לאורך ציר ה-x.
  • σ (סיגמא) היא סטיית התקן של ההתפלגות הנורמלית שלנו. ערכו הוא המרחק לנקודה השכנה הקרובה ביותר.

אם הנקודות קרובות זו לזו, סטיית התקן תהיה קטנה ולפיכך ההתפלגות תהיה גבוהה מאוד ולהפך, אם נקודות מפוזרות זו מזו, ההתפלגות תהיה שטוחה (איור 10)...

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 10: דוגמה להשפעה של סטיית תקן על צורת התפלגות נורמלית. תמונה מאת מחבר.

פרספקטיבה של פיראטים: NA - פיראטים אינם מעולים עם דגמי תערובת.

עוד הצדה מהירה לפני שתמשיך הלאה: אם אתה קורא את הספרות תבחין ש-TPE משתמש בגאוסים "קטועים", מה שפשוט אומר שהגאוסים מוגבלים על ידי הטווח שאנו מציינים בתצורת ההיפרפרמטר שלנו במקום להרחיב לאינסוף +/- .

2.2.4 - קביעת הנקודה הבאה לחקור!

בואו נחבר את החלקים האלה. עד כה, 1) רכשנו תצפיות פונקציות אובייקטיביות, 2) הגדרנו את נוסחת ה"מבטיחות" שלנו, ו-3) יצרנו אומדן צפיפות הסתברות באמצעות מודלים של תערובת המבוססים על ערכים קודמים. יש לנו את כל החלקים להעריך נקודה נתונה!

הצעד הראשון שלנו הוא ליצור פונקציית צפיפות הסתברות ממוצעת (PDF) עבור שניהם g(x) ו l(x).

היפרפרמטר היפר פרמטר כוונון מודל כוונון מכונה למידת נתונים מדעים מודל sclearn mllib ניצוץ hyperopt tree parzen estimator tpe tree based parzen esimtator mlflow databricks
איור 11: שכבת-על של צפיפות ההסתברות הממוצעת בהינתן 3 נקודות שנצפו. תמונה מאת מחבר.

תהליך לדוגמה מוצג באיור 11 - הקו האדום הוא ה-PDF הממוצע שלנו והוא פשוט הסכום של כל קובצי ה-PDF חלקי מספר קובצי ה-PDF.

באמצעות ה-PDF הממוצע, נוכל לקבל את ההסתברות של כל ערך היפרפרמטר (x) להמצא ב g(x) or l(x).

לדוגמה, נניח שהערכים הנצפים באיור 11 שייכים לקבוצה "הטובה", g(x). בהתבסס על ה-PDF הממוצע שלנו, לא סביר שערך היפרפרמטר של 3.9 או 0.05 שייך לקבוצה "הטובה". לעומת זאת, סביר להניח שערך היפרפרמטר של ~1.2 שייך לקבוצה "הטובה".

עכשיו זה רק חצי אחד של התמונה. אנו מיישמים את אותה מתודולוגיה עבור הסט "הרע", l(x). מאז אנחנו מחפשים למקסם g(x) / l(x), נקודות מבטיחות צריכות להיות ממוקמות איפה g(x) הוא גבוה ו l(x) נמוך.

די מגניב, נכון?

בעזרת התפלגויות ההסתברות הללו, נוכל לדגום מפרמטרי ההיפר-מבנה שלנו ולמצוא את קבוצת ההיפר-פרמטרים שממקסמים את ה"מבטיחות" ובכך כדאי לחקור.

פרספקטיבה של פיראטים: המיקום הבא שנחפור הוא המיקום שממקסם את (ההסתברות שיהיה לנו הרבה אוצר) / (ההסתברות למעט אוצר).

עכשיו כשאתה יודע איך זה עובד, הנה כמה טיפים מעשיים להטמעת TPE באמצעות חבילת הקוד הפתוח, HyperOpt.

3.1 - מבנה של אפליקציית HyperOpt

בדרך כלל, ישנם שלושה שלבים עיקריים בעת מינוף HyperOpt...

  1. הגדר את מרחב החיפוש, שזה רק הטווחים והצורות הפונקציונליות של ההיפרפרמטרים שאתה מחפש לייעל.
  2. הגדר את פונקציית ההתאמה, אשר קורא שלך model.fit() פונקציה על פיצול רכבת/מבחן נתון.
  3. הגדר את פונקציית המטרה, שהוא כל אחד ממדדי הדיוק הקלאסיים, כגון RMSE או AUC.

לרוע המזל, שיטות הכוונון האוטומטיות הללו עדיין דורשות קלט עיצובי ממדען הנתונים - זו לא ארוחת צהריים חינמית לחלוטין. עם זאת, מבחינה אנקדוטית, TPE די חזק למפרט שגוי של הפרמטרים (בגבולות ההיגיון).

3.2- טיפים וטריקים

  • HyperOpt ניתן להקביל באמצעות שניהם אפאצ 'י ספארק ו MongoDB. אם אתה עובד עם ליבות מרובות, בין אם זה בענן או במחשב המקומי שלך, זה יכול להפחית באופן דרמטי את זמן הריצה.
  • אם אתה מקביל לתהליך הכוונון באמצעות Apache Spark, השתמש ב-a SparkTrialsאובייקט עבור מודלים ML של צומת בודד (sklearn) ו-a Trails אובייקט עבור מודלים מקבילים של ML (MLlib). הקוד נמצא למטה.
  • זרימת ML היא שיטת קוד פתוח למעקב אחר ריצות המודל שלך. זה משתלב בקלות עם HyperOpt.
  • אל תצמצם את מרחב החיפוש מוקדם מדי. שילובים מסוימים של היפרפרמטרים עשויים להיות יעילים באופן מפתיע.
  • הגדרת מרחב החיפוש יכולה להיות מסובכת, במיוחד אם אינך מכיר את ה צורה פונקציונלית של ההיפרפרמטרים שלך. עם זאת, מניסיון אישי TPE די חזק לפירוט שגוי של צורות פונקציונליות אלה.
  • בחירת פונקציה אובייקטיבית טובה עושה דרך ארוכה. ברוב המקרים, השגיאה אינה נוצרת שווה. אם סוג מסוים של שגיאה בעייתי יותר, הקפד לבנות את ההיגיון הזה לתוך הפונקציה שלך.

3.3- דוגמה לקוד

הנה קצת קוד להפעלת HyperOpt בצורה מבוזרת. זה עובד מהקוד בספר, הנדסת למידת מכונה בפעולה - הנה ה ריפו git.

כמה תכונות נחמדות של קטע זה כוללות מקבילית דרך אפאצ 'י ספארק ורישום מודל באמצעות זרימת ML. כמו כן, שים לב שקטע זה מבצע אופטימיזציה של RandomForestRegressor - תצטרך לשנות את המודל ואת פונקציית ההתאמה כדי להתאים לצרכים שלך.

והנה - HyperOpt במלוא הדרו!

כדי להקשות על נקודות המפתח, בואו נסכם במהירות.

כוונון היפרפרמטרים הוא חלק הכרחי ממחזור החיים של מודל ML, אך הוא גוזל זמן. אלגוריתמים של אופטימיזציה מבוססת מודלים עוקבים (SMBO) מצטיינים בחיפוש היפר-רווחים מורכבים אחר אופטימומים, וניתן ליישם אותם על כוונון היפרפרמטרים. Parzen Estimators מבוססי עצים (TPE) הוא SMBO יעיל מאוד ועולה על ביצועים טובים יותר הן באופטימיזציה בייסיאנית והן בחיפוש אקראי.

TPE חוזר על השלבים הבאים עד לקריטריון עצירה:

  1. חלקו את הנקודות הנצפות לקבוצות "טובות" ו"רעות", לפי היפרפרמטר כלשהו, ​​גמא.
  2. התאם מודל תערובת גם לקבוצה "טובה" וגם ל"רע" כדי לפתח אומדן צפיפות הסתברות ממוצעת.
  3. בחר את הנקודה המייעלת את ציון ה"מבטיחות", הממנפת את שלב 2 כדי להעריך את ההסתברות להיות בסט "טוב" ו"רע".

לבסוף, יש לנו קטע קוד ממש מגניב שמראה כיצד לעשות במקביל HyperOpt באמצעות SparkTrials. זה גם רושם את כל האיטרציות שלנו ל-MLflow.

HyperOpt Demystified פורסם מחדש ממקור https://towardsdatascience.com/hyperopt-demystified-3e14006eb6fa?source=rss—-7f60cf5620c9—4 דרך https://towardsdatascience.com/feed

<!–

->

בול זמן:

עוד מ יועצי בלוקצ'יין