פיתוח ויישום Deep Learning בסביבת MATLAB

פורסם ב-דצמבר 8, 2016

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

Share via Whatsapp

הכתבה באדיבות Systematics, נציגת MATLAB בישראל

למידה עמוקה  (Deep Learning) היא אחד מהתחומים המתפתחים ביותר בשנים האחרונות, בתוך ענף של למידת מכונה (Machine Learning). הטכניקה הזו, של למידה עמוקה מבוססת על לימוד של ייצוגים שימושיים של פיצ'רים ישירות מתוך תמונות, טקסטים וקול, יכולת המקנה לה יתרונות רבים. הלמידה הזו מתבצעת באמצעות שימוש במודל רשתות עצביות מסוג Convolutional Neural Network, או בקיצור CNN. המפתחים מאמנים את רשת ה-CNN באמצעות אוסף גדול של מידע, אשר בעזרתו הרשת לומדת ייצוגים עשירים של פיצ'רים, המניבים ברוב המקרים תוצאות טובות יותר מאלה שמניבים הפיצ'רים המסורתיים.

שימוש ב-CNN בתור "מחלץ פיצ'רים"

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

סיווג חיה ל"כלב" או "חתול" בעזרת שימוש ב-CNN בתור מחלץ פיצ'רים
סיווג חיה ל"כלב" או "חתול" בעזרת שימוש ב-CNN בתור מחלץ פיצ'רים

בגישה של למידה עמוקה, לעומת זאת, נותנים לאלגוריתם ללמוד את הפיצ'רים אוטומטית מתוך התמונות, מפיצ'רים מסוג Low Level גנריים כמו edge-ים ופינות, ועד לפיצ'רים ספציפיים לבעיה. כלומר, אלגוריתמי הלמידה העמוקה לא יודעים לבצע רק את הסיווג, אלא גם ללמוד כיצד לחלץ פיצ'רים ישירות מתוך התמונות, וכך הם חוסכים את הצורך בחילוץ ידני של הפיצ'רים, ובעצם מממשים למידה מקצה לקצה (End to End).

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

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

למידה עמוקה באמצעות Neural Network Toolbox

כדי לחלץ פיצ'רים באמצעות מודל CNN מאומן, ניתן להשתמש במגוון של Community Packages משלימים לביצוע למידה עמוקה המתממשקים עם סביבת MATLAB, דוגמת MatConvNet ו-Caffe. אך נוח יותר לבצע את התהליך תוך שימוש בכלי Neural Network Toolbox. הכלי הזה – אשר באופן כללי מיועד למי שמחפש פונקציות ו-Apps בסביבת MATLAB ליצירה של Neural Networks, אימון, הצגה וסימולציה שלהן מגרסת R2016a  – יכול מאוד לעזור לאלה מכם שרוצים לבצע למידה עמוקה עבור משימות של ראייה ממוחשבת.

חילוץ הפיצ'רים באמצעות מתודת activations של הכלי ניתן לביצוע תוך שימוש ב-CPU בלבד (החל מגרסת R2016b) או תוך שימוש ב-GPU (מצריך גם את כלי ה-Parallel Computing Toolbox וכן כרטיס מסך תומך CUDA תוצרת nVIDIA בעלCompute Capability  של 3.0 ומעלה). שימו לב שהחל מגרסת R2016b ניתן לחלץ פיצ'רים מתוך תמונות בעלות גודל שונה מאלה אשר שימשו לצורך אימון ה-CNN.

לאחר שחולצו פיצ'רים, ניתן לאמן בעזרתם מסווג למידת מכונה מסורתי, למשל באמצעות ה-App שנקרא Classification Learner, שמאפשר לאמן ולהשוות כל מיני מודלים בצורה אינטראקטיבית, ומהווה חלק מתוך הכלי Statistics and Machine Learning Toolbox

למידע נוסף: למידה עמוקה באמצעות MATLAB

ביצוע Fine Tuning לרשת מאומנת (Transfer Learning)

Transfer Learning הינה שיטת עבודה מאוד נפוצה באפליקציות של Deep Learning. הרעיון שעומד מאחוריה הוא שבמקום לאמן רשת "מאפס" (האייטם הבא) או להשתמש ברשת מאומנת רק לצורך חילוץ פיצ'רים שיוכנסו למסווג שאותו נאמן (האייטם הקודם), ניתן לקחת רשת שאומנה על אוסף גדול של תמונות (כמו למשל מאגר ImageNet), ולבצע לה התאמה (Fine Tuning) כדי שאפשר יהיה לפתור בעזרתה בעיית סיווג או גילוי חדשה.

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

אפליקציית MATLAB לאימון אוטומטי של רשת עצבית
אפליקציית MATLAB לאימון אוטומטי של רשת עצבית

תכנון הרשת והאימון שלה

רשת CNN מורכבת מספר שכבות כאשר כל שכבה מגדירה חישוב ספציפי. החל מגרסת R2016a, כלי ה-Neural Network Toolbox מספק יכולת לתכנן רשת בקלות, שכבה-אחר-שכבה, ואז לאמן את הרשת. למשל, בעזרת הפקודה reluLayer אפשר להוסיף שכבת Rectified Linear Unit אשר מוסיפה אי-לינאריות (הופכת לאפס ערכים שליליים). שכבת ה-Convolutional, אשר מגדירה סטים של משקולות לפילטרים שמתעדכנות במהלך תהליך האימון, ניתנת להגדרה בעזרת הפקודה convolution2dLayer.

ניתן להגדיר את שכבת ה-Max Pooling, המבצעת Downsampling למידע הזורם ברשת, באמצעות הפקודה maxPooling2dLayer. וכמובן שעומדות לרשותכם גם פקודות להגדרת יתר השכבות ברשת. כעת, כשהרשת מוגדרת, ניתן להגדיר גם את הגדרות האימון באמצעות הפונקציה trainingOptions.

כך למשל, אפשר להגדיר מה המספר המרבי של Epochs – שהוא המספר המרבי של מעברים מלאים על כל סט האימון – לשלוט על פרמטר ה-initialLearnRate ועוד. וכאשר הכל מוכן, אפשר להתחיל בתהליך האימון באמצעות הפקודה trainNetwork. אגב, הדבר מצריך גם את כלי ה-Parallel Computing Toolbox וכן כרטיס מסך תומך CUDA תוצרת nVIDIA בעל Compute Capability של 3.0 ומעלה, ולצאת להפסקת קפה…

גילוי אובייקטים בשיטת R-CNN

Regions Proposal + CNN, או בקיצור – R-CNN, זו שיטה לגילוי אובייקטים שמשתמשת ב-CNN כדי לסווג אזורים בתמונות. באופן כללי – האלגוריתם, בשלב הראשון, מציע כל מיני אזורים מעניינים בתמונה. בשלב השני – הוא מכניס כל איזור לתוך CNN מאומן, כדי לחלץ פיצ'רים. ואז בשלב השלישי – הוא מכניס את הפיצ'רים של כל איזור למסווג, כדי לקבוע מה יש בו. ומכיוון שאנו לא מסווגים כל איזור אפשרי (כמו שהיה קורה עם Sliding Window לדוגמה), אלא נותנים לגלאי לעבד רק אזורים אשר סביר שיכילו אובייקט – זה מקטין משמעותית את הסיבוכיות החישובית.

גילוי תמרור "עצור" בשיטת R-CNN
גילוי תמרור "עצור" בשיטת R-CNN

בגרסת R2016b נוספה לכלי ה-Computer Vision System Toolbox הפקודה trainRCNNObjectDetector אשר בעזרתה ניתן לאמן גלאי אובייקטים בשיטת R-CNN (הפקודה מחייבת רישיונות לכלים Statistics and Machine Learning Toolbox, Parallel Computing Toolbox ו-Neural Network Toolbox, וכן כרטיס מסך תומך CUDA תוצרת nVIDIA בעלCompute Capability של 3.0 ומעלה או מחשב בעל מספר cores).

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

אתגרים בעבודה עם Deep Learning

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

  • טעינת המידע וניהולו – באפליקציות מעולם הראיה הממוחשבת, נדרשים לרוב לטעון ולנהל סטים מאוד גדולים של תמונות, עם ה-Labelים שלהם. על מנת להתמודד עם המשימה, מומלץ להשתמש בפקודה imageSet (מתוך ה-Computer Vision System Toolbox), וכן להיעזר בפונקציות splitEachLabel ו- countEachLabelאשר נוספו ל-MATLAB בגרסת R2016a.
  • סיבוכיות חישובית – בניה של אלגוריתם למידת מכונה יכולה להיות מאוד תובענית מבחינה חישובית, והרבה פעמים צריך לדעת כיצד לעבוד עם GPU על מנת להאיץ את תהליכי הלימוד באמצעות יכולות עיבוד מקביליות . בסביבת MATLAB השימוש ב-GPU די אינטואיטיבי ולעתים אפילו "שקוף", כך שלא נדרשת היכרות עם חומרה זו לצורך קבלת שיפור בזמני הריצה.
  • Trial and Error – ברוב המקרים לא מצליחים למצוא פתרון לבעיה "על הניסיון הראשון", ונדרש לבצע מספר איטרציות עד ההתכנסות לפתרון הנכון. סביבת MATLAB מקלה על ביצוע איטרציות שכאלה, למשל – קל לבחון מגוון מסווגים באמצעות ה- Classification Learner שהוזכר למעלה בהקשר של שימוש ב-CNN בתור מחלץ פיצ'רים.
  • אלגוריתמים המכילים מרכיבים נוספים פרט ללמידה עמוקה – פעמים רבות הלמידה העמוקה היא רק חלק ממשימה גדולה יותר. למשל, באפליקציות מעולם הראיה הממוחשבת, לפני שמסווגים אובייקט ל-Label מסוים, בכלל צריכים לאתר אותו, לבצע פעולות עיבוד לתמונה וכו'. סביבת MATLAB, כפלטפורמה המאגדת עשרות כלים ממגוון תחומי יישום – מאפשרת לשלב בקלות את מרכיב הלמידה העמוקה כחלק מהאלגוריתם הכללי השלם.
    ·הפצת התוצאות – לעתים קרובות משימות ה-Deep Learning אינן מבוצעות רק לשם מחקר, אלא יש רצון לייצר אלגוריתם עצמאי לאחר בניית המסווג/הגלאי. בעזרת כלי ה-MATLAB Compiler/SDK, החל מגרסת R2016b ניתן לייצר EXE/DLL מתוך פונקציונליות הלמידה העמוקה של סביבת MATLAB, ולהפעיל את התוצר על מחשבים בהם לא מותקנת תוכנת MATLAB.

בסביבת MATLAB קיימים כלים המקלים על עבודה בטכניקת Deep Learning, בהם:

Neural Network Toolbox

Statistics and Machine Learning Toolbox

Parallel Computing Toolbox

Image Processing Toolbox

Computer Vision System Toolbox

MATLAB Compiler

MATLAB Compiler SDK

למידע מקצועי נוסף:

Deep Learning: Top 7 Ways to Get Started with MATLAB

פורסם בקטגוריות: Networks , כללי