|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
מבוא לרשתות עצביות: פרספטרון
שאלון לפני השיעור
אחת הניסיונות הראשונים ליישם משהו דומה לרשת עצבית מודרנית נעשתה על ידי פרנק רוזנבלט ממעבדת התעופה של קורנל בשנת 1957. זה היה יישום חומרה שנקרא "Mark-1", שתוכנן לזהות צורות גיאומטריות פשוטות, כמו משולשים, ריבועים ועיגולים.
![]() |
![]() |
תמונות מוויקיפדיה
תמונת הקלט הוצגה באמצעות מערך של 20x20 תאים פוטואלקטריים, כך שלרשת העצבית היו 400 כניסות ופלט בינארי אחד. רשת פשוטה הכילה נוירון אחד, שנקרא גם יחידת לוגיקה סף. המשקלים של הרשת העצבית פעלו כמו פוטנציומטרים שדרשו התאמה ידנית במהלך שלב האימון.
✅ פוטנציומטר הוא מכשיר שמאפשר למשתמש לכוון את ההתנגדות של מעגל חשמלי.
הניו יורק טיימס כתב על הפרספטרון באותה תקופה: העובר של מחשב אלקטרוני שהצי [האמריקאי] מצפה שיוכל ללכת, לדבר, לראות, לכתוב, לשכפל את עצמו ולהיות מודע לקיומו.
מודל פרספטרון
נניח שיש לנו N מאפיינים במודל שלנו, ובמקרה כזה וקטור הקלט יהיה וקטור בגודל N. פרספטרון הוא מודל של סיווג בינארי, כלומר הוא יכול להבחין בין שתי קטגוריות של נתוני קלט. נניח שלכל וקטור קלט x הפלט של הפרספטרון שלנו יהיה או +1 או -1, בהתאם לקטגוריה. הפלט יחושב באמצעות הנוסחה:
y(x) = f(wTx)
כאשר f היא פונקציית הפעלה מדרגה.
אימון הפרספטרון
כדי לאמן פרספטרון, עלינו למצוא וקטור משקלים w שמסווג את רוב הערכים בצורה נכונה, כלומר מביא לשגיאה הקטנה ביותר. שגיאה זו E מוגדרת על פי קריטריון הפרספטרון באופן הבא:
E(w) = -∑wTxiti
כאשר:
- הסכום נלקח על נקודות נתוני האימון i שמובילות לסיווג שגוי.
- xi הוא נתון הקלט, ו-ti הוא או -1 או +1 עבור דוגמאות שליליות וחיוביות בהתאמה.
קריטריון זה נחשב כפונקציה של המשקלים w, ואנו צריכים למזער אותו. לעיתים משתמשים בשיטה שנקראת ירידת גרדיאנט, שבה מתחילים עם משקלים ראשוניים w(0), ואז בכל שלב מעדכנים את המשקלים לפי הנוסחה:
w(t+1) = w(t) - η∇E(w)
כאן η הוא מה שנקרא קצב הלמידה, ו-∇E(w) מציין את הגרדיאנט של E. לאחר חישוב הגרדיאנט, אנו מקבלים:
w(t+1) = w(t) + ∑ηxiti
האלגוריתם בפייתון נראה כך:
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
weights = [0,0,0] # Initialize weights (almost randomly :)
for i in range(num_iterations):
pos = random.choice(positive_examples)
neg = random.choice(negative_examples)
z = np.dot(pos, weights) # compute perceptron output
if z < 0: # positive example classified as negative
weights = weights + eta*weights.shape
z = np.dot(neg, weights)
if z >= 0: # negative example classified as positive
weights = weights - eta*weights.shape
return weights
סיכום
בשיעור זה למדתם על פרספטרון, שהוא מודל סיווג בינארי, וכיצד לאמן אותו באמצעות וקטור משקלים.
🚀 אתגר
אם תרצו לנסות לבנות פרספטרון משלכם, נסו את המעבדה הזו ב-Microsoft Learn שמשתמשת ב-Azure ML designer.
שאלון אחרי השיעור
סקירה ולימוד עצמי
כדי לראות כיצד ניתן להשתמש בפרספטרון לפתרון בעיה פשוטה וגם בעיות מהחיים האמיתיים, ולהמשיך ללמוד - עברו למחברת Perceptron.
הנה מאמר מעניין על פרספטרונים.
משימה
בשיעור זה יישמנו פרספטרון למשימת סיווג בינארי, והשתמשנו בו כדי לסווג בין שתי ספרות כתובות ביד. במעבדה זו, אתם מתבקשים לפתור את בעיית סיווג הספרות באופן מלא, כלומר לקבוע איזו ספרה סביר להניח תואמת לתמונה נתונה.

