Advanced Deep Learning
& Generative AI
التعلم العميق المتقدم والذكاء الاصطناعي التوليدي — دليل عربي مفصّل للمبتدئين يشرح كيف «تولّد» الآلة صورًا ونصوصًا وأفكارًا جديدة: من Autoencoder وVAE وGAN، إلى Diffusion وStable Diffusion، ثم Multimodal وRLHF وFine-Tuning، وصولًا إلى نشر النماذج والمشاريع النهائية — بتشبيهات من الحياة وأمثلة بسيطة.
Autoencoders — المُرمّز التلقائي
حتى الآن تعلّمنا شبكات تُصنّف أو تتنبّأ. لكن ماذا لو أردنا أن نضغط معلومات ثم نعيد بناءها؟ هذا بالضبط ما يفعله Autoencoder — وهو أول خطوة لفهم «التوليد» في الذكاء الاصطناعي.
تستمع لمحاضرة ساعتين، وتكتب ملخّصًا من صفحة واحدة (ضغط). لاحقًا تقرأ الملخّص وتحاول تخمين أهم النقاط (إعادة بناء). إن كان الملخّص جيدًا، تستطيع استرجاع الفكرة الأساسية رغم فقدان التفاصيل الدقيقة.
Encoder — المُرمّز
الـ Encoder يأخذ المدخل (صورة، صوت، نص كمتجهات…) ويُحوّله إلى تمثيل أصغر بكثير يسمّى Latent Representation. مثل أنك تلتقط صورة بكاميرا عالية الدقة ثم تحفظ نسخة مضغوطة JPEG — الملف أصغر، لكنه يحتفظ بجوهر الصورة.
صورة 28×28 = 784 بكسل → Encoder يُنتج متجهًا من 32 رقمًا فقط. هل 32 رقمًا يكفي لكل التفاصيل؟ لا — لكنه يكفي للشكل العام: «هذه رقم 7».
Decoder — فك الترميز
الـ Decoder يأخذ المتجه المضغوط ويحاول إعادة بناء المدخل الأصلي. الهدف التدريبي: الفرق بين الأصل والنسخة المعاد بناؤها يكون أصغر ما يمكن (Reconstruction Loss).
Latent Space — الفضاء الكامن
Latent Space هو «خريطة» الأرقام المخفية. كل نقطة فيه تمثّل نوعًا من البيانات. الأرقام المتشابهة (7 و7) تكون قريبة؛ الأرقام المختلفة (7 و3) بعيدة. هذا الفضاء مهم لأننا لاحقًا نولّد بيانات جديدة باختيار نقاط منه.
| المكوّن | دوره بكلمات بسيطة | تشبيه |
|---|---|---|
| Encoder | يضغط المدخل | ملخّص المحاضرة |
| Latent Space | مكان الأفكار المضغوطة | دفتر الملاحظات |
| Decoder | يعيد البناء | طالب يعيد شرح المحاضرة |
Denoising Autoencoder — إزالة الضوضاء
نُدخل للشبكة صورة مشوّهة (ضوضاء، تشويش، بكسلات عشوائية) ونطلب منها إعادة الصورة النظيفة. هكذا تتعلّم «ما هو المهم» في البيانات وليس التفاصيل العشوائية — مهارة مفيدة جدًا في معالجة الصور والصوت.
تسمع صوت صديقك في مقهى صاخب (ضوضاء). دماغك «يفلتر» الصوت وتفهم الكلمات. Denoising Autoencoder يتعلّم نفس الفكرة: يتجاهل الضوضاء ويحافظ على الشكل الحقيقي.
noisy = image + 0.3 * torch.randn_like(image)
latent = encoder(noisy)
reconstructed = decoder(latent)
loss = MSE(reconstructed, image) # قارن بالصورة الأصلية النظيفة
Variational Autoencoders — المُرمّز التبايني
VAE يأخذ فكرة Autoencoder خطوة أبعد: بدل نقطة واحدة في Latent Space، يتعلّم توزيعًا احتماليًا. هذا يسمح بتوليد بيانات جديدة بأخذ عينات عشوائية من ذلك التوزيع.
بدل أن تقول «طوله 175 سم بالضبط»، تقول «طوله حوالي 170–180 سم». هذا «نطاق» وليس رقمًا واحدًا. VAE يخزّن المتوسط والتشتت (mean & variance) لكل بعد في الفضاء الكامن.
Latent Variables — المتغيّرات الكامنة
المتغيّرات الكامنة (z) هي الأرقام المخفية التي تمثّل «جوهر» البيانات. في VAE، الـ Encoder لا يُخرج z مباشرة، بل يُخرج:
- μ (mu): المتوسط — أين مركز التوزيع؟
- σ (sigma): التشتت — كم «انتشار» حول المركز؟
ثم نأخذ عينة: z = μ + σ × ε حيث ε عشوائي من توزيع طبيعي.
Sampling — أخذ العينات
أثناء التدريب نأخذ عينة عشوائية من التوزيع (Reparameterization Trick) حتى يمكن حساب المشتقات. أثناء التوليد: نأخذ z عشوائيًا من توزيع قياسي N(0,1) ونمرّره للـ Decoder — فيخرج وجه جديد، أو رقم جديد، أو شكل لم نره بالضبط من قبل.
بعد تدريب VAE على آلاف الوجوه: z = [0.2, -1.1, 0.8, …] → Decoder → وجه جديد «يشبه» التدريب لكنه ليس نسخة لأحد.
KL Loss — خسارة KL
VAE له خسارتان:
- Reconstruction Loss: هل أعدنا بناء المدخل جيدًا؟
- KL Divergence: هل التوزيع الذي تعلّمه Encoder قريب من توزيع «عادي» بسيط؟
KL Loss تمنع Encoder من «تخزين كل شيء في نقطة واحدة» — تجبر الفضاء الكامن أن يكون منظمًا وسلسًا، فيمكنك التجول فيه وتوليد أمثلة متنوعة.
Autoencoder
نقطة ثابتة في Latent — إعادة بناء فقط.
VAE
توزيع في Latent — إعادة بناء + توليد جديد.
GANs — الشبكات التوليدية التنافسية
GAN (Generative Adversarial Network) فكرتها مثل لعبة بين فريقين: واحد يزوّر لوحات فنية، والآخر يحاول كشف التزوير. مع الوقت، المزوّر يصبح بارعًا جدًا — والنتيجة: صور واقعية مذهلة.
Generator — المُولّد
يأخذ ضجيجًا عشوائيًا (noise) — متجه أرقام عشوائية — ويحوّله إلى صورة (أو صوت، أو أي بيانات). في البداية ينتج «هراء»؛ مع التدريب يتعلّم أشكالًا مقنعة.
Discriminator — المُميّز
شبكة تصنيف: «هل هذه صورة حقيقية أم مزيفة؟» يُعرَض عليها صور حقيقية من البيانات + صور من Generator. إذا كشف التزوير بسهولة، Generator يحتاج التحسّن. إذا خُدع، Discriminator يحتاج التحسّن.
المزوّر (Generator) يطبع نقودًا. الشرطة (Discriminator) تفحص. كلما أصبحت النقود أدق، الشرطة تتعلّم فحصًا أدق. في النهاية: تزوير شبه لا يُميّز — وهذا «توليد» واقعي.
DCGAN — GAN للصور العميقة
DCGAN يستخدم طبقات Convolution بدل Fully Connected — مناسب للصور. قواعد عملية ساعدت الاستقرار: BatchNorm، لا Pooling بل Stride، Generator يستخدم ConvTranspose.
CycleGAN — الترجمة بين مجالات بدون أزواج
تحويل صورة حصان → زebra بدون أزواج «هذا الحصان = هذا الحمار المخطّط». فكرة Cycle Consistency: حصان → زebra → حصان يجب أن يعود قريبًا من الأصل. تطبيقات: صيف/شتاء، رسم/photo، MRI modalities.
StyleGAN — التحكم بالأسلوب
StyleGAN (NVIDIA) يولّد وجوه بجودة عالية مع تحكم دقيق: شكل الوجه، لون الشعر، تعبير… عبر Style Mixing — تخلط أنماطًا من latent vectors مختلفة. أساس كثير من «Deepfakes» الأكاديمية وصور AI الشهيرة.
| النوع | ماذا يفعل؟ | مثال |
|---|---|---|
| DCGAN | صور من ضجيج | أرقام MNIST، وجوه |
| CycleGAN | تحويل نمط/مجال | صورة → لوحة فنية |
| StyleGAN | صور عالية الدقة + تحكم | thispersondoesnotexist.com |
Diffusion Models — نماذج الانتشار
Diffusion Models هي التقنية وراء Stable Diffusion وMidjourney وDALL·E 3 (جزئيًا). الفكرة: نُفسد الصورة تدريجيًا بالضوضاء، ثم نعلّم شبكة عكس العملية — من ضوضاء إلى صورة.
تخيّل تمثالًا من الشمع. كل يوم تُسخّنه قليلًا حتى يصبح بلا شكل (Forward). ثم تتعلّم، خطوة بخطوة، كيف «تبرّده وتشكّله» من جديد (Reverse). بعد آلاف التمارين، تستطيع تشكيل تماثيل جديدة من شمع عشوائي.
Forward Process — العملية الأمامية
نبدأ بصورة حقيقية x₀. في كل خطوة t نضيف قليلًا من الغاوسian noise:
بعد T خطوة (مثلاً 1000)، الصورة تصبح ضجيجًا كاملًا. هذه العملية ثابتة — لا نتعلّمها، نطبّقها فقط على بيانات التدريب.
Reverse Process — العملية العكسية
شبكة U-Net (غالبًا) تتعلّم: «إgiven صورة مشوّشة في الخطوة t، ما الضوضاء التي أُضيفت؟» — أي تتنبّأ بـ ε. نكرّر من t=T إلى t=0، نزيل الضوضاء تدريجيًا، فنحصل على صورة جديدة.
1) ابدأ بضجيج عشوائي 512×512
2) كرّر 50–1000 خطوة «denoise»
3) النتيجة: «قطة ترتدي نظارات على شاطئ عند الغروب» — حسب النص إن وُجد (Conditional Diffusion)
Stable Diffusion — الانتشار المستقر
بدل العمل على pixels كاملة (بطيء)، Stable Diffusion يعمل في Latent Space مضغوط (VAE encoder). أسرع وأخف. يدمج:
- Text Encoder (CLIP): يحوّل وصفك النصي إلى متجه.
- U-Net + Cross-Attention: يربط النص بالصورة أثناء Denoising.
- VAE Decoder: يحوّل latent إلى صورة نهائية.
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
image = pipe("قطة على شاطئ، غروب، أسلوب watercolor").images[0]
GAN
تنافس مباشر — سريع لكن غير مستقر أحيانًا.
Diffusion
خطوات denoise — أبطأ لكن جودة وتنوع أعلى غالبًا.
Stable Diffusion
Diffusion في latent + نص — يعمل على GPU متوسطة.
Multimodal AI — الذكاء متعدد الوسائط
Multimodal يعني أن النموذج يفهم أكثر من نوع بيانات معًا: صورة + نص، صوت + فيديو، مستند + جدول… العالم الحقيقي multimodal — والنماذج الحديثة تتجه هناك.
تُري الطفل «تفاحة» 🍎 وتقول الكلمة. يربط الشكل بالصوت والكلمة. Multimodal AI يربط pixels بـ tokens في فضاء مشترك.
Vision + Language — الرؤية واللغة
المهام الشائعة:
- Image Captioning: صورة → وصف نصي.
- VQA: سؤال عن الصورة → إجابة.
- Text-to-Image: وصف → صورة (Stable Diffusion).
- Image Search: ابحث بصورة أو بجملة.
CLIP — Contrastive Language-Image Pre-training
OpenAI CLIP يدرّب على ملايين أزواج (صورة، نص). يتعلّم أن «قطة» قريبة من صور القطط في فضاء embedding مشترك. الاستخدامات:
- تصنيف zero-shot (بدون تدريب على فئات محددة).
- محرك بحث: «كلب يلعب كرة» → يجد صور مشابهة.
- أساس Stable Diffusion (text encoder).
Labels: ["قطة", "كلب", "سيارة"] + صورة → CLIP يحسب تشابه كل label → الأعلى = «قطة». لم «يُدرَّب» على العربية بالضرورة، لكن Multilingual CLIP/OpenCLIP يدعم لغات أكثر.
BLIP — Bootstrapping Language-Image Pre-training
BLIP/BLIP-2 يجمع بين فهم الصورة وتوليد النص. يولّد captions، يجيب أسئلة، ويربط مع LLM (مثل Flan-T5 أو Llama) لقدرات أقوى. مناسب لـ VQA و chatbot يرى الصور.
Florence — نموذج Microsoft للرؤية
Florence (وFlorence-2) نموذج foundation للرؤية: captioning، detection، segmentation، OCR… بprompt نصي واحد. فكرة «الأمر باللغة الطبيعية للصورة» — مثل GPT لكن للـ vision tasks.
| النموذج | نقطة القوة | مثال استخدام |
|---|---|---|
| CLIP | ربط صورة↔نص، zero-shot | بحث صور، فلترة محتوى |
| BLIP-2 | caption + VQA + LLM | «ماذا يحدث في هذه الصورة؟» |
| Florence-2 | مهام vision متعددة بـ prompt | OCR، detection، caption |
RLHF — التعلّم المعزّز من تغذية بشرية
LLM بعد التدريب على الإنternet يعرف «إكمال النص» — لكن قد يكون وقحًا أو خطيرًا أو غير مفيد. RLHF يعلّمه ما يفضّله البشر: إجابات مفيدة، آمنة، واضحة — كما في ChatGPT.
الموظف قرأ كل الكتب (Pre-training). ثم تدرّبه زميل (Fine-tuning على تعليمات). ثم المدير يقيّم ردوده ويعطيه «نجومًا» (Reward) — فيتحسّن ليرضي العملاء (Human Feedback).
Reward Model — نموذج المكافأة
نجمع مقارنات بشرية: «الرد A أفضل من B» لنفس السؤال. ندرّب شبكة تُعطي درجة لكل رد — كلما كان أقرب لتفضيلات البشر، كلما ارتفعت الدرجة. هذا Reward Model يصبح «المدرّب الآلي».
PPO — Proximal Policy Optimization
PPO خوارزمية Reinforcement Learning تُحدّث LLM بحذر: تولّد ردودًا، Reward Model يقيّم، نعدّل أوزان النموذج لزيادة المكافأة — دون تغيير جذري يُفسد ما تعلّمه (KL penalty يبقيه قريبًا من النموذج الأصلي).
سؤال: «كيف أتعلّم Python؟»
رد A: خطة 4 أسابيع + موارد
رد B: «Python لغة» فقط
المقيّم: A أفضل → Reward Model يتعلّم إعطاء A درجة أعلى
Preference Optimization — تحسين التفضيلات
بدل RL معقد، طرق أحدث تُحسّن النموذج مباشرة من بيانات التفضيل (A أفضل من B) بدون loop توليد طويل.
DPO — Direct Preference Optimization
DPO (Stanford) يحوّل مشكلة RLHF إلى loss بسيط شبيه بالتصنيف: يزيد احتمال الرد المفضّل ويقلّل غير المفضّل — بدون Reward Model منفصل أحيانًا. أسرع وأبسط للتطبيق — يُستخدم في Llama 2/3 و Mistral tuning.
SFT
تعليمات + إجابات جيدة (Supervised).
Reward Model
يتعلّم «ما هو رد جيد؟»
PPO
RL لتحسين LLM
DPO
تفضيلات مباشرة — أبسط
Fine-Tuning LLMs — ضبط نماذج اللغة
نموذج عام (GPT، Llama، Mistral) يعرف الكثير — لكنك تريده خبيرًا في مجالك: طب، قانون، دعم عملاء، لهجتك… Fine-Tuning = مواصلة التدريب على بياناتك.
طبيب عام يعرف أساسيات كل التخصصات. بعد residency في القلب، يصبح أدق في cardiology. Fine-Tuning = «residency» على بياناتك.
Full Fine-Tuning — الضبط الكامل
نحدّث كل أوزان النموذج. أقوى تعبيرًا عن بياناتك، لكن:
- يحتاج GPU كبيرة (70B = عشرات GB VRAM).
- خطر «نسيان» القديم (Catastrophic Forgetting).
- تكلفة عالية.
PEFT — Parameter-Efficient Fine-Tuning
PEFT = نحدّث جزءًا صغيرًا فقط من المعاملات. النموذج الأصلي «مجمّد»، نضيف طبقات أو adapters صغيرة. أرخص وأسرع — مناسب لمعظم المشاريع.
LoRA — Low-Rank Adaptation
LoRA يضيف مصفوفتين صغيرتين (A و B) بجانب طبقة Attention: W' = W + A×B. Rank صغير (r=8 أو 16) — ملايين parameters بدل مليارات. ملف LoRA قد يكون 50–200 MB فقط!
QLoRA — LoRA + Quantization
QLoRA ي quantize النموذج الأساسي إلى 4-bit (NF4) — فيدخل Llama 7B في GPU 16GB. LoRA adapters تبقى fp16. هذا ما جعل fine-tune LLM على Colab ممكنًا للكثيرين.
from peft import LoraConfig, get_peft_model
config = LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj","v_proj"])
model = get_peft_model(base_model_4bit, config)
# درّب على JSON: {"instruction": "...", "output": "..."}
| الطريقة | VRAM تقريبي (7B) | متى؟ |
|---|---|---|
| Full Fine-Tune | 80GB+ | ميزانية كبيرة، تحكم كامل |
| LoRA | 24–48GB | معظم حالات المجال |
| QLoRA | 12–16GB | GPU واحدة، تجارب، startups |
500 سؤال/جواب لدعم عملاء متجرك → QLoRA على Mistral-7B → نموذج يرد بأسلوب شركتك ويعرف منتجاتك — دون تدريب 7B parameters كلها.
نشر النماذج — Model Deployment
بعد التدريب، النموذج على Jupyter لا يكفي — تحتاج تشغيله في الإنتاج: سريع، مستقر، على CPU أو GPU أو edge. كل أداة لها دور.
التدريب = تجربة وصفات في مطبخك. النشر = فتح فرع يخدم آلاف الزبائن بسرعة — تحتاج وصفة موحّدة (format)، طهاة مدربين (runtime)، وطابور طلبات (serving).
ONNX — تنسيق موحّد
Open Neural Network Exchange: تحويل نموذج PyTorch/TensorFlow إلى ملف .onnx يعمل على ONNX Runtime — cross-platform، أحيانًا أسرع، يدعم CPU/GPU/Edge.
TensorRT — تسريع NVIDIA
مُحسّن من NVIDIA للـ inference على GPU: fusion، precision (FP16/INT8)، latency منخفض — مثالي للإنتاج على خوادم NVIDIA.
TorchScript — PyTorch للإنتاج
تصدير نموذج PyTorch إلى TorchScript (trace أو script) — يعمل بدون Python كامل أحيانًا، أو عبر LibTorch في C++.
GGUF — لنماذج LLM على CPU
صيغة llama.cpp: نماذج quantize (Q4_K_M، Q8…) — تشغيل Llama/Mistral على laptop بدون GPU. ملف واحد، سهل المشاركة.
llama.cpp
محرك C++ لتشغيل LLM محليًا. الأمر: ./main -m model.gguf -p "مرحبا". أساس Ollama وKoboldCpp وغيرها.
vLLM — inference سريع للـ LLM
مكتبة serving مع PagedAttention — throughput عالي لAPIs: آلاف الطلبات المتوازية على GPU. للإنتاج السحابي (Chatbot API).
Ollama — تشغيل محلي بسيط
ollama run llama3 — يحمّل النموذج ويُشغّله. مثالي للمطورين والتجربة على Mac/Windows/Linux.
TensorFlow Serving
نظام Google لنشر نماذج TensorFlow: REST/gRPC، versioning، A/B testing — للشركات على بنية TF.
| الأداة | الاستخدام الرئيسي |
|---|---|
| ONNX | تصدير عام، vision/classification |
| TensorRT | GPU inference سريع |
| GGUF + llama.cpp | LLM على CPU محلي |
| vLLM | API production للـ LLM |
| Ollama | تجربة وتطوير محلي سهل |
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "اشرح Autoencoder بجملتين"
}'
المشاريع النهائية — من الفكرة إلى التطبيق
هنا نربط كل ما سبق بمشاريع واقعية يمكنك البدء بها كمبتدئ — مع مسار تعلّم واضح لكل مشروع.
بناء ChatGPT محلي
الفكرة: LLM + واجهة محادثة على جهازك.
- ثبّت Ollama أو lmstudio.
- حمّل Llama 3 أو Mistral (7B Q4).
- واجهة: Open WebUI، أو Streamlit بسيط.
- اختياري: LoRA adapter لمجالك.
import streamlit as st, ollama
prompt = st.chat_input("اكتب رسالتك")
if prompt:
r = ollama.chat(model="llama3", messages=[{"role":"user","content":prompt}])
st.write(r["message"]["content"])
Image Generator — مولّد صور
Stable Diffusion عبر Diffusers أو Automatic1111/ComfyUI. ابدأ بـ prompts بسيطة، جرّب negative prompt، ControlNet لاحقًا للتحكم بالpose.
«منظر طبيعي لجبال عند شروق الشمس، أسلوب watercolor، تفاصيل عالية»
negative: « blurry, low quality, text »
RAG System — استرجاع ثم توليد
RAG = Retrieval-Augmented Generation. بدل أن يعتمد LLM على ذاكرته فقط، يبحث في مستنداتك (PDF، wiki، قاعدة معرفة) ثم يجيب.
- قسّم المستندات → chunks.
- Embedding (OpenAI / sentence-transformers).
- Vector DB (Chroma، FAISS، Pinecone).
- عند السؤال: ابحث عن chunks ذات صلة → ألحقها للـ prompt → LLM يجيب.
chunks = split_documents("company_handbook.pdf")
vectors = embed(chunks)
store = VectorDB(vectors, chunks)
context = store.search(user_question, k=3)
answer = llm(f"Context: {context}\nQuestion: {user_question}")
AI Agent — وكيل ذكي
LLM + أدوات (Tools): بحث، calculator، API، كتابة ملفات. يخطّط خطوات وينفّذ — LangChain، LlamaIndex، أو OpenAI Assistants API.
«ما سعر BTC اليوم وكم 1000$ بالريال؟» → Agent يستدعي API crypto + API forex → يجمع الإجابة.
Vision Language Model — يرى ويتكلم
LLaVA، GPT-4V، Qwen-VL: ترفع صورة + تسأل. مشروع: «مساعد مطبخ» — صورة ثلاجة → وصفات مقترحة.
Medical AI — ذكاء طبي (بحذر)
تصنيف أشعة (CNN)، segmentation أورام (U-Net)، أو LLM لملخصات (مع تحذير: ليس بديلاً عن الطبيب). ابدأ بمجموعات عامة: ChestX-ray، ISIC skin lesions — مع أخلاقيات وخصوصية.
Recommendation System — نظام توصية
Collaborative filtering + embeddings، أو Two-Tower model (user/item). Netflix/Spotify spirit: «من شاهد X شاهد أيضًا Y». يمكن دمج LLM لوصف المحتوى.
Time Series Forecasting — تنبؤ السلاسل الزمنية
LSTM/Transformer للأسعار، الطلب، الطاقة. مشروع: توقع مبيعات شهرية من CSV — أو نماذج جاهزة: Prophet، Temporal Fusion Transformer.
ChatGPT محلي
Ollama + Open WebUI · أسبوع 1
مولّد صور
Stable Diffusion · أسبوع 2
RAG
PDF + Chroma + Llama · أسبوع 3–4
Agent
LangChain tools · أسبوع 5
Vision+LLM
LLaVA / API · أسبوع 6
تنبؤ
LSTM على CSV · أسبوع 7
- أسبوع 1: Autoencoder يدويًا على MNIST (PyTorch tutorial).
- أسبوع 2: جرّب Stable Diffusion محليًا — 20 صورة ب prompts مختلفة.
- أسبوع 3: Ollama + محادثة — افهم limits النموذج الصغير.
- أسبوع 4: RAG على 10 صفحات PDF (LangChain + Chroma).
- أسبوع 5: QLoRA fine-tune صغير على 100 مثال instruction.
- أسبوع 6: CLIP zero-shot على صورك — أو VLM جاهز.
- أسبوع 7: Agent بسيط بـ 2 tools (calculator + search).
- أسبوع 8: مشروع نهائي واحد + README + demo فيديو قصير.