נושא המחקר: לימוד מכונה

 

החברה התומכת: EMC

 

מנחה: ד"ר איתן בכמט

 

מגישים: יעל מנדלבלט

              יונתן בן-שמחון

 

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

 

מבוא:

 

משמעות המושג 'לימוד מכונה', הוא ללמוד כיצד מכונה מתנהגת. המטרה היא לנסות להבין את המנגנון שיצר פעילות כלשהי, ולמדל אותו באופן מתמטי. לדוגמא ע"י פונקציה פולינומיאלית או  פונקציה הסתברותית. יש להסביר את הקשר בין המידע הנכנס (X) למידע שהמכונה הוציאה (T ).

למעשה אנחנו מחפשים פונקציה y(X,W), כאשר W הוא סט פרמטרים, כך שהשגיאה |y(x,w)-t(x)| תהיה מינימלית.

 

הגדרת הבעיה:

 

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

אנחנו ננסה למדל את מנגנון הגישה ל logic volume מסוים. כלומר, בהינתן X – וקטור סדרתי של הזמן באורך n, ווקטור T(X) , המתאר את מספר הגישות ל- logic    volume  בכל נקודת זמן.  ננסה לנבא, בהינתן x(n+1), את t(x(n+1)), ע"י פונק' y(x;w).

 

הגדרות:

 

Training set –(סט לימוד)  סט של מידע נכנס, input X, ומידע שמכונה הוציאה בהתאם לו, output T (X). על-פי מידע זה אנחנו, בהתאם לאלגוריתם שבחרנו, 'לומדים את המכונה'. כלומר, עושים אופטימיזציה לסט הפרמטרים W, ובונים את הפונקציה y(x,w).

Test set – (סט בחינה) סט נוסף בדומה לקודם. רק שהפעם איננו משנים את W בהתאם לו, אלא בוחנים את המודל שלנו מול המידע החדש. אם אכן המודל שלנו למד את המנגנון של המכונה, אזי הוא יוכל לנבא את T(X) בהינתן וקטור X.

Over fitting – מושג זה מתאר מצב בו למדנו יותר מידי טוב את סט הלימוד. כלומר, המודל מקשר היטב בין נק' X ו-T(X), אך לא למד את המנגנון שיצר רצף זה. לדוגמא, בהינתן סט באורך N, ניתן למצוא פולינום בגובה N כך שגודל השגיאה יהיה אפס. אך פולינום שכזה לא 'תפס' את מגמות ההתנהגות של המכונה, וסביר להניח שלא יוכל לנבא היטב בעתיד.

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

Posterior P(X|D) מתאר את ההתפלגות של משתנה X בהינתן D. כלומר, ההתפלגות של X מסתמכת על מידע מסוים קונקרטי. בתהליך הלימוד שלנו, אנחנו מקבלים את פונקצית הפילוג הפוסטיריורית של W בהינתן סט האימון D.

 


שיטות:

 

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

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

 

שלבים בעבודה:

 

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

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

 

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

C1(x1,x2)=t1*exp(-0.5*(x1-x2)2/(r1)2)+t2

זוהי פונק' אקספוננציאלית הקטנה ככל ש- (x1-x2) גדול יותר.

 

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

C2(x1,x2)=t3*exp(-0.5*sin(π/λ*(x1-x2)/r2)2

זוהי פונק סינוסית אקספוננצילית.

ובסה"כ פונק' הקווריאנס שלנו היא מכפלת שתיהן:

C(x1,x2)=(t1*exp(-0.5*(x1-x2)2/(r1)2)+t2)*(t3*exp(-0.5*sin(π/λ*(x1-x2)/r2)2)

 

המשך העבודה:

           

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