مقدمة في التعلم العميق — التعلم العميق
مقدمة في التعلم العميق
التعلم العميق فرع من تعلم الآلة يستخدم شبكات عصبية بطبقات كثيرة. الفرق الجوهري عن الدورة السابقة:
| | تعلم الآلة التقليدي | التعلم العميق |
|---|---|---|
| الميزات | يصممها الإنسان (متوسط السطوع، عدد الحواف...) | تتعلمها الشبكة من البيانات الخام (البكسلات، الحروف) |
| البيانات المناسبة | جدولية (صفوف وأعمدة) | صور، صوت، نصوص، فيديو |
| كمية البيانات | مئات إلى آلاف كافية غالباً | تحتاج كثيراً (أو نقل تعلم) |
| الحوسبة | معالج عادي | يستفيد كثيراً من المعالجات الرسومية (GPU) |
| التفسير | أسهل | أصعب ("صندوق أسود") |
الطبقات تبني مفاهيم متدرجة
في شبكة تتعرف على الوجوه، الطبقات الأولى تتعلم حواف وخطوطاً، والتالية أشكالاً (عين، أنف)، والأعمق مفاهيم (وجه). لا أحد برمج هذه المراحل؛ ظهرت من التدريب.
لماذا انتشر الآن والفكرة قديمة (من الخمسينيات)؟
1. البيانات: الإنترنت أنتج ملايين الصور والنصوص المصنفة.
2. الحوسبة: المعالجات الرسومية تجري ملايين العمليات المتوازية التي تحتاجها الشبكات.
3. أفكار تدريب أفضل: ReLU، التهيئة الذكية، Dropout، Batch Normalization، Adam، ثم Transformers (2017).
أين يُستخدم؟
الرؤية (تصنيف الصور، كشف الأجسام، الأشعة الطبية)، اللغة (الترجمة، المساعدات الذكية، تلخيص النصوص)، الصوت (التعرف على الكلام)، والتوليد (صور ونصوص).
متى **لا** تستخدمه؟
- بيانات جدولية متوسطة الحجم: الغابات العشوائية و Gradient Boosting غالباً أفضل وأسرع وأسهل تفسيراً.
- بيانات قليلة جداً بلا نموذج جاهز لنقل التعلم.
- عندما يجب تفسير كل قرار (قروض، قرارات قانونية).
الأدوات
- TensorFlow / Keras: ما تستخدمه أمثلة هذه الدورة (Keras 3 واجهة عالية المستوى).
- PyTorch: الأكثر انتشاراً في البحث العلمي، وواجهته مختلفة لكن المفاهيم واحدة.
- لتجربة أمثلة Keras بلا تثبيت: Google Colab (مجاني ومعه GPU).
المثال الكامل يعمل بـ scikit-learn فقط: يقارن نموذجاً على ميزات يدوية بشبكة عصبية صغيرة على البكسلات الخام.
تمرين
شغّل المثال، ثم أضف ميزتين يدويتين جديدتين للغابة العشوائية. هل تقترب من الشبكة؟ هذا بالضبط عناء "هندسة الميزات" الذي يوفره التعلم العميق.
import numpy as np
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
digits = load_digits() # 1797 صورة رقم مكتوب بخط اليد، كل صورة 8×8 بكسل
images, y = digits.images, digits.target
# ===== تعلم الآلة التقليدي: إنسان يصمم الميزات =====
def handcrafted_features(img):
return [
img.mean(), img.std(), # السطوع العام والتباين
img[:4].mean(), img[4:].mean(), # النصف العلوي مقابل السفلي
img[:, :4].mean(), img[:, 4:].mean(),
(img > 8).sum(), # عدد البكسلات الداكنة
]
X_features = np.array([handcrafted_features(im) for im in images])
X_raw = images.reshape(len(images), -1) # 64 بكسل خام
Xf_tr, Xf_te, Xr_tr, Xr_te, y_tr, y_te = train_test_split(
X_features, X_raw, y, test_size=0.25, random_state=0, stratify=y)
forest = RandomForestClassifier(random_state=0).fit(Xf_tr, y_tr)
print(f"غابة عشوائية على 7 ميزات يدوية: {forest.score(Xf_te, y_te):.2%}")
# ===== شبكة عصبية: تتعلم الميزات من البكسلات الخام =====
net = make_pipeline(StandardScaler(), MLPClassifier(hidden_layer_sizes=(64,), max_iter=600, random_state=0))
net.fit(Xr_tr, y_tr)
print(f"شبكة عصبية على 64 بكسل خام: {net.score(Xr_te, y_te):.2%}")
print("الطبقة المخفية تعلمت 64 'ميزة' بنفسها — شكل أوزانها:", net[-1].coefs_[0].shape)اختبر فهمك