אחרי שהבנו את הרעיון המרכזי באלגוריתם GAN ואנחנו מאוד נלהבים לייצר Data מקורי כלשהוא,
נשיג Database גדול, נבנה רשתות Generator ו Discriminator , נאמן וניצור יש מאין יצירות…
אבל, נראה שהעסק לא כזה פשוט. לא כל אימון מתכנס ומצליח לייצר “זיופים” שעוברים את מבחן טיורינג.
קפיצת המדרגה שבאה אחרי GAN הינה DCGAN שיצא ב 2015 שגם הציע להשתמש ב CNN=Convolutional Nueral Network לרשתות ה Generator וה Discriminator וגם סיפק כמה עקרונות ל-איך לגרום לכך להתכנס.
משמעות השם הינה: DCGAN=Deep Convolutional GAN.
ניתן לראות בתרשים הזה את רשת ה Generator המוצעת במאמר, היא מקבלת וקטור בן 100 מספרים אקראיים (כמו במאמר המקורי) ובאמצעות פעולות Deconv (שנקראות גם transpose conv או fractionaly strided conv) מגדילה את הטנזור יותר ויותר עד שמגיע לגודל של תמונה.
במאמר הם מסכמים את העקרונות שהסיקו שגורמים לאימון להצליח:
- להשתמש ב Conv (קונבולוציות) ל Discriminator וב Deconv ל Generator (נזכיר ש conv מקטינה את מימדי הטנזור אך הופכת אותו ליותר עמוק, ו deconv עושה להיפך ז”א מגדילה את מימדי הטנזור אך מקטינה את נפחו)
- להשתמש ב Batch Normalization (נזכיר שזו שכבה שעושה נירמול לאקטיבציה)
- להמנע משכבות Fully Connected
- להשתמש ב Leaky Relu ב Discriminator וב Relu ב Generator למעט השכבה האחרונה שלו ששם כדאי להשתמש ב Tanh
כל התובנות האלו הם די טכניות לגבי הארכיטקטורה, וגם אין להם בהכרח הסבר מוצלח מלבד תוצאות אמפיריות,
ז”א יותר מצליחים לאמן ככה את המודל, ראו למשל את תמונות חדרי השינה המג’ונרטות הללו.
אבל החידוש הכי מעניין שהביאו DCGAN הוא מה שנקרא אריתמטיקה של תמונות או באופן כללי של דגימות המידע.
כזכור רשת ה Generator מקבלת כקלט וקטור z שהינו 100 מספרים אקראיים ואותו הופכת לתמונה. הדבר היפה הוא שהרשת למדה לייצר את הפלט שלה באופן רציף, ז”א ששינוי קטן בוקטור z בכניסה יביא לשינוי קטן במוצא. (זה כמובן נובע מהארכיטקטורה של הרשת). תופעות מעניינות שקורות הם למשל בשורה רביעית מלמטה וקטור z כלשהוא הביא לתמונה של חדר ללא חלון, ושינוי עדין של ערכי z משנים את החדר במעברים חלקים עד שהופך בהדרגתיות לחדר עם חלון, או טלוויזיה שאט אט הופכת לחלון.
ויותר מזה: אם עושים אריתמטיקה עם הוקטורים z מקבלים תמונות מג’ונרטות עם פרשנות מאוד אינטואיטיבית לנו כבני אדם. למשל בג’ינרוט של תמונות פנים ניתן לראות: מחוללים תמונות של גבר עם משקפיים, גבר ללא משקפיים ושל אישה ללא משקפיים. לכל תמונה כזו ישנו איזשהוא וקטור z שחולל אותה. לוקחים את וקטור z של הגבר עם המשקפיים פחות הוקטור z של הגבר ללא המשקפיים, מפחיתים וקטור z של האישה ללא המשקפיים ומה z החדש מחוללים תמונה שיוצאת … ניחשתם נכון! אישה עם משקפיים.
תוצאה מדהימה לכל הדיעות! ז”א לא רק שהאלגוריתם יודע לחולל יש מאין תמונות שנראות אמיתיות אלא גם יש לנו כבר שליטה חלקית על מה תהיה התמונה!