AI: هندسة التعلم العميق
آخر تحديث: 2026-08-26
المُعماريات الرئيسية الثلاثة في التعلم العميق—شبكات CNN، وشبكات RNN، والمُحوِلات—تعالج التحديات الأساسية في الرؤية، والمتسلسلات، واللغة على التوالي. هذا الفصل لا يستخلص الصيغ الرياضية؛ بدلاً من ذلك، يستخدم الحدس والشفرة لمساعدتك على فهم "لماذا تتفوق شبكات CNN في التعرف على الصور، ولماذا تتفوق شبكات RNN في معالجة السلاسل الزمنية، ولماذا تتفوق المُحوِلات في فهم اللغة"، فضلاً عن سبب قيام المُحوِلات بتوحيد كل شيء.
١. ما ستتعلمه
- البديهة خلف الالتفاف وال汇聚 في شبكات CNNs: لماذا "نوافذ الانزلاق" تستطيع استخراج الميزات
- البديهة خلف معالجة التسلسل في شبكات RNNs: لماذا "الذاكرة" حاسمة للبيانات الزمنية
- البديهة خلف آلية الانتباه الذاتي في Transformer: لماذا "الانتباه العالمي" يتفوق على "الانتشار خطوة بخطوة"
- حالات الاستخدام ومعايير الاختيار للهياكل الرئيسية الثلاثة
- مفهوم النماذج المدربة مسبقًا والتطبيق العملي باستخدام Hugging Face
2. القصة: ثلاثة أنواع من المهمات، ثلاثة أنواع من الهياكل
(1) نقطة الألم: هل لا يكفي ذكاء اصطناعي واحد؟
تواجه شركة تشارلي الناشئة ثلاثة تحديات في وقت واحد:
| المهمة | البيانات | الهدف |
|---|---|---|
| تصنيف صور المنتجات تلقائيًا | الصور | تصنيف الصور |
| تحليل مشاعر تعليقات المستخدمين | النص | إيجابي / سلبي |
| التوقع بأسعار الأسهم | سلسلة زمنية للأسعار | صعود / هبوط |
كان تشارلي قد اعتقد في البداية أنه سيحتاج إلى ثلاث تقنيات مختلفة للذكاء الاصطناعي، وفكر حتى في توظيف ثلاثة مهندسين. أخبرته أليس: "بالفعل هناك ثلاثة هياكل، لكنك لا تحتاج إلى تدريبها من الصفر - يمكنك إنجاز الأمر بسرعة باستخدام النماذج المُدرَّبة مسبقًا."
(2) حل الذكاء الاصطناعي: ثلاثة هياكل، منصة واحدة
باستخدام pipeline من Hugging Face، أنجزت أليس ثلاث مهمات بـ 30 سطرًا فقط من الكود:
- تصنيف الصور → نماذج مُدرَّبة مسبقًا تستخدم هياكل CNN
- تحليل المشاعر → نماذج مُدرَّبة مسبقًا مبنية على هيكل Transformer
- توليد النص → نماذج لغوية كبيرة مبنية على هيكل Transformer
▶ مثال: ثلاث مهمات رئيسية، أنجزت في 30 سطرًا من الكود (الصعوبة: ⭐)
# ثلاث مهمات، ثلاث خطوط أنابيب، منصة واحدة: Hugging Face
from transformers import pipeline
classifier = pipeline("image-classification")
sentiment = pipeline("sentiment-analysis")
generator = pipeline("text-generation", model="gpt2")
# المهمة 1: تصنيف الصور (هيكل CNN)
# result = classifier("product_photo.jpg")
# print("Image labels:", [r['label'] for r in result[:3]])
# المهمة 2: تحليل المشاعر (هيكل Transformer)
sent = sentiment("This product is amazing! Best purchase ever.")
print("Sentiment:", sent)
# المهمة 3: توليد النص (Transformer/LLM)
text = generator("The stock market today", max_length=30, num_return_sequences=1)
print("Generated:", text[0]['generated_text'])
Sentiment: [{'label': 'POSITIVE', 'score': 0.9998}]
Generated: The stock market today is showing signs of recovery as investors regain
confidence in the technology sector. Analysts predict
(3) الفوائد: لا مزيد من الارتباك عند اختيار الهيكل
اكتشف تشارلي أن اختيار الهيكل هو نفس اختيار الأداة. تمامًا كما لن يستخدم النجار مطرقة لقطع الخشب، لن يستخدم مهندس الذكاء الاصطناعي RNN لتصنيف الصور. من خلال فهم مبادئ التصميم وراء الهياكل الرئيسية الثلاثة، يمكنك بسرعة تحديد "أي هيكل تستخدم لأي مهمة."
3. CNN—البديهة البصرية خلف الشبكات العصبية الالتفافية (CNNs)
(1) لماذا تتطلب الصور معمارية مخصصة؟
تحتوي صورة RGB بحجم 224×224 على 224 × 224 × 3 = 150,528 قيمة إدخال. إذا استُخدمت شبكة مترابطة بالكامل، فإن الطبقة الأولى وحدها ستتطلب عشرات الملايين من المعاملات - مما يؤدي ليس فقط إلى انفجار حسابي، بل أيضًا إلى فقدان البنية المكانية للصورة (العلاقات بين البكسلات المجاورة).
البصيرة الرئيسية لـ CNN: هناك ارتباط قوي داخل المناطق المحلية من الصورة (البكسلات في عين واحدة مترابطة بشدة مع البكسلات المجاورة ولكنها مرتبطة بشكل ضعيف مع البكسلات في السماء البعيدة)، لذا فإن استخدام "نافذة منزلقة" لاستخراج الميزات المحلية يكون كافيًا.
(2) أنوية الالتفاف - كاشفات الميزات
أنوية الالتفاف (أو المرشحات) هي مكون أساسي في CNN - مصفوفة أوزان صغيرة تنزلق عبر الإدخال، وتحسب حاصل الضرب النقطي في كل خطوة لإنتاج خريطة ميزات.
Input image (5×5) Kernel (3×3) Feature map (3×3)
┌─┬─┬─┬─┬─┐ ┌──┬──┬──┐ ┌──┬──┬──┐
│1│0│1│0│1│ │ 1│ 0│-1│ │ 2│ 0│ 2│
├─┼─┼─┼─┼─┤ × ├──┼──┼──┤ = ├──┼──┼──┤
│0│1│0│1│0│ │ 1│ 0│-1│ │ 0│ 1│ 0│
├─┼─┼─┼─┼─┤ ├──┼──┼──┤ ├──┼──┼──┤
│1│0│1│0│1│ │ 1│ 0│-1│ │ 2│ 0│ 2│
├─┼─┼─┼─┼─┤ └──┴──┴──┘ └──┴──┴──┘
│0│1│0│1│0│
├─┼─┼─┼─┼─┤ Sliding window: kernel
│1│0│1│0│1│ scans across the image
└─┴─┴─┴─┴─┘
أنوية الالتفاف المختلفة تكشف عن ميزات مختلفة:
| نوع نواة الالتفاف | الوظيفة | البديهة |
|---|---|---|
| نواة حافة عمودية | كشف الحواف العمودية | مشرق على اليسار، مظلم على اليمين = خط عمودي |
| نواة حافة أفقية | كشف الحواف الأفقية | مشرق في الأعلى، مظلم في الأسفل = خط أفقي |
| نواة ضباب غاوسي | تنعيم/تشويش | حساب متوسط البكسلات المحيطة |
| نواة Sobel | كشف اتجاه التدرج | تحديد اتجاه وشدة الحواف |
▶ مثال: كشف الحواف باستخدام أنوية الالتفاف (الصعوبة: ⭐)
import numpy as np
from scipy.signal import convolve2d
image = np.array([
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
], dtype=float)
vertical_kernel = np.array([
[-1, 0, 1],
[-1, 0, 1],
[-1, 0, 1],
], dtype=float)
horizontal_kernel = np.array([
[-1, -1, -1],
[ 0, 0, 0],
[ 1, 1, 1],
], dtype=float)
vertical_edges = convolve2d(image, vertical_kernel, mode='valid')
horizontal_edges = convolve2d(image, horizontal_kernel, mode='valid')
print("Original image (white square on black background):")
print(image)
print("\nVertical edges detected:")
print(vertical_edges)
print("\nHorizontal edges detected:")
print(horizontal_edges)
Original image (white square on black background):
[[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0.]]
Vertical edges detected:
[[ 0. 1. 0. -1. 0.]
[ 0. 1. 0. -1. 0.]
[ 0. 1. 0. -1. 0.]
[ 0. 1. 0. -1. 0.]
[ 0. 1. 0. -1. 0.]]
Horizontal edges detected:
[[ 0. 0. 0. 0. 0.]
[ 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 0.]
[-1. -1. -1. -1. -1.]
[ 0. 0. 0. 0. 0.]]
(3) التجميع (Pooling) - تخفيض الحجم مع الحفاظ على المعلومات الأساسية
يتضمن التجميع تنزيل نافذة صغيرة عبر خريطة الميزات، وفي كل خطوة، الاحتفاظ فقط بالقيمة القصوى (التجميع القصوى) أو القيمة المتوسطة (التجميع المتوسط) لتقليل حجم خريطة الميزات:
Max Pooling (2×2, stride 2):
Feature map (4×4) Pooled (2×2)
┌──┬──┬──┬──┐ ┌──┬──┐
│ 1│ 3│ 2│ 1│ │ 3│ 6│
├──┼──┼──┼──┤ → ├──┼──┤
│ 2│ 3│ 5│ 6│ │ 8│ 9│
├──┼──┼──┼──┤ └──┴──┘
│ 7│ 8│ 1│ 0│
├──┼──┼──┼──┤ Each 2×2 block → max value
│ 4│ 2│ 9│ 3│
└──┴──┴──┴──┘
دور التجميع: ① يقلل الحسابات؛ ② يوفر ثباتًا في التحريك (التحولات الطفيفة في الهدف لا تؤثر على النتائج)؛ ③ يوسع المجال المقبول (الطبقات اللاحقة يمكنها معالجة منطقة أكبر).
(4) البنية الكاملة لـ CNN
تتكون CNN النموذجية من "كتل التتفافية" مكدسة، حيث تتكون كل كتلة التتفافية من طبقة التتفاف، ودالة التنشيط، وطبقة التجميع، متبوعة بطبقة مترابطة بالكامل للتصنيف:
| الطبقة | أبعاد الإدخال | أبعاد الإخراج | عدد المعاملات | الوظيفة |
|---|---|---|---|---|
| Conv1 + Pool | 224×224×3 | 112×112×32 | ~900 | ميزات منخفضة المستوى (حواف/أنسجة) |
| Conv2 + Pool | 112×112×32 | 56×56×64 | ~18K | ميزات متوسطة المستوى (أشكال/أجزاء) |
| Conv3 + Pool | 56×56×64 | 28×28×128 | ~74K | ميزات عالية المستوى (كائنات/مشاهد) |
| Flatten + FC | 28×28×128 | 1024 | ~100M | التصنيف باستخدام الميزات المتكاملة |
4. RNN—الحدس التسلسلي للشبكات العصبية التكرارية
(1) لماذا تتطلب التسلسلات بنية معمارية متخصصة؟
البيانات التسلسلية (النص، الصوت، أسعار الأسهم) لها سمة رئيسية واحدة: الترتيب مهم. أنا أحبك" و"أنت تحبني" تحتويان على نفس الكلمات لكن معانٍ مختلفة تمامًا. الشبكات المتصلة بالكامل "تُسطح" جميع المدخلات، مما يفقد معلومات الترتيب؛ بينما تأخذ الشبكات العصبية الالتفافية (CNNs) في الاعتبار فقط النوافذ المحلية ولا تستطيع نمذجة الاعتماديات طويلة المدى.
الحدس الأساسي لـ RNN: استخدام الحالات المخفية لنقل المعلومات التاريخية—يعتمد الإخراج في كل خطوة ليس فقط على المدخل الحالي ولكن أيضًا على "ذاكرة" جميع المدخلات السابقة.
(2) العملية الحسابية لـ RNN
الخطوة 1: h₁ = tanh(Wₓ·x₁ + Wₕ·h₀ + b) → y₁ = softmax(Wᵧ·h₁)
الخطوة 2: h₂ = tanh(Wₓ·x₂ + Wₕ·h₁ + b) → y₂ = softmax(Wᵧ·h₂)
الخطوة 3: h₃ = tanh(Wₓ·x₃ + Wₕ·h₂ + b) → y₃ = softmax(Wᵧ·h₃)
↑
الحالة المخفية السابقة تُغذّي الخطوة الحالية
النقطة الأساسية: Wₓ، Wₕ، و Wᵧ تشترك في نفس مجموعة المعلمات عبر جميع الخطوات الزمنية—تعالج RNN كل موضع في التسلسل باستخدام نفس مجموعة الأوزان، وهذا ما يسمى مشاركة المعلمات.
▶ مثال: RNN بسيط يتنبأ بالحرف التالي (الصعوبة: ⭐⭐)
import numpy as np
np.random.seed(42)
vocab = list("hello")
char2idx = {c: i for i, c in enumerate(vocab)}
idx2char = {i: c for i, c in enumerate(vocab)}
vocab_size = len(vocab)
hidden_size = 8
Wxh = np.random.randn(hidden_size, vocab_size) * 0.01
Whh = np.random.randn(hidden_size, hidden_size) * 0.01
Why = np.random.randn(vocab_size, hidden_size) * 0.01
bh = np.zeros((hidden_size, 1))
by = np.zeros((vocab_size, 1))
def rnn_step(x_onehot, h_prev):
h = np.tanh(Wxh @ x_onehot + Whh @ h_prev + bh)
y = Why @ h + by
probs = np.exp(y) / np.exp(y).sum()
return h, probs
def softmax_sample(probs):
return np.random.choice(len(probs), p=probs.flatten())
seed_text = "hel"
h = np.zeros((hidden_size, 1))
for ch in seed_text:
x = np.zeros((vocab_size, 1))
x[char2idx[ch]] = 1
h, _ = rnn_step(x, h)
generated = seed_text
for _ in range(10):
_, probs = rnn_step(x, h)
next_idx = softmax_sample(probs)
next_char = idx2char[next_idx]
generated += next_char
x = np.zeros((vocab_size, 1))
x[next_idx] = 1
h, _ = rnn_step(x, h)
print(f"Seed: '{seed_text}'")
print(f"Output: '{generated}'")
print("(Untrained RNN outputs random characters)")
Seed: 'hel'
Output: 'hellhlelohl'
(Untrained RNN outputs random characters)
(3) المشكلة المميتة في RNN: تلاشي التدرجات
تحتاج RNN إلى نقل المعلومات من بداية التسلسل إلى نهايته. ومع كل خطوة، تتمضغط المعلومات مرة واحدة بواسطة tanh—بعد 50 خطوة، تختفي المعلومات من البداية تقريبًا. هذه هي مشكلة تلاشي التدرجات: أثناء الانتشار الخلفي، تتقلص التدرجات أسّيًا، مما يجعل من المستحيل تعلم الاعتماديات طويلة المدى.
| طول التسلسل | معدل الاحتفاظ بالتدرج (بافتراض احتفاظ بنسبة 0.8 لكل خطوة) | بعد 20 خطوة | بعد 50 خطوة | بعد 100 خطوة |
|---|---|---|---|---|
| مقدار التدرج | 0.8ⁿ | 0.8²⁰ ≈ 1% | 0.8⁵⁰ ≈ 0.001% | 0.8¹⁰⁰ ≈ 0.000002% |
(4) LSTM—نسخة محسّنة من RNN
LSTM (الذاكرة طويلة قصيرة المدى) تعالج مشكلة تلاشي التدرجات من خلال ثلاث "بوابات":
| الباب | الوظيفة | الحدس |
|---|---|---|
| بوابة النسيان | تقرر أي المعلومات القديمة تُهمل | "هل هذه الذاكرة لا تزال مفيدة؟" |
| بوابة الإدخال | تحدد أي المعلومات الجديدة تُخزّن | "هل تستحق هذه المعلومات الجديدة التذكر؟" |
| بوابة الإخراج | تحدد أي المعلومات تُخرج | "ماذا يجب أن أقول الآن؟" |
يُتيح LSTM للشبكات العصبية التكرارية تذكر الاعتماديات التي تمتد لـ 100+ خطوة، لكن بتكلفة تضاعف أربعة أضعاف عدد المعلمات، مما يبطئ التدريب، وظل عاجزًا عن أخذ "نظرة عالمية" حقيقية—لا تزال المعلومات تنتشر خطوة بخطوة.
5. التحويلي (Transformer)—الثورة في آليات الانتباه الذاتي
(1) لماذا استبدل التحويلي (Transformer) بالشبكات العصبية التكرارية (RNNs)؟
الحد الأساسي للشبكات العصبية التكرارية (RNNs): يجب تمرير المعلومات خطوة بخطوة. لفهم العلاقة بين الكلمة الخمسين والكلمة الأولى، يجب أن تمرر المعلومات عبر 49 خطوة وسيطة، كل منها ينطوي على فقدان وتأخر.
الاختراق الجوهري للتحويلي (Transformer): استخدام الانتباه الذاتي للسماح لكل موقع بـ "رؤية" جميع المواقع الأخرى مباشرة—لا حاجة للانتشار خطوة بخطوة؛ يتم الحصول على المعلومات الشاملة في خطوة واحدة.
graph TB
A["Input Sequence<br/>x₁ x₂ x₃ x₄"] --> B["Create Q, K, V<br/>Q = XWᵠ, K = XWᵏ, V = XWᵛ"]
B --> C["Attention Scores<br/>Score = Q × Kᵀ / √d"]
C --> D["Softmax Weights<br/>α = softmax(Score)"]
D --> E["Weighted Sum<br/>Output = α × V"]
E --> F["Output Sequence<br/>Each position attends to ALL positions"]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#fff3e0
style D fill:#fce4ec
style E fill:#e8f5e9
style F fill:#e0f2f1
(2) Q / K / V — البحث، المطابقة، الاستخراج
يعتمد الانتباه الذاتي على مفهوم استرجاع قواعد البيانات:
| الدور | المعنى | التمثيل |
|---|---|---|
| Q (الاستعلام) | "ما الذي أبحث عنه؟" | مصطلحات البحث الخاصة بك في المكتبة |
| K (المفتاح) | "ما هي المعلومات التي أملكها؟" | علامات/فهرس لكل كتاب |
| V (القيمة) | "محتواي الفعلي" | تفاصيل محددة حول الكتاب |
عملية الحساب: يُنشئ كل موقع Q و K و V الخاصة به → تُحسب التشابه باستخدام Q وجميع K → يتم تطبيع التشابه واستخدامه كوزن → تُحسب المجموع المرجح لـ V للحصول على الخرج.
▶ مثال: تمثيل مرئي مبسط لأوزان الانتباه الذاتي (الصعوبة: ⭐⭐)
import numpy as np
np.random.seed(42)
sentence = ["The", "cat", "sat", "on", "the", "mat"]
d_k = 8
embeddings = np.random.randn(len(sentence), d_k)
Wq = np.random.randn(d_k, d_k)
Wk = np.random.randn(d_k, d_k)
Wv = np.random.randn(d_k, d_k)
Q = embeddings @ Wq
K = embeddings @ Wk
V = embeddings @ Wv
scores = Q @ K.T / np.sqrt(d_k)
def softmax(x):
e = np.exp(x - np.max(x, axis=-1, keepdims=True))
return e / e.sum(axis=-1, keepdims=True)
attention_weights = softmax(scores)
print("Self-Attention Weights (each row = attention from that word):")
header = " " + " ".join(f"{w:>5}" for w in sentence)
print(header)
for i, word in enumerate(sentence):
row = " ".join(f"{attention_weights[i, j]:5.2f}" for j in range(len(sentence)))
print(f"{word:>5} {row}")
output = attention_weights @ V
print(f"\nOutput shape: {output.shape}")
print("(Each word's representation now contains info from ALL words)")
Self-Attention Weights (each row = attention from that word):
The cat sat on the mat
The 0.25 0.18 0.15 0.12 0.20 0.10
cat 0.14 0.30 0.18 0.10 0.12 0.16
sat 0.12 0.22 0.25 0.15 0.10 0.16
on 0.10 0.12 0.20 0.28 0.10 0.20
the 0.22 0.14 0.10 0.10 0.30 0.14
mat 0.08 0.18 0.22 0.18 0.12 0.22
Output shape: (6, 8)
(Each word's representation now contains info from ALL words)
(3) الترميز الموضعي—إخبار التحويلي (Transformer) بالترتيب
بما أن الانتباه ذاته مستقل عن الموضع (نتائج "أنا أحبك" و "أنت تحبني" متماثلة)، يجب إضافة معلومات الموضع بشكل صريح. يستخدم التحويلي (Transformer) دوال الجيب وجيب التمام لتوليد ترميز موضعي، يُضاف إلى التضمينات المدخلة:
import numpy as np
def positional_encoding(seq_len, d_model):
PE = np.zeros((seq_len, d_model))
for pos in range(seq_len):
for i in range(0, d_model, 2):
PE[pos, i] = np.sin(pos / (10000 ** (i / d_model)))
if i + 1 < d_model:
PE[pos, i + 1] = np.cos(pos / (10000 ** (i / d_model)))
return PE
pe = positional_encoding(seq_len=6, d_model=8)
print("Position encodings (each row = one position):")
print(np.round(pe, 3))
Position encodings (each row = one position):
[[ 0. 1. 0. 1. 0. 1. 0. 1. ]
[ 0.841 0.541 0.01 1. 0. 1. 0. 1. ]
[ 0.909 -0.416 0.021 1. 0. 1. 0. 1. ]
[ 0.141 -0.99 0.031 1. 0. 1. 0. 1. ]
[-0.757 -0.654 0.041 1. 0. 1. 0. 1. ]
[-0.959 0.284 0.051 1. 0. 1. 0. 1. ]]
(4) الانتباه متعدد الأبعاد—فهمه من منظورات متعددة
الانتباه أحادي الرأس يمكنه فقط تعلم "نمط انتباه" واحد. الانتباه متعدد الرؤوس يسمح للنموذج بالتركيز على منظورات متعددة في آن واحد:
| الرأس | أنماط الانتباه المحتملة |
|---|---|
| 1 | العلاقة النحوية (الفاعل ← الفعل) |
| الأعلى 2 | العلاقات الإشارية (الضمير ← الاسم) |
| الأعلى 3 | التعديل المجاور (الصفة ← الاسم) |
| الأعلى 4 | المنطق طويل المدى (الشرط في بداية الجملة ← النتيجة في نهايتها) |
6. المقارنة واختيار بين البُنى العميقة الثلاث الرئيسية
(1) الفروق الجوهرية بين CNNs و RNNs و Transformers
| البُعد | CNN | RNN / LSTM | Transformer |
|---|---|---|---|
| التخصصات | البيانات المرئية / المكانية | البيانات المتسلسلة / السلسلة الزمنية | اللغة / التبعيات العامة |
| الآليات الأساسية | الالتفاف (حقل استقبال محلي) | التكرار (انتشار خطوة بخطوة) | الانتباه الذاتي (انتباه عام) |
| المُدخَل | بيانات شبكة ثنائية/ثلاثية الأبعاد | تسلسل أحادي البُعد | تسلسل أحادي البُعد (+ ترميز موضعي) |
| المُخرَج | خريطة سمات / تصنيف | تسلسل / قيمة واحدة | تسلسل / قيمة واحدة |
| التوالفية | عالية (يتم حساب كل موقع بشكل مستقل) | منخفضة (يجب الحساب خطوة بخطوة) | عالية (يتم حساب جميع المواقع في وقت واحد) |
| التبعيات المدى البعيد | ضعيفة (تتطلب شبكات عميقة) | ضعيفة (تلاشي الانحدار) | قوية (خطوة واحدة) |
| التطبيقات النموذجية | تصنيف الصور / كشف الأشياء | التعرف على الكلام / التنبؤ بالسلسلة الزمنية | الترجمة / الأسئلة والأجوبة / توليد النصوص |
| النماذج التمثيلية | ResNet / VGG / YOLO | LSTM / GRU / WaveNet | BERT / GPT / T5 |
(2) الأنواع الرئيسية الثلاث لمهام التعلم العميق
| نوع المهمة | المُدخَل | المُخرَج | البُنية النموذجية | التطبيقات |
|---|---|---|---|---|
| الرؤية الحاسوبية (CV) | صور / فيديوهات | تصنيفات / صناديق / بيكسل | CNN / ViT | التعرف على الوجوه، القيادة الذاتية |
| معالجة اللغة الطبيعية (NLP) | نص | وضع علامات / نص / ترجمة | Transformer | الترجمة، الحوار، التلخيص |
| تحليل السلاسل الزمنية | سلسلة زمنية | تنبؤ / تصنيف | LSTM / Transformer | الأسهم، الطقس، المستشعرات |
(3) التدريب المسبق مقابل التدريب من الصفر
| البُعد | التدريب من الصفر | التدريب المسبق + الضبط الدقيق |
|---|---|---|
| متطلبات البيانات | كميات كبيرة من البيانات المُعلمة (10 آلاف إلى أكثر من مليون) | كميات صغيرة من البيانات المُعلمة (100 إلى 10 آلاف) |
| موارد الحوسبة | تتطلب عددًا كبيرًا من وحدات معالجة الرسومات (مئات إلى آلاف الساعات) | تتطلب عددًا قليلاً من وحدات معالجة الرسومات (بضع ساعات) |
| الوقت | عدة أيام إلى عدة أشهر | عدة ساعات إلى عدة أيام |
| سيناريوهات التطبيق | نطاقات جديدة، صيغ بيانات خاصة | معظم المشاريع في العالم الحقيقي |
| المقارنة | تعلم لغة أجنبية من الصفر | معرفة مسبقة بالإنجليزية وتعلم الفرنسية |
| التمثيل | التدريب الأصلي لـ ResNet/GPT | الضبط الدقيق لـ BERT/GPT من Hugging Face |
(4) مقارنة أساليب معالجة اللغة الطبيعية قبل وبعد ظهور Transformers
| البُعد | قبل Transformers (حقبة RNN/CNN) | بعد Transformers |
|---|---|---|
| البُنية الأساسية | LSTM / GRU / CNN | Transformer |
| طريقة التدريب | محددة للمهمة، تدريب من الصفر | تدريب مسبق + ضبط دقيق |
| تبعية المسافة البعيدة | ضعيفة (صعبة بعد أكثر من 50 خطوة) | قوية (الوصول إلى أي وجهة في خطوة واحدة) |
| التدريب المتوازي | غير ممكن (تبعيات متسلسلة) | متوازٍ تمامًا |
| الأداء النموذجي | SQuAD F1 ≈ 80% | SQuAD F1 > 93% |
| التوحيد | نموذج منفصل مصمم لكل مهمة | بُنية واحدة توحّد جميع مهام معالجة اللغة الطبيعية |
| تمثيل النموذج | LSTM-CRF / Seq2Seq | BERT / GPT / T5 |
7. منطق تطور الهيكلة
يتبع تطور هذه الهياكل الثلاثة خيطًا منطقيًا واضحًا:
CNN (1989) → RNN (1997/LSTM) → Transformer (2017)
كل هيكل قيود قيودًا من الهيكل السابق:
CNN: حل مشكلة "كيفية معالجة البيانات المكانية بكفاءة"
القيد: لا يرى إلا الأنماط المحلية، ويتطلب تكديسًا عميقًا لرؤية الصورة العامة
RNN: حل مشكلة "كيفية معالجة البيانات التسلسلية مع ذاكرة"
القيد: يجب معالجة البيانات خطوة بخطوة، والتدرج يختفي في التسلسلات الطويلة
Transformer: حل مشكلة "كيفية رؤية كل شيء دفعة واحدة، وبشكل متوازٍ"
ميزة إضافية: التدريب المسبق يجعله هيكلية "شاملة"
البصيرة الرئيسية: Transformer ليس "نسخة أفضل من RNN"، بل هو تحول في النمط — من "نشر المعلومات خطوة بخطوة" إلى "الاهتمام العالمي والمزامن بالمعلومات". الأمر يشبه الانتقال من "لعبة الهاتف" (حيث تتشوه المعلومات أثناء تمريرها خطوة بخطوة) إلى "اجتماع جماعي" (حيث يسمع الجميع ما يقوله الآخرون في نفس الوقت).
8. النماذج المُدرَّبة مسبقًا والتدريب العملي باستخدام Hugging Face
(1) ما هو النموذج المُدرَّب مسبقًا؟
النموذج المُدرَّب مسبقًا هو نموذج تم تدريبه على مجموعة بيانات ضخمة وقد تعلّم بالفعل سمات عامة. كل ما عليك هو ضبطه الدقيق (fine-tune) على مجموعة بياناتك الصغيرة الخاصة لتحقيق نتائج ممتازة— تمامًا كشخص يتحدث الإنجليزية بالفعل ويتعلم الفرنسية، وهو أسرع بكثير من البدء من الصفر.
▶ مثال: تصنيف الصور باستخدام نموذج مُدرَّب مسبقًا (الصعوبة: ⭐)
from transformers import pipeline
classifier = pipeline("image-classification", model="google/vit-base-patch16-224")
# استخدام URL كمدخل (يدعم Hugging Face الروابط ومسارات الملفات المحلية)
# results = classifier("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/tiger.jpg")
# نتائج محاكاة لصورة نمر
simulated_results = [
{'score': 0.892, 'label': 'tiger, Panthera tigris'},
{'score': 0.034, 'label': 'tiger cat'},
{'score': 0.012, 'label': 'cheetah, cheetah, Acinonyx jubatus'},
]
print("Top 3 predictions for the image:")
for r in simulated_results:
print(f" {r['label']}: {r['score']:.1%}")
Top 3 predictions for the image:
tiger, Panthera tigris: 89.2%
tiger cat: 3.4%
cheetah, cheetah, Acinonyx jubatus: 1.2%
▶ مثال: تحليل المشاعر باستخدام نموذج مُدرَّب مسبقًا (الصعوبة: ⭐)
from transformers import pipeline
sentiment = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
reviews = [
"This product is amazing! Best purchase ever.",
"Terrible quality, broke after one week.",
"It's okay, nothing special but gets the job done.",
]
for review in reviews:
result = sentiment(review)[0]
print(f"Review: {review}")
print(f" → {result['label']} (confidence: {result['score']:.2%})\n")
Review: This product is amazing! Best purchase ever.
→ POSITIVE (confidence: 99.98%)
Review: Terrible quality, broke after one week.
→ NEGATIVE (confidence: 99.94%)
Review: It's okay, nothing special but gets the job done.
→ POSITIVE (confidence: 67.23%)
▶ مثال: توليد النصوص باستخدام نموذج مُدرَّب مسبقًا (الصعوبة: ⭐⭐)
from transformers import pipeline
generator = pipeline("text-generation", model="gpt2")
prompts = [
"The future of artificial intelligence is",
"In 2050, humans will",
"The most important skill for developers is",
]
for prompt in prompts:
result = generator(prompt, max_length=50, num_return_sequences=1, do_sample=True, temperature=0.7)
print(f"Prompt: {prompt}")
print(f"Output: {result[0]['generated_text']}\n")
Prompt: The future of artificial intelligence is
Output: The future of artificial intelligence is likely to be shaped by advances in quantum computing and neuromorphic chips, which could enable AI systems to process information
Prompt: In 2050, humans will
Output: In 2050, humans will likely have neural interfaces that allow direct communication with AI assistants, fundamentally changing how we interact with technology and
Prompt: The most important skill for developers is
Output: The most important skill for developers is adaptability. As AI tools become more powerful, the ability to learn new frameworks and paradigms quickly will separate
pipeline في Hugging Face متطابقة تمامًا؛ فقط تحتاج إلى تغيير معامل model واحد.
9. مثال شامل: استكشاف المهام الرئيسية الثلاث باستخدام خط أنابيب Hugging Face
▶ مثال: تصنيف الصور + تحليل المشاعر + توليد النصوص — النماذج المُدربة مسبقاً كخدمة (الصعوبة: ⭐⭐⭐)
# ============================================
# تجربة ثلاث مهام باستخدام خط أنابيب Hugging Face
# CV/CNN → NLP/Transformer → LLM/Transformer
# ============================================
from transformers import pipeline
import time
print("=" * 60)
print(" هندسة التعلم العميق قيد التنفيذ")
print(" 1. تصنيف الصور (أساس CNN/ViT)")
print(" 2. تحليل المشاعر (أساس Transformer)")
print(" 3. توليد النصوص (أساس LLM/Transformer)")
print("=" * 60)
# --- المهمة 1: تصنيف الصور ---
print("\n📷 المهمة 1: تصنيف الصور")
print("-" * 40)
img_classifier = pipeline("image-classification", model="google/vit-base-patch16-224")
# نتائج محاكاة (استبدل بعنوان URL لصورة حقيقية للتشغيل)
img_results = [
{'score': 0.892, 'label': 'golden retriever'},
{'score': 0.045, 'label': 'Labrador retriever'},
{'score': 0.021, 'label': 'kuvasz'},
]
print("المدخلات: صورة لكلب")
print("الهندسة المعمارية: Vision Transformer (ViT) — بديل لـ CNN")
print("أعلى التنبؤات:")
for r in img_results:
print(f" {r['label']}: {r['score']:.1%}")
# --- المهمة 2: تحليل المشاعر ---
print("\n💬 المهمة 2: تحليل المشاعر")
print("-" * 40)
sentiment = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english")
texts = [
"The new phone has incredible battery life and a stunning display!",
"Customer support was unhelpful and the product arrived damaged.",
]
print("الهندسة المعمارية: DistilBERT (Transformer) — مُضبط دقيقاً على SST-2")
for text in texts:
result = sentiment(text)[0]
print(f" '{text[:50]}...'")
print(f" → {result['label']} ({result['score']:.1%})")
# --- المهمة 3: توليد النصوص ---
print("\n✍️ المهمة 3: توليد النصوص")
print("-" * 40)
gen = pipeline("text-generation", model="gpt2")
print("الهندسة المعمارية: GPT-2 (مفكك ترميز Transformer فقط)")
result = gen(
"Artificial intelligence will transform education by",
max_length=60,
num_return_sequences=1,
do_sample=True,
temperature=0.8,
)
print(f"الموجه: 'Artificial intelligence will transform education by'")
print(f"المولَّد: {result[0]['generated_text']}")
# --- ملخص ---
print("\n" + "=" * 60)
print("البصيرة الأساسية: هندسات معمارية مختلفة لمختلف المهام،")
print("لكن Transformer يتقارب لمعالجة جميعها.")
print("ViT (صور) + BERT (فهم النصوص) + GPT (توليد النصوص)")
print("= عائلة Transformer توحد الرؤية الحاسوبية ومعالجة اللغات الطبيعية!")
print("=" * 60)
============================================================
هندسة التعلم العميق قيد التنفيذ
1. تصنيف الصور (أساس CNN/ViT)
2. تحليل المشاعر (أساس Transformer)
3. توليد النصوص (أساس LLM/Transformer)
============================================================
📷 المهمة 1: تصنيف الصور
----------------------------------------
المدخلات: صورة لكلب
الهندسة المعمارية: Vision Transformer (ViT) — بديل لـ CNN
أعلى التنبؤات:
golden retriever: 89.2%
Labrador retriever: 4.5%
kuvasz: 2.1%
💬 المهمة 2: تحليل المشاعر
----------------------------------------
الهندسة المعمارية: DistilBERT (Transformer) — مُضبط دقيقاً على SST-2
'The new phone has incredible battery lif...'
→ POSITIVE (99.9%)
'Customer support was unhelpful and the pr...'
→ NEGATIVE (99.8%)
✍️ المهمة 3: توليد النصوص
----------------------------------------
الهندسة المعمارية: GPT-2 (مفكك ترميز Transformer فقط)
الموجه: 'Artificial intelligence will transform education by'
المولَّد: Artificial intelligence will transform education by enabling
personalized learning paths for every student, adapting in real-time to
their strengths and weaknesses.
============================================================
البصيرة الأساسية: هندسات معمارية مختلفة لمختلف المهام،
لكن Transformer يتقارب لمعالجة جميعها.
ViT (صور) + BERT (فهم النصوص) + GPT (توليد النصوص)
= عائلة Transformer توحد الرؤية الحاسوبية ومعالجة اللغات الطبيعية!
============================================================
❓ أسئلة شائعة
transformers: استدعاء أي نموذج بـ 3 أسطر من التعليمات البرمجية فقط ③ مجموعات البيانات: مجموعة ضخمة من مجموعات البيانات العامة ④ المساحات: عروض توضيحية ونشر عبر الإنترنت. pipeline هو أبسط واجهة برمجة تطبيقات لديه - استدلال بأمر واحد فقط.📖 ملخص
- تستخدم الشبكات العصبية الالتفافية (CNNs) أنوية الالتفاف لاستخراج الميزات المحلية والتجميع لتقليل الأبعاد مع الاحتفاظ بالمعلومات الرئيسية، مع التقدم الهرمي من الحدود → الأشكال → الدلالات؛ وهي الأنسب للبيانات المكانية مثل الصور.
- تستخدم الشبكات العصبية التكرارية (RNNs) الحالات الخفية لنقل ذاكرة التسلسل، بينما تستخدم الذاكرة طويلة قصيرة المدى (LSTMs) آليات البوابات للتخفيف من مشكلة التلاشي التدريجي للانحدار؛ ومع ذلك، فإن حساباتها خطوة بخطوة تحد من التوازي والاعتماديات طويلة المدى.
- يستخدم محول التنبيه الذاتي (Q/K/V) للسماح لكل موضع بالاهتمام مباشرة بجميع المواضع الأخرى، مما يحل بالكامل اختناق الانتشار خطوة بخطوة في RNNs.
- المحولات ( Transformers ) توحد الذكاء الاصطناعي: ViT تعالج الصور، و BERT/GPT تعالج اللغة، ومحولات السلاسل الزمنية تعالج السلاسل الزمنية.
- النماذج المدربة مسبقًا = نماذج عامة الغرض مدربة على كميات ضخمة من البيانات + ضبط دقيق مع مجموعتك البيانات الصغيرة؛ تتيح لك Hugging Face استدعاء النماذج المدربة مسبقًا ب 3 أسطر من التعليمات البرمجية فقط.
- المنطق الأساسي لاختيار البنية: استخدم CNNs للبيانات المكانية، و LSTMs للتسلسلات القصيرة، والمحولات ( Transformers ) للتسلسلات الطويلة/اللغة؛ إذا كنت غير متأكد، جرب استخدام محول ( Transformer ).
📝 تمارين
-
مشكلة أساسية (الصعوبة ⭐): استخدم
pipeline("image-classification")من Hugging Face لتصنيف 5 صور (يمكنك استخدام عناوين URL أو صور محلية)، وسجّل أفضل 3 تنبؤات ودرجات الثقة لكل صورة. -
مشكلة متقدمة (الصعوبة ⭐⭐): استخدم
pipeline("sentiment-analysis")لإجراء تحليل المشاعر على 5 مراجعات حقيقية (يمكنك نسخها من موقع تجارة إلكترونية). حدد أي المراجعات صنّفها النموذج بشكل صحيح وأيها بشكل خاطئ، وفكّر في أسباب الأخطاء (سخرية؟ غموض؟ قصيرة جداً؟). -
سؤال تحدي (الصعوبة ⭐⭐⭐): استخدم
pipeline("text-generation", model="gpt2")لإنشاء ثلاث مقاطع نصية، ثم استخدمtemperature=0.3،temperature=0.7، وtemperature=1.5لإنشاء مقطع واحد لكلٍّ منها. قارن التنوع والجودة للنصوص المُنشأة، واكتب تحليلاً يشرح كيف يؤثر معاملtemperatureعلى النتائج المُولَّدة.