Kodax

التعلم العميق (Deep Learning) — مقدمة في الذكاء الاصطناعي

التعلم العميق (Deep Learning)

التعلم العميق هو فرع من ML يستخدم الشبكات العصبية متعددة الطبقات.

ما هي الشبكة العصبية؟

الشبكة العصبية مستوحاة من دماغ الإنسان:

- الخلايا العصبية (Neurons) تستقبل وترسل إشارات

- الوصلات (Weights) تُحدد قوة الإشارة

- الطبقات (Layers) تُعالج المعلومات تدريجياً

Input Layer → Hidden Layers → Output Layer
   (X)          (معالجة)         (y)

المكونات الأساسية

1. الخلية العصبية (Neuron)

# المعادلة البسيطة
output = activation(sum(inputs * weights) + bias)

2. دوال التنشيط (Activation Functions)

# ReLU (الأكثر استخداماً)
def relu(x):
    return max(0, x)

# Sigmoid (للتصنيف الثنائي)
def sigmoid(x):
    return 1 / (1 + exp(-x))

# Softmax (للتصنيف المتعدد)
# يُحول لاحتمالات

3. دالة الخسارة (Loss Function)

# للتصنيف
# Cross-Entropy Loss

# للانحدار
# Mean Squared Error (MSE)

بناء شبكة عصبية مع Keras

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# بناء النموذج
model = keras.Sequential([
    # طبقة الإدخال
    layers.Dense(128, activation='relu', input_shape=(784,)),
    
    # طبقات مخفية
    layers.Dropout(0.2),  # لمنع Overfitting
    layers.Dense(64, activation='relu'),
    layers.Dropout(0.2),
    
    # طبقة الإخراج
    layers.Dense(10, activation='softmax')
])

# تجميع النموذج
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# ملخص النموذج
model.summary()

تدريب النموذج

# تدريب
history = model.fit(
    X_train, y_train,
    epochs=10,
    batch_size=32,
    validation_split=0.2,
    callbacks=[
        keras.callbacks.EarlyStopping(patience=3)
    ]
)

# التقييم
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"دقة الاختبار: {test_acc:.2%}")

# التنبؤ
predictions = model.predict(X_new)

أنواع الشبكات العصبية

1. CNN - للصور

model = keras.Sequential([
    # Convolutional Layers
    layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    layers.MaxPooling2D((2,2)),
    layers.Conv2D(64, (3,3), activation='relu'),
    layers.MaxPooling2D((2,2)),
    
    # Flatten and Dense
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

2. RNN/LSTM - للتسلسلات

model = keras.Sequential([
    layers.Embedding(vocab_size, 64),
    layers.LSTM(128, return_sequences=True),
    layers.LSTM(64),
    layers.Dense(1, activation='sigmoid')
])

3. Transformer - للNLP الحديث

# استخدام Hugging Face
from transformers import AutoModel, AutoTokenizer

model = AutoModel.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

مشروع: تصنيف صور MNIST

import tensorflow as tf
from tensorflow import keras

# تحميل البيانات
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

# تطبيع البيانات
X_train = X_train / 255.0
X_test = X_test / 255.0

# إضافة بُعد للقناة
X_train = X_train[..., tf.newaxis]
X_test = X_test[..., tf.newaxis]

# بناء النموذج
model = keras.Sequential([
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    keras.layers.MaxPooling2D((2,2)),
    keras.layers.Conv2D(64, (3,3), activation='relu'),
    keras.layers.MaxPooling2D((2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# التدريب
model.fit(X_train, y_train, epochs=5, validation_split=0.1)

# التقييم
model.evaluate(X_test, y_test)

نصائح للتعلم العميق

1. ابدأ بسيطاً - لا تُعقد النموذج من البداية

2. راقب Overfitting - استخدم Dropout و Early Stopping

3. استخدم GPU - التدريب أسرع بكثير

4. جرب Transfer Learning - نماذج مُدربة مسبقاً

5. وثّق تجاربك - TensorBoard, Weights & Biases

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# تحميل بيانات MNIST
(X_train, y_train), (X_test, y_test) = keras.datasets.mnist.load_data()

# التطبيع
X_train = X_train.reshape(-1, 28*28) / 255.0
X_test = X_test.reshape(-1, 28*28) / 255.0

# بناء شبكة عصبية بسيطة
model = keras.Sequential([
    layers.Dense(128, activation='relu', input_shape=(784,)),
    layers.Dropout(0.2),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# التدريب
print("جارٍ التدريب...")
history = model.fit(
    X_train, y_train,
    epochs=5,
    batch_size=32,
    validation_split=0.1,
    verbose=1
)

# التقييم
loss, accuracy = model.evaluate(X_test, y_test)
print(f"\nدقة الاختبار: {accuracy:.2%}")
اختبر فهمك