בתשובה לירדן ניר-בוכבינדר, 29/03/18 15:25
תשע (מליון) בכיכר ביום שישי 698299
עד כמה שאני מבין אתה כבר מזמן לא מתכנת את הרשת שלך לבד, בכמה רמות:

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

ב. רמה למעלה - אפילו על סעיף א' כבר הרבה מדלגים. אתה רוצה רשת לזיהוי לטאות ירוקות עם קרניים בתמונות? אתה לוקח רשת *מוכנה* מהאינטרנט, רצוי זו שהיא מדינת-האמנות בתחום של זיהוי אובייקטים בתמונה בשנה האחרונה. עכשיו אתה לא נוגע בה, אלא רק מאמן את השכבה האחרונה שלה (טוב, אולי כמה כאלה) על תמונות הלטאות הירוקות שלך. קוראים לזה transfer learning וכבר הגיגול הקצר הזה מראה לך כמה הפרקטיקה הזאת פופולרית‏0.

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

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

0 על קצה המזלג - ההנחה המובלעת היא שכשהרשת המקורית למדה על זיליון תמונות מבסיסי הנתונים הידועים, המידע שטמון ברוב השכבות הראשונות שלה הוא בעיקר איך לפרק תמונות לחלקים/תכונות שטובים עבור סיווג עצמים כאלה ואחרים. משזה נעשה, עכשיו רק צריך לבחור בסוף אילו תכונות כאלה מאפיינות תמונות של לטאות ירוקות ולא של כרובים סגולים.
1 השפה שכיעור ושעמום הם מעמודי התווך שלה, על פי דעתי הלא מלומדה.
2 לפחפח בשפה העכשווית.
תשע (מליון) בכיכר ביום שישי 698311
לך יצא לעשות במו ידיך משימה של אימון רשת עצבית, אבל לא תרגיל מוכן אלא באמת משימה שלא נעשתה קודם?

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

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

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

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

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

חזרה לעמוד הראשי

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