مستوى المقال: للمبتدئين
لو شفت صور Midjourney أو DALL-E وقلت "ده سحر"، ده مش سحر. ده اسمه Diffusion Models، وفي 700 كلمة جاية هتفهم بالظبط ازاي بيشتغل، وهتشغّله بنفسك على لابتوبك في 28 سطر Python.
Diffusion Models للمبتدئ: من الضوضاء للصورة في 4 خطوات
المشكلة باختصار
سنة 2020، لو طلبت من الكمبيوتر "ارسملي قطة بتلبس قبعة كاوبوي"، كان هيرجعلك صورة مشوّهة. سنة 2026، Stable Diffusion XL بيرسمها في 6 ثواني بدقة 1024×1024 وبجودة احترافية. اللي حصل في الـ 6 سنين دول هو ظهور Diffusion Models، ودي معمارية مختلفة تماماً عن GANs القديمة، وأسهل في التدريب وأدق في النتيجة.
المثال الواقعي: النحّات وقطعة الرخام
تخيّل نحّات قدامه قطعة رخام كبيرة وعشوائية الشكل. النحّات بيشيل شوية رخام، بيبص على القطعة، يشيل تاني، يبص تاني، لحد ما يبان شكل التمثال. هو مش بيضيف رخام، هو بيشيل الزيادة بالتدريج.
Diffusion Models بتعمل نفس الكلام بالظبط. النموذج بيبدأ بصورة ضوضاء عشوائية بالكامل (Random Noise)، ثم بيشيل الضوضاء على مراحل لحد ما يبان شكل اللي طلبته. كل خطوة بيشيل شوية ضوضاء ويقرّب الصورة من المعنى. ركز: النموذج اتعلّم ازاي يشيل الضوضاء، مش ازاي يرسم من الصفر.
الشرح العلمي: ليه الطريقة دي بتشتغل؟
الفكرة العلمية اسمها Denoising Diffusion Probabilistic Models (DDPM)، اتنشرت في ورقة Ho et al. سنة 2020 من Berkeley. العملية فيها مرحلتين:
- Forward Process (وقت التدريب): النموذج بياخد ملايين الصور الحقيقية، ويضيف عليها ضوضاء جاوسية بالتدريج على 1000 خطوة، لحد ما الصورة تبقى ضوضاء كاملة. ده الجزء السهل رياضياً.
- Reverse Process (وقت التوليد): النموذج بيتعلّم يعكس العملية. لو ادّيته صورة فيها ضوضاء بنسبة 73%، بيقدر يتنبّأ بالـ 73% دي ويشيلها. لو كرّر العملية 1000 مرة، بيوصل من ضوضاء كاملة لصورة نظيفة.
الافتراض إن: لو النموذج يعرف يشيل step واحد من الضوضاء بدقة، يقدر يكرّر العملية ويوصل لصورة كاملة من ضوضاء كاملة. ده بالظبط اللي بيحصل فعلاً.
الـ 4 خطوات اللي بتحصل لما تطلب صورة
- Text Encoding: الجملة بتاعتك (مثلاً "قطة بتلبس قبعة") بتتحوّل لـ vector عددي بـ CLIP encoder. ده بيخلي النموذج "يفهم" المعنى.
- Random Latent: بيتولّد tensor عشوائي بحجم 64×64×4 في الـ latent space (مش في pixel space علشان أرخص حسابياً).
- Denoising Loop: الـ U-Net model بيشيل ضوضاء على 20-50 خطوة، كل خطوة بتقرّب الـ latent للمعنى المطلوب، بقيادة الـ text vector.
- VAE Decode: الـ latent النظيف بيتفك لصورة 1024×1024 pixel بـ Variational Autoencoder.