מהי למידה עמוקה? אלגוריתמים המדמים את המוח האנושי

למידה עמוקה מוגדרת

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

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

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

למידה עמוקה מול למידת מכונה

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

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

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

יישומי למידה עמוקה

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

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

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

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

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

פריצת הדרך בתחום הרשת העצבית לראייה הייתה ה- LeNet-5 של יאן לקון משנת 1998, רשת עצבית קונבולנסיבית (CNN) לשבע רמות לזיהוי ספרות בכתב יד שעברו דיגיטציה בתמונות 32x32 פיקסלים. כדי לנתח תמונות ברזולוציה גבוהה יותר, יהיה צורך להרחיב את רשת LeNet-5 ליותר נוירונים ויותר שכבות.

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

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

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

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

רשתות עצביות למידה עמוקה

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

תפיסה אחורית

הלמידה ברשתות עצביות עמוקות מתרחשת על ידי חיזוק הקשר בין שני נוירונים כאשר שניהם פעילים בו זמנית במהלך האימון. בתוכנות רשת עצביות מודרניות זה לרוב עניין של הגדלת ערכי המשקל עבור הקשרים בין נוירונים באמצעות כלל שנקרא backpropagation of error , backprop, או BP.

נוירונים

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

פונקציות הפעלה

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

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

טופולוגיות רשת עצביות

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

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

הַדְרָכָה

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

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

מייעלים

אופטימיזציה לרשתות עצביות משתמשות בדרך כלל באלגוריתם של ירידת שיפוע בכדי להניע את ההחלפה האחורית, לרוב עם מנגנון העוזר להימנע מלהיתקע במינימה מקומית, כגון אופטימיזציה של מיני קבוצות שנבחרו באופן אקראי (Stochastic Gradient Descent) והחלת תיקוני מומנטום על שיפוע. . חלק מאלגוריתמי האופטימיזציה מתאימים גם את קצב הלמידה של פרמטרי המודל על ידי התבוננות בהיסטוריית השיפוע (AdaGrad, RMSProp ו- Adam).

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

ממש DNN

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

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

אלגוריתמי למידה עמוקה

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

רשתות עצביות CNN

רשתות עצביות קונבנציונליות משתמשות בדרך כלל בשכבות קונבולוציה, איגום, ReLU, מחוברות באופן מלא ואובדן כדי לדמות קליפת מוח חזותית. שכבת העיבוי בעצם לוקחת את האינטגרלים של הרבה אזורים חופפים קטנים. שכבת הבריכה מבצעת סוג של דגימת צמצום לא ליניארית. שכבות ReLU מחילות את פונקציית ההפעלה שאינה רוויה f(x) = max(0,x). בשכבה מחוברת לחלוטין, לנוירונים יש קשרים לכל ההפעלות בשכבה הקודמת. שכבת אובדן מחשבת כיצד אימוני הרשת מענישים את הסטייה בין התוויות החזויות לאמיתיות, באמצעות פונקציית Softmax או אובדן צולב אנטרופיה לצורך סיווג, או פונקציית אובדן אוקלידי לצורך רגרסיה.

רשתות עצביות RNN, LSTM ורשתות קשב

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

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

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

מודולי תשומת לב הם שערים כלליים המיישמים משקלים על וקטור תשומות. מקודד קשב עצבי היררכי משתמש בשכבות מרובות של מודולי קשב כדי להתמודד עם עשרות אלפי תשומות קודמות.

יערות אקראיים

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

מסגרות למידה עמוקה

אמנם אתה יכול לכתוב תוכניות למידה עמוקה מעקרונות ראשונים, אך הרבה יותר יעיל להשתמש במסגרות למידה עמוקה, במיוחד בהתחשב בכך שהן מותאמות לשימוש עם GPUs ומאיצים אחרים. המסגרת הבולטת ביותר היא TensorFlow, שמקורה בגוגל. ה- API המועדף על רמה גבוהה עבור TensorFlow הוא Keras, שניתן להשתמש בו גם עם מסגרות עורפיות אחרות.

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

MXNet, מאמזון ואחרות, היא אלטרנטיבה חזקה נוספת ל- TensorFlow, עם טענה להרחבה טובה יותר. Gluon הוא ה- API החובה ברמה גבוהה המועדף על MXNet.

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

בעוד שכל המסגרות שהוזכרו לעיל הן בעיקר פיתון, Deeplearning4j (DL4J), במקור מ- Skymind וכיום פרויקט אפאצ'י, הוא בעיקר Java ו- Scala. DL4J תואם ל- Apache Spark ו- Hadoop.

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