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

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

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

אחד הדברים שאנשים מדמיינים כשהם שומעים את המונח ”רשת נוירונים“ הוא משהו כזה:

רשת נוירונים

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

סתם קוד

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

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

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

בואו ניקח, לדוגמא, משימה פשוטה - זיהוי כתב יד.

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

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

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

אני רוצה להדגיש שהפונקציה שסקיינט משתמשת בה היא פונקציה רגילה לחלוטין. אין בה שום דבר מיוחד או מיסטי. זוכרות את הפונקציה y=2x

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

כדי לתת לכן קצת תחושה - בואו נגיד שבתיה וסקיינט יקבלו את התמונות הבאות:

לא אות

אות

כאשר בתיה תקבל את התמונות הללו, היא תחליט שהתמונה הראשונה היא לא כתב יד, ושהתמונה השנייה הא כן כתב יד. ולכן, היא תחזיר את הרשימה (0,1).

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

עכשיו מגיע החלק המגניב.

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

  1. כמה רחוקה התוצאה של סקיינט מהתוצאה המושלמת של בתיה.

  2. מעין ”המלצה“ לגבי מה סקיינט יכולה לשפר בפונקציה שלה, כדי להוציא תוצאה יותר קרובה לתוצאות של בתיה.

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

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

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

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

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

אסיים בשתי דעות אישיות:

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

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