למידת מכונה

{| style="margin: 0 1em 5px 0; float: left; clear: right; border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%;"
| style="text-align: center;" ֻcolspan="4" | <big>למידת מכונה</big>
|-
| colspan="4" style="border-top: 1px solid #AFAFAF;" " |
|-
| colspan="4" |דיאגרמת פיזור המציגה מסווג (קו מקווקו) המפריד בין שתי מחלקות באמצעות מכונת וקטורים תומכים
|-
| colspan="4" style="border-top: 1px solid #AFAFAF;" " |
|-
| colspan="4" style="text-align: center;" | תחומים
|-
| style="text-align: center; " " | מדעי המחשב || סטטיסטיקה
|-
| style="text-align: center; " " | כריית מידע || בינה מלאכותית
|-
| colspan="4" style="border-top: 1px solid #AFAFAF; " " |
|-
| colspan="4" style="text-align: right; " " |

|}

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

שני תחומים מקבילים ללמידת מכונה הם תחום כריית מידע (Data Mining) ותחום זיהוי תבניות (Pattern Recognition) שרבים מן הכלים והאלגוריתמים שפותחו בו משותפים לתחומים הללו.

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

== מטרות ושימושים ==

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

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

== תאוריה ==
מספר גישות התפתחו עם השנים בתחום התאורטי של למידת מכונה. ההבדלים ביניהן מבוססים על ההנחות השונות לגבי עקרונות ההיסק המשמשים להכללה מתוך מידע מוגבל. הבדלים אילו מבוססים על הגדרות שונות להסתברות (גישה בייסיאנית לעומת גישה קלאסית) והנחות על הדרך בה נוצר המידע (דיסקרמינטיבי לעומת גנרטיבי).
הגישות השונות כוללות את:
* למידת PAC (”למידת קרוב לוודאי בערך נכון”; Probably approximately correct) - תאוריה שפותחה על ידי לסלי וליאנט
* תאוריית VC - תאוריה שפותחה על ידי ולדימיר ופניק (Vapnik–Chervonenkis theory learning).
* הסקה בייסיאנית
* תאוריית למידה אלגוריתמית - מתוך עבודתו של א.מ גולד (Algorithmic learning theory ).

בעקבות הגישות התאורטיות צמחו מספר אלגוריתמים מעשיים. למשל, תאוריית PAC עוררה השראה לאלגוריתמי Boosting, תאוריית VC הובילה לאלגוריתם מכונת וקטורים תומכים (SVM) והסקה בייסיאנית הובילה לאלגוריתמי רשתות בייסיאניות.

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

;הסקה והחלטה: בבעיית סיווג יש לנו K מחלקות (או קטגוריות) <math>C_k</math> ולכל פריט (או תצפית) x יש לקבוע לאיזה מחלקה הוא שייך. כאשר אנו מדברים על בעיית סיווג בדרך כלל נחלק את הבעיה לשני שלבים. בשלב הראשון נרצה להסיק (inference) מתוך סט האימון את ההתפלגות האחודה <math>p(x, C_k)</math>, שמספקת לנו תיאור הסתברותי שלם על המצב. בשלב שני נרצה להחליט (Decision) במידה אופטימלית על מידע חדש שלא ראינו בסט האימון לאילו מן המחלקות <math>C_k</math> הוא שייך וזאת על סמך ההתפלגות שמצאנו בשלב הראשון. לעיתים שלב ההחלטה יכול להיות טריוויאלי ולהיגזר ישירות מהשלב הראשון.
ניתן לזהות שלוש גישות שונות לפתרון בעיות החלטה:
# תחילה נפתור את בעיית ההסקה על ידי קביעת ההסתברויות המותנות <math>p(x | C_k)</math> באופן נפרד לכל מחלקה <math>C_k</math>, הסתברות זו מכונה לעיתים "הנראות" (Likelihood) של המחלקה <math>C_k</math>. בנפרד נקבע את ההסתברות "הא-פריורית" (Prior) של המחלקות השונות <math>p(C_k)</math> שאותה אנו יודעים לעיתים מתוך האוכלוסייה הכללית. ואז נמצא את ההסתברות "הפוסטריורית" (Posterior) <math>p(C_k | x)</math> באמצעות משפט בייס שהוא מן הצורה:<center><math>p(C_k|x) = \frac{p(x|C_k)p(C_k)}{p(x)}</math></center> את ההסתברות <math>p(x)</math> ניתן לחשב מתוך כלל הסכום בצורה הבאה: <center><math>p(x) = \sum_{k}p(x|C_k)p(C_k)</math></center> בהינתן ההסתברויות הפוסטריוריות נפעיל את כלל ההחלטה לקבוע לאיזו מחלקה שייכת דוגמה חדשה. גישות מסוג זה מכונות גם מודלים גנרטיביים (Generative Models), משום שלאחר קביעת ההתפלגויות ניתן לייצר מהן דוגמאות סינתטיות.
# תחילה נפתור את בעיית ההסקה על ידי קביעת ההסתברות הפוסטריורית <math>p(C_k|x)</math> ואז נפעיל את כלל ההחלטה לקבוע לאיזו מחלקה שייכת דוגמה חדשה. גישות מסוג זה מכונות גם מודלים דיסקרימינטיביים (Discriminative Models).
# נמצא פונקציה <math>f(x)</math> הנקראת פונקציה דיסקרמיננטית, הממפה כל x למחלקה מסוימת. במקרה זה אין שימוש בהסתברות.

== סוגי למידה ==

נהוג לחלק את אלגוריתמי למידת המכונה למספר סוגים:
* למידה מונחית (supervised learning). כל דוגמה מגיעה עם תווית סיווג. מטרת האלגוריתם היא לחזות את הסיווג של דוגמאות חדשות שאותן לא פגש בתהליך הלמידה. אימון של רשת עצבית מלאכותית ("רשת נוירונים") מסתמך על אלגוריתמים מסוג זה.
* למידה בלתי מונחית (unsupervised learning). מטרת האלגוריתמים היא למצוא ייצוג פשוט וקל להבנה של אוסף הנתונים. שיטות נפוצות מסוג זה הן חלוקה לצברים (clustering), והטלה ליריעות ממד נמוך כגון ניתוח גורמים ראשיים (PCA).
* למידת חיזוק (reinforcement learning). אלגוריתם הלמידה מקבל משוב חלקי על ביצועיו (רק לאחר סיום ביצוע המטלה) ועליו להסיק אילו מהחלטותיו הביאו להצלחה/כישלון.

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

== אלגוריתמים נפוצים ==
דוגמה לשימוש ב[[אלגוריתם מיקסום התוחלת לצורך אשכול (Clustering). בדוגמה זו מוצג מידע על התפרצויות גייזר אולד פיית'פול ציר ה-X משך ההתפרצות של גייזר, וציר ה-Y הזמן שחלף מההתפרצות הקודמת. האלגוריתם מגיע להתכנסות ולסיווג לשני סוגים.]]
דוגמה ל[[מכונת וקטורים תומכים המשתמשת בקרנל כדי למצוא מפריד לא ליניארי]]
למידת מכונה כוללת אוסף ידוע של כמה עשרות אלגוריתמים. ניתן לסווג אלגוריתמים אילו על פי מספר תבחינים.

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

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

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

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

להלן מספר אלגוריתמים ידועים:

* אלגוריתם שכן קרוב - ("K-nearest neighbors")
* סיווג בייסיאני נאיבי
* עץ החלטה לומד
** ID3 - עץ החלטה עם משתנים קטגוריאליים בלבד
** C4.5 - עץ החלטה עם משתנים רציפים
* רגרסיה לוגיסטית
* רגרסיה מקומית
* רשת עצבית מלאכותית
* רשתות ביסיאניות
* אשכולות מבוססי מרחק - (KMean Clustering)
* אלגוריתם ציפייה - מקסום - (Expectation–maximization)
* אלגוריתם גנטי
* אלגוריתמים של לימוד מתקן:
** BOOSTING
** BAGGING
* חוקים אסוציאטיבים
* PSO - אופטימיזציה מבוססת תבונת נחיל
* ACO - אופטימיזציה מבוססת תבונת נמלים
* רשת קוהונן - לימוד של פונקציית צפיפות לא פרמטרית
* Parallel Coordinates - קואורדינטות מקבילות
* מכונת וקטורים תומכים (SVM) - אלגוריתם דיסקרמיננטי המשמש למציאת ווקטורים המפרידים בצורה אופטימלית בין מחלקות המידע.

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

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

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

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

תת תחום נוסף שהפך פופולרי מהעשור הראשון של המאה ה-21 הוא תחום הלמידה העמוקה (Deep Learning),שמתבסס על רשתות נוירונים בעלות מספר רב של שכבות. השימוש הפופולרי במושג "deep belief nets" ובקיצור רשתות עמוקות נטבע במאמר המשפיע מ-2006 של הינטון, אוסינדרו וטה.

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

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

==ראו גם==
* חם-יחיד

==לקריאה נוספת==
* 

==קישורים חיצוניים==

*[https://machinelearning.co.il/648/researchers-machine-learning-israel/ רשימת חוקרים בתחום ה-Machine learning בישראל]
*[http://www.ted.com/talks/alex_wissner_gross_a_new_equation_for_intelligence.html Alex Wissner-Gross: A new equation for intelligence] – הרצאה מאתר [http://www.ted.com/ TED] על הגדרת האינטליגנציה כשאיפה למיקסום אפשרויות עתידיות 
* 
* [https://www.youtube.com/watch?v=0nPUot7i9cY למידת מכונה ובינה מלאכותית - הרצאה של ויויאן מינג]
*[https://rt-ed.co.il/articles/%D7%9E%D7%94-%D7%96%D7%94-%D7%9C%D7%9E%D7%99%D7%93%D7%AA-%D7%9E%D7%9B%D7%95%D7%A0%D7%94/ מה זה למידת מכונה ואיך זה עובד?]
דוגמאות ללמידת מכונה בישראל:
* [http://www.cs.huji.ac.il/labs/learning/lab_page.html The HUJI Machine Learning Lab]
* [https://www.youtube.com/watch?v=Ju1w3Jed4nU קורס למידה חישובית (למידת מכונה) - פרופ' ליאור רוקח] 
* [http://machinelearning.co.il/ Machine Learning Israel]
* 
* 

==הערות שוליים==

*