הקניית ידע מתמטי המלל

שיעור #7 – פירוש ויזואלי לקונבולוציה המלל

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

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

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

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

נתחיל במטריצת הגרעין שנקראת Sharpen כי מה שמייד נראה שעושה זה חידוד של התמונה. מטריצת גרעין מסוג Sharpen בגודל 3X3 לדוגמא היא המטריצה עם המספרים: 0,-1,0,-1,5,-1,0,-1,0

ניתן לראות את תוצאת הקונבולוציה שהינה תמונה מחודדת יותר ביחס לתמונה המקורית.

ולמה זה קורה ?

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

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

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

פילטר Blur (טישטוש), אשר אלו הערכים שלו, מטשטש את התמונה ובכך גם מנקה ממנה רעשים.

פילטר Left Sobel , אשר אלו הערכים שלו, מדגיש בתמונה שינויים משמאל לימין, פילטר Top Sobel  מדגיש עליות מלמעלה למטה.

ופילטר Identity, אשר אלו הערכים שלו, משאירה אותה איך שהיא.

לסיום נראה כמה פילטרים פופולאריים עם מטריצת הגרעין שלהם, פילטרים שמחדדים תמונה, מטשטשים תמונה, מבליטים תמונה, מדגישים קצוות בתמונה. וזו גם הסיבה שקוראים להם פילטרים כי הם מסננים את התמונה ומשאירים פרטים מסוימים. פילטרים בעיבוד תמונה ובעיבוד אות שמע הם כלים מאוד שימושיים לעיבוד והם אבן היסוד של CNN=Convolutional Nueral Network.

נסו כתרגיל להבין מדוע ערכי מטריצות הגרעין\פילטר הללו עושות מה שהן עושות לתמונה.

חזור לוידאו

 

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #6 – קונבולוציה בין מטריצות המלל

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

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

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

למשל נסתכל על שתי המטריצות הללו: מטריצת הקלט משמאל (בגודל 3X3) קונבולוציה עם מטריצת הגרעין\הפילטר מימין (גם כן בגודל 3X3) ונבין איך מחשבים את מטריצת התוצאה (גם היא בגודל 3X3).

כל אלמנט במטריצה התוצאה הינו תוצאה של סכום של כל המכפלות בין כל האלמנטים החופפים בין מטריצת הקלט ומטריצת הגרעין כשהיא הפוכה, כאשר כל פעם מטריצת הגרעין ההפוכה מוסטת. האיבר הראשון (שמאלי עליון) של מטריצת התוצאה שהינו 13- חושב ע”י סכום המכפלות: 01+02+(-2)4+(-1)5

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

הפעם החישוב יכלול סכום של יותר מכפלות (כי יש יותר חפיפה בין המטריצות). החישוב יהיה:

 01+02+03+(-1)4+(-2)5+(-1)6  וזה שווה ל 20- שהוא האלמנט האמצעי מלמעלה במטריצה התוצאה.

נמשיך באותו אופן ונראה איך נוצרת השורה הראשונה של מטריצת התוצאה, השורה השניה של מטריצת התוצאה, והשורה השלישית של מטריצת התוצאה.

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

חזור לוידאו

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #5 – כפל מטריצות המלל

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

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

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

למשל בין המטריצות הבאות לא ניתן לבצע מכפלה:

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

איך בפועל מחשבים כפל מטריצות ?

נסתכל על שתי מטריצות האחת בגודל 3×2 (ז”א שלוש שורות ושתי עמודות) עם איברי a (a11,a12,… וכו’)  והשניה בגודל 2×3 עם איברי b.

שימו לב שהמספרים הסידוריים ליד a או b מייצגים מיקום במטריצה. למשל a12 הינו האיבר שבשורה ראשונה ועמודה שניה.

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

מדוע בכלל ניתן להכפיל את המטריצות בסדר הזה ובסדר ההפוך ?

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

אם כן התוצאה הינה מטריצה בגודל 3×3 ומחשבים אותה ע”י סכימה של המכפלות. אז למשל איבר במיקום 1 על 1 (שורה ראשונה עמודה ראשונה) יחושב כסכום המכפלות של שורה ראשונה ממטריצה ראשונה (של ה aים)  עם העמודה הראשונה של המטריצה השניה (של ה b ים)   a11b11+a12b21

האיבר בשורה ראשונה ועמודה שניה במטריצה התוצאה יחושב ע”י a11b12+a12b22

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

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

נדגים זאת עם מספרים אמיתיים, נכפיל שתי מטריצות A,B בגודל 2×2 ונקבל את מטריצת התוצאה באופן הבא.

למשל איבר 1,2 (שורה ראשונה, עמודה שניה) של מטריצת התוצאה מתקבל ע”י סכום המכפלות של שורה ראשונה ממטריצה ראשונה עם עמודה שניה ראשונה: 1(-1) + 21=3

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

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

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

חזור לוידאו

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #4 – מה חשוב באלגברה לינארית המלל

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

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

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

למשל מטריצה 3×4 או 3×2 או 2×2

מימדים של טנזור בדומה…

פעולת ה transpose או בעברית שיחלוף, הינה פעולה שעושים אותה על מטריצה שהינה החלפת השורות בעמודות. את הפעולה מסמנים באמצעות t קטנה מימין למעלה למטריצה. למשל המטריצה הזו בגודל 2×3 תהפוך אחרי שיחלוף למטריצה בגודל 3×2. כאשר השורה הראשונה 6,2,-1 הפכה לעמודה הראשונה והשורה השניה 7,-5,0 הפכה לעמודה השניה.

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

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

חזור לוידאו

 

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #3 – הרכבת פונקציות וכלל השרשרת המלל

מושג חשוב נוסף על מנת שבהמשך נבין back propagation כמו שצריך הינו הרכבת פונקציות ובהקשר זה את כלל השרשרת.

הרכבת פונקציות הכוונה לשים בשרשרת שתי פונקציות כאשר הפלט של הראשונה יהווה הקלט של השניה ובכך להרכיב פונקציה אחת. למעשה רשת נוירונים היא הרכבה של הרבה פונקציות (שכל אחת נקראת שכבה ברשת). למשל נרכיב את הפונקציה f(x)=x^2-6x+2 עם הפונקציה g(x)=-2x

בסדר הזה f של g וזה לעיתים מסומן ע”י עיגול קטן נקבל לבסוף פונקציה אחת שהינה 4x^2+12x+2

מקבלים זאת ע”י הצבת הפונקציה g(x) שהינו 2x- בכל פעם שמופיע x בפונקציה f(x). ז”א לקחנו את הפלט של הפונקציה g וחיברנו אותה כך שתהיה הקלט של הפונקציה f.

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

כעת כלל השרשרת chain rule הינו כלל במתמטיקה שאומר איך אפשר לגזור פונקציה שהינה הרכבה של כמה פונקציות שונות. הכלל אומר שכדי לגזור f הרכבה עם g אפשר להכפיל את הנגזרת של f כשמציבים בה בנגזרת את g עם הנגזרת של g.  אז בדוגמה שלנו נגזור את g ואת f בנפרד:

נציב בכלל השרשרת וקיבלנו את הנגזרת של ההרכבה:

שימו לב שהיינו ומקבלים את אותה התוצאה אילו היינו גוזרים ישירות את f הרכבה עם g אותה ראינו מקודם:

4x^2+12x+2

ועל כן… הנוסחה עובדת!

חזור לוידאו

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #2 – הנגזרת והגרדיאנט המלל

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

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

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

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

למשל הגרדיאנט של הפונקציה הדו מימדית f(x,y)=x+4y מורכב מנגזרת הפונקציה לפי x שהיא 1  ולפי y שהיא 4, ז”א [4,1]. ממש לא חייבים להיכנס יותר מזה למתמטיקה בכדי להבין למידה עמוקה כי את אותם הפעולות המתמטיות עושה המחשב ולא אנחנו המפתחים, מה שחשוב זה להבין אינטואיטיבית את המשמעות.

חזור לוידאו

Posted by תמיר נווה in הקניית ידע מתמטי המלל

שיעור #1 – פונקציות ולמה זה חשוב בהקשר של למידה עמוקה המלל

פונקציות במתמטיקה כולנו מכירים מלימודי בית הספר, הם למעשה אוביקטים מתמטיים שמקבלים מספר אחד או יותר ומחזירים מספר אחד. ניתן לכתוב פונקציה בצורה אלגברית, נניח y=10-x ומוסכם שהקלט הינו x והפלט הינו y.

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

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

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

אך ראשית מדוע רלוונטי לדבר על זה בכדי ללמוד deep learning ?

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

תהליך האימון של רשת נוירונים נקרא back propogation. ומשמעותו שינוי המשקלים של הרשת כך שהרשת תצליח במשימה על data ו ground truth נתונים. (מהם אותם משקלים ומה הם עושים נבין בקורס עצמו של למידה עמוקה, כרגע רק נבין שאלו מספרים שקובעים את תגובתה של הרשת לקלט נתון, ולכן מטרתנו בשלב האימון לעדכן אותם להיות אופטימליים)

האימון הוא תהליך מתמשך המורכב מאיטרציות (epochs) כאשר לאורכו הרשת\האלגוריתם אמור להשתפר בביצוע המשימה שלו.

בכל איטרציית אימון הרשת מקבלת פיסות קלט מה training database והפרמטרים או משקלים של המודל\של הרשת מתעדכנים במטרה להשתפר במלאכת הסיווג (או המשימה שבאופן כללי נקרא לה הפרדיקציה).

כדי להחליט איך לעדכן את אותם הפרמטרים\משקולים ישנו את פונקציית ה loss שמחזירה הינו ערך מספרי חיובי (שנקרא loss) שהינו ציון לעד כמה הרשת מוצלחת ברגע מסויים במשימה שלה. כדי לחשב את ה loss יש להתחשב כמובן ב ground truth. כי הרי ה loss מתאר עד כמה הפרדיקציה של הרשת תואמת ל ground truth שניתן לה.

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

Loss function משתנה.

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

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

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

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

חזרה לוידאו

Posted by תמיר נווה in הקניית ידע מתמטי המלל