בקצרה:הפרספטרון (Perceptron) של פרנק רוזנבלט (1958) הוא אחת מרשתות הנוירונים הראשונות שלומדות מדוגמאות. יש בו שלוש שכבות: רשתית בינארית [math]\displaystyle{ S }[/math] שמקבלת את התמונה, שכבת אסוציאציה[math]\displaystyle{ A }[/math] שבה כל נוירון מחובר בקשרים אקראיים, מעוררים ומעכבים, לכמה פיקסלים, ונדלק כשהסכום המסומן שלהם מגיע לסף, ושכבת פלט[math]\displaystyle{ R=V\cdot A }[/math] שבוחרת את המחלקה בעלת הערך הגדול ביותר. רק מטריצת המשקלים [math]\displaystyle{ V }[/math] נלמדת: בכל טעות מוסיפים קבוע לשורה של המחלקה הנכונה ומחסירים אותו מהשורה של המחלקה שנבחרה, ורק בעמודות של הנוירונים שנדלקו. בניסוי על ספרות כתובות ביד (MNIST), עם 3,000 נוירוני אסוציאציה, הכלל הזה מגיע, במעבר אחד על הנתונים, ל־91.0% סיווג נכון.
מבוסס על המאמר:Rosenblatt, F. (1958). The perceptron: A probabilistic model for information storage and organization in the brain. Psychological Review, 65(6), 386–408.
הסיפור הבסיסי
יש לנו אוסף תמונות המסווגות למחלקות (למשל תמונות של ספרות, ולכל תמונה נתונה הספרה שמופיעה בה). הפרספטרון לומד מהמאגר הזה, ולאחר הלמידה הוא אמור לזהות לבד, בהינתן תמונה, איזו ספרה מופיעה בה.
איור 1. שלוש השכבות. הרשתית [math]\displaystyle{ S }[/math] היא [math]\displaystyle{ 4\times4 }[/math] פיקסלים ([math]\displaystyle{ N_S=16 }[/math]). כל אחד משמונת הנוירונים של שכבת האסוציאציה [math]\displaystyle{ A }[/math] מחובר ל־[math]\displaystyle{ N_C=6 }[/math] פיקסלים שנבחרו באקראי: שלושה מעוררים (ירוק, [math]\displaystyle{ \operatorname{sign}=+1 }[/math]) ושלושה מעכבים (אדום, [math]\displaystyle{ \operatorname{sign}=-1 }[/math]), והסף הוא [math]\displaystyle{ \theta=1 }[/math]. בשכבת הפלט [math]\displaystyle{ R }[/math] כל נוירון מחובר לכל עשר המחלקות. עובי החבל הוא [math]\displaystyle{ |V_{ca}| }[/math]: חבל בהיר למשקל חיובי, וכהה לשלילי. המשקלים שבאיור אינם מצוירים, אלא אומנו בשיטה 5 על עשר תבניות של הספרות.
שכבת הקלט: הרשתית
הגדרה 1שכבת הקלט (Retina)
כל תמונה היא בגודל [math]\displaystyle{ n\times k }[/math], וכל פיקסל בתמונה הוא ערך בינארי, ואנחנו הופכים אותה לווקטור
[math]\displaystyle{ S\in\{0,1\}^{N_S} }[/math]
כאשר שמים שורה אחרי שורה מהתמונה, ולכן [math]\displaystyle{ N_S=n\cdot k }[/math].
שכבת האסוציאציה
הגדרה 2שכבת האסוציאציה (Association layer)
אנחנו מייצרים שכבת אסוציאציה, או שכבת נוירונים, [math]\displaystyle{ A\in\{0,1\}^{N_A} }[/math], באופן הבא:
(א) נבחר קבוע: מספר הקשרים [math]\displaystyle{ N_C\in\mathbb N }[/math], כאשר [math]\displaystyle{ N_C\le N_S }[/math].
(ב) לכל רכיב [math]\displaystyle{ 1\le a\le N_A }[/math] נבחרים באקראי [math]\displaystyle{ N_C }[/math] אינדקסים [math]\displaystyle{ \{i_1(a),\dots,i_{N_C}(a)\} }[/math], ולכל אינדקס נבחר סימן [math]\displaystyle{ \operatorname{sign}(i_p,a)\in\{-1,1\} }[/math].
(ג) נבחר קבוע סף [math]\displaystyle{ \theta }[/math], שאם מגיעים אליו ה"נוירון" נדלק. בהינתן קלט [math]\displaystyle{ S }[/math] נחשב את [math]\displaystyle{ A }[/math]:
לכל קלט [math]\displaystyle{ S }[/math] בסדרת האימון:
מחשבים את שכבת הנוירונים [math]\displaystyle{ A }[/math];
מחשבים את וקטור המחלקות [math]\displaystyle{ R=V\cdot A\in\mathbb R^{N_R} }[/math];
בוחרים את האינדקס של הערך המקסימלי של הווקטור [math]\displaystyle{ R }[/math], כלומר [math]\displaystyle{ c=\operatorname{argmax}(R) }[/math];
האינדקס [math]\displaystyle{ c }[/math] הוא המחלקה שהפרספטרון סיווג את התמונה אליה;
אם מדובר במחלקה הנכונה, אנחנו לא עושים כלום ועוברים לקלט הבא;
אם מדובר בטעות בזיהוי, מבצעים תיקון של מטריצת המשקלים (שיטה 5).
שיטה 5תיקון מטריצת המשקלים
נתון קבוע למידה [math]\displaystyle{ \eta>0 }[/math]. נסמן ב־[math]\displaystyle{ d }[/math] את המחלקה הנכונה, וב־[math]\displaystyle{ c }[/math], כאמור, את המחלקה שבחר הפרספטרון. לכל [math]\displaystyle{ a\le N_A }[/math], אם [math]\displaystyle{ A(a)=1 }[/math], אז מוסיפים ל־[math]\displaystyle{ V_{da} }[/math] את [math]\displaystyle{ \eta }[/math] ומחסרים מ־[math]\displaystyle{ V_{ca} }[/math] את [math]\displaystyle{ \eta }[/math].
במילים: רואים אילו נוירונים נדלקו מהתמונה, מעלים את המשקלים שלהם ביחס למחלקה הנכונה, ומורידים את המשקלים שמחברים אותם למחלקה שזוהתה בטעות.
בסוף הריצה על כל הקלטים הנתונים, אנו נותרים עם מטריצת משקלים מעודכנת.
הסיווג
תהליך הסיווג עצמו זהה ללמידה, פרט לכך שאין תיקון נוסף של המשקלים (הרי בזמן השימוש בפרספטרון הסיווג האמיתי של הקלט אינו ידוע).
איור 2. אותה רשת כאשר הרשתית רואה את הספרה 7 (הפיקסלים [math]\displaystyle{ S_1 }[/math] עד [math]\displaystyle{ S_4 }[/math], [math]\displaystyle{ S_8 }[/math], [math]\displaystyle{ S_{11} }[/math] ו־[math]\displaystyle{ S_{14} }[/math] דולקים). קשרים שיוצאים מפיקסל כבוי אינם מעבירים דבר, ומצוירים דהויים. נוירון נדלק כאשר סכום הסימנים של הפיקסלים הדולקים שלו מגיע ל־[math]\displaystyle{ \theta }[/math]: כאן [math]\displaystyle{ A_1 }[/math], [math]\displaystyle{ A_7 }[/math] ו־[math]\displaystyle{ A_8 }[/math]. בשכבה [math]\displaystyle{ R }[/math] הבהירות של כל מחלקה היא הערך [math]\displaystyle{ R(c)=\sum_a V_{ca}A(a) }[/math]. המקסימום הוא [math]\displaystyle{ R(7)=5 }[/math], אחריו [math]\displaystyle{ R(0)=3 }[/math], והפרספטרון עונה 7.
הניסוי: ספרות כתובות ביד
▶ נסו בעצמכם: בדף הניסוי הפרספטרון המאומן רץ בדפדפן, על ספרה שאתם מציירים. כל הפרטים, הקוד והחומרה מתועדים במסמך הניסוי.
הקוד מממש את הדף הזה כלשונו, על מאגר MNIST (LeCun, Cortes & Burges; ברישיון CC BY-SA 3.0): 60,000 ספרות כתובות ביד לאימון ו־10,000 לבדיקה, בגודל [math]\displaystyle{ 28\times28 }[/math] פיקסלים ([math]\displaystyle{ N_S=784 }[/math]). השכבה האקראית נבנית פעם אחת ואינה משתנה, ורק [math]\displaystyle{ V }[/math] נלמדת. הלמידה היא מעבר אחד על סדרת האימון, בסדר שבו היא נתונה, בלי ערבוב ובלי מעברים חוזרים.
מה הדף משאיר פתוח, ומה בחרנו. הגדרה 1 מניחה פיקסלים בינאריים, אבל פיקסלי MNIST הם בהירויות בין 0 ל־255. לכן פיקסל נחשב דולק אם הבהירות שלו היא לפחות 128, ואחרי ההמרה 13.2% מהפיקסלים דולקים. [math]\displaystyle{ V }[/math] מתחילה מאפסים. הקבועים: [math]\displaystyle{ N_R=10 }[/math] מחלקות, [math]\displaystyle{ N_C=10 }[/math] קשרים לנוירון (כל אחד עם סימן [math]\displaystyle{ \pm1 }[/math] אקראי), סף [math]\displaystyle{ \theta=2 }[/math] וקבוע למידה [math]\displaystyle{ \eta=1 }[/math].
המשתנה בניסוי הוא [math]\displaystyle{ N_A }[/math], גודל שכבת האסוציאציה: 100, 300, 1000 ו־3000.
זמן. עם [math]\displaystyle{ N_A=3000 }[/math] המעבר על 60,000 הקלטים ארך 16 שניות על מעבד של מחשב נייד, ב־NumPy.
[math]\displaystyle{ N_A }[/math]
100
300
1000
3000
דיוק על תמונות הבדיקה
55.4%
76.2%
88.3%
91.0%
איור 3. הדיוק על 10,000 תמונות הבדיקה, אחרי שהפרספטרון ראה מספר מסוים של קלטים, לכל אחד מארבעת הגדלים של [math]\displaystyle{ N_A }[/math]. עם [math]\displaystyle{ N_A=3000 }[/math]: 72.6% אחרי 1,000 קלטים, 86.4% אחרי 10,000, 88.4% אחרי 30,000, ו־91.0% בסוף. במהלך המעבר 11.1% מהקלטים סווגו לא נכון וגררו תיקון של [math]\displaystyle{ V }[/math] (שיטה 5). השאר לא שינו דבר.
התוצאות. עם [math]\displaystyle{ N_A=3000 }[/math] הפרספטרון מסווג נכון 91.0% מתמונות הבדיקה (895 טעויות מתוך 10,000), לעומת 92.4% מתמונות האימון. הספרה הקלה ביותר היא 1 (99%), והקשה ביותר היא 4 (83%).
מה לא עשינו: מעברים חוזרים. הניחוש הטבעי הוא שמעבר שני על אותם קלטים ישפר את [math]\displaystyle{ V }[/math]. בדקנו את זה כניסוי צד: אחרי חמישה מעברים הדיוק הוא 92.3%, כלומר רק 1.3 נקודות יותר ממעבר אחד, וגם זה לא בעלייה אחידה, כי תיקון שעוזר לקלט אחד מקלקל קלט אחר.
מה למדנו
כלל הלמידה של רוזנבלט, בלי שום שינוי ובמעבר אחד על הנתונים, מגיע ל־91.0% על ספרות כתובות ביד, עם שכבה אקראית שאיש לא תכנן.
גודל הייצוג האקראי הוא המשתנה המכריע: הדיוק עולה מ־55.4% ל־91.0% כש־[math]\displaystyle{ N_A }[/math] גדל פי 30. ייצוג אקראי הוא רק התחלה, והשאלה הבאה היא אם אפשר ללמוד ייצוג טוב יותר. זה הנושא של הפצה לאחור.
רוב הלמידה קורית מוקדם: אחרי 10,000 קלטים הדיוק כבר 86.4%.
המשקלים ב־[math]\displaystyle{ V }[/math] הם מספרים שלמים (כפולות של [math]\displaystyle{ \eta=1 }[/math]), והאימון מסתכם בחיבור ובחיסור. אין כאן גרדיאנט.