יום רביעי, 21 בדצמבר 2016

חידושים בבקרה ומידול פיסיקלי בגרסת R2016b

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

מידול פיסיקלי

Simscape
          Gas Domain - מידול מערכות גז ברמות דיוק שונות
          PS Lookup Table (4D) - חישוב שיערוך פונק' מרובות משתנים f = f(x1,x2,x3,x4)
וקבלת פלטים פיסיקליים
          יצירת קוד משופרת (C / C++), מורחבת ומודולרית יותר
          קישוריות משופרת בין עץ התוצאות לבין בלוקים במודל
          Simscape Language - התניית קטעי קוד, הוספת אופרטורים מ-MATLAB לעריכת רכיבים, הכרזת פונקציות בקוד הרכיבים

Simscape Multibody
          מצלמה דינאמית למעקב אחר אובייקטים במהלך הסימולציה
          יצירת קבצי וידאו בפורמטים שונים ושליטה בקצב וגודל המסגרות משורת הקוד (smwritevideo) או מכלי ממשק גרפי יעודי
         עידכון והרחבת סוגי היחידות הפיסיקליות הנתמכות

Simscape Driveline
          השפעות תרמיות המתפתחות במצמד ומערכת הבלמים
          מקורות סינוסאידלים ורעשים פיסיקליים בעלי התפלגות נורמאלית - כוחות, מומנטים, מהירויות והעתקה
          מידול כשלים מכאנים ברכיבי ריסון מסוגי סיבוב / העתקה
          מצמד מבוקר לוגית - הפעלה / השבתה של המצמד ע"י אותות לוגיים

Simscape Fluids
          ספריית  Hydraulic Pump and Motor- שיפור החישובים הנומרים למעבר בין משטרי העבודה השונים (forward / reverse)
          התיחסות ליעילות והפסדים נפחיים / מכאניים עבור משאבות ומנועים הידראולים
(תזוזה קבועה / משתנה)
          ממשק TL-IL - חיבור בין רשת מידול נוזלים תרמיים (thermal liquid) לבין רשת מידול הידראולית (isothermal liquid)

Simscape Electronics
          בלוק MOSFET - מידול מדויק יותר באזורי עבודה של מתח הסף
          מידול טרנזיסטורים LDMOS/VDMOS - מתאים למערכות מתח גבוה
          מידול מעבר חום עבור בטריות ומדידת השינויים הפנימיים
          מנועי סרבו - שימוש בטבלאות נצילות וטיפול בכשלים

Simscape Power Systems
          שינויים תרמיים - מידול הפסדים כתוצאה מהולכה ופעולות מיתוג
          מידול קבל-על בעל יכולות טעינה / פריקה מהירות
          ספריית בקרה המכילה רכיבי PWM תלת פאזיים (2-3 שלבים)

בקרה

Control System Toolbox
          כוונון מערכות בקרה לתחום חרוט, עפ"י גבולות קבועים או גבולות התלויים בתדר
          כוונון בקרה משופר עבור מערכות פסיביות
          הגדרת הימנעות קטבים ואפסים מלהגיע לאינסוף (MaxRadius)
          שיערוך מצבים עבור מערכות לא לינאריות באמצעות אובייקטי Kalman Filter מורחבים

Simulink Control Design Toolbox
          גזירת קבוצת נקודות - שינוי פרמטרי המודל וחישוב מספר נקודות עבודה בתהליך מואץ (compilation)
          תהליך יצירת מערכות LPV (Linear Parameter-Varying) משופר, חישוב היסטים עבור נקודות עבודה מרובות תוך התחשבות בקלטים, פלטים, מצבים ונגזרותיהם
          יצירת מערך אובייקטים עבור מפרטי נקודות עבודה

Robust Control Toolbox
          חישוב חוסן היציבות של מערכת הבקרה כתלות בתדר
          פונקציות משופרות לחישוב הערך הסינגולרי (Miu) וזיהוי שיאים קריטיים היכולים להשפיע על אזורי היציבות – קבלת גבולות יציבות מדויקים יותר

Model Predictive Control Toolbox
          בלוק  Multiple Explicit MPC Controllers - מידול בקר מסוג Explicit MPC בעל הגברים מתוזמנים (עבור כל נקודת עבודה), עבור כל הגדרת תת-בקר מסוג זה יהיה שימוש ב- Lookup Table מתאימה
          MPC Designer App - שיערוך אוטומטי של זמן הדגימה וייבוא מודלים אשר נוצרו ע"י ה- System Identification (המרה אוטומטית)

System Identification Toolbox
           Standalone Application - פריסה של הכנת הנתונים ושיערוך המודל באמצעות
ה-
MATLAB Compiler
          זיהוי פונק' תמסורת עפ"י נתונים במישור התדר, בצורה מהירה ומדויקת יותר
          פונקציות משופרות עבור ניבוי התגובה והשגיאות
          טיפול בהשהיות במהלך שיערוך המודל הלינארי (במישור הזמן)


יום רביעי, 23 בנובמבר 2016

חידושים בעבודה עם מידע

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

חידושים הקשורים לעבודה עם data:
בגרסת ה-MATLAB החדשה אפשר לעבוד בקלות עם מידע מסוגים חדשים - פיצ'רים חדשים מאפשרים גישה נוחה למידע, עיבוד מקדים ואנליזה של המידע ללא תלות בפורמט בו הוא שמור.

ניתן לשלוט בקלות באופן ייבוא מידע מקבצים, מבלי שנצטרך לפתוח אותם - באמצעות הפונקציה  dete​ctImportOptionsהטעינה עצמה תתבצע באמצעות פקודת readtable שהתווספה לפני כשלוש שנים.

שלב העיבוד המקדים צורך זמן רב בעבודה עם מידע. פונקציות ויכולות חדשות שנוספו בגרסת R2016b מאפשרות לייעל ולזרז את התהליך. לדוגמא: 
-          טיפול במידע חסר או שגוי באמצעות פונקציה ייעודית כמו fillmissing, אשר התווספה ל-standardizeMissing  
-          חלוקה למקטעים במרווח קבוע של מערכי זמן מסוג datetime ו-duration, באמצעות פונקציית discretize
-          אפשרות להתעלם מערכים חסרים בעבודה עם פונקציות שמבצעות פעולה מצטברת ((cumsum, cummax, cummin

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

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



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


     - ניתן לעבוד עם טקסט בפשטות ובמהירות - באמצעות טיפוס נתונים חדש הנקרא string שמאפשר שמירה בזיכרון, עיבוד והשוואה של מידע טקסטואלי באופן יעיל ואינטואיטיבי. לטיפוס נתונים זה הצטרפה ערימת פונקציות ייעודיות לשרשור, מיון ופיצול מערכים של טקסט, חיפוש וכו' – רלוונטי מאוד לעובדים עם טקסט בתחומים rocessingNatural Language P ו-Machine Learning. בעזרת פונקציות חדשות, ניתן לעבור ממשתנים מסוג cell או char למשתנה string, לקרוא מקבצים הישר למשתנה string, לגשת לאותיות מסוימות, לחבר מילים על ידי אופרטור +, למצוא מילים לפי האות הראשונה או האחרונה ועוד. בתמונה למטה ניתן לראות מספר פעולות לדוגמה (בצד שמאל), ואת תוצאות הפעלתן (בצד ימין) – ניתן ללחוץ להגדלה.


רוצים מידע נוסף על עבודה עם מידע? לחצו פה.


יום רביעי, 26 באוקטובר 2016

Deep Learning בסביבת MATLAB

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

·         שימוש ב-CNN בתור מחלץ פיצ'רים
נניח שאנחנו רוצים לסווג תמונה לאחת מבין אופציות כמו כלב, ילד, אופניים וכו'. הגישה הסטנדרטית של למידת מכונה היא קודם כל לחלץ פיצ'רים מעניינים מתוך התמונה – כמו edge-ים, פילוג צבעים וכדומה – וזה שלב הכרחי כיוון שאלגוריתמי לימוד מכונה סטנדרטים לא יודעים לפעול ישירות על תמונה, הם מתעלמים לחלוטין מהמבנה של תמונה. בשלב הבא – מתבצע הסיווג של התמונה, בעזרת מסווג אשר נבנה קודם לכן על סמך תמונות האימון.
בגישה של למידה עמוקה, לעומת זאת, נותנים לאלגוריתם ללמוד את הפיצ'רים אוטומטית מתוך התמונות, מפיצ'רים Low Level גנריים כמו edge-ים ופינות, ועד לפיצ'רים ספציפיים לבעיה. כלומר, אלגוריתמי הלמידה העמוקה לא יודעים לבצע רק את הסיווג, אלא הם גם יודעים ללמוד כיצד לחלץ פיצ'רים ישירות מתוך התמונות, וכך הם חוסכים את הצורך בחילוץ ידני של הפיצ'רים, ובעצם מממשים למידה מקצה לקצה (End to End).
אחת מדרכי העבודה בתחום הלמידה העמוקה היא להשתמש במודל CNN שכבר מאומן עבור בעיה מסוימת, בתור מחלץ הפיצ'רים האוטומטי לבעיה שלנו (אפילו שמדובר בבעיה אחרת, אולם רצוי שהבעיות לא יהיו מעולמות זרים מידי). זו דרך קלה לנצל את הכוח של CNN מבלי להשקיע זמן ומאמץ באימון שלהן "מאפס". בגישה זו, אין צורך במאגר גדול של תמונות עם Label-ים עבור האימון של המסווג, כמות החישובים נמוכה, ומשך האימון של המסווג יעמוד על שניות או לכל היותר – דקות - גם ללא שימוש בכרטיס המסך (GPU) של המחשב.
כדי לחלץ פיצ'רים באמצעות מודל 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   
(ראו פרק "סיווג" בקישור הבא - לחצו פה).


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

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

·         תכנון רשת ואימון שלה
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 לדוגמה), אלא נותנים לגלאי לעבד רק אזורים אשר סביר שיכילו אובייקט - זה מקטין משמעותית את הסיבוכיות החישובית.
בגרסת 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 לכל גילוי (שימושי כאשר מנסים לגלות מספר אובייקטים – תמרור עצור, תמרור תן זכות קדימה, תמרור מגבלת מהירות וכדומה).

גילוי תמרור עצור בשיטת R-CNN (ניתן ללחוץ על התמונה להגדלה)


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

קישור שימושי ומידע על כלים שימושיים
בסביבת MATLAB קיימים מגוון כלים המקלים על עבודה בטכניקת Deep Learning, וביניהם:
·         Neural Network Toolbox 
·         Parallel Computing Toolbox
·         Computer Vision System Toolbox 
·        MATLAB Compiler
·        MATLAB Compiler SDK
ניתן ללחוץ על שמות הכלים לצורך קבלת פירוט נוסף.
למידע מקצועי נוסף – ניתן לבקר בקישור הבא: