Dendrites = input
Axon = output
קלט : אנחנו רוצים שהקלט יהיה מנורמל בין 0 1 , או אותו טווח בין כולם פחות או יותר
פלט: יחיד או רבים ואז זה קטגוריואל
איך הרשת לומדת ?
הרשת לומדת דרך המשקלים
והרשת לומדת דרך מספר שלבלם שבגדול הם די פשוטים
שלב 1 זה הכפלת המשקל ב קלט ולסכם אותם יחד
פונקציית האקטיבציה פועלת על כל נוירון בנפרד !
שלב 2 הפעלת פונקציה אקטיבציה ( פונקציית האקטיבציה פועלת על כל נוירון בנפרד ! )
https://www.udemy.com/course/neural-networks-in-python-a-guide-for-beginners/learn/lecture/19728094#overview
מה השימוש של פונקצית אקטיבציה ?
התשובה קצת מורכבת להבנה אך נגיד
ליניארי מול לא לניארי
ללא פונקציית אקטיבציה , לא נוכל שהרשת תתנהג בצורה לא לניארית . פונקצית האקטיבתיה הופכת את הרשת ללא לניארית
מערכת לא ליניארת מאפשרת לרשת ללמוד תבניות מאוד מאוד מורכבות כמו תמונות , זיהיו מילים ודיבור שפה בהם התבניות לא לניאריות
Curved structures need activation functions for the model to approximate non-linear boundaries
שימוש בפונקציה אקטיבציה , מאפשרת לרשת ללמוד תבניות לא לניאריות ולעשות בהמשך פרדיקציה על מערכות לא לניאריות
פונקציית האקטיבציה פועלת על כל נוירון בנפרד !
הסבר:
-
כל נוירון בשכבה מקבל סכום משוקלל של הקלטים שלו.
-
לאחר מכן, פונקציית האקטיבציה מופעלת על הסכום הזה בלבד.
-
כלומר, אם יש בשכבה 128 נוירונים — הפונקציה ,תופעל 128 פעמים (אחת על כל נוירון).
למה זה חשוב?
זה מאפשר לרשת גמישות ואי-ליניאריות בכל חלק, ומאפשר שונות בתגובה של כל נוירון למרות שהם באותה שכבה.
מספר דוגמאות
1. חיזוי מחיר בית (תכונות לא לינאריות)
קלט: גודל, מספר חדרים, מרחק מהעיר
פלט: מחיר
הקשר בין הקלט לפלט אינו לינארי:
בית שגודלו כפול לא בהכרח יעלה פי שתיים (תלוי במיקום, תוספות וכו').
→ פונקציות אקטיבציה (כמו ReLU) מאפשרות לרשת ללמוד דפוס מורכב ומעוקל כזה.
2. זיהוי ספרות בכתב יד (MNIST)
קלט: תמונת גווני אפור בגודל 28×28 פיקסלים
פלט: ספרה בין 0 ל-9
פיקסלים בלבד לא מגדירים ספרה בצורה לינארית.
בעזרת פונקציות אקטיבציה (כמו ReLU, softmax), הרשת לומדת קצוות, עיקולים, וצורות, ומשלבת אותם כדי לזהות את הספרה הנכונה.
3. זיהוי רגש מקלט שמע
קלט: מאפיינים של אות שמע (גובה צליל, עוצמה וכו')
פלט: רגש (שמח, עצוב, כועס…)
הקשר בין המאפיינים לרגש הוא לא לינארי.
פונקציות האקטיבציה מאפשרות לרשת ליצור גבולות לא לינאריים בין רגשות שונים.
אז איך הרשת לומדת ?
הסבר מלא ומדויק שלב אחר שלב איך רשת נוירונים לומדת להבדיל בין הספרות 2 ו־3, החל מהשלב ההתחלתי ביותר — כולל איך הדאטה עובר, מה הרשת עושה, ואיך היא משתפרת:
🔵 שלב 1: קלט — תמונות של הספרות 2 ו־3
-
יש לך 40 תמונות של הספרה 2, ו־40 תמונות של הספרה 3 (סה"כ 80).
-
כל תמונה היא בגודל 28×28 פיקסלים, וכל פיקסל הוא ערך בין 0 ל־255.
- כל ערך בין 0 ל 255 יעבור נירמול בין 0 ל 1 .
-
כל תמונה של 28×28 פיקסלים , מקבלת בהתאמה תווית (label):כך שנקבל שתי עמודות של תמונות ותווית
-
🔵 שלב 2: הכנסת התמונה לרשת (Forward Pass)
-
התמונה הופכת מדו מימדית ללוקטור של 784 ערכים (28×28).
-
הרשת מעבירה את הוקטור דרך שכבות נוירונים:
-
כל נוירון מבצע חיבור משוקלל + פונקציית אקטיבציה (למשל ReLU).
-
-
השכבות "מפרקות" את התמונה לתבניות:
-
קו עקום = אולי שייך ל־2 , וקו ישר בבסיס , וחצי עיקול בעליון ורציפות בין כל הקווים
-
חצי לולאה בעליון עם חצי לולאה ורציפות בינהם = אולי שייך ל־3
-
🔵 שלב 3: תחזית ראשונית (Prediction)
-
הרשת מוציאה וקטור בגודל 2:
-
לדוגמה:
[0.3, 0.7]
→ מנחשת שהספרה היא 3 (כי 0.7 גבוה יותר)
-
-
אבל אם זו הייתה תמונה של 2 → היא טעתה.
🔵 שלב 4: חישוב Loss (שגיאה)
-
מחושב Loss (למשל Cross Entropy) שמודד את המרחק בין הניחוש לתשובה האמיתית.
- בסוף, כשאתה רואה “Loss function” או “Error function” או “Cost function” – כולם מתכוונים לאותו רעיון בסיסי: מדד טעות שהרשת מנסה למזער
-
אם הרשת ניחשה 3 במקום 2 → loss גבוה
🔵 שלב 5: חישוב Backpropagation
-
הרשת מחשבת איך כל משקל וכל נוירון השפיעו על השגיאה:
-
אלו חיבורים גרמו לטעות?
-
אלו חיבורים עזרו לזהות נכון?
-
🔵 שלב 6: עדכון משקלים (Gradient Descent)
-
הרשת משנה את המשקלים כך:
-
משקלים שעזרו לזיהוי נכון → מחוזקים
-
משקלים שגרמו לטעות → מוחלשים
-
🔁 שלב 7: חזרה על התהליך
-
הרשת חוזרת על שלבים 2–6 עם דוגמאות חדשות.
-
בכל פעם היא לומדת יותר טוב להבדיל בין הספרה 2 ל־3.
🧠 התוצאה הסופית:
אחרי הרבה דוגמאות, הרשת לומדת תבנית של "2" ותבנית של "3", כך שכשתראה תמונה חדשה — היא תדע לקבוע אם זה 2 או 3 לפי המאפיינים שלמדה.
איך המשקלים שלומדים לזהות את הספרה 2 לא מתנגשים עם אלו של הספרה 3?
ואילו משקלים "משותפים" ואילו "ייחודיים"?
✅ תשובה בקצרה:
הרשת לומדת גם חלקים משותפים (Feature Sharing), וגם חלקים נפרדים (Feature Separation)
והיא עושה זאת אוטומטית דרך backpropagation ו־loss.
✳️ פירוט לפי שכבות:
1. שכבות ראשונות – חופפות (משותפות):
-
מזהות תבניות כלליות כמו:
-
קווים אנכיים / אופקיים
-
עיקולים / פינות
-
-
משותפות גם ל־2 וגם ל־3
✅ אלה משקלים חופפים, נלמדים לטובת שני המחלקות.
2. שכבות אמצע – מתחיל להתפצל:
-
התבניות מתארגנות לתצורות ביניים:
-
עיקול עליון פתוח (אופייני ל־2)
-
לולאה תחתונה סגורה (אופיינית ל־3)
-
3. שכבות אחרונות – נפרדות:
-
כל נוירון ביציאה "מומחה" למחלקה אחת:
-
נוירון עבור 2 ← מושפע רק מתבניות של 2
-
נוירון עבור 3 ← מושפע רק מתבניות של 3
✅ אלה משקלים ייחודיים.
-
🧠 איך זה לא מתנגש?
-
Gradient Descent + Loss:
-
ה־loss אומר לרשת: "אתה טועה כי ערבבת בין תבניות של 2 ל־3"
-
הרשת מתקנת רק את החיבורים שתרמו לטעות
-
-
פיזור ב־Feature Space:
-
הרשת לומדת לייצג את 2 ו־3 כוקטורים שונים במרחב
-
כך שהיא מפרידה אותם אוטומטית
-
-
משקלים שלא רלוונטיים → נשארים קרובים ל-0
-
לדוגמה: תבנית שמופיעה רק ב־3 לא תשפיע על זיהוי של 2.
-
-
אז מה באמת קורה?
-
אם משקל מחוזק עכשיו (לטובת זיהוי של 2)
→ והוא פוגע ביכולת לזהות 3
→ זה יגרום לשגיאה גבוהה יותר בדוגמה של 3 באימון הבא
→ ואז הרשת תחליש אותו חזרה. -
כלומר: אין מנגנון מיידי שמונע פגיעה במחלקות אחרות,
אבל יש מנגנון דינמי לאורך זמן שמאזן את זה על ידי תהליך חוזר של טעויות-ותיקונים.
-
הרשת מעדכנת את המשקלים לפי התרומה שלהם לשגיאה בדוגמה הנוכחית בלבד.
אם משקל מסוים מחוזק כי הוא עוזר לזהות את הדוגמה הנוכחית (למשל הספרה 2),
אך החיזוק הזה פוגע בזיהוי של מחלקות אחרות (למשל הספרה 3),
הרשת תגלה זאת רק כאשר תטעה בזיהוי של הדוגמאות האחרות,
ואז תתקן את המשקל בהתאם.
כך נוצר איזון דינמי ומתמשך שמאפשר לרשת ללמוד לזהות את כל המחלקות יחד.
הרשת מעדכנת את המשקלים לפי התרומה שלהם לשגיאה בדוגמה הנוכחית בלבד.
לכן, אם משקל מסוים מחוזק כי הוא עוזר לזהות את הספרה 2,
אך החיזוק הזה פוגע בזיהוי של הספרה 3 — הרשת לא תדע זאת מיידית.
היא תגלה את הבעיה רק כאשר תטעה בזיהוי של הספרה 3, ואז תנסה לתקן.
אולם במקרים מסוימים, זה עלול להכניס את הרשת ל"נדנדה" (oscillation) של תיקון מתמשך בין מחלקות,
ובמקום להתייצב — היא תתנדנד בין שיפור לזיהוי של אחת, ופגיעה באחרת.
לכן האיזון שנוצר הוא לא מובטח, אלא דינמי ותלוי בתנאים כמו כמות הדאטה, מבנה הרשת, והאלגוריתם.
אז מה אפשר לעשות ?
1. שימוש ב־Regularization
-
מוסיף עונש למשקלים גבוהים מדי, כדי למנוע שהרשת תסמוך יותר מדי על תכונה אחת.
-
דוגמאות:
-
L2
(Ridge) -
Dropout
-
✅ 2. שיפור מגוון ואיזון הנתונים
-
אם יש יותר דוגמאות של הספרה 2 מאשר של 3, הרשת תטה לכיוון הספרה השכיחה יותר.
-
ודא שיש איזון בכמות הדוגמאות בין הקטגוריות.
✅ 3. למידה עם Batch ולא רק דוגמה בודדת
-
Gradient descent על קבוצה (
mini-batch
) ולא על דוגמה אחת — מפחית השפעה של דוגמה בודדת. -
זה עוזר לרשת "לראות את התמונה הרחבה" לפני עדכון משקלים.
✅ 4. קצב למידה (Learning Rate) נמוך יותר
-
ערך
lr
גבוה מדי יכול לגרום לנדנוד חזק. -
הפחתה של הקצב תגרום לעדכונים יותר "עדינים".
✅ 5. שימוש באופטימייזרים מתקדמים
-
כמו:
Adam
,RMSProp
,AdaGrad
— שיכולים לייצב את העדכונים.
✅ 6. Early Stopping
-
עצירה אוטומטית של האימון כשאין שיפור על ה־validation — מונע כניסה ל-overfitting ונדנודים מיותרים.