انتقل إلى المحتوى الرئيسي

جارٍ تحميل المختبر المرئي…

#ganالتعلّم العميق

GAN: مزوِّر ضدّ مفتِّش

ما ستُجرّبه

  1. مرحبًا بك في #gan. على الشاشة، مستوٍ يُشاهَد من الأعلى: النقاط البيضاء هي الأصلية (هنا حلقة)، والنقاط الوردية هي المزيَّفة التي تنتجها شبكة صغيرة G، أي المولِّد (generator) — في أيّ مكان في الوقت الحالي. الخلفية الرمادية هي خريطة شبكة ثانية D، أي المميِّز (discriminator): يتردّد في كلّ مكان (50%). القاعدة: G مزوِّر لا يرى الأصلية أبدًا، بل يرى حكم D فقط؛ وD مفتِّش يرى الأصلية والمزيَّفة ويتعلّم التمييز بينها. يتحسّن كلّ منهما ضدّ الآخر إلى أن يعجز المفتِّش عن الحسم — هذا هو مبدأ GAN، الذي أنتج أوّل الوجوه الاصطناعية بواقعية فوتوغرافية.
  2. شغِّل العشرين جولة الأولى: /step 20. في كلّ جولة، يرى D ستّ عشرة نقطة أصلية وستّ عشرة مزيَّفة ويضبط معاييره؛ ثمّ يتلقّى G حكم D على مزيَّفاته، ويُمرِّر التدرّج (backpropagation) عبر D حتى يصل إلى أوزانه، ويعدِّلها.
  3. تابع: /step 100. الخطوط المتقطّعة على اللوحة تُشير إلى مستويات التوازن: ln 2 ≈ 0.69 بالنسبة لـ G و2·ln 2 ≈ 1.39 بالنسبة لـ D — وهذا ما تحصل عليه حين يُجيب D بنسبة 50% في كلّ مكان. خسارة D منخفضة جدًا تعني أن المفتِّش يفوز؛ وخسارة G المتصاعدة تعني أن المزوِّر يُكشَف.
  4. مرّة أخرى /step 100. راقب المعاينة على اليمين: دقّة D على الأصلية وعلى المزيَّفة. حين تدور القيمتان حول 50%، فإن المفتِّش لا يفعل أفضل من رمي عملة — بالضبط ما نُريده.
  5. غيِّر الأصلية: /real two-modes. يحتفظ المزوِّر بردود فعله على الحلقة، ويحتفظ المفتِّش بمعاييره: لا شيء يُعاد ضبطه.
  6. إليك أشهر مطبّات GAN. اكتب /collapse: سيلعب المزوِّر ستّ عشرة حركة بأقصى معدّل تعلّم مقابل حركة واحدة صغيرة للمفتِّش. بعبارة أخرى، يُحسَّن G ضدّ D شبه مُجمَّد.
  7. أعد تشغيل التدريب: /step 60.
  8. دورك: /collapse لإيقاف النظام، ثمّ /real spiral ثمّ /step 100 (شكل يصعب تقليده أكثر)، /noise 1 (ضوضاء ذات بُعد واحد: لا يستطيع G رسم أكثر من منحنى)، /lr-d 0.1 (مفتِّش سريع جدًا: يُصبح D مفرط الثقة ويتلاشى تدرّج G)، /sample 300 لرؤية عدد أكبر من المزيَّفة، /seed 12 للعبة مختلفة، /reset للبدء من جديد. الخطوة التالية: قناة #tokenization، أوّل قنوات ثيمة LLM — كيف يُقسِّم نموذج لغوي النصّ قبل أن يتعلّم منه.

أوامر القناة

  • /real <circle|two-modes|spiral|square>تغيير التوزيع الأصلي المُراد تقليده (يحتفظ G وD بأوزانهما).
  • /step <1..100>تكرارات التدريب بالتناوب: 2 خطوتان لـ D ثمّ خطوة واحدة لـ G، دفعات من 16.
  • /noise <1..4>بُعد الضوضاء الكامنة z (يُعاد ضبط G، ويحتفظ D بأوزانه).
  • /lr-g <0.001..0.1>معدّل تعلّم المولّد G.
  • /lr-d <0.001..0.1>معدّل تعلّم المميّز D.
  • /sample <50..300>عدد النقاط المزيَّفة المعروضة (نفس الضوضاء z، مُمدَّدة أو مُقتَطعة).
  • /seed <1..9999>لعبة جديدة: نقاط أصلية أخرى، أوزان ابتدائية أخرى، نفس الإعدادات.
  • /collapseتسليح (أو إيقاف) النظام الذي يُطلق انهيار الأنماط: أقصى lrG، وlrD صغير جدًا، 16 خطوات لـ G مقابل خطوة واحدة لـ D.
  • /resetالعودة إلى الحلقة، d = 2، lrG = lrD = 0.02، 200 مزيَّفة، شبكات جديدة.

المسرد

GAN (الشبكة التوليدية التنافسية)
زوج من الشبكات يُدرَّب أحدهما ضدّ الآخر: مولِّد يفبرك نقاطًا مزيَّفة انطلاقًا من ضوضاء، ومميِّز يتعلّم تمييزها عن الأصلية. لا يرى المولِّد البيانات أبدًا، بل حكم المميِّز فقط — ومع ذلك ينتهي به الأمر إلى تقليد توزيعها.
المولِّد (Generator)
الشبكة G التي تحوّل متّجه ضوضاء z إلى عيّنة (هنا نقطة ثنائية الأبعاد، وفي مواضع أخرى صورة). تُدرَّب لتعظيم احتمال أن يُخطئ D: يتدفّق تدرّجها عبر D حتى يصل إلى أوزانها.
المميِّز (Discriminator)
مصنّف ثنائي D يتلقّى عيّنة ويُقدِّر احتمال كونها أصلية. يُدرَّب على الأصلية (هدف 1) والمزيَّفة الصادرة عن G (هدف 0). كما تُستعمل خريطة احتماله بمثابة «إشارة خطأ» للمولّد.
لعبة الصفر / minimax
صياغة GAN: يعظّم D القيمة ln D(x) + ln(1 − D(G(z)))، ويُصغّرها G. ما يكسبه أحدهما يخسره الآخر. عمليًا، يُحسِّن G بدلًا من ذلك القيمة −ln D(G(z))، وتُسمّى الخسارة غير المُشبِعة (non-saturating loss)، وتمنح تدرّجًا مفيدًا حتى حين يهيمن D.
الضوضاء الكامنة (latent noise)
متّجه عشوائي z (غاوسي، بُعده d) يُغذّي المولِّد: هو المصدر الوحيد لتنوّع المزيَّفة. متّجها z متقاربان يعطيان نقطتين مزيَّفتين متقاربتين؛ ويحدّ بُعد z «الشكل» الذي يستطيع G إنتاجه (منحنى إن d = 1، سطح إن d ≥ 2).
انهيار الأنماط (mode collapse)
نمط فشل كلاسيكي حيث لا يُنتج G إلّا عيّنة أو عيّنتين (نمط «mode» واحد) لكلّ متّجهات z، لأنّه عثر على المكان الذي يمنحه D أعلى تقييم. قد تبدو خسارة G جيّدة رغم ذلك: إنّها لا تقيس التنوّع. هنا نرصده بانهيار الانحراف المعياري للمزيَّفة.
توازن ناش (Nash equilibrium)
حالة لا مصلحة فيها لأيّ لاعب أن يُغيّر استراتيجيته وحده. بالنسبة لـ GAN مثالي: يُعيد G توزيع الأصلية بدقّة، ويُجيب D بنسبة 50% في كلّ مكان؛ تُصبح الخسائر آنذاك ln 2 لـ G و2·ln 2 لـ D. عمليًا، لا نفعل أكثر من الدوران حوله.
التدريب بالتناوب (alternating training)
لا يمكن تحسين G وD في آن واحد: في كلّ تكرار تُنفَّذ بضع خطوات لـ D (وG مُجمَّد)، ثمّ خطوة واحدة لـ G (وD مُجمَّد)، على دفعات صغيرة. النسبة بين السرعتين (معدّلات التعلّم وعدد الخطوات) هي التي تحدّد المُهيمن — ومن ثمّ استقرار اللعبة.
تلاشي تدرّج المولّد (vanishing gradients)
حين يصبح D جيّدًا أكثر من اللازم، تتشبّع دالّته السيغمويدية: D(G(z)) ≈ 0 في كلّ مكان، ويتّجه المشتقّ العائد إلى G نحو الصفر. يتوقّف المزوِّر عن التعلّم وهو لا يزال سيّئًا. الخسارة غير المُشبِعة وD غير السريع جدًا (lr-d معتدل) يحدّان من المشكلة.
GAN مشروط (conditional GAN)
صيغة يتلقّى فيها G وD أيضًا سياقًا (تسمية فئة أو نصًّا أو صورة): يتعلّم G حينها إنتاج عيّنة من تلك الفئة. هذا هو أساس المولِّدات الموجَّهة (صورة من رسم تخطيطي، من كلمة…).

قنوات أخرى في التعلّم العميق

  • #optimizersSGD وMomentum وAdam: سباق إلى الأدنى.
  • #batch-normalizationتطبيع الحُزَم: إبقاء التفعيلات في المدى الصحيح.
  • #rnn-lstmRNN وLSTM: تذكُّر تسلسل.
  • #autoencoderالمرمّز التلقائي: اضغط ثم أعِد البناء.
  • #transfer-learningالتعلّم بالنقل: انطلق من شبكة مدرَّبة سلفًا.
  • #ganGAN: مزوِّر ضدّ مفتِّش