רמת קושי 3

עושים סדר - אינטליגנציה מלאכותית (AI), למידת מכונה (ML) ו Deep Learning

הגיע הזמן לעשות סדר במונחים - Deep Learning, AI, Machine Learning. מהקל לכבד, מלמעלה עד למטה. כמעט.

אסף טרפיקנט | 31 דצמבר, 2019

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

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

בואו ניקח מערכת לדוגמא. פיתחתי אפליקציית שש-בש והזנתי לתוכה עשרים חוקים שיעזרו לה לנצח אתכם. במקרה הטוב והיומרני אני אגיד שהאפליקציה מבוססת בינה מלאכותית. במקרה הנפוץ אני אגיד שאין שום דבר מעניין באפליקציה וזו סתם אפליקציה מתמטית ותו לא המבוססת המון על if then (לעיתים קוראים לזה Hard computing). אבל, אם האפליקציה גם מזהה את סגנון המשחק האישי שלכם, צופה את המהלכים שלכם מראש ומשנה את כל האסטרטגיה שלה תוך כדי, סביר להניח שתזכו לנאום של חצי שעה שיכלול 100 מונחים וראשי תיבות תחת עולם ה AI. במוסדות האקדמיים קוראים לזה גם Soft Computing, שזה פיתוח קוד בעולם של אי וודאות לגבי הקלט, הפלט ואפילו האלגוריתם.

אז בואו נתחיל מלמעלה ואתמקד בשלוש השכבות העיקריות (יש עוד המון!)

בינה מלאכותית (Artificial Intelligence)

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

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

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

אז אחרי שהבנו שהכל זה AI, נרד קומה.

למידת מכונה, Machine Learning או ML בקיצור

בואו נדמיין שהשקתי מערכת סטרימינג של סרטים בדומה לנטפליקס. כחלק משיפור המערכת והגדלת זמני הצפייה, החלטתי לפתח מנוע המלצות. לשם כך אני מנתח את היסטוריית השימוש של הלקוחות שלי במערכת – איזה סרטים הם רואים, איזה ז'אנרים ומתי.
בהתחלה, כשהיו לי עשר לקוחות ומאה סרטים זה היה קל. ישבתי על הטבלאות של הנתונים, ניתחתי אותם ידנית, כתבתי שניים שלושה חוקים למנוע המלצות והכל היה נחמד. יש Input, ויש Output קבוע. עשיתי לעצמי אחלה מערכת מבוססת AI. אם צפית ב"פארק היורה" וגם ב"אינדיאנה ג'ונס" אני אמליץ על "פולטרגייסט". אם צפית ב"אהבה בין הכרמים" ו"הבית על האגם", יש מצב שאמליץ על "הגשרים של מחוז מדיסון". אבל בנקודה מסויימת העבודה הפכה לבלתי אפשרית. מאגר הסרטים צמח, הוספתי גם סדרות, רציתי גם לשקלל סרטים שהצופה אשכרה סיים לראות מול כאלה שהוא נטש, ובלקוח ה 500 הבנתי שבא לי למות. אני לא מסוגל יותר להתמודד עם כמויות הנתונים שיש לי, וכמות הכללים שאני צריך לייצר היא אינסופית ומורכבת לחישוב, שלא לדבר על מתן המלצות.

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

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

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

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

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

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

עוד דוגמא, פחות מוצלחת: מנוע ההמלצות של נטפליקס. מישהו הזין למערכת עבור כל סרט את האורך שלו, ז'אנר, תת-ז'אנר, רשימת שחקנים, שנת הפקה ועוד עשרות פרמטרים. מנגנון ה ML אמור לקחת את כל המידע הזה, לשלב אותו עם הרגלי הצפייה שלכם ולדעת להמליץ לכם על סרטים. אממה, זה לא ממש עובד להם ומנגנון המלצת הסרטים של נטפליקס נחשב בתעשייה כפלופ. אם ראיתי את בחזרה לעתיד 1 ו-2 זו לא חוכמה להמליץ לי על חלק 3. בשביל זה לא צריך אלגוריתם מסובך. זו דוגמה נהדרת ל ML שהיה יכול להיות מדהים, אבל פשוט לא עובד טוב, עד כדי לא עובד בכלל.
לסיכום, שני אתגרים ל ML, התמודדות עם מאסת נתונים, וחיזוי. בחלק השני נטפליקס מקרטעות קשות. Spotify לטעמי, עושה עבודה יפה מאד בשני האתגרים האלה ומצליחה לתפור לי חומרים חדשים התואמים את הטעם שלי, מתוך מאגר של למעלה מ 50 מליון יצירות.

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

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

יאללה, יורדים קומה.

Deep Learning (או בקיצור DL, בטח כבר ניחשתם)

בעוד ML לומד מתוך דאטה מסודר ומתויג (Labeled data), מנגנוני  Deep Learning (שזו תת קבוצה של ML) לומדים מתוך דוגמאות וקלט לא מזוהה בהכרח, והמערכת מנסה לסווג אותו. איך זה עובד? בדומה למוח האנושי.

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

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

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

עכשיו, רוצים לשמוע משהו מגניב?

זוכרים שפעם (היום כבר פחות), בכל מיני אתרים, היה מופיע טקסט מגו'ברש שאנו צריכים לזהות על מנת לגשת לאתר ולהוכיח שאנו אנושיים? גוגל אחר כך התקדמו לתמונות ("סמנו את כל האנשים", "סמנו את כל המכוניות") ולבסוף נשארנו עם V קטן שצריך לסמן. מה שקרה בעצם, זה שבשלב הראשון, גוגל השתמשה בנו על מנת ש"נלמד" את המכונה איפה בתמונה יש מכונית (בהתחלה, אדם בצד השני היה מבצע בדיקות לראות שלא טעינו. כאמור, המכונה של גוגל הייתה צעירה למדי ולא יכלה לדעת אם אנו צודקים או לא). מתוך מילארדי משתמשים שנוסו שוב ושוב, לימדנו את המכונה איפה בתמונה יש מכונית ואיפה אין.
במקביל קרה דבר מעניין – המערכת של גוגל הריצה על התמונות מנגנוני Deep Learning לפענוח תמונות. בפעם הבאה שתוצג לנו תמונה של רחוב וה Captcha יבקש שנסמן רכבים, המכונה כבר בעצמה סימנה מאחורי הקלעים את הרכבים שהיא זיהתה, ועכשיו היא מחכה שנסמן בעצמנו. במידה ואנחנו והמכונה סימנו את אותן המשבצות, המכונה מקבלת חיזוק חיובי ואנחנו מועברים הלאה לאתר. במידה ואין התאמה, קורים שני דברים – האחד, מאחורי הקלעים. המכונה מנסה להבין למה יש פער וייתכן שתתקן את האלגוריתם (או שהיא תחליט שאנחנו טעינו). במקביל, אנחנו נקבל מבחן Captcha חדש. ככל שעבר הזמן, רמת הדיוק שלה עלתה עד שלא הייתה זקוקה יותר לאימון. עכשיו יש לגוגל מנגנון שיודע לזהות רכבים מתוך תמונות. מנגנון שיודע לזהות פנים, שלטים, מספרים, עמודי תאורה, גשרים וכו'. כאמור, רשת נוירונים אחת זיהתה עיגולים, אחרת זיהתה בוהק בנקודות מסויימות, אחרת זיהתה ארבעה גלגלים וכו' (אני ממש ממש מפשט את זה. רמת העיבוד של הרשתות הרבה יותר מופשטת מזה) והיום, כשאתם נוסעים ברכב אוטונומי, המחשב של הרכב מפעיל את המנגנונים האלו ב Real Time ויודע לזהות רכבים ועשרות אובייקטים על הכביש בזמן אפסי.

לסיום, אתם מוזמנים לצלול לסדרה חדשה של YouTube, בשם The Age of AI. שמונה פרקים מרתקים בהנחיית רוברט דאוני ג'וניור. והנה הפרק הראשון. צפייה מהנה ומוזמנים לשתף (:

בשורה התחתונה

מקווה שהצלחתי להעביר את רוח הדברים ואם לא, תגידו לי ואני אחדד את המאמר. ככה זה, Human learning (:

אסף טרפיקנט
רוצה לקרוא אחר כך?

הגיע הזמן לעשות סדר במונחים - Deep Learning, AI, Machine Learning. מהקל לכבד, מלמעלה עד למטה. כמעט.

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

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

בואו ניקח מערכת לדוגמא. פיתחתי אפליקציית שש-בש והזנתי לתוכה עשרים חוקים שיעזרו לה לנצח אתכם. במקרה הטוב והיומרני אני אגיד שהאפליקציה מבוססת בינה מלאכותית. במקרה הנפוץ אני אגיד שאין שום דבר מעניין באפליקציה וזו סתם אפליקציה מתמטית ותו לא המבוססת המון על if then (לעיתים קוראים לזה Hard computing). אבל, אם האפליקציה גם מזהה את סגנון המשחק האישי שלכם, צופה את המהלכים שלכם מראש ומשנה את כל האסטרטגיה שלה תוך כדי, סביר להניח שתזכו לנאום של חצי שעה שיכלול 100 מונחים וראשי תיבות תחת עולם ה AI. במוסדות האקדמיים קוראים לזה גם Soft Computing, שזה פיתוח קוד בעולם של אי וודאות לגבי הקלט, הפלט ואפילו האלגוריתם.

אז בואו נתחיל מלמעלה ואתמקד בשלוש השכבות העיקריות (יש עוד המון!)

בינה מלאכותית (Artificial Intelligence)

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

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

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

אז אחרי שהבנו שהכל זה AI, נרד קומה.

למידת מכונה, Machine Learning או ML בקיצור

בואו נדמיין שהשקתי מערכת סטרימינג של סרטים בדומה לנטפליקס. כחלק משיפור המערכת והגדלת זמני הצפייה, החלטתי לפתח מנוע המלצות. לשם כך אני מנתח את היסטוריית השימוש של הלקוחות שלי במערכת – איזה סרטים הם רואים, איזה ז'אנרים ומתי.
בהתחלה, כשהיו לי עשר לקוחות ומאה סרטים זה היה קל. ישבתי על הטבלאות של הנתונים, ניתחתי אותם ידנית, כתבתי שניים שלושה חוקים למנוע המלצות והכל היה נחמד. יש Input, ויש Output קבוע. עשיתי לעצמי אחלה מערכת מבוססת AI. אם צפית ב"פארק היורה" וגם ב"אינדיאנה ג'ונס" אני אמליץ על "פולטרגייסט". אם צפית ב"אהבה בין הכרמים" ו"הבית על האגם", יש מצב שאמליץ על "הגשרים של מחוז מדיסון". אבל בנקודה מסויימת העבודה הפכה לבלתי אפשרית. מאגר הסרטים צמח, הוספתי גם סדרות, רציתי גם לשקלל סרטים שהצופה אשכרה סיים לראות מול כאלה שהוא נטש, ובלקוח ה 500 הבנתי שבא לי למות. אני לא מסוגל יותר להתמודד עם כמויות הנתונים שיש לי, וכמות הכללים שאני צריך לייצר היא אינסופית ומורכבת לחישוב, שלא לדבר על מתן המלצות.

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

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

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

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

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

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

עוד דוגמא, פחות מוצלחת: מנוע ההמלצות של נטפליקס. מישהו הזין למערכת עבור כל סרט את האורך שלו, ז'אנר, תת-ז'אנר, רשימת שחקנים, שנת הפקה ועוד עשרות פרמטרים. מנגנון ה ML אמור לקחת את כל המידע הזה, לשלב אותו עם הרגלי הצפייה שלכם ולדעת להמליץ לכם על סרטים. אממה, זה לא ממש עובד להם ומנגנון המלצת הסרטים של נטפליקס נחשב בתעשייה כפלופ. אם ראיתי את בחזרה לעתיד 1 ו-2 זו לא חוכמה להמליץ לי על חלק 3. בשביל זה לא צריך אלגוריתם מסובך. זו דוגמה נהדרת ל ML שהיה יכול להיות מדהים, אבל פשוט לא עובד טוב, עד כדי לא עובד בכלל.
לסיכום, שני אתגרים ל ML, התמודדות עם מאסת נתונים, וחיזוי. בחלק השני נטפליקס מקרטעות קשות. Spotify לטעמי, עושה עבודה יפה מאד בשני האתגרים האלה ומצליחה לתפור לי חומרים חדשים התואמים את הטעם שלי, מתוך מאגר של למעלה מ 50 מליון יצירות.

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

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

יאללה, יורדים קומה.

Deep Learning (או בקיצור DL, בטח כבר ניחשתם)

בעוד ML לומד מתוך דאטה מסודר ומתויג (Labeled data), מנגנוני  Deep Learning (שזו תת קבוצה של ML) לומדים מתוך דוגמאות וקלט לא מזוהה בהכרח, והמערכת מנסה לסווג אותו. איך זה עובד? בדומה למוח האנושי.

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

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

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

עכשיו, רוצים לשמוע משהו מגניב?

זוכרים שפעם (היום כבר פחות), בכל מיני אתרים, היה מופיע טקסט מגו'ברש שאנו צריכים לזהות על מנת לגשת לאתר ולהוכיח שאנו אנושיים? גוגל אחר כך התקדמו לתמונות ("סמנו את כל האנשים", "סמנו את כל המכוניות") ולבסוף נשארנו עם V קטן שצריך לסמן. מה שקרה בעצם, זה שבשלב הראשון, גוגל השתמשה בנו על מנת ש"נלמד" את המכונה איפה בתמונה יש מכונית (בהתחלה, אדם בצד השני היה מבצע בדיקות לראות שלא טעינו. כאמור, המכונה של גוגל הייתה צעירה למדי ולא יכלה לדעת אם אנו צודקים או לא). מתוך מילארדי משתמשים שנוסו שוב ושוב, לימדנו את המכונה איפה בתמונה יש מכונית ואיפה אין.
במקביל קרה דבר מעניין – המערכת של גוגל הריצה על התמונות מנגנוני Deep Learning לפענוח תמונות. בפעם הבאה שתוצג לנו תמונה של רחוב וה Captcha יבקש שנסמן רכבים, המכונה כבר בעצמה סימנה מאחורי הקלעים את הרכבים שהיא זיהתה, ועכשיו היא מחכה שנסמן בעצמנו. במידה ואנחנו והמכונה סימנו את אותן המשבצות, המכונה מקבלת חיזוק חיובי ואנחנו מועברים הלאה לאתר. במידה ואין התאמה, קורים שני דברים – האחד, מאחורי הקלעים. המכונה מנסה להבין למה יש פער וייתכן שתתקן את האלגוריתם (או שהיא תחליט שאנחנו טעינו). במקביל, אנחנו נקבל מבחן Captcha חדש. ככל שעבר הזמן, רמת הדיוק שלה עלתה עד שלא הייתה זקוקה יותר לאימון. עכשיו יש לגוגל מנגנון שיודע לזהות רכבים מתוך תמונות. מנגנון שיודע לזהות פנים, שלטים, מספרים, עמודי תאורה, גשרים וכו'. כאמור, רשת נוירונים אחת זיהתה עיגולים, אחרת זיהתה בוהק בנקודות מסויימות, אחרת זיהתה ארבעה גלגלים וכו' (אני ממש ממש מפשט את זה. רמת העיבוד של הרשתות הרבה יותר מופשטת מזה) והיום, כשאתם נוסעים ברכב אוטונומי, המחשב של הרכב מפעיל את המנגנונים האלו ב Real Time ויודע לזהות רכבים ועשרות אובייקטים על הכביש בזמן אפסי.

לסיום, אתם מוזמנים לצלול לסדרה חדשה של YouTube, בשם The Age of AI. שמונה פרקים מרתקים בהנחיית רוברט דאוני ג'וניור. והנה הפרק הראשון. צפייה מהנה ומוזמנים לשתף (: