מדריך: איך לעשות את הצעדים הראשונים בעולם ה-Machine learning

מאת אורי אליאבייב, 9 באוגוסט 2017

מדריך זה נכתב על ידי ג'ף מוסקוביץ

לפני מספר ימים כתבתי פוסט בקבוצת הפייסבוק Machine & Deep Learning Israel שעסק במספר פרויקטים שעשיתי לאחרונה. בסוף הפוסט הצעתי, בדרך אגב, עזרה לכל מי שמעוניין לקבל המלצה על קורסים רלוונטיים או איך להתחיל להתמקצע בתחום ה-Machine learning. להפתעתי גיליתי שיש הרבה אנשים בקבוצה שמעוניינים במידע הזה אז במקום לדבר עם כולם בנפרד, אני מאגד את כל ההמלצות שלי במדריך הזה שלפניכם. לפני שאנחנו מתחילים, אני אבקש סליחה מראש על שגיאות הכתיב שלי – עברית היא לא שפת האם שלי.

הרקע שלי

נתחיל עם הבהרה קצרה על הרקע שלי, מאחר וקיבלתי הרבה שאלות בסגנון הזה:

״אבל ג׳ף, בטח יש לך דוקטורט בחילוק ארוך מתקדם או משהו ויש לי רק תואר שני בזה. איך אני אסתדר עם המתמטיקה??״

יש לי תואר ראשון בעיתונאות ועוד אחד בהיסטוריה. זהו.

״אבל זה נושא די טכני, אני עדיין יכול לעשות את הקורסים האלה אם יש לי רק תואר ראשון במדע מחשב??״

עוד פעם, יש לי תואר ראשון בעיתונאות ועוד אחד בהיסטוריה …

תירגעו. כן, זה אפשרי.

כמו שMark Twain אמר:

"Never let your schooling interfere with your education”

דרישות קדם

דרישות הקדם היחידות הן סביב כישורי המתמטיקה שלכם, אתם תצטרכו הבנה בסיסית (באמת בסיסית) בנושאים הבאים:

  1. אלגברה לינארית.
  2. חדו"א (חשבון דיפרנציאלי ואינטגרלי).
  3. הסתברות.

אם אתם לא יודעים איך לעשות Dot product או איך להכפיל וקטורים ומטריצות, תקדישו כמה ימיים לנושא מאחר ומדובר על נושאים חשובים אשר חוזרים במהלך הקורסים. תקפידו לתרגל מספר רב של תרגילים שעוסקים במטריצות ואז תוכלו להרגיש נינוחים כאשר אתם ניגשים לפן המתמטי של הקורסים. לכל נושא מתמטי שמטריד אתכם אני ממליץ לבדוק את Khan Academy  מאחר והוא מקור טוב לידע בתחום. בכל הנוגע לאלגברה לינארית, אני ממליץ על ההרצאות של Gilbert Strang ביוטיוב, הן מצוינות. בחדו"א, תצטרכו לדעת בעיקר כיצד לבצע נגזרת של פונקציות שונות. גם במקרה זה כדאי לתרגל את הנושא תחילה לפני הצלילה לקורסים וזאת כדי שתרגישו בטוח ברגע שתתחילו את הקורסים עצמם. המקורות שציינתי בחלק הקודם טובים גם עבור נושא זה. אחרון חביב – הסתברות: אין צורך של ממש לעשות חזרה על התחום כולו מאחר והקורס של Andrew Ng מכסה גם ככה את רוב ממה שתתבקשו לדעת על הנושא. אני באופן אישי התמקדתי בצורה עמוקה יותר בנושא זה, אך מתוך עניין אישי ולא מצורך פרקטי עבור הקורסים עצמם.

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

הודעה אחרונה לפני שאגיע לקורסים: אני יודע שזה מפתה לא לעשות את הקורסים וסתם להתחיל לשחק עם Keras או ספרייה אחרת – אני גם עשיתי את זה בהתחלה. אני מאמין שזה האופן הכי טוב ללמוד ממנו את רוב הדברים שתצטרכו לדעת בתכנות. עם זאת, ברגע שבחרו בדרך זו תגלו די מהר, כמו שאני גיליתי, שמתישהו משהו יפסיק לעבוד ואז, בלי ההבנה העמוקה יותר, לא יהיה לכם שום מושג איך לזהות את הבעיה או לתקן אותה. הבאגים ב-Machine Learning יכולים להיות בקוד, אך במרבית המקרים הם יהיה נעוצים סביב ההבנה, הגישה או הארכיטקטורה של המודל שלכם או ב-loss function שלכם. אי אפשר לעבוד עם Neural networks בלי להבין מה שקורה ברקע. באמת, זו פשוט לא אופציה.

הקורסים הייסודים 

יש שני קורסים שאני ממליץ לכולם לעשות, לא משנה אם אתם מעוניינים בראייה ממוחשבת, ב-NLP, ב-Reinforcement Learning או במשהו אחר לגמרי. הקורסים האלה יתנו לכם את הבסיס שאתם צריכים להבין 90% מהמאמרים והרשתות שיוצאים היום. חשוב לי להדגיש, כי לאחר סיום שני קורסים אלו תוכלו להתחיל לעשות פרויקטים דומים לאלו שמופיעים בסרטון שלי. (בונים רשת ממש דומה לרשת שהוצגה בפרויקט הראשון שלי – האפליקציה – כבר בקורס השני ורק באמצעות Python ו-Numpy!). שני הקורסים הם  פשוט קורסים משובחים – בין הקרוסים הכי טובים שעשיתי בחיי. ומעל כל זה, סדר ביצועם חשוב מאוד – הקורס השני מתבסס על הידע שלכם מהקורס הראשון.

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

  1. Machine Learning with Andrew Ng ב-Coursera

https://www.coursera.org/learn/machine-learning

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

  1. cs231n Convolutional Networks for Visual Recognition

ההרצאות: https://www.youtube.com/watch?v=NfnWJUyUJYU&list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC

החומרים: http://cs231n.stanford.edu/syllabus.html

נכון, זה נראה כמו קורס רק לראייה ממוחשבת אבל תאמינו לי שזה לא. הם מלמדים כל הארכיטקטורות הגדולות (Feed forward, CNN, RNN-LSTM, וכו') ההרצאות והפרויקטים שלהם ממש ממש טובים ללמידה. זה לא קורס קל. תעשו את הכל ב-Python ו-Numpy, בלי ספריות נחמדות כמו keras או tensorflow. בנוסף לכך, תצטרכו לעשות את כל החישובי backpropagation בעצמכם (אם אתם לא יודעים מה זה backpropagation אל תדאגו, יסבירו את הכל). עם כל זאת, מדובר על קורס מה זה שווה שאסור לכם לפספס. מאחר ומדובר על קרוס קשה, אני ממליץ לעשות אותו עם חבר (אם יש לכם חברים חנונים מספיק).

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

הצד הפרקטי

עם איזו ספרייה לעבוד?

אני ממליץ על Tensorflow אבל Pytorch היא גם אופציה טובה. Tensorflow היא לא סתם ספרייה, אלא היא יותר דומה לשפה שונה לגמרי. בכדי לחסוך לכם הרבה כאבי ראש בעתיד, אני ממליץ כי תקדישו את הזמן ללמוד על כמה מהעקרונות הבסיסיים שלה פני שאתם מתחילים להשתמש בה. יש ל-Udacity קורס שנקרא "Deep Learning" ש-Google יצרה והקורס כולו מיושם ב-tensorflow אז זו דרך מצוינת ללמוד Tensorflow (קורס לא רע אבל אני בעיקר העדפתי ללמוד tensorflow ממסכמי התיעוד של השפה). 

ישנו קורס שלם העוסק בצד הפרקטי של deep learning שאהבתי מאוד ואני ממליץ עליו בחום:

Practical Deep Learning for Coders, parts 1 and 2 by FastAI

http://course.fast.ai/

הפרופסור שמעביר את ההרצאות בקורס היה נשיא של Kaggle לכמה שנים והשיעורים שלו מלאים בהסברים שימושיים. למשל, תוכלו למצוא הסברים על איך להשתמש ב-AWS ל-deep learning, איך לעבוד עם neural networks, איזה ארכיטקטורה לבחור וכו׳.

Reinforcement Learning 

במקום קורס, המקור הכי טוב לדעתי זה ספר (שאפשר להוריד בחינם כpdf), שנקרא:

 Reinforcement Learning: An Introduction שנכתב על ידי Richard Sutton

http://people.inf.elte.hu/lorincz/Files/RL_2006/SuttonBook.pdf

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

https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PL7-jPKtc4r78-wCZcQn5IqyuWhBZ8fOxT

לאחר מכן, אם אתם רוצים להגיע ממש לחוד החנית בתחום של Reinforcement Learning, תעשו את הקורס:

Deep Reinforcement Learning של Berkeley

http://rll.berkeley.edu/deeprlcourse/

NLP 

תחום ה-NLP הוא פחות אזור המומחיות שלי, אך כל מי שאני מכיר שלמד את הנושא המליץ על הקורס הבא של סטנפורד:

cs224n Natural Language Processing with Deep Learning

http://web.stanford.edu/class/cs224n/

מסקנה

אני מקווה שמדריך הזה עזר לכם ואני מאחל לכם המון הצלחה והרבה שעות טובות של לימודי Machine Learning בתחתונים שלכם. מעולם לא הייתה האפשרות ללמוד כל כך הרבה כשאתם לבושים בכל כך מעט. תנצלו את זה!

  • Chen Mor

    אלוף! תודה רבה על השיתוף