Machine Learning 101: מדריך למתחילים

ללמוד Machine Learning זה לא כמו ללמוד עוד שפת תכנות או עוד Framework. ליאור בר-און עושה לכם הכרות עם המכונה הלומדת

קרדיט תמונה: Nullplus / Getty Images Israel

קרדיט תמונה: Nullplus / Getty Images Israel

Machine Learning הוא תחום שאמנם קיים בערך משנות ה-60, אך שהתפתח בעיקר ב 10-15 השנים האחרונות.

מנקודת מבט אחת, Machine Learning (בקיצור: ML) הוא כלי שמאפשר לפתור בעיות תוכנה, שלא ניתן לפתור בדרך הרגילה – קרי: בעזרת משפטי if ולולאות for.

ארתור סמואל, החלוץ בתחום תיאר זאת כ "give computers the ability to learn without being explicitly programmed".

כמובן שיש בשכבות הנמוכות של פתרונות ה-ML הרבה משפטי if ולולאות for, אך ML מספק שיטה מתמטית/סטטיסטית המאפשרת לחשוב בפרדיגמה שונה של "תכנות" על הבעיות האלה.

מפתחים "רגילים" שלא מכירים את התחום נוטים להגיב ל-ML בעיקר באחת מ-2 צורות:

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

האמת – היא כנראה איפשהו באמצע.

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

Machine-Learning

היכרות בסיסית עם ML

לא כל בעיה ניתן לפתור בעזרת ML – להיפך. הבעיות העיקריות שניתן לפתור בעזרת ML מחולקות לקטגוריות הבאות:

  • Regression – חיזוי של ערך, על בסיס נתונים. למשל: שערוך ערך של דירה על סמך הנתונים שלה (שטח, גיל, וכו') או הערכה מה יהיה סכום העסקאות של לקוח בחודש הקרוב – על סמך עסקאות עבר, גיל, ומדדים של הרגלי קנייה.
  • Classification – סיווג של entities למספר סגור של קבוצות מוגדרות, למשל: שביעות רצון של לקוח (3 ערכים אפשריים: נאמן, רגיל, נוטה לעזוב), האם עסקה היא לגיטימית או הונאה (2 ערכים אפשריים), וכו'.
  • Clustering – גיבוש קבוצות של פריטים מסוימים. למשל: ברוסיה יש 10,500 ערים – צור קבוצות של ערים דומות (ע"פ סדרה של נתונים על הערים, קרי: מספר תושבים, הכנסה ממוצעת, שטח, שנות קיום, וכו').
  • Recommender Systems – חיזוי פריטים דומים שמישהו עשוי להתעניין בהם, למשל: אם אהבת דיסק של כנסיית השכל – אולי תאהב את הדיסק החדש של שלמה ארצי (לא!!!!!!)
    • Collaborative Filtering – "מי שאהב X אהב גם Y" – המלצת תוכן או מוצר למשתמש, ע"פ סיווג של משתמשים "דומים", ותיאור הפריטים שקבוצת ה"משתמשים הדומים" נוטה לאהוב.
את עולם ה-ML מחלקים בדרך ל-2 קטגוריות:

Supervised Learning – למידה מפוקחת

כאשר יש לנו מאגר של נתונים ותשובות (= target value), שהושגו בצורה כזו או אחרת (מדידה, עבודה של מומחים, וכו') – ואנו רוצים שהמחשב ינסה לחקות את התשובות.

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

בעזרת ML אנו יכולים לפעול באופן הבא:

  • להשתמש ב-Domain Knowledge (בקיצור DK) על מנת למצוא, או לפחות לנחש את ה-features (תכונות) שמסבירות את מחיר הדירה. מיקום, ושטח במ"ר הם features חזקים מאוד, קומה וגיל הבנין הם features בינוניים וצבע הקירות או גודל המטבח יחסית לגודל חדר האמבטיה – הם features זניחים או אפילו מטעים.
  • בשלב הבא אנו נבחר אלגוריתם למידה (מתוך מבחר אלגוריתמים בתחום) ונפעיל אותו על 80% מהנתונים שלנו (למשל).
  • האלגוריתם ירכיב מודל חיזוי, ע"פ כל מיני שיטות מתמטיות / סטטיסטיות – שניתן להריץ: לשלוח לו פרטים של דירה – ולקבל תשובה = מחיר משוערך.
  • נשתמש ב-20% הנתונים הנותרים שלא השתמשנו בהם ללמידה – לצורך ביקורת: עד כמה טוב המודל שנוצר? מה התפלגות התשובות שלו?
  • כך אפשר לחזור כמה מחזורים עד שאנו מוצאים אלגוריתם ו-tuning שמספקים תוצאות שאנו מרוצים מהן.
  • שלב זה יש לנו תוכנה שיכולה לשערך בדיוק כזה או אחר (בשאיפה: דיוק דיי טוב) את העלות הצפויה של דירה ע"פ נתונים גולמיים.
  • כמובן שניתן לשפר את המודל עם הכנסה של Domain Knowledge נוסף: למשל אנו יכולים להעריך שיש הבדל בהתנהגות בין המרכז לפריפריה. אולי הרכבה של 2 מודלים שונים: אחד למרכז ואחד לפריפריה – תשיג תוצאה טובה יותר.
    • יש עוד כלים רבים לשיפור מודל החיזוי – מדובר בד"כ בתהליך איטרטיבי ומשמעותי של שיפורים.
Unsupervised Learning – למידה לא מפוקחת

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

ניתן להשתמש ב-features כמו אורך המאמר, מספר המלים שחוזר פעמים רבות יותר בכל מאמר, או המצאות / אי המצאות של מילות מפתח.

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

שני הקטגוריות של ML, "למידה מפוקחת" ו"למידה לא מפוקחת" – מייצרות מודלים שאינם מושלמים:
בבעיות Binary Classification (כאשר התשובה היא X או Y) הצלחות של 80% ואפילו 70% נחשבות להצלחה.
חשוב להזכיר כי בבעיה שכזו נקודת האפס היא 50% – השקולה להטלת מטבע, או התפלגות ידועה אחרת (קרי: ההסתברות האפריורית של האירוע).

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

"55% אחוז חיזוי במקום בו 50% הוא ההתפלגות הידועה" – עשויה להיות לצרכים מסוימים כישלון צורב, ולצרכים אחרים – תועלת שראוי להשתמש בה.

המוטיב המרכזי לשימוש ב ML הוא לפתור בעיות שאין לנו פתרון טוב יותר עבורן:

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

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

Machine-Learning1

 

תהליך העבודה (Workflow) של ML

תהליך העבודה של ML, הוא מעט יותר מורכב ממה שתיארתי. מכיוון שעיקר העבודה על ML היא התהליך ולא כתיבת קוד – אפרט מעט יותר על התהליך.
אני אתמקד בתהליך שמתאים ל Supervised Learning, כמו בעיית רגרסיה (ניבוי ערך של נכס נדל"ן).

השלבים בתהליך הם:

1. הגדרת הבעיה –> כיוון הפתרון

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

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

מי יכול לדעת ששישה חודשי עבודה על ניסיונות המלצה שונים הולכים לרדת לטמיון? דרוש כאן בעיקר Domain Knowledge עמוק ואיכותי ו/או מתודולוגיה שתזהה כישלון בשלב מוקדם.

2. השגת הנתונים (Obtaining Data)

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

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

שלב זה בעיה משולבת של Domain Knowledge, תכנות, והבנה ארגונית טובה – ברוב הפעמים לא תוכלו להשיג את הנתונים לבד.

".More data beats clever algorithms, but better data beats more data" — פיטר נורוויג (המחבר-שותף של הספר הנודע "AI: A Modern Approach" ומנהל מחקר בגוגל).

3. קרצוף הנתונים (Scrubbing Data)

גם ברגע שיש נתונים "נכונים "- לרוב יהיו להם בעיות איכות (Data Quality):

  • להשלים ערכים חסרים (או להסיר אותם, אם תיקון לא אפשרי). באג בפרודקשיין עשוי לגרור לאחוז כזה או אחר של נתונים שגויים או חסרים – לאורך תקופה.
  • לתקן אי התאמות. למשל שמי הופיע פעם בספריית הוידאו גם כ "ליאור בר און" וגם כ "ליאור בר-און" – הייתי מיוצג כשני אנשים, למרות שאני אדם אחד – מה שיגרום להטיה בניתוח הנתונים.
    • יש טכניקות שונות (חלקן מבוססות ML) בכדי להתאים ולזהות שבעצם מדובר באותו האדם (בסבירות כזו או אחרת)
  • נורמליזציה של הנתונים, למשל: כל התאריכים באותו ה format כך שניתן יהיה לעשות השוואות. המרה של מיילים לקילומטרים, סדר נתונים כזה לסדר אחר, וכו'. ישנו כלל של ML שטוען: "הנתונים שתקבלו תמיד יהיו בפורמט הלא-נכון"

שלב השגת הנתונים + "הקרצוף" נחשבים בד"כ לכ 50-80% מכלל העבודה ב ML Workflow – החלק הארי. שלב זה דורש יכולות תכנות, קצת הבנה סטטיסטית (עבור תיקונים וקירובים), ומעט Domain Knowledge – על מנת להבין את הנתונים טוב יותר. כמעט תמיד ניתן להשקיע עוד עבודה בכדי לשפר עוד יותר את איכות הנתונים – וחשוב לדעת גם מתי "לעצור".

4. בחירת האלגוריתם

ישנם עשרות אלגוריתמים של ML, וכמה שרלוונטיים לכל סוג של בעיה. עליכם להבין את הנתונים ואת האלגוריתם – על מנת (לנסות ו)להתאים את האלגוריתם הטוב ביותר.

למשל: בעיה של Binary Classification ניתן לפתור בעזרת Naive Bayes (מודל סטטיסטי שלא דורש כמויות גדולות של נתונים ורץ מהר), בעזרת Logistic Regression (המבצע רגרסיה בין features ע"פ משקולות נתונות), או עץ החלטה (שמנסה לשערך הסתברות של כל feature בנפרד – ואז לסכם את סך ההסתברויות).

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

שלב זה הוא Pure Machine Learning Knowledge

ML algo error rate

בתרשים למעלה ניתן לראות כיצד בחירה של אלגוריתם משפיעה על אחוז הטעות של האלגוריתם. תמיד קיים tradeoff בין טעות מסוג I וטעות מסוג II, אבל ניתן לראות שאלגוריתם ה Random Forest עליון במקרה זה על האלגוריתמים האחרים. מקור: wise.io

5. אימון המודל

זהו השלב בו מזרימים את הנתונים לאלגוריתם, ובד"כ בונים תהליך אוטומטי שיעשה זאת.

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

  • האם כדאי לשלוח mean או average?
  • אולי כדאי average כאשר מנקים מעט נקודות קיצון?
  • כיצד ניתן לצמצם את כמות ה features (קרי: סוגי הנתונים)?

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

שלב זה דורש הבנה סטטיסטית, מעט תכנות, ויכולות תפעול.

6. בחינת המודל

בשלב זה אנו מריצים את קבוצת הביקורת (או טכניקה אחרת שבחרנו) על מנת לבחון את הצלחת המודל. זהו שלב בעיקר מדעי / סטטיסטי – בו אנו מנסים להעריך עד כמה המודל מוצלח.

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

בסופו של דבר, יש מודל חיזוי מספיק טוב – שניתן לחבר למערכות ה Production ולהתחיל להשתמש בו.

סיכום

עברנו בצורה זריזה על העולם של ה-Machine Learning, וניסינו להפריך את הפנטזיה של "קוד שכותב את עצמו, בזמן שהמתכנת שותה קפה או משחק בפינג-פונג".ML היא סוג של שיטה מדעית לחיזוי על סמך מציאת דפוסים (Patterns) בנתוני עבר. יש בה הרבה יותר מן האומנות (הרבה בחירות לא מדויקות וניחושים מושכלים, הרבה fine-tuning) – מאשר תחומים קלאסיים של כתיבת תוכנה.

עם ההישגים הרבים של ML – קשה להתווכח. מצד שני: אין פה תחום ש"יחליף את כתיבת התוכנה הקלאסית". אם כבר, אזי עולם התוכנה מצליח להתרחב לתחומים ופתרון בעיות שלא היו נגישות לו בעבר.

התחום הזה הוא לא פשוט בכלל: זה לא כמו ללמוד עוד שפת תכנות או עוד Framework.
ספקי ענן כאלו אחרים יספרו לכם שיש להם "Machine Learning as a Service" ושהיום הכל יותר פשוט: לא צריך דוקטורט, אלא רק חשבון ב <שם ספק ענן מוכר> – ואפשר להתחיל להריץ ML.
זה נכון – התהליך הופך לנגיש יותר ויותר מבחינת התפעול, אך אין עדיין (למיטב ידיעתי) – התקדמות משמעותית בניסיון לייתר את המומחיות בתחום.

לינקים רלוונטיים נוספים

הפוסט פורסם במקור בבלוג Software Archiblog

ליאור בר-און

ליאור בר-און הוא Chief Architect בחברת סטארטאפ ישראלית גדולה.

הגב

13 Comments on "Machine Learning 101: מדריך למתחילים"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
תום
Guest

ממליץ מאוד לקרוא את הספר An Introduction to Statistical Learning של שני פרופ' מסטנפורד שכולל הרבה אלגוריתמים שונים ומעבדה ב-R . בנוסף הקורס שלהם מועבר אונליין …. http://www-bcf.usc.edu/~gareth/ISL/ https://lagunita.stanford.edu/courses/HumanitiesSciences/StatLearning/Winter2016/about

Ron Shub
Member

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

אריק
Guest

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

אני
Guest

אפשר ללמוד את התחום ב: deep-learning-academy.com

ר.פ.
Guest

תמציתי ומעניין – תודה.

משה טיורינג
Guest

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

Asaf sh
Guest

נשמע טעים

גיק
Guest

כתבה מעולה אבל לא הזכרת בכלל את deep learning שבשנים האחרונות כולם מדברים עליו והוא נשמע מהפכה של ממש

יוז\'יק בן קיפוד
Guest
יוז\'יק בן קיפוד

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

אילן
Guest

כתיבה יפה מאוד, תודה!

איתן
Guest

mean ו-average זה אותו דבר – ממוצע. אני מניח שהתכוונת ל-median – חציון

מסעוד
Guest

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

Osnat
Guest

מאמר מעולה!!!!!

wpDiscuz

תגיות לכתבה: