רגע, לא הבנתי – פרק 2

למה בכל זאת חשוב שנבין מה קורה בתוך האלגוריתם

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

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

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

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

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

זיהוי של שחורים בתור גורילות

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

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

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

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

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

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

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

רגע, לא הבנתי – פרק 1

על פער ההבנה – הנקודה שבה אנחנו מבינים … שאנחנו לא מבינים

[קישור לפרק 2 בסדרה]

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

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

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

מודלים מודרניים כמו רשתות נוירונים (למידה עמוקה) מסוגלים לתפוס קשרים מסובכים ונסתרים מעיננו. הדרך בה הם עושים את זה היא לחפש קשרים בין הפיצ'רים ובין התגובה: האלגוריתם לא עוצר בחיפוש קשרים לינאריים כמו "אם נגדיל את ההשכלה בשנת לימוד, השכר יעלה ב2000 שקל", אלא ינסה למצוא קשרים מסובכים יותר כמו "אם נגדיל את ממוצע בגרות*גיל*גוון צבע עור*גובה אזי המשכורת תעלה ב1000 שקל" או "אם הגובה שלך הוא מעל 175 ס"מ וגם נולדת בתל אביב אבל לא היית במינוס בבנק בשנה האחרונה – אזי המשכורת שלך תעלה ב500 שקל". למעשה, אפילו הדוגמאות הללו הן הרבה הרבה יותר פשוטות מאשר הכללים שרשתות הנוירונים באמת לומדות.

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

AMAZING Domino Rally Trick Screen Link! - YouTube
אלגוריתם מורכב הוא כמו דומינו ראלי ענק, אנחנו רואים שקורה משהו, אבל אנחנו מתקשים להסבירו. מקור: Youtube

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

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

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

תם ולא נשלם.

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

[קישור לפרק 2 בסדרה]