إسماعيل بن علا

Diffusion Workbench

نماذج الانتشار والتدفق على حلقة واحدة

الذكاء الاصطناعي التوليدي · أكتوبر 2026 · مكتمل

DDPM والمعادلات التفاضلية العشوائية للدرجة ومطابقة التدفق وEDM بشبكة واحدة وحلقة واحدة، بحيث لا يتغير سوى الصياغة.

التقنياتPyTorchtorchvisionMatplotlibpytestKaggle

Diffusion Workbench — نظرة عامة

نظرة عامة

تُقدَّم DDPM والمعادلات التفاضلية العشوائية القائمة على الدرجة (score SDE) ومطابقة التدفق (flow matching) وEDM عادةً كنماذج مختلفة، لكنها فكرة واحدة: إفساد البيانات بضوضاء غاوسية على مستويات كثيرة، وتدريب شبكة على إزالة قليل منها، ثم البدء من ضوضاء خالصة وإزالتها خطوة بخطوة. وهي تختلف في ثلاثة خيارات: كيف تُضاف الضوضاء، وما الذي تتنبأ به الشبكة، وكيف يُكامَل المسار العكسي. أردت أن أرى هذه الخيارات الثلاثة ولا شيء غيرها، فكتبت كل صياغة كصنف بدالتين، loss() وsample()، بلغة PyTorch خالصة.

تتشارك كلها شبكة U-Net صغيرة واحدة (أو DiT)، وحلقة تدريب واحدة بـ AdamW وأوزان EMA، وواجهة معاينة واحدة (DDPM السلفي، وDDIM، وEuler-Maruyama، ومعادلة تدفق الاحتمال التفاضلية، وEuler وHeun)، وتقييمًا واحدًا. لا تعرف الشبكة أبدًا أي طريقة تخدم: تتلقى صورة ومستوى ضوضاء وتعيد موتّرًا بشكل صورة تحدد الطريقة معناه. ويعمل التوجيه بدون مصنِّف (classifier-free guidance) مع كل طريقة. حجم النماذج افتراضيًا 0.21 M معلمة لتتدرب في دقائق على المعالج المركزي؛ ويدرّبها دفتر Kaggle/Colab بحجم أكبر على CIFAR-10.

بعد 500 خطوة على MNIST، ينتج التنبؤ بـ x0 والتنبؤ بـ v ومطابقة التدفق وEDM كلها أرقامًا، ومع الضوضاء الابتدائية نفسها تنتج الأرقام نفسها. التنبؤ بـ ε هو الأبطأ تعلّمًا والمعايِنات الحتمية تكشف ذلك، وهذا بالضبط عدم الاستقرار الذي دفع إلى ابتكار التنبؤ بـ v والتكييف المسبق في EDM. يرفع التوجيه عند w = 3 التزام النموذج الشرطي بالتسمية من 58.5% إلى 96.0%. يحل هذا المستودع محل دفتر مقرر كان يستدعي Stable Diffusion عبر خط معالجة بمقبضين غامضين هما num_inference_steps وguidance_scale؛ وهو يبني ما يختبئ خلف هذين الرقمين.

السؤال

كل طرق الانتشار تضيف ضوضاء غاوسية وتتعلم إزالتها؛ فمع تثبيت الشبكة والبيانات والميزانية، إلى أي حد تغيّر الخيارات الثلاثة المتبقية (كيف تُضاف الضوضاء، وما الذي يُتنبأ به، وكيف يُكامَل المسار العكسي) ما تحصل عليه في كل خطوة معاينة؟

أهم الميزات

كيف يعمل

  1. إضافة الضوضاء

    تعرّف كل طريقة عينة مشوَّشة عند مستوى عشوائي: sqrt(ā) x0 + sqrt(1 - ā) ε في DDPM، وm(t) x0 + s(t) ε في المعادلات العشوائية، والخط المستقيم (1 - t) x0 + t ε في مطابقة التدفق، وx0 + σ ε في EDM. كل صورة في الدفعة تحصل على مستواها الخاص.

  2. انحدار نحو هدف

    تحدد الطريقة معنى خرج الشبكة: الضوضاء ε، أو الصورة النظيفة x0، أو v = sqrt(ā) ε - sqrt(1 - ā) x0، أو السرعة ε - x0، أو الخرج المكيَّف مسبقًا في EDM. إذا عُرف أحدها استُنتجت البقية جبريًا؛ لكنها تختلف في صعوبة تعلّمها عند كل مستوى ضوضاء.

  3. شبكة واحدة وحلقة واحدة

    تتلقى U-Net أو DiT الصورة المشوَّشة وتضمينًا زمنيًا (مع تسمية) وتعيد موتّرًا بشكل صورة. تسحب الحلقة دفعة من الذاكرة، وتستدعي method.loss()، وتقصّ التدرّجات، وتنفّذ خطوة AdamW مع إحماء (warm-up)، وتحدّث نسخة EMA تُستخدم للمعاينة.

  4. مكاملة المسار العكسي

    تبدأ method.sample() من ضوضاء خالصة وتشغّل معايِنًا: DDPM السلفي أو DDIM لـ DDPM، وEuler-Maruyama أو معادلة تدفق الاحتمال التفاضلية لـ score SDE، وEuler أو Heun لمطابقة التدفق وEDM. عدد تقييمات الشبكة (NFE) هو التكلفة الحقيقية.

  5. التوجيه والقياس

    مع التوجيه، يشغّل التقييم الواحد الشبكة على دفعة مضاعفة ويستقرئ انطلاقًا من الخرج غير الشرطي. تُقيَّم كل نقطة حفظ عند عدة ميزانيات من NFE بمقياس FID على سمات المصنِّف مقابل مجموعة الاختبار، وبدقة التسميات للنماذج الشرطية.

أمثلة

قبل التدريب وبعده، بالضوضاء نفسها والمعايِن نفسه، لـ DDPM بالتنبؤ بـ x0 مع DDIM، ومطابقة التدفق مع Euler، وEDM مع Heun، ومطابقة التدفق مع توجيه w = 3. يعيد نموذج x0 غير المدرَّب رماديًا مسطحًا؛ وبعد 500 خطوة تظهر الأرقام ويتبع النموذج الموجَّه التسميات 0، 1، 2، 3، ...
قبل التدريب وبعده، بالضوضاء نفسها والمعايِن نفسه، لـ DDPM بالتنبؤ بـ x0 مع DDIM، ومطابقة التدفق مع Euler، وEDM مع Heun، ومطابقة التدفق مع توجيه w = 3. يعيد نموذج x0 غير المدرَّب رماديًا مسطحًا؛ وبعد 500 خطوة تظهر الأرقام ويتبع النموذج الموجَّه التسميات 0، 1، 2، 3، ...
المسار العكسي خطوة بخطوة: صور الضوضاء الـ 16 نفسها عبر DDPM السلفي (100 خطوة) وDDIM (50) ومطابقة التدفق مع Euler (50) وEDM مع Heun (25)، كل إطار عند النسبة نفسها من خطواته. تنتهي المعايِنات الحتمية الثلاثة إلى أرقام شبه متطابقة؛ بينما يحقن DDPM ضوضاء جديدة في كل خطوة ويبقى محبَّبًا حتى النهاية.
التعلم نقطة حفظ بعد أخرى: 36 صورة ضوضاء ثابتة تُعايَن بـ Euler في 20 خطوة من لقطات مطابقة التدفق المحفوظة كل 25 خطوة تدريب. تظهر خطوط مشوَّشة عند الخطوة 75، وخطوط نظيفة بحلول 150، ومن الخطوة 300 تحتفظ كل صورة ضوضاء برقمها ولا تزداد إلا نعومة.
FID على سمات المصنِّف مقابل عدد تقييمات الشبكة لكل تشغيل. مطابقة التدفق مع Euler صالحة للاستخدام عند 5 NFE؛ ويحتاج Heun في EDM إلى نحو 19؛ ويبقى التنبؤ بـ ε مع المعايِنات الحتمية فوق 300.
FID على سمات المصنِّف مقابل عدد تقييمات الشبكة لكل تشغيل. مطابقة التدفق مع Euler صالحة للاستخدام عند 5 NFE؛ ويحتاج Heun في EDM إلى نحو 19؛ ويبقى التنبؤ بـ ε مع المعايِنات الحتمية فوق 300.
مسار إزالة الضوضاء لمطابقة التدفق مع Euler عند 20 NFE. تتناوب الصفوف بين x_t وتخمين الشبكة الحالي للصورة النهائية؛ ويأخذ التخمين شكل الرقم قبل أن تصبح x_t نظيفة بوقت طويل.
مسار إزالة الضوضاء لمطابقة التدفق مع Euler عند 20 NFE. تتناوب الصفوف بين x_t وتخمين الشبكة الحالي للصورة النهائية؛ ويأخذ التخمين شكل الرقم قبل أن تصبح x_t نظيفة بوقت طويل.

المدخل

diffusion-eval runs/flow-matching-cfg/last.pt --guidance 0 1 3 --nfe 20

المخرج

w = 0: FID 3.20, label accuracy 11.0% (chance) w = 1: FID 2.07, label accuracy 58.5% w = 3: FID 1.10, label accuracy 96.0%

مسح التوجيه لتشغيل مطابقة التدفق الشرطية، 200 عينة عند 20 NFE. عند هذه الميزانية يحسّن التوجيه دقة التسميات وFID معًا، لأن الاستقراء يزيد حدة العينات الضبابية لنموذج غير مدرَّب بما يكفي.

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

نماذج الانتشار · DDPM · DDIM · التنبؤ بـ v · التنبؤ بـ x0 · النماذج التوليدية القائمة على الدرجة · score SDE · معادلة تدفق الاحتمال التفاضلية (probability-flow ODE) · مطابقة التدفق · rectified flow · EDM · التوجيه بدون مصنِّف · DiT · U-Net · NFE · FID · MNIST · PyTorch · النماذج التوليدية