רשתות ניורונים מלאכותיות (Artificial Neural Networks (ANN)) הינן שיטה לבניה של פונקציות פרמטריות בהשראת רשתות נוירונים ביולוגיות. בדומה לרשת נוירונים ביולוגית בה כל נוירון מבצע פעולה פשוטה אך שילוב של הרבה נוירונים מאפשר ללמוד פונקציות מורכבות, ברשתות נוירונים מלאכותיות נשלב הרבה פונקציות פרמטריות פשוטות על מנת לקבל מודל אשר יכול לייצג פונקציות מורכבות. הפונקציות הפשוטות הם המקבילה המלאכותית של הנויורונים הביולוגיים והם לרוב יקבלו מספר משתנים וחזירו סקלר:
בהשראת הנוירונים הביולוגיים אנו לרוב נבחר את הפונקציות הפשוטות להיות מהצורה של:
h(x;w,b)=φ(w⊤x+b)
שבה פונקציה סקלארית לא לינארית φ, המכונה פונקציית ההפעלה, פועלת על קומבינציה לינארית של הכניסה בתוספת קבוע (bias). אלא אם צויין אחרת, בקורס זה אנו נניח כי הנויירונים ברשת בנויים בצורה זו. בחירות נפוצות של הפונקציית ההפעלה הינן:
הפונקציה הלוגיסטית (סיגמואיד): φ(x)=σ(x)=1+e−x1
טנגנס היפרבולי: φ(x)=tanh(x/2)
פונקציית ה ReLU (Rectified Linear Unit): אשר מוגדרת φ(x)=max(x,0)
מושגים:
יחידות נסתרות (hidden units): הנוירונים אשר אינם מחוברים למוצא הרשת (אינם נמצאים בסוף הרשת).
רשת עמוקה (deep network): רשת אשר מכילה מסלולים מהכניסה למוצא, אשר עוברים דרך יותר מיחידה נסתרת אחת.
ארכיטקטורה: הצורה שבה הנוירונים מחוברים בתוך הרשת.
רשתות נוירונים מלאכותיות יכולות לשמש כפונקציה פרמטרית לכל דבר. בהקשר של הקורס נוכל להשתמש בהם כדי לפתור בעיות סיווג בגישה הדסיקרימינטיבת הסתברותית או בכדי לפתור בעיות רגרסיה בשיטת ה ERM. לרוב אנו נפתור את בעיות האופטימיזציה של מציאת הפרמטרים בעזרת gradient descent כאשר אנו נעזר בשיטת ה back-propogation על מנת לחשב את הנגזרות של הרשת על פי הפרמטריים.
בדומה לסימונים בשאר הקורס, גם כאן אנו נשתמש בוקטור θ אשר יאגד את כל הפרמטרים של הרשת (הפרמטרים של כל הנוירונים).
הערה לגבי השם loss
עד כה השתמשנו בשם loss בהקשר של פונקציות risk (הקנס שמקבלים על שגיאת חיזוי בודדת מסויימת). בהקשר של רשתות נוירונים משתמשים לרוב במושג זה על מנת לתאר את פונקציית המטרה (ה objective) שאותו רוצים למזער בבעיית האופטימיזציה. (לדוגמא, ב MLE לרוב ה loss יתייחס למינוס של ה log-likelihood).
בכדי למנוע בלבול, בקורס זה נשתדל להיצמד להגדרה המקורית של פונקציית ה loss (שמגדירה את פונקציית ה risk) ונמשיך להשתמש בשם פונקציית מטרה או objective בכדי לתאר את הביטוי שאותו אנו רוצים למזער.
Back-Propagation
Back-propogation עושה שימוש בכלל השרשרת של הנגזרת על מנת לחשב את הנגזרות של רשת נוירונים.
בעבור ערכים נתונים מסויימים של x ו θ נרצה לחשב את הנגזרות של המוצא של הרשת y לפי הפרמטרים θ.
נסתכל לדוגמא על הנגזרת של y1 לפי θ3. לשם הנוחות נסמן ב zi את המוצא של הניורון hi.
נוכל לפרק את ∂θ3∂y על פי כלל השרשת:
∂θ3∂y1=∂z3∂y1∂θ3∂z3=∂z3∂y1∂θ3∂h3
נוכל לפרק גם את ∂z3∂y1 על פי כלל השרשרת:
∂z3∂y1=∂z6∂y1∂z3∂z6=∂z6∂y1∂z3∂h6
ונוכל להמשיך ולפרק את dz6dy1:
∂z6∂y1=∂z7∂y1∂z6∂z7=∂z7∂h8∂z6∂h7
זאת אומרת שאם נדע לחשב את הנגזרות של ∂zi∂hi ו ∂θi∂hi נוכל לחשב את הנגזרות לפי כל הפרמטרים. נסתכל לדוגמא על הנגזרת:
∂θ6∂h6(z3,z4;θ6)
עלינו ראשית לגזור את הפונקציה h6 ואז להציב את הערכים של z3, z4 ו θ6. בכדי לחשב את הערכים של zi עלינו להעביר את x דרך הרשת ולשמור את כל ערכי הביניים zi. חישוב זה של ערכי הביניים נקרא ה forward pass.
לאחר שחישבנו את ערכי הביניים zi, נוכל להתחיל לחשב את כל הנגזרות של הרשת מהמוצא לכיוון הכניסה. זאת אומרת:
נחשב את: ∂θ8∂y1, ∂z7∂y1.
נשתמש ב ∂z7∂y1 בכדי לחשב את ∂θ7∂y1, ∂z5∂y, ∂z6∂y.
נשתמש ב ∂z6∂y1 בכדי לחשב את ∂θ6∂y1, ∂z3∂y, ∂z4∂y.
וכן הלאה. מכיוון שבשלב זה אנו מחשבים את הנזגרות מהמוצא לכיוון הכניסה שלב זה נקרא ה backward pass ומכאן גם מקבלת השיטה את שמה.
MultiLayer Perceptron (MLP)
ארכיטקטורה פשוטה ומאד נפוצה לרשת נוירונים הינה ארכיטקטורת ה MultiLayer Perceptron (MLP). במודל זה הנוירונים מסודרים בשתייים או יותר שכבות (layers) של נוירונים. השכבות ב MLP הם שכבות שמכונות Fully Connected (FC) שבהם כל נוירון מוזן מכל הנוריונים שבשכבה שלפניו.
כאשר הניורונים הם מהצורה של:
hi,j(zi−1;wi,j,bi,j)=φ(wi,jTzi−1+bi,j)
והפרמטרים הנלמדים הינם המשקולות wi,j ואברי ההיסט bi,j בקומבינציה הליניארית שמכיל כל נוירון hi,j.
ה Hyperparameters של MLP הינם:
מספר השכבות
מספר הנוירונים בכל שכבה
פונקציית האקטיבציה
תרגיל 10.1 - Back propagation in MLP
נרצה לפתור בעיית רגרסיה בעזרת ERM ורשת ה MLP הבאה בעלת כניסה באורך 2 ויציאה באורך 1 (מוצא סקלרי) ושכבה נסתרת אחת ברוחב 2:
כאשר ב h1,1 ו h1,2 יש פונקציית אקטיבציה מסוג ReLU וב h2 אין פונקציה אקטיבציה. זאת אומרת:
שימו לב: שאיבר ההיסט בשכבה הראשונה b1 משותף לשני הנוירונים בשכבה זו (זאת אומרת ששניהם משתמשים באותו פרמטר).
לשם פשטות, נרכז את כל הפרמטרים של הרשת לוקטור פרמטרים אחד:
θ=[w1,1⊤,w1,2⊤,b1,w2⊤,b2]⊤
ונסמן את הפונקציה שאותה הרשת מממשת ב y^=f(x;θ).
1) בעבור מדגם נתון D={x(i),y(i)}i=1N ופונקציית מחיר מסוג RMSE רשמו את בעיית האופטימיזציה שיש לפתור. בטאו את תשובתכם בעזרת הפונקציה f.
2) נפתור את בעיית האופטימיזציה בעזרת gradient descent עם גדול קצב לימוד η. רשמו את כלל העדכון של הפרמטרים של המודל θ על ידי שימוש בגרדיאנט של הרשת לפי הפרמטרים, ∇θf(x;θ).
3) נתון המדגם הבא באורך 2:
x(1)x(2)=[1,2]⊤=[0,−1]⊤y(1)=70y(2)=50
כמו כן, נתון כי בצעד מסויים t הערכים של הפרמטרים הינם:
1) הראו כיצד ניתן לייצג את הפונקציה הבאה בעזרת רשת MLP עם פונקציית אקטיבציה מסוג ReLU.
שרטטו את הרשת ורשמו את הערכים של פרמטרי הרשת.
2) האם ניתן לייצג במדוייק את הפונקציה f(x)=x2+∣x∣ בעזרת רשת MLP עם אקטיבציה מסוג ReLU? הסבירו ו/או הדגימו.
פתרון 10.2
1)
בעזרת נויירונים בעלי פונקציית אקטיבציה מסוג ReLU הפועלים על קומבינציה לינארית של הכניסות, נוכל לבנות פונקציות רציפות ולינאריות למקוטעין, בעלות מספר סופי של קטעים, כמו זו בשבשאלה זו.
נבנה פונקציה זו בעזרת MLP בעל שיכבה נסתרת אחת אשר דואגת לייצג את המקטעים השונים ושיכבת מוצא אשר דואגת לשיפוע בכל מקטע. נבנה את השכבה הנסתרת כך שאנו מתאימים נוירון לכל נקודה בה משתנה השיפוע של פונקציית המטרה. נקבע את קבוע הbias בכל נוירון כך שהשינוי בשיפוע של ה ReLU (ב x=0) יהיה ממוקם על נקודה בה משתנה השיפוע של הפונקציה המקורית:
המקטע השמאלי ביותר הינו בעל שיפוע 0 ולכן הוא כבר מסודר, שכן כל הפונקציות אקטיבציה מתאפסות באיזור זה.
המקטע [−1,0] מושפע רק מן הנוירון הראשון. השיפוע במקטע זה הינו 1 ולכן ניתן משקל של 1 לנירון זה.
המקטע [0,1] מושפע משני הנוירונים הראשונים. הנוירון הראשון כבר תורם שיפוע של 1 במקטע זה ולכן עלינו להוסיף לו עוד שיפוע של −2 על מנת לקבל את השיפוע של −1 הנדרש. ולכן ניתן משקל של −2 לנירון השני.
באופן דומה ניתן לנוירון השלישי משקל של 2.
סה"כ קיבלנו כי h2(z1,z2,z3)=z1−2z2+2z3
2)
מכיוון ש:
נוירון בעל פונקציית הפעלה מסוג ReLU מייצג פונקציה רציפה ולינארית למקוטעין.
כל הרכבה או סכימה של פונקציות רציפות ולינאריות למקוטעין יצרו תמיד פונקציה חדשה שגם היא רציפה ולינארית למקוטעין.
בעזרת נוירונים מסוג ReLU נוכל רק לייצג פונקציות רציפות ולנאריות למקוטעין. מכיוון שx2 אינה לינארית אנו נוכל רק לקרב אותה, אך לא לייצג אותה במדוייק.
נסתכל שוב על הבעיה של איבחון סרטן שד על סמך תצלום מיקרוסקופי של ריקמה.
נציג שוב את את המדגם:
diagnosis
radius_mean
texture_mean
perimeter_mean
area_mean
smoothness_mean
compactness_mean
concavity_mean
0
M
17.99
10.38
122.8
1001
0.1184
0.2776
0.3001
1
M
20.57
17.77
132.9
1326
0.08474
0.07864
0.0869
2
M
19.69
21.25
130
1203
0.1096
0.1599
0.1974
3
M
11.42
20.38
77.58
386.1
0.1425
0.2839
0.2414
4
M
20.29
14.34
135.1
1297
0.1003
0.1328
0.198
5
M
12.45
15.7
82.57
477.1
0.1278
0.17
0.1578
6
M
18.25
19.98
119.6
1040
0.09463
0.109
0.1127
7
M
13.71
20.83
90.2
577.9
0.1189
0.1645
0.09366
8
M
13
21.82
87.5
519.8
0.1273
0.1932
0.1859
9
M
12.46
24.04
83.97
475.9
0.1186
0.2396
0.2273
נתחיל שוב בביצוע איבחון על סמך שתי העמודות הראשונות בלבד. אנו עושים זאת כמובן רק בכדי שנוכל להציג את הבעיה בגרף דו מימדי.
נפצל אותו שוב ל 60% train / 20% validation / 20% test. וננסה להתאים לו את המודל הבא:
כאשר FC 2x10 מציין שכבה של fully connected שבכניסה אליה יש וקטור באורך 2 וביציאה יש וקטור ברוחב 10 (זאת אומרת 10 נוירונים).
בכדי לבחור את קצב הלימוד η נריץ את אלגוריתם ה gradient descent למספר קטן של צעדים:
בדומה לתרגול הקודם, אנו נבחר את הערך הגדול ביותר שבו הגרף יורד בצורה מונוטונית שבמקרה זה הינו η=0.03.
נריץ כעת האלגוריתם למספר גדול של צעדים:
נשים לב שהחל מנקודה מסויימת בריצה של אלגוריתם ה gradient descent החישוב של ה objective על ה validation set מתחיל לעלות. הסיבה לכך היא כמובן תופעת ה overfitting. נוכל להוריד את כמות ה overfitting על ידי כך שנעצור את האלגוריתם לפני שהוא מתכנס. פעולה זו מכונה early stopping. ניקח אם כן את הפרמטרים מהצעד עם הערך של ה objective הנמוך ביותר על ה validation, במקרה זה זהו הצעד ה 25236.
החזאי המתקבל ממודל זה הינו:
נשרטט גרף זה ללא הדגימות על מנת לראות את קו ההפרדה בין שני השטחים
ניתן לראות כי הרשת מצליחה לייצר חזאי עם קו הםרה יחסית מורכב בהשוואה ל LDA, QDA ו linear logistic regression.
ביצועי חזאי זה על ה valudation set הינם: 0.08. ביצועים אלו דומים לביצועים של QDA ו linear logistic regresssion.
שימוש בכל 30 העמודות במדגם
נעבור כעת להשתמש בכל 30 העמודות במדגם. לשם כך נשתמש ברשת הבאה:
נחפש שוב את הערך המתאים ביותר של η:
במקרה זה נבחר את η=0.003. האימון המלא נראה כך:
הביצועים הטובים ביותר על ה validation set מתקבלים בצעד ה 107056. החזאי המתקבל בצעד זה מניב miscalssifiaction rate של 0.01 על ה validation set.
ביצועים המודל על ה test set הינם 0.03 (לעומת 0.04 ב linear logistic regression).