GANs: المولّد والمميّز
نظرية ألعاب الحد الأدنى والأقصى، وعدم استقرار تدريب GAN، وانهيار الأنماط، وتطبيق DCGAN
GANs: المولّد والمميّز درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ما هي GAN؟
تضع الشبكة التوليدية الخصمية شبكتين في مواجهة بعضهما: مولّدًا ينشئ بيانات زائفة ومميّزًا يحكم على ما إذا كانت البيانات حقيقية أم زائفة. ويتنافسان، فيتعلّم المولّد إنتاج عينات مقنعة.
اللعبة الخصمية
تخيّل مزوّرًا (المولّد) ومحقّقًا (المميّز). يحسّن المزوّر البيانات الزائفة لخداع المحقّق، بينما يصقل المحقّق قدرته على التمييز. ويدفع سباق التسلّح هذا كليهما إلى التحسّن، حتى تبدو البيانات الزائفة حقيقية.
المولّد
يحوّل المولّد متجه ضوضاء عشوائيًا إلى صورة زائفة. ويتعلّم تحويل أرقام عشوائية عديمة المعنى إلى بيانات منظّمة تبدو واقعية.
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(100, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Tanh()
)
def forward(self, z):
return self.net(z)متجه الضوضاء
تُؤخذ عينة من الإدخال z من توزيع طبيعي معياري. وتنتج متجهات الضوضاء المختلفة صورًا مختلفة، ولذلك تمثّل الضوضاء «بذرة» التوليد. ويبلغ بُعدها هنا 100، وهو حجم الفضاء الكامن.
z = torch.randn(batch_size, 100)
fake_images = generator(z)المميّز
يأخذ المميّز صورةً ويُخرج احتمالًا واحدًا: مدى احتمال كونها حقيقية. وتمنح Sigmoid قيمة في المجال [0,1]، حيث تعني 1 أنها حقيقية و0 أنها زائفة.
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid()
)تدريب المميّز
درّب D على دفعة من الصور الحقيقية ذات التسمية 1، وعلى صور زائفة ذات التسمية 0. ويتعلّم رفع درجات الصور الحقيقية وخفض درجات الصور الزائفة باستخدام الانتروبيا المتقاطعة الثنائية.
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()لماذا نستخدم detach() مع الصور الزائفة؟
عند تدريب D نستخدم fake.detach() حتى لا تتدفق التدرجات إلى المولّد. فنحن نحدّث المميّز فقط في هذه الخطوة، ويحصل المولّد على دوره بصورة منفصلة.
تدريب المولّد
درّب G الآن على خداع D: مرّر الصور الزائفة عبر D وكافئ المولّد عندما يُخرج D القيمة حقيقية (التسمية 1). ويتحسّن المولّد بجعل D يصدّق أن صوره الزائفة حقيقية.
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()التدريب بالتناوب
تتناوب كل دورة: حدّث D أولًا، ثم حدّث G. ويُعد الحفاظ على توازن تقريبي بينهما أمرًا أساسيًا؛ فإذا أصبح D قويًا جدًا، فلن يتلقى G تدرجًا مفيدًا، وإذا كان ضعيفًا جدًا، فلن يواجه G تحديًا.
# per step
# 1) update Discriminator
# 2) update Generatorانهيار الأنماط
من حالات الفشل الشائعة انهيار الأنماط: يجد المولّد مخرجًا واحدًا أو بضعة مخرجات تخدع D، ثم لا ينتج سواها متجاهلًا تنوع البيانات. ومن أعراض ذلك أن تبدو كل عينة مولَّدة متطابقة تقريبًا.
عدم استقرار التدريب
تشتهر نماذج GAN بأنها غير مستقرة: تتذبذب الخسائر، وقد تتغلب إحدى الشبكتين على الأخرى، ويكون التقارب هشًا. وتساعد حيل مثل LeakyReLU ومعدلات التعلّم المدروسة وتمليس التسميات على استقرار التدريب.
اختبار سريع
اختبر فهمك لنماذج GAN.
مراجعة: GAN
تعلّمت البنية الخصمية: يحوّل المولّد متجه ضوضاء إلى بيانات زائفة، ويُخرج المميّز احتمالًا لكون البيانات حقيقية أو زائفة، ويتدرّبان عبر التناوب، بحيث يُدرَّب D ثم G. كما تعلّمت رصد انهيار الأنماط وحالة عدم الاستقرار العامة التي تجعل تدريب نماذج GAN صعبًا.
الأسئلة الشائعة
هل درس «GANs: المولّد والمميّز» مجاني؟
نعم — نص درس «GANs: المولّد والمميّز» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «GANs: المولّد والمميّز»؟
نظرية ألعاب الحد الأدنى والأقصى، وعدم استقرار تدريب GAN، وانهيار الأنماط، وتطبيق DCGAN تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «GANs: المولّد والمميّز»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المشفّرات التلقائية لتعلّم التمثيلات
- المشفّرات التلقائية التغايرية (VAE)
- GANs: المولّد والمميّز
- شبكات GAN الشرطية ونقل الأسلوب