شبكات الخصومة التوليدية
بالقسم السابق تعلّمنا عن النماذج التوليدية: نماذج تقدر تنشئ صورًا جديدة تشبه صور مجموعة بيانات التدريب. وكان المشفّر التلقائي التغايري (Variational Autoencoder أو VAE) مثالًا زينًا على نموذج توليدي.
لكن لو حاولنا ننشئ بـVAE شيئًا له معنى فعلًا، مثل لوحة بدقة معقولة، بنشوف إن التدريب ما يتقارب زين. لهالحالة نحتاج نتعلم بنية ثانية مصممة للنماذج التوليدية: شبكات الخصومة التوليدية (Generative Adversarial Networks أو GANs)، واللي بنسميها بعد شبكات GAN.
فكرة GAN الأساسية إن عندنا شبكتين عصبيتين تتدرّبان ضد بعض:
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
✅ كم مصطلح نحتاجه:
- المولّد (Generator) شبكة تستقبل متجهًا عشوائيًا وتنتج صورة.
- المميّز (Discriminator) شبكة تستقبل صورة وتحدد هل هي حقيقية من مجموعة البيانات المستخدمة في التدريب، أو ولّدها المولّد. يعني هو بالأساس مصنّف لمهمة التصنيف للصور.
المميّز
بنية المميّز ما تختلف عن شبكة عادية لتصنيف الصور. بأبسط حالة يكون مصنّفًا كامل الاتصال، لكن الغالب إنه يكون شبكة عصبية التفافية.
✅ إذا كانت GAN مبنية على شبكات التفافية، نسميها DCGAN.
يتكوّن مميّز CNN من عدة طبقات التفاف وتجميع يقل معها الحجم المكاني، ثم طبقة كاملة الاتصال أو أكثر تنتج «متجه السمات»، وفي النهاية مصنّف ثنائي.
✅ التجميع (Pooling) هنا تقنية تصغّر الصورة عن طريق دمج مخرجات مجموعات من العصبونات في طبقة، وتحويلها إلى عصبون واحد بالطبقة اللي بعدها. المصدر
المولّد
المولّد أصعب شوي. نقدر نعتبره مميّزًا بالمقلوب: يبدأ بمتجه كامن بدل متجه السمات، ثم تمرره طبقة كاملة الاتصال وتحوله للحجم والشكل المطلوبين، وبعدها تجي طبقات التفاف عكسي ورفع دقة. هالجزء يشبه فاكّ الترميز في المشفّر التلقائي.
✅ لأن طبقة الالتفاف تُنفّذ على شكل مرشّح خطي يمر فوق الصورة، فالالتفاف العكسي قريب من الالتفاف العادي، ونقدر ننفّذه بمنطق الطبقة نفسه.
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
تدريب GAN
نسمي هالشبكات شبكات خصومة لأن المنافسة مستمرة بين المولّد والمميّز. خلال المنافسة يتحسّن الاثنان، فتتعلم الشبكة تنتج صورًا أفضل كل مرة.
يصير التدريب على مرحلتين:
- تدريب المميّز: هالمهمة مباشرة. نولّد دفعة صور بالمولّد ونعطيها التسمية 0، يعني صور مزيّفة، وناخذ دفعة صور من مجموعة بيانات الإدخال ونعطيها التسمية 1، يعني صور حقيقية. نحسب خسارة المميّز ثم ننفّذ الانتشار العكسي.
- تدريب المولّد: هذي أصعب شوي لأننا ما نعرف المخرج المتوقع من المولّد مباشرة. ناخذ شبكة GAN كاملة — مولّد وبعده مميّز — ونمرّر لها متجهات عشوائية، ونطلب من المميّز يعطي الصور الناتجة القيمة 1، يعني يصنّفها صورًا حقيقية. بعدها نجمّد معاملات المميّز، لأننا ما نبي ندرّبه بهالخطوة، ثم ننفّذ الانتشار العكسي.
خلال هالعملية ما تنخفض خسارتا المولّد والمميّز انخفاضًا ثابتًا وكبيرًا. بالوضع المثالي تتذبذبان، وهذا يعكس إن أداء الشبكتين يتحسّن بالتبادل.
✍️ تمارين: GANs
مشاكل تدريب GAN
معروف إن تدريب GANs صعب بالذات. هذي بعض المشاكل الشائعة:
- انهيار الأنماط (Mode Collapse): يتعلم المولّد إنتاج صورة وحدة ناجحة تخدع المميّز، بدل ما ينتج صورًا متنوعة.
- الحساسية للمعاملات الفائقة: أحيانًا ما تتقارب GAN أبدًا، ثم يسبب خفض مفاجئ في معدل التعلم تقاربها.
- الحفاظ على التوازن بين المولّد والمميّز. في حالات كثيرة تنزل خسارة المميّز للصفر بسرعة، وبعدها ما يقدر المولّد يكمل تدريب. نقدر نعالج هالشي بمعدلات تعلم مختلفة للمولّد والمميّز، أو نتخطى تدريب المميّز إذا كانت خسارته منخفضة أصلًا.
- التدريب على دقة عالية. مثل المشكلة اللي تواجه المشفّرات التلقائية، إعادة البناء عبر طبقات التفافية كثيرة تسبب شوائب بصرية. غالبًا نحلها بـالنمو التدريجي (Progressive Growing): ندرّب أول كم طبقة على صور منخفضة الدقة، ثم «نفك» طبقات أو نضيفها. حل ثاني إننا نضيف وصلات بين الطبقات وندرّب عدة درجات دقة بنفس الوقت؛ تلقون التفاصيل في بحث Multi-Scale Gradient GANs.
نقل الأسلوب
GANs طريقة ممتازة لإنشاء صور فنية. وفيه تقنية ثانية مثيرة للاهتمام اسمها نقل الأسلوب (Style Transfer)؛ تاخذ صورة محتوى وتعيد رسمها بأسلوب مختلف، باستخدام مرشّحات من صورة الأسلوب.
تشتغل بهالشكل:
- نبدأ بصورة تشويش عشوائي. نقدر نبدأ بصورة المحتوى، لكن التشويش أسهل لفهم الفكرة.
- هدفنا ننشئ صورة قريبة من صورة المحتوى وصورة الأسلوب مع بعض. نقيس هالشي بدالتي خسارة:
- خسارة المحتوى: نحسبها من السمات اللي تستخرجها CNN في طبقات محددة من الصورة الحالية وصورة المحتوى.
- خسارة الأسلوب: نحسبها بين الصورة الحالية وصورة الأسلوب باستخدام مصفوفات Gram بطريقة ذكية؛ التفاصيل في دفتر المثال.
- عشان نخلي الصورة أنعم ونشيل التشويش، نضيف خسارة التغاير الكلي (Total Variation Loss) اللي تحسب متوسط المسافة بين وحدات البكسل المتجاورة.
- تعدّل حلقة التحسين الأساسية الصورة الحالية بالانحدار المتدرج، أو بخوارزمية تحسين ثانية، عشان تقلّل الخسارة الكلية؛ وهي مجموع موزون للخسائر الثلاث.
الخلاصة
تعلّمتوا في هالدرس وش هي GANs وكيف ندرّبها. وشفتوا بعد التحديات الخاصة اللي تواجه هالنوع من الشبكات العصبية، وبعض الطرق اللي تساعدنا نتجاوزها.
🚀 التحدي
شغّلوا دفتر نقل الأسلوب باستخدام صوركم.
المراجعة والدراسة الذاتية
للمراجعة، اقرأوا أكثر عن GANs في هالمصادر:
التكليف
ارجعوا لأحد دفتري الدرس ودرّبوا GAN من جديد على صوركم. وش تقدرون تنشئون؟