fbpx

01. מבוא

בינה מלאכותית – Artificial Intelligent

המונח בינה מלאכותית (AI) מכיל מאחוריו עולם שלם של שיטות ומודלים שונים.

בכלל הניסיון להסביר שלמחשב יכולה להיות סוג של “בינה”, נשמע קצת מדע בדיוני.

כמתכנתים, אנו מניחים שקוד של תוכנה מכיל הרבה תנאיי if-else ולכן בסופו של יום, אוסף של תנאים אלו יוביל לפלט מסוים.

אז איך אפשר להכניס בינה בתוך שורות קוד?

ואכן ניתן לחלק את עולם התכנות ל”תכנות דור ראשון”, בו התוכנה בנויה מתהליך של אוסף שורות קוד עם תנאיי if-else, עם מבנה לוגי קבוע מראש, לבין הדור השני של התכנות – למידת מכונה.

למידת מכונה הוא תחום גדול ואפשר לחלק אותו למספר קטגוריות.

לדוגמה, חישובים כמו linear regression מנסים “לחזות” ערך כלשהו על סמך שיטות קירוב סטטיסטיות. 

למשל, אם יש לנו הרבה נקודות המתארות משקל וגיל של צב:

הקו הצהוב שיצרנו יהיה עקומת הקירוב הלינארי שדרכו נוכל “לנחש” בצורה מושכלת מה יהיה משקל של צב בהינתן הגיל שלו. יצירת הקו תיעשה בשיטות של ML (קיצור ל-Machine Learning) מסוג רגרסיה לינארית.

שיטות דומות מנסות ליצור קווים שאינם ליניאריים (= ישרים), אלא פולינומיאליים:

אנו לא נתמקד בלמידת מכונה מסוג זה בקורס. 

 

משפחה נוספת של למידת מכונה נקראת Decision Tree במסגרתה אנו בונים “עץ” שמשתמש במידע שאספנו, כך שבעת קבלת החלטה, נוכל לבצע שימוש בעץ. גם זאת לא נלמד בקורס זה. (אם כי את יסודות המבני נתונים מסוג עץ, כולל עץ החלטה, תיארנו בקורס לוגיקוד “מבנה נתונים וניתוח אלגוריתמים” בשיעור 13).

אז מה כן נלמד?

אנו נלמד בקורס את מנגנון הלמידה הנקרא “Artificial Neural Network” – רשתות נוירונים. 

זהו תחום בבינה מלאכותית בו השימוש במונח “בינה” אולי מתאים יותר, מאחר והמוח האנושי הבנוי מנוירונים, היווה השראה לאלגוריתמים אלו כפי שתכף נראה.

גם “רשתות נוירונים” היא משפחה של הרבה קטגוריות, כמו: רשת לינארית/עמוקה, למידה מונחית/בלתי מונחית למידה מחוזקת, רשתות קונבולוציה, רשתות RNN ועוד. אנו נלמד את המונחים הללו וההבדלים ביניהם במהלך הקורס.

אז למה רשת נוירונים?

ישנם פעולות רבות ושונות המסוגלות להיות מבוצעות על ידי רשתות נוירונים. החל מהיכולת לקבלת החלטה על פעולת מסחר, דרך היכולת לחזות את מזג האוויר ועד לזהות האם יש מכונית בתמונה, ואפילו לתרגם משפטים משפה לשפה.

 

בקורס זה אנו נתמקד בבעיית ה-Classification, קלסיפיקציה.

נתמקד בעולם הראייה הממוחשבת, והשאלות שהתוכנה/מודל שלנו יידע לבצע הן שאלות כמו: האם יש מכונית בתמונה? האם המופיע בתמונה הוא כלב או חתול?

משימות מסוג זה דורשות שימוש במספר רב של פעולות שונות הנפוצות בלמידת מכונה, ולכן לאחר קורס זה יהיה לך קל להמיר את הידע לכל תחום דומה. 

הקורס בנוי באופן שמשלב גם תיאוריה וגם פרקטיקה.

לאחר למידת הקורס תהיה לסטודנט היכולת הפרקטית ליצור מודל Deep Learning בפייתון כמו גם הבנה תיאורטית עמוקה במונחים הבסיסיים של למידה עמוקה על מאפייניה השונים. 

אנו נתמקד בשיטה הנקראת Convolutional Neural Network, בקצרה CNN. שאלו מודלים שהוכחו כטובים ביותר לצורך בעיית Image Classification (זיהוי אובייקטים בתמונה). כמובן זה גם אומר שנצטרך להכיר את המודלים הקלאסיים.

 

ראייה ממוחשבת (CV)

איך באמת נוכל ללמד מחשב לזהות מה בתמונה?

בשביל שילד קטן ילמד מהו פרי, זה ידרוש ממנו לראות הרבה פירות מסוגים שונים, בתנאי תאורה שונים, במקומות שונים, כך שבסופו של דבר, בלי שאף אחד ממש יסביר לו מהי ההגדרה של פרי, הוא יכול להצביע על עצמים ולהגיד “זה פרי” לעומת “זה לא פרי”, גם אם זה סוגי פירות שהוא לא ראה מימיו.

כאשר אנו מלמדים (או במונח היותר מקובל: מאמנים) תוכנה לבצע פעולה כלשהי כמו זיהוי של פרי, זה ידרוש מאיתנו להציג לתוכנה קולקציה של חפצים, ועל כל אחד מהם “ללמד” את התוכנה האם הוא פרי או לא.

אמרתי ללמד?

הכוונה היא שלאחר שנכין את המודל לצורך למידה (שזה יהיה רוב העבודה בקורס…) אנו נציג למחשב קבוצה של תמונות, ועל כל אחת נגיד לו האם זה פרי או לא.

בסופו של תהליך, אם בנינו נכון את שלב האימון בתוכנה, יווצר לנו “מודל” שזו תוכנה, שכעת תוכל לקבל כל תמונה בעולם ולספר לנו ברמת דיוק גבוהה האם יש בתמונה פרי או לא.

איך זה קורה?

אז נחזור לרגע לדוגמה של הילד שמזהה פרי ונשאל שאלה בסיסית יותר: 

  1. איך אכן הילד מצליח לזהות מה לפניו?
  2. מה קורה בכל פעם שהוא רואה דוגמה של פרי?

והשאלה הזו היא אולי אפילו רחבה עוד יותר: איך תהליך הראייה במוח עובד?

 

מבט כללי על המוח:

מערכת העצבים במוח בנויה ממיליארדי יחידות הנקראים נוירונים. (כ-86 מיליארד, אבל מי סופר…)

הנוירון הוא יחידת חישוב המסוגלת לקבל קלט – מתח חשמלי, מנוירונים שכנים. ופלט – יצירת מתח חשמלי משלו, שיגיע לנוירונים שכנים אחרים.

מערכת הראיה:

מערכת הראיה שלנו מורכבת ממספר חלקים. רשתית העין היא האזור הראשון, וממנו זורם המידע דרך אזורים שונים כמו למשל אזור באמצע הדרך הנקרא LGN, אזור שנמצא באחורי הראש הנקרא V1, ואז האזור הבא הנקרא V2 וכן הלאה.

המידע שמגיע דרך הרשתית, עובר בכל התחנות הללו, ובדרך נעשה עיבוד של המידע.

 

מה זה אומר עיבוד של המידע?

למשל: אזור V1 במוח, שמקבל את המידע מהרשתית של העין (אחרי עוד תחנות בדרך) בפועל “בודק” האם ישנה בתמונה שהתקבלה לעין קווים בעלי אורנטצייה מסוימת.

כך למשל נוירון (תא עצב) באזור V1 לדוגמה, יכול להיות “רגיש” ולהגיב (ליצור פלט) בתנאי שבתמונה שהתקבלה היה קו אור נטוי ב 30 מעלות ימינה. לעומתו הנוירון השכן יגיב כאשר תהיה נטיה של 35 מעלות וכן הלאה.

 

באיור הבא אפשר להתבונן בעוצמת הפלט (ציר Y) של נוירון ספציפי כפונקציה של “כמה נטוי הקו המוצג לעין” (ציר X).

איור זה הוצג לראשונה על ידי צמד המדענים Hubel and Wiesel, (לימים חתני פרס נובל) שעשו ניסויים בחיות מעבדה והציגו את הפונקציונליות הזו של האזור הנקרא V1.

הם הציגו קווים נטויים לעכברים, ומדדו את הפעילות במוח באזור V1 ומצאו התאמה בין זוויות הקווים לבין הפעילות.

ובכן, אוסף הנוירונים באזור V1 מספק את המידע הבסיסי על זוויות של רכיבים הנמצאים במידע שהתקבל בתמונה לעין.

השכבה שתקבל את הפלט הזה תהיה שכבה “גבוהה” יותר בהיררכיה במוח, והיא למשל תוכל לבצע חישוב האם ישנה תנועה בתמונות שמתקבלות. 

שכבות אחרות יגיבו בהקשר של צבעים, של עומק, של פינות וכן כל שאר המרכיבים שבסופו של דבר מרכיבים תמונה מושלמת שהמוח “מזהה”.

מה שנותר הוא שהמוח גם “יתייג” את מה שהוא רואה.

 

כשהילד שומע שוב ושוב את המילה “פרי” כשהוא במקביל רואה פרי, הוא לומד את ההקשר ומסוגל לזהות זאת לבדו גם על פירות שהוא מעולם לא ראה. הנוירונים בשכבות השונות מחזקים את פעילותם בהתאם לפידבק שהם מקבלים מתהליך ההכרה הגבוה יותר.

ההבנה איך המנגנון המוחי עובד היוותה השראה לרעיון השכבות בבינה מלאכותית. 

בבינה המלאכותית הבנויה כרשת נוירונים, ישנם גם כן “שכבות”. המידע (התמונה) עובר בין השכבות השונות, בהן מבוצע איזשהו חישוב, כך שכל שכבה מקבלת X מהשכבה הקודמת ומוציאה Y לשכבה הבאה. השכבה האחרונה תוציא פלט שדרכו נבין מה הרשת “חושבת” שיש בתמונה.

 

ומהו החישוב הקורה בשכבות?

השכבה עצמה היא קבוצה של מספרים ששמורה בתוך פרמטרים. המידע שעובר בשכבה מקבל השפעה מפרטרים אלו. למשל אם המידע קלט X הוא וקטור של מספרים, אז שכבת הפרמטרים (שהיא גם וקטור מספרים) מוכפלת בו בשיטת “וקטור כפול וקטור” (מונחים שנבין אותם טוב יותר בהמשך). המטרה שלנו היא ללמד את הפרמטרים להיות בעלי ערכים כאלו שבסופו של התהליך ההשפעה שלהם על הקלט תותאם לתוצאה הנדרשת.

ונסביר יותר.

התבוננו באיור הבא:

ננסה לדמיין שהקלט בתמונה זו בעיגולים הצהובים, הוא פיקסלים של תמונה.

השכבה הראשונה מבצעת אוסף פעולות כלשהי, ומעבירה את תוצאת החישוב שלה לשכבה הבאה, שגם מבצעת אוסף פעולות, שמתכנסות בסופו של דבר ל-2 עיגולי התוכריז.

אם נמשיך להתמקד בדוגמה זו: הפלט חייב לצאת כך שבתוצאה יהיו שני מספרים. אחד בעיגול התורכיז העליון, ואחד בתחתון.

אם המספר בעיגול העליון גדול יותר, זה אומר שהתוכנית “חושבת” שבתמונה מופיעה מכונית.

לעומת זאת, אם המספר בעיגול התחתון גדול יותר, סימן הוא שהתוכנית חושבת שבתמונה “אין מכונית”.

זהו רק שיעור מבוא, ולכן לא נרד לפרטים של התהליך, אבל ננסה על רגל אחת להבין מה כן קורה בתהליך האימון של הרשת.

 

אוסף העיגולים השחורים שבשכבות האמצעיות המתוארות באיור הם הנוירונים, שהם בעצם מספרים/פרמטרים.

בתחילה קיבלו פרמטרים אלו ערכים אקראיים, ותוך כדי אימון הרשת – דהיינו – כשמכניסים לרשת תמונה והיא מבצעת חישובים ומעבירה את המידע בין השכבות, הרשת מחשבת כיצד הפרמטר השפיע על התוצאה הסופית. מטרת האימון היא שכפי ההשפעה של פרמטר על התוצאה, כך נחליט האם לשנות את ערכו. (וכזכור הערך הראשוני שלו היה ערך אקראי).

למשל, אם הרשת אכן חזתה נכון שיש מכונית בתמונה, הלמידה אחורה הנקראת גם back-propagation תזהה על פרמטר מסוים, שאם ערכו היה גדול יותר, הוא היה משפיע לחיוב (לטובה) על התוצאה שהגיעה, במקרה זה הרשת “תגדיל” את הפרמטר. אם למשל היה שם הערך 5, אז הרשת תגדיל את הערך להיות 5.1

באופן כזה, אנו נאמן את הרשת, נציג לה עוד ועוד תמונות, ובכל פעם הפרמטרים ש”חשבו” בכיוון הנכון מתחזקים, והאחרים נחלשים, עד שבשלב כלשהו הרשת תהיה כה חכמה שהיא תצליח לזהות את התבנית הנדרשת.

 

באופן מעט דומה למערכת הראייה, לכל שכבה ברשת זו נוכל לתת אינטרפרטציה (הסבר) של זיהוי תכונות מסוימות בתמונה.

למשל זיהוי של סימטריות שקיימת בתמונה, או זיהוי של פינות זוויות וכדומה. אם ננסה להבין יותר מידי, אנו בדרך כלל לא באמת נצליח לעשות זאת, אם כי יש מספר שיטות לבחון זאת ונשתדל להזכירן בסוף הקורס.

 

אם נסכם, הבינה המלאכותית מוצאת בעצמה את משמעות הפרמטרים שהיא מחזקת, ולא תמיד נוכל לתת משמעות לשכבות השונות קל וחומר שלא לפרמטרים השונים.

המונח “ראייה ממוחשבת” (Computer Vision, גם CV) מתאר בדיוק את מה שהסברנו. את היכולת של המחשב לדמות ראייה של אדם, ולהבין את מה שהוא אומן לעשות.

 

מויקיפדיה:

“ראייה ממוחשבת (באנגלית: Computer Vision) היא ענף מרכזי של מדעי המחשב, העוסק בעיבוד אוטומטי של תמונות ווידאו, במטרה לחלץ ולפרש מידע חזותי הטמון בהם. 

העוסקים בתחום מפתחים כלים מתמטיים וכלי תוכנה לעיבוד מידע חזותי. לדוגמה: חידוד של תמונה לא ממוקדת, חידוד של תמונה שצולמה תוך כדי תנועה מהירה, זיהוי עצמים וזיהוי פנים.”

ואכן השימושים לראיה ממוחשבת לא מסתיימים ביכולת לזהות עצמים בתמונה, אלא כוללים גם דברים פשוטים יותר כמו יכולת לזהות משמעות של טקסט (תחשבו על קריאה אוטומטית של מספר רכב הנוסע בכביש 6 על ידי מצלמה) וכן זיהוי פנים, מיון דואר, תצפיות ביטחוניות ועוד הרבה…

 

נתקרב מעט לפרקטיקה:

ישנן כיום 2 ספריות עיקריות בפייתון ללמידה עמוקה וראייה ממוחשבת. האחת, TensorFlow שפותחה על ידי גוגל. (קוד פתוח), והשניה PyTorch המבוססת על Torch מפרי פיתוחה של חברת פייסבוק, (גם כן קוד פתוח) ובה נתמקד בפרקטיקה של קורס זה.

כמובן שהתיאוריה שנלמד בקורס, רלוונטית גם לספרית TensorFlow וכן גם לשפות אחרות שאינן פייתון.

כיום לספריית PyTorch קיים שימוש נרחב, כמו למשל בלמידת הנהיגה האוטומטית של טסלה, אלגוריתמי המסלולים של Uber, במחקר ועוד הרבה…

במסגרת הקורס נשתדל לשלב פרקטיקה ותיאוריה ככל הניתן, ולכן כסיום לפרק מבוא זה, המשימה הראשונה שלנו תהיה ליצור פרוייקט פייתון חדש, נקרא לו my_first_ml (למי שלא הבין, ml = machine learning)

ובפרוייקט שיצרנו נתקין את הספרייה torch.

כך ששורת הקוד הראשונה בקובץ ה-main בפרוייקט שלנו תהיה:

				
					import torch
				
			

ונכון, שכחתי לציין – לצורך הקורס נדרש רקע בסיסי בפייתון. אם הוא חסר לכם, אני ממליץ על הקורסים המצוינים של לוגיקוד.

 

בפרק הבא, נלמד על הדרכים בהן מיוצגת תמונה במחשב וספציפית איך מיוצגת תמונה ב-PyTorch

בכללי, ב-10 השיעורים הראשונים של הקורס אנו נלמד את יסודות הבינה המלאכותית בעולם רשתות הנוירונים וראייה ממוחשבת, עם חיבור ישיר לפרקטיקה וקוד. 

בשיעורים בסוף הקורס נעשה סקירה יותר תיאורטית של התחום, נכיר שימושים וסוגים שונים של רשתות בינה מלאכותית גם מעולמות שאינם דווקא ראייה ממוחשבת.

כניסה

שכחתי סיסמה

אין לך חשבון? להצטרפות

איפוס סיסמה:

שכח את הסיסמה? הזן את שם המשתמש או כתובת הדואר אלקטרוני. תקבל קישור לאיפוס סיסמה באמצעות דואר אלקטרוני.

ברכות! סיימתם את השיעור הראשון בקורס!

עשיתם את הצעד הראשון בדרך שלכם להיות מתכנתים מקצועיים
הצטרפו אלינו כדי להמשיך במסלול שיוביל אתכם לעתיד בהייטק

שינוי סיסמה

עריכת פרטים אישיים