ראיתם בתרגיל הקודם שהוספת שכבות נסתרות לרשת שלנו אינה מספיקה כדי לייצג אי-לינאריות. פעולות לינאריות המבוצעות על פעולות לינאריות הן עדיין ליניאריות.
כיצד ניתן להגדיר רשת נוירונים כך שתלמד קשרים לא ליניאריים בין ערכים? אנו זקוקים לדרך כלשהי להכניס פעולות מתמטיות לא ליניאריות למודל.
אם זה נשמע קצת מוכר, זה בגלל שכבר יישמנו פעולות מתמטיות לא לינאריות על הפלט של מודל ליניארי מוקדם יותר בקורס. במודול רגרסיה לוגיסטית , עיבדנו מודל רגרסיה לינארית כדי להפיק ערך רציף מ-0 עד 1 (המייצג הסתברות) על ידי העברת הפלט של המודל דרך פונקציית סיגמואיד .
אנו יכולים ליישם את אותו עיקרון על הרשת הנוירונית שלנו. בואו נבחן שוב את המודל שלנו מתרגיל 2 קודם לכן, אך הפעם, לפני שנוציא את הערך של כל צומת, נפעיל תחילה את פונקציית הסיגמואיד:
נסו לעבור על החישובים של כל צומת על ידי לחיצה על כפתור >| (מימין ללחצן ההפעלה). סקרו את הפעולות המתמטיות שבוצעו לחישוב ערך כל צומת בחלונית החישובים שמתחת לגרף. שימו לב שהפלט של כל צומת הוא כעת טרנספורמציית סיגמואיד של השילוב הליניארי של הצמתים בשכבה הקודמת, וערכי הפלט כולם דחוסים בין 0 ל-1.
כאן, הסיגמואיד משמש כפונקציית הפעלה עבור הרשת הנוירונים, טרנספורמציה לא ליניארית של ערך הפלט של נוירון לפני שהערך מועבר כקלט לחישובי השכבה הבאה של הרשת הנוירונים.
כעת, לאחר שהוספנו פונקציית הפעלה, להוספת שכבות יש השפעה רבה יותר. הערמת אי-לינאריות על אי-לינאריות מאפשרת לנו למדל קשרים מורכבים מאוד בין הקלטים לפלטים החזויים. בקצרה, כל שכבה לומדת למעשה פונקציה מורכבת יותר ברמה גבוהה יותר על פני הקלטים הגולמיים. אם תרצו לפתח אינטואיציה רבה יותר לגבי איך זה עובד, עיינו בפוסט המצוין של כריס אולה בבלוג .
פונקציות הפעלה נפוצות
שלוש פונקציות מתמטיות המשמשות בדרך כלל כפונקציות הפעלה הן סיגמואיד, טאנה ו-ReLU.
פונקציית הסיגמואיד (שנדונה לעיל) מבצעת את הטרנספורמציה הבאה על הקלט $x$, ומייצרת ערך פלט בין 0 ל-1:
\[F(x)=\frac{1} {1+e^{-x}}\]
הנה גרף של פונקציה זו:

הפונקציה tanh (קיצור של "טנגנס היפרבולי") הופכת את הקלט $x$ לערך פלט בין -1 ל-1:
\[F(x)=tanh(x)\]
הנה גרף של פונקציה זו:

פונקציית הפעלת היחידה הליניארית המתוקנת (או בקיצור ReLU ) מבצעת המרת פלט באמצעות האלגוריתם הבא:
- אם ערך הקלט $x$ קטן מ-0, החזר 0.
- אם ערך הקלט $x$ גדול או שווה ל-0, החזר את ערך הקלט.
ניתן לייצג את ReLU באופן מתמטי באמצעות הפונקציה max():
הנה גרף של פונקציה זו:

ReLU פועלת לעיתים קרובות טוב יותר כפונקציית הפעלה מאשר פונקציה חלקה כמו סיגמואיד או טאנה, מכיוון שהיא פחות רגישה לבעיית הגרדיאנט הנעלם במהלך אימון רשתות נוירונים . ReLU גם קלה משמעותית לחישוב מאשר פונקציות אלו.
פונקציות הפעלה אחרות
בפועל, כל פונקציה מתמטית יכולה לשמש כפונקציית הפעלה. נניח ש \(\sigma\) מייצג את פונקציית ההפעלה שלנו. ערכו של צומת ברשת ניתן על ידי הנוסחה הבאה:
Keras מספקת תמיכה מוכנה לשימוש עבור פונקציות הפעלה רבות. עם זאת, אנו עדיין ממליצים להתחיל עם ReLU.
תַקצִיר
הסרטון הבא מספק סיכום של כל מה שלמדתם עד כה על אופן בניית רשתות נוירונים:
כעת, המודל שלנו מכיל את כל הרכיבים הסטנדרטיים של מה שאנשים בדרך כלל מתכוונים כשהם מתייחסים לרשת נוירונים:
- קבוצת צמתים, בדומה לנוירונים, המאורגנים בשכבות.
- קבוצה של משקלים והטיות נלמדות המייצגות את הקשרים בין כל שכבת רשת נוירונים לשכבה שמתחתיה. השכבה שמתחת עשויה להיות שכבת רשת נוירונים נוספת, או שכבה מסוג אחר.
- פונקציית הפעלה אשר משנה את הפלט של כל צומת בשכבה. לשכבות שונות עשויות להיות פונקציות הפעלה שונות.
אזהרה: רשתות עצביות אינן בהכרח תמיד טובות יותר מהצלבות תכונות, אך רשתות עצביות מציעות אלטרנטיבה גמישה שעובדת היטב במקרים רבים.