הטמעות

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

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

Figure 1. A set of illustrations of five food items. Clockwise from
       top-left: borscht, hot dog, salad, pizza, shawarma.
איור 1. דוגמאות למאכלים שנכללים בקבוצת הנתונים של האוכל.

יוצרים מאפיין meal עם ייצוג בקידוד "חם-יחיד" (one-hot) לכל אחד מהמאכלים בקבוצת הנתונים. קידוד הוא התהליך שבו נבחר ייצוג מספרי התחלתי של נתונים שבאמצעותם נאמן את המודל.

Figure 2. Top: a visualization of the one-hot encoding for borscht.
       The vector [1, 0, 0, 0, ..., 0] is displayed above six boxes,
       each aligned from left
       to right with one of the vector numbers. The boxes, from left to right
       contain the following images: borscht, hot dog, salad, pizza, [empty],
       shawarma. Middle: a visualization of the one-hot encoding for hot dog.
       The vector [0, 1, 0, 0, ..., 0] is displayed above six boxes, each
       aligned from left to right with one of the vector numbers. The boxes have
       the same images from left to right as for the borscht visualization
       above. Bottom: a visualization of the one-hot encoding for shawarma. The
       vector [0, 0, 0, 0, ..., 1] is displayed above six boxes, each aligned
       from left to right with one of the vector numbers. The boxes have
       the same images from left to right as for the borscht and hot dog
       visualizations.
איור 2. קידודי "חם-יחיד" של בורשט, נקניקייה בלחמנייה ושווארמה. כל וקטור בקידוד "חם-יחיד" הוא באורך 5,000 (רשומה אחת לכל אפשרות בתפריט בקבוצת הנתונים). שלוש הנקודות בדיאגרמה מייצגות את 4,995 הרשומות שלא מוצגות.

החסרונות של ייצוגי נתונים מפוזרים

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

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

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