דואגים שתמיד תישארו מעודכנים: מה חדש ב-AI עם MATLAB?
במאמר זה נסביר על קצה המזלג על השינויים והחידושים שהתרחשו בגרסה האחרונה – 2024a עם כלי ה-Deep Learning של MATLAB.
כמה מתסכל זה יכול להיות שאנחנו נכנסים לדוקומנטציה של MATLAB כי אנחנו לא זוכרים איך קוראים לפונקציה מסוימת, ובסוף במקום להשתמש בה בקלות אנחנו רואים הודעה אזהרה אדומה שהפונקציה הזו היא – not recommended – ובמקומה מוצע עבורנו פתרון חדש שבכלל איננו מכירים או יודעים איך להשתמש בו:
היום אנחנו כאן כדי להסביר על קצה המזלג על השינויים והחידושים שהתרחשו בגרסה האחרונה – 2024a עם כלי ה-Deep Learning של MATLAB.
מעבר לכך, אם תרצו להעמיק ולשמוע עוד מעבר לחידושים בבלוג זה, אנחנו מקיימים כנס בנושא יישום והטמעה של AI ב24.9.24 במלון דניאל בהרצליה, בו תוכלו לראות דמואים ייעודיים בנושאי AI, לשמוע על השינויים והחידושים, ולקבל ידע פרקטי להטמעה ואימוץ של AI במערכות ופרויקטים מורכבים – גם אצלכם בחברה.
dlnetwork object:
מדובר באובייקט של MATLAB מגרסת 2019b שעבר כמה שדרוגים משמעותיים כך שיהיה שימושי עבורנו כאובייקט שמחזיק בתוכו את הרשת שבנינו.
עד היום התעסקנו בשני סוגי רשתות בסיסיות ומוכרות במטלב:
- seriesnetwork object – רשת עם שכבות מסודרות אחת אחרי השנייה. יש לו שכבת קלט אחת ושכבת פלט אחת כמו שניתן לראות בתמונה 1.
תמונה 1. דוגמה ל- Seriesnetwork
- DAGnetwork object – רשת עם ארכיטקטורת שכבות מורכבת יותר מאשר ה- seriesnetwork שבה לשכבות יש כניסות משכבות מרובות ופלטים למספר שכבות. דוגמה לרשת מסוג זה ניתן לראות בתמונה מספר 2.
תמונה 2. דוגמה ל- DAGnetwork
מגרסת 2024a ההמלצה של MathWorks היא להשתמש רק באובייקט dlnetwork שמכיל בתוכו גם את ה- seriesnetwork וגם את ה- DAGnetwork. נשים לב כי אם יש לנו כבר רשת מסוג DAG או series אנחנו יכולים בקלות להמיר אותה ל- dlnetwork באמצעות הפונקציה: dag2dlnetwork.
שינוי ראשון שקורה בעקבות המעבר לאובייקט מסוג dlnetwork הוא שאנחנו לא צריכים יותר להשתמש בפונקציית layerGraph על מנת לראות את השכבות שלנו בצורה מסודרת או על מנת להוסיף שכבה, להסיר שכבה, לשנות שכבה או לייצר קשרים בין שכבות. ברגע שהמרנו את הרשת שלנו ל – dlnetwork נוכל לעשות את כל השינויים באמצעות האובייקט של הרשת מבלי להמיר אותו לשכבות. תמונה מספר 3 מציגה את השינויים הללו.
תמונה 3. כיצד ניתן לבצע שינויים ברשת או להמיר אותה מבלי להשתמש ב- layergraph
למידע נוסף בנוגע לאובייקט dlnetwork ניתן לקרוא עוד בדוקומנטציה.
פונקציית trainnet:
אם האובייקט ששומר בתוכו את הרשת השתנה מן הראוי שגם פונקציית האימון תשתנה בהתאם לכך שתקבל לתוכה את האובייקט הספציפי הזה. עד היום היינו רגילים להשתמש ב- trainNetwork בצורה כזו שהיינו מכניסים את הדאטא של האימון ואת השכבות של הרשת (בין אם בצורה של layers או בצורה של layerGraph) וכמובן את המאפיינים של האימון. הפונקציה החדשה שמומלץ להשתמש בה הוצגה לראשונה בגרסת 2023b ונקראת trainnet. היא יכולה לקבל dlnetwork או layers (ממש כמו ב- trainNetwork) ואחד היתרונות העיקריים שלה הוא שהיא גם נותנת לנו לבחור את פונקציית ה- loss שלנו. אנחנו יכולים לבחור את אחת מהפונקציות המוכרות ש-MATLAB מציע למשל mse, crossentropy וכו' או לייצר פונקציית loss בעצמנו שמתאימה לצרכים ולדאטא שלנו ולהשתמש בה.
כמה יתרונות שיש לשני השינויים שדיברנו עליהם עד כה:
- הפונקציה trainnet תומכת באובייקטים מסוג dlnetwork והם תומכים במגוון גדול של ארכיטקטורות של רשתות שאפשר לייצר בעצמנו, להשתמש ברשתות קיימות ומוכרות ב-MATLAB או אפילו לייבא מבחוץ (tensorflow, pytorch וכו').
- באמצעות פונקציית trainnet אנחנו יכולים לשלוט בחישובי ה- loss מה שעוזר לנו עוד קצת לשלוט בתהליך האימון והלמידה בייחוד כאשר אפשר לייצר פונקציות loss משל עצמנו שמתאימות לדאטא שלנו בלבד.
- שימוש ב- trainnet הינו מהיר יותר משימוש ב- trainNetwork.
למידע נוסף בנוגע לפונקציית trainnet ניתן לקרוא עוד בדוקומנטציה.
Transfer learning:
עד היום על מנת לבצע transfer learning היינו משתמשים בשם הרשת שאותה אנחנו רוצים לאמן מחדש למשל:
אך שימוש בצורה כזו יוצר לנו seriesnetwork או DAGnetwork. לכן, נוצרה פונקציה חדשה שנקראת imagePretrainedNetwork שמכילה בתוכה את כל סוגי הרשתות המוכרות שאנחנו יכולים להשתמש בהם (נשים לב כי כדי להשתמש ברשתות אלו עדיין נצטרך להוריד את ה- support package שלהן) ובאמצעות שימוש בפונקציה זו נקבל רשת שהינה אובייקט מסוג dlnetwork.
דרך פונקציה זו נוכל גם לשנות בקלות את הכמות של הקלאסים אם נרצה לקחת את הרשת לזהות דברים אחרים מהקלאסים המובנים שלה. יש לציין כי עבור סיגנלי שמע יש פונקציה דומה – audioPretrainedNetwork – שמכילה רשתות ידועות עבור סיגנלי שמע.
Predictions:
גם בחלק של הפרדיקציה ישנם כמה שינויים בעקבות השימוש באובייקט dlnetwork. ישנן 2 פונקציות שבהן נוכל להשתמש ונעשה בניהן כעת השוואה. ההשוואה מוצגת בטבלה 1.
טבלה 1. השוואה בין פונקציית minibatchpredict ל – predict
למידע נוסף בנוגע לפונקציות אלו ניתן להיכנס לקישורים הבאים בדוקומטציה:
** חשוב לציין – כאשר אתם נתקלים ב- not recommended בדוקומנטציה, זה לא אומר שאסור להשתמש בפונקציות או באובייקטים הללו, הכוונה היא רק שיש אובייקטים ופונקציות מתקדמות יותר הן מבחינת פונקציונליות והן מבחינת ביצועים.
לגבי השילוב בין MATLAB ו-Python
כמו שכבר כולם יודעים השילוב בין MATLAB ו-Python הולך ומשתפר כל גרסה כך שלאט לאט נהיה יותר קל לעבוד עם שתי התוכנות יחד. כיום ניתן לייבא ולייצא רשתות בצורה קלה מ- Tensorflow ומ – ONNX גם עבור סביבות אחרות. גם מ- Pytorch ניתן לייבא רשתות ישירות לתוך MATLAB ללא בעיה (תמונה 4).
בגרסת 2023b נוצרו שתי פונקציות שעוזרות בייבוא הרשתות לתוך מטלב:
הפונקציה importNetworkFromPyTorch שמייבאת רשתות מ- pytorch הוצגה מוקדם יותר בגרסת 2022b.
תמונה 4. – ייבוא וייצוא רשתות
אז היום כבר אין תירוצים, מי שמשתמש ברשתות מPython יכול לייבא אותן בקלות לתוך MATLAB ולעבוד עליהן משם.
למידע נוסף בנוגע לשימוש ברשתות מיובאות ב-MATLAB ניתן לקרוא כאן.
אם תרצו לשמוע עוד, וליישם חלק מהדברים האמורים גם אצלכם בחברה – אתם מוזמנים ליצור אתנו קשר ונשמח לעזור.
הזדמנות טובה לשמוע ולהכיר אותנו מקרוב– היא להגיע לכנס שלנו שמתקיים ב 24.9.24 במלון דניאל, שם תוכלו ללמוד ולהתעדכן , ונמשיך להתקדם משם 😊