יום שני, 26 במרץ 2018

Deep Learning with MATLAB in R2018a

לפני מספר ימים שוחררה גרסת ה-MATLAB הראשונה לשנה זו, R2018a, והיא כוללת יכולות חדשות רבות ותיקוני באגים בכלים הקיימים, ואף מספר כלים חדשים (לסקירת יכולות הגרסה – לחצו פה).
תחום ה-Deep Learning קיבל תשומת לב רבה בגרסה הקודמת (לחצו לסקירה), וגם בגרסת R2018a נמשכים המאמצים של  MathWorks לתת ערך מוסף משמעותי למשתמשים ב-MATLAB בתחום זה.

כזכור – כבר בגרסה הקודמת היו ל-MATLAB יתרונות רבים בהשוואה לחלופות החינמיות, למשל:
·         תיוג מהיר ונוח, באמצעות Apps (לחצו למידע על ה-Image Labeler, המאפשר לתייג תמונות בקלות ואף לבצע תיוג ברמת בפיקסל לצורך סגמנטציה סמנטית; או לחצו למידע על ה-Ground Truth Labeler, המאפשר לתייג במהירות וידאו או סדרות של תמונות)
·         מהירות אימון (ראו בתחתית הפוסט שנפתח על ידי לחיצה פה)
·         מהירות Inference (לחצו לפוסט בנושא)
·         אפשרות להמיר בצורה אוטומטית את קוד ה-MATLAB לקוד CUDA מהיר וחסכוני בזיכרון לצורך מימוש על מערכות Embedded (לחצו לפוסט בנושא ה-GPU Coder)
·         נוחות עבודה – הודות לשימוש בסביבת פיתוח שנועדה למהנדסים ומדענים
תמיכה מלאה במערכת ההפעלה Windows – בנוסף לתמיכה במערכות הפעלה אחרות
·         יכולות ויזואליזציה ודיבאגינג – צפיה ב-activations, הצגת Deep Dream Images, צפיה במשקולות, בחינה של התקדמות האימון בכיוון הנכון וכו'...
תיעוד מפורט, כמיטב המסורת של תוכנת MATLAB
·         תמיכה טכנית מקצועית בטלפון 03-7660111 לבעלי רישיון תחת חוזה שירות
וכל זאת - מבלי להתפשר על האפשרות לייבא מודלים שפותחו ואומנו בסביבות החינמיות (Keras, Caffe, PyTorch). בקרוב, אגב, גם מתוכננת תמיכה ב-ONNX לצורך ייבוא וייצוא של המידע בין MATLAB והסביבות האחרות (עריכה - התמיכה כבר קיימת).

אז...מה נשתנה בתחום ה-Deep Learning בגרסת R2018a? להלן החידושים המרכזיים:
·         תצוגה גרפית של הרשת בעזרת ה-Network Analyzer App – לצורך איתור בעיות אפשריות לפני ביצוע האימון (לחצו פה)
·         ייצוא/ייבוא מודלים בין MATLAB ופורמט ONNX – ייצוא המודלים מ-MATLAB מאפשר שימוש בהם בתוך סביבות התומכות בפורמט זה, דוגמת TensorFlow, Caffe2, CNTK, MXNet, CoreML. ייבוא המודלים מאפשר להכניס לתוך MATLAB מודלים מסביבות כמו CNTK, PyTorch, Chainer, Caffe2. למידע נוסף - לחצו פה
·         יצירה, אימון וניתוח של רשתות DAG – אימון מהיר יותר (בעזרת GPUs), חישוב והצגה של activations של שכבות ביניים, החלפה פשוטה יותר של שכבות בעת עריכת רשתות מסוג זה
·         המרה של קוד MATLAB לקוד CUDA – אפשר כעת להמיר גם רשתות DAG ולייצר קוד CUDA מתוך רשתות נפוצות נוספות כמו GoogLeNet, ResNet (50/101), SegNet ו-SqueezeNet (לטעינת הרשת האחרונה בצורה נוחה - לחצו פה). לרשימת הרשתות והשכבות הנתמכות על ידי ה-GPU Coder לחצו פה. בנוסף, יש כעת אפשרות להשתמש ב-TensorRT בעת יצירת קוד CUDA, בהמשך לרמיזה שנרמזה בבלוג זה בעבר (לחצו לקריאה, לפני הגרף השני), מה שיאפשר קבלת קוד CUDA מהיר במיוחד
·        תמיכה ביצירת קוד עבור חומרות נוספות – ה-GPU Coder מסוגל כעת לייצר קוד C עבור רשתות גם עבור מעבדים של אינטל (Intel Xeon CPU, למשל) ופלטפורמות Arm (Neon), דבר שיאפשר, למשל, לטרגט טלפון אנדרואיד
·         יכולות חדשות באפליקציות התיוג  ה-Ground Truth Labeler תומך כעת בסגמנטציה ברמת הפיקסל, ב-Sub-Labels וכן בצירוף Attributes ל-labels (הנ"ל יכולים להיות ערכים נומרים ועשויים לסייע בתרחישי תיוג לצורך משימות רגרסיה). גם הוא וגם ה-Image Labeler מקלים כעת עוד יותר על ביצוע תיוג ברמת הפיקסל, באמצעות אופציית ה-Smart Polygon המאפשרת לעדן את הסגמנטציה בתוך איזור עניין על ידי סימון פיקסלים בתור רקע או אובייקט
·         ולידציה של Custom Layers  - כזכור, החל מהגרסה הקודמת ניתן לייצר סוגים חדשים של שכבות באמצעות שפת MATLAB, והחל מהגרסה הנוכחית – ניתן לבצע ולידציה אוטומטית לטיפוסי המידע והמימדים, לבחון תאימות מבחינת עבודה עם GPU ולוודא שהגרדיאנטים הוגדרו כנדרש
·         תמיכה של רשתות CNN במידע תמונתי בעל יותר מ-3 ערוצים (מולטיספקטרלי)
·         שיפור מהירות ריצה על CPU באימון ו-Inference
·         אופטימייזרים חדשיםAdam ו-RMSProp (בנוסף ל-SGDM)
·         המימד השלישי של הקלט לא חייב להיות רק 1 או 3
·         הקפאת שכבות – נוספה הפקודה freezeWeights שגורמת לכך שהפרמטרים של שכבות שרוצים להקפיא - פשוט לא יתעדכנו במהלך האימון. ומכיוון שלא מחשבים את הגרדיאנטים של השכבות האלה - האימון יהיה מהיר יותר. ואגב, אם ה-data set החדש שבו משתמשים ב-transfer learning הוא קטן, אז הקפאה של השכבות הראשונות יכולה למנוע overfitting שלהן אליו. 
·         שימוש בטכניקת Gradient Clipping כדי למנוע "התפוצצות" של הגרדיאנטים ברשתות עמוקות במיוחד (שימושי לרוב בעבודה עם RNNs)
·         LSTM תמיכה ברשתות LSTM עם שכבת רגרסיה בקצה; תמיכה ברשתות LSTM דו-כיווניות (כדי ללמוד מכל ההקשר של הרצף)

מה הלאה?
ההשקעה של MathWorks בתחום ה-Deep Learning נמשכת, וצפויים חידושים משמעותיים גם בגרסת R2018b שמתוכננת לחודש ספטמבר. אם יש יכולות שאתם זקוקים להן והן עדיין לא נכללות בכלים – אתם מוזמנים לכתוב זאת למטה בתגובה ואשמח לבדוק האם הן מתוכננות (ובמידה ולא – אעביר אותן לצוות הפיתוח על מנת שישקול לעבוד עליהן). כדי להוסיף תגובה - לחצו על הכיתוב "אין תגובות".

רוצים להתנסות בעבודה על Deep Learning בסביבת MATLAB ללא התחייבות, בזמנכם החופשי, ומבלי להתקין שום דבר? אתם מוזמנים לנסות את ה-Hands On Tutorial החינמי באתר MathWorks. לא צריך רישיון ל-MATLAB בשביל לעבוד איתו, הכל מבוצע דרך הדפדפן. ה-Hands On אמור לקחת לכם כשעתיים, וניתן לעצור אותו בכל שלב ולהמשיך כאשר אתם רוצים. לכניסה – לחצו פה.

מעוניינים להשתתף בכנס מקצועי בנושא Deep Learning, בו ירצו מומחים מהתעשייה והאקדמיה? בתאריך 7/5/18 מתוכנן כנס באיזור הרצליה, ההשתתפות ללא עלות, אך דרושה הרשמה מראש. לרישום מוקדם – לחצו פה.

לעמוד ה-Deep Learning באתר MathWorks לחצו פה.