متعة تعلم الأله Machine Learning – الجزء 7

إستخدام ال Generative Adversarial Networks لإنتاج رسومات

1٬024

منذ عدة سنوات ماضية، قام Alec Radford بنشر بحث غير مفهوم للكثيرون في بناء ال generative models بإستخدام ال machine learning. النظام الجديد يُسمي deep convolutional generative adversarial networks أو DCGAN بشكل مختصر.

ال DCGANs تستطيع إنتاج صور تشبة الحقيقية بإستخدام 2 deep neural networks يتنافسان مع بعضهما البعض. كل صور الغرف الموجودة بالأسفل تم إنتاجها عن طريق ال DCGANs:

الباحثون في ال artificial intelligence إهتموا بال generative models لأنها تعتبر خطوة هامة في بناء نظام يستطيع إستخدام البيانات الخام وفهمها بشكل جيد لإنتاج بيانات جديدة من نفسه تلقائياً.

ولكن لنقوم بشيئ أبسط من ذلك. لنقم بإنشاء generative models لإنتاج 8-bit video games.

الهدف من ال generative models

لماذا يهتم الباحثون بإنشاء نظام يستطيع إنتاج صور جديدة للغرف ؟

الفكرة هو أنه لإنتاج صور جديدة عليك أن تفهم الصور السابقة.

بالنسبة لهذه الصورة:

أنت تعلم أنها صورة كلب. لكن بالنسبة لللحاسوب لإغنها عبارة عن أرقام. الحاسوب لا يعلم أنها تُمثل شيئ ما.

تخيل أننا قمنا بتغذية الحاسوب بآلاف الصور للكلاب. بعد ذلك يُمكن للحاسوب إستنتاج صور جديدة للكلاب. يمكننا بعد ذلك طلب صور بأشكال كلاب معينة.

لهذا السبب يهتم الباحثون بال generative models. الحاسوب يستطيع فهم البيانات بنقسه بدون أن نقوم بتلقينه بشكل مباشر. فهو يتعلم من البيانات.

لكن متي سنحصل علي نظام يستطيع إنتاج صور الكلاب؟

وإذا ما قمنا بعمل برنامج يستطيع فهم صور الكلاب، فلما لا يتم عمل برنامج لفهم صور شيئ آخر؟ ماذا عن برنامج لإنتاج صور لأشخاص يصافحون بعضهم البعض؟

البرنامج الذي يُنتج صور سيئة لن يكون شيقاً. لكن بناءً علي معدل تقدم ال generative models في السنوات الماضية، لا أحد يعلم أين سنصل بعد 5 أو 10 سنوات. يُمكن لشخص ما عمل نظام لإنتاج أفلام كاملة.

إذا نظرنا إلي ال 20 أو 30 سنة القادمة، يمكننا أن نتخيل بأن الترفية سيكون من إنتاج الآلة بسبة 100%:

إنتاج ألعاب الفيديو هو أول فكرة ترفيهية لبندأ بها. فهناك إستثمارات هائلة لتطوير ألعاب الفيديو تُقدر ب 300 مليون دولار أميركي.

نحن مازلنا في بداية ال generative models وإستخدامهم بشكل عملي قليل الآن. لكن يوجد العديد لفعله بإستخدام ال generative models. لنري ما يمكننا صنعه.

 

كيف تعمل ال DCGAN

لبناء DCGAN، نقوم بإنشاء 2 deep neural networks. بعد ذلك نجعلهم يقاتلوا بعضهم البعض. بهذه الطريقة، سيصبحون أقوي بمرور الوقت.

لنخيل أن الشبكة الأولي تُعتبر ضابط شرطة مهمته التعرف علي الأموال المزيفة. مهمته النظر في الصورة والتعرف إذا ما كانت الصورة بها مال حقيقي أو مزيف.

لأننا نبحث عن كائنات داخل الصورة، يمكننا إستخدام convolutional neural network لهذه الوظيفة. يمكنك القراءة عنها من هذا الدرس السابق.

الشبكة الأولي تُسمي discriminator:

لنعتبر أن الشبكة الأخري عبارة عن مزور يريد أن يُنتج أموال مزورة. في هذه الشبكة، نعكس الطبقات الموجودة في ال ConvNet العادية. أي بدلاً من أن يكون المدخل هو صورة والمخرج هو قيمة، المدخل سيكون قيمة والمخرج سيكون صورة.

الشبكة الثانية تُسمي generator:

الآن ليدنا ذابط شرطة (discriminator) يبحث عن المال المزور وأيضاً لدينا مزور (generator) والذي يريد أن يُنتج أموال مزورة تطابق الواقع. لنجعلهم ينتافسون.

في الدورة الأولي من المنافسة، ال generator سيقوم بإنشاء صور للمال ولكن الصور في البداية ستكون سيئة للغاية لأنه لا يعرف شيئاً عن الصور الحقيقية للنقود:

ال discriminator لا يعلم الفرق حتي الآن بين الصور الحقيقية والمزورة:

في هذه الخطوة، نقول لل discriminator أن الدولار مزور بالفعل. بعد ذلك نقوم نجعله يري دولار حقيقي ونطلب منه أن ينظر للفرق بين الدولار الحقيقي والمزور.

علي سبيل المثال، ال discriminator يمكنه أن يعلم أن الدولار الحقيقي به صورة شخص ولكن المزور ليس به. بإستخدام هذه المعلومة، يتعرف ال discriminator علي أن الدولار مزوراً بالفعل ويتحسن آدائه:

في المرحلة الثانية من المنافسة، نُخبر ال generator بأن صور المال الذي أنتجه تم التعرف عليه بأنه مزور وعليه أن يفعل شيئاً ما. أيضاً نقوم بإخباره بأن ال discriminator يبحث عن صور وجه شخص داخل الصورة، ولذلك عليه أن يضع صورة شخص داخل صورة الدولار حتي يخدع ال discriminator:

الدولار المزور سيتم قبوله كأنه حقيقي وعلي ال discriminator أن ينظر مره أخري داخل الدولار الحقيقي لمعرفة إن كان هناك فرق.

هذه اللعبة بين ال generator وال discriminator تستمر لآلاف المرات حتي يستطيع ال generator إنتاج صور يصعب علي ال discriminator أن يعلم أنها مزورة.

 

تطبيق ذلك في ألعاب الفيديو

لنري كيف لل DCGAN أن تقوم بإنشاء لعبة من سنة 1980.

لنقوم بإنشاء DCGAN تستطيع إنتاج صور من لعبة من Nintendo Entertainment System أو NES بإستخدان صور حقيقية من اللعبة في التدريب:

الألعاب في الماضي كانت تستخدم مساحة صغيرة من الذاكرة حيث أن الشاشة التي تظهر أمامنا تتكون من أجزاء بأحجام صغيرة مثل 16×16. هذا يجعل الأمر أسهل في الإستخدام مع ال DCGAN.

علي سبيل المثال، شاشة البداية من لعبة The Legend of Zelda تتكون فقط من 8 أجزاء:

هذه هي الأجزاء لكامل اللعبة:

مهمتنا هو إنتاج أجزاء مماثلة لها في لعبتنا. بعد إنتاج تلك الأجزاء، يمكن إستخدامها في إنشاء اللعبة. ليس الهدف هو إنتاج نفس المراحل المستخدمة في اللعبة الحقيقية ولكن الهدف هو إنتاج الأجزاء ال 8 بحجم 16×16.

 

الحصول علي البيانات

لتدريب النظام، يجب الحصول علي العديد من البيانات. لحسن الحظ يوجد أكثر من 700 لعبة ل NES يمكننا الإختبار منهم.

تم إستخدام wget لتحميل صور من ألعاب NES من The Video Game Museum website.

ال DCGANs تستطيع أن تعمل علي صور صغيرة بحجم 256×256 pixels. لكن الحجم الكامل ل NES هو 256×224. لهذا السبب، تم قص كل صورة لتكون بحجم 224×224.

 

إنشاء ال DCGAN

يوجد أكثر من تطبيق لل DCGANs علي github يمكنك إستخدامه. قمت بإستخدام التطبيق من Taehoom Kim  بإستخدام مكتبة ال TensorFlow. لأن ال DCGAN تعتبر unsupervised، تم وضع البيانات في مجلد وتشغيل ال DCGAN للتدريب بناءً علي تلك البيانات وفقط نتنظر النتيجة.

هذه هي عينات من الصور الحقيقية:

والآن التدريب يبدأ. في البداية، الناتج من ال generator يعتبر noise. لكنه سرعان ما يتطور حتي يُصبح مماثل للناتج الموجود باللعبة:

بعد العديد من مرات التدريب، الصور يبدأ في أن تأخذ صفات عديدة من اللعبة:

بإستمرار التدريب، نبدأ في رؤية الطوب الموجود في جدران اللعبة. أيضاً يُمكنك أن تري عناصر جديدة مثل ال life bars وحتي النصوص:

هنا تبدأ الأمور في التعقد. كيف لنا أن نعلم أن الحاسوب يقوم بإنتاج صور جديدة أم فقط يقوم بإنتاج صور مأخوذة بشكل مباشر من صور التدريب؟ في صورتان من المخرجات، يُمكننا أن نري أن ال menu bar مأخوذة من Super Mario Bros. 3 وال header bar وال bricks من لعبة Super Mario Bros. الأصلية.

بإستخدام العديد من بيانات التدريب وعدم إطالة وقت التدريب، يمكننا أن نُخفض من إحتمال إنتاج صور مأخوذة بالكامل من صور التدريب.

بعد بضع ساعات التدريب، الصور تحتوي علي أجزاء بحجم 16×16. لكني أبحث عن تغييرات في الأشكال الوجودة في اللعبة مثل أشكال الحجارة المستخدمة.

لذلك سأقوم بمعالجة الصور الناتجة لكي يتكنوا فقط من ال 64 لون المستخدمين في NES:

بعد ذلك سأفتح الصور المتكونة من 64 لون بإستخدام ال Tiled Map Editor. من هنا، يمكنني الحصول علي الأجزاء بحجم 16×16:

من داخل ال Tiled Map Editor، سأقوم بترتيب تلك الأجزاء بشكل يواقق لعبة Castelvania:

بعد ذلك، نضع الشخصية الأساسية وبعض الأعداء داخل اللعبة لنري ما سيبدو عليه الناتج:

للحصول علي التأثير الكامل، لنري ما ستبدو عليه اللعبة بوجود عناصر القوائم داخل اللعبة:

أعتقد أن الناج يبدو كألعاب NES. الناتج ليس واقعي تماماً لكنه ليس سيئاً:

هل إنتهي الأمر؟

ما قمنا بفعله يعتبر من التطبيقات البدائية في ال generative models. فيوجد العديد من التطبيقات حول ال generative models. حتي الآن يقتصر إستخدام ال GANs علي إنتاج صور صغيرة. أفضل النماذج المستخدمة تقوم بإنتاج صور بحجم طابع البريد كما هو واضح في صورة الكلب التالي:

منذ عدة سنوات ماضية، لم نكن نستطيع الحصور علي ناتج أقرب من ذلك. كنا مزهولين بالنتائج التي تُشبة الصورة التالية:

ومع التطورات التي حدثت في ال generative models، أحد الأبحاث قام بعمل GAN لتغيير ملامح الوجه بالنسبة للعمر:

إذا إستمر الأمر كما هو عليه الآن، لن يستغرق الأمر كثيراً لكي نري generative models تساعدنا في إنشاء العديد من البيانات.

 

لتعلم المزيد

ها هي مجموعة مصادر لتعلم المزيد عن ال generative models:


الدرس الأصلي

https://medium.com/@ageitgey/abusing-generative-adversarial-networks-to-make-8-bit-pixel-art-e45d9b96cee7

تعليقات