الشبكات العصبية، شرح للمبتدئين: ابدأ من هنا إذا كانت قد أربكتك
الشبكات العصبية تحاكي الدماغ البشري لمعالجة البيانات واتخاذ القرارات. يشرح هذا الدليل طبقاتها وخلاياها العصبية وتدريبها بمفاهيم بسيطة وأمثلة عملية، وهو مثالي للمبتدئين الباحثين عن الوضوح.
الوسوم
ملخص سريع
الشبكات العصبية تحاكي الدماغ البشري لمعالجة البيانات واتخاذ القرارات. يشرح هذا الدليل طبقاتها وخلاياها العصبية وتدريبها بمفاهيم بسيطة وأمثلة عملية، وهو مثالي للمبتدئين الباحثين عن الوضوح.
الشبكات العصبية، شرح للمبتدئين: ابدأ من هنا إذا كانت قد أربكتك
إذا شعرت يومًا بالإرهاق من المصطلحات المحيطة بالشبكات العصبية - الخلايا العصبية، الطبقات، الانتشار العكسي، دوال التنشيط - فأنت لست وحدك. الخبر السار هو أن الفكرة الأساسية بسيطة بشكل مدهش. الشبكة العصبية هي نظام حاسوبي مستوحى من طريقة معالجة الأدمغة البيولوجية للمعلومات، لكنها عمليًا نموذج رياضي يتعلم الأنماط من البيانات. ستزيل هذه المقالة الارتباك، وتمنحك نموذجًا ذهنيًا واضحًا، وتأخذك خطوة بخطوة خلال مثال عملي يمكنك تشغيله على جهازك الخاص.
بنهاية المقال، ستفهم ما تفعله الشبكة العصبية، وكيف تتعلم، وستكون قد بنيت ودربت شبكة بسيطة بنفسك.
ما هي الشبكة العصبية حقًا؟
في أبسط صورها، الشبكة العصبية هي دالة تربط المدخلات بالمخرجات. تخيل أن لديك جدول بيانات لأسعار المنازل: المساحة بالقدم المربع، عدد غرف النوم، والموقع. تريد توقع السعر. تتعلم الشبكة العصبية العلاقة بين هذه المدخلات والمخرج (السعر) عن طريق تعديل معاملات داخلية تسمى *الأوزان* و*الانحيازات*.
تتكون الشبكة العصبية من طبقات من *الخلايا العصبية*. تأخذ كل خلية عصبية مجموعة من المدخلات، وتضرب كلًا منها في وزن، وتضيف انحيازًا، وتطبق *دالة تنشيط* لإنتاج مخرج. يصبح هذا المخرج هو المدخل للطبقة التالية. تنتج الطبقة الأخيرة توقع الشبكة.
فكر في الأمر كسلسلة من العمليات الحسابية البسيطة. كل خلية عصبية هي صانع قرار صغير. عندما تدمج المئات أو الآلاف منها، يمكن للشبكة نمذجة أنماط معقدة جدًا.
المفاهيم الأساسية التي تحتاج إلى معرفتها
قبل أن نغوص في الكود، دعنا نوضح بعض المصطلحات التي تسبب الارتباك غالبًا.
الخلايا العصبية والطبقات
- **طبقة الإدخال**: البيانات الخام التي تغذيها (مثل المساحة بالقدم المربع، عدد غرف النوم).
- **الطبقات المخفية**: طبقات بين الإدخال والإخراج. تقوم بتحويل البيانات. المزيد من الطبقات المخفية يجعل الشبكة "عميقة".
- **طبقة الإخراج**: التوقع النهائي (مثل السعر المتوقع).
الأوزان والانحيازات
- **الأوزان** تحدد مقدار تأثير كل مدخل على مخرج الخلية العصبية. أثناء التدريب، يتم تعديل الأوزان لتقليل الخطأ.
- **الانحيازات** تسمح للخلية العصبية بإخراج قيمة غير صفرية حتى عندما تكون جميع المدخلات صفرًا. تمنح الشبكة مرونة.
دالة التنشيط
تقرر دالة التنشيط ما إذا كانت الخلية العصبية يجب أن "تنشط" أم لا. الدوال الشائعة:
- **ReLU (الوحدة الخطية المصححة)**: تخرج 0 للمدخلات السالبة، والمدخل نفسه للقيم الموجبة. بسيطة وسريعة.
- **Sigmoid**: تضغط القيم بين 0 و1، مفيدة للاحتمالات.
- **Softmax**: تستخدم في طبقة الإخراج للتصنيف متعدد الفئات.
دالة الخسارة
تقيس دالة الخسارة مدى خطأ توقعات الشبكة. على سبيل المثال، متوسط الخطأ التربيعي (MSE) شائع للانحدار. الهدف من التدريب هو تقليل هذه الخسارة.
الانتشار العكسي والنزول التدرجي
- **الانتشار العكسي** هو الخوارزمية التي تحسب مقدار مساهمة كل وزن في الخطأ.
- **النزول التدرجي** يستخدم هذه المعلومات لضبط الأوزان في الاتجاه الذي يقلل الخسارة. يشبه دحرجة كرة إلى أسفل التل للعثور على أدنى نقطة.
المتطلبات
للمتابعة، ستحتاج إلى:
- جهاز كمبيوتر يعمل بنظام Windows أو macOS أو Linux.
- Python 3.8 أو أحدث مثبتًا.
- معرفة أساسية بسطر الأوامر.
- اتصال بالإنترنت لتثبيت الحزم.
سنستخدم **PyTorch**، وهو إطار عمل شائع للتعلم العميق. إنه مناسب للمبتدئين ومستخدم على نطاق واسع في البحث والصناعة.
التثبيت خطوة بخطوة
1. تثبيت Python (إذا لم يكن مثبتًا بالفعل)
تحقق من إصدار Python. افتح terminal وقم بتشغيل:
python --versionإذا لم يكن Python مثبتًا أو كان الإصدار أقل من 3.8، قم بتنزيله من [python.org](https://www.python.org/downloads/). أثناء التثبيت، حدد "Add Python to PATH."
2. إنشاء بيئة افتراضية (موصى به)
هذا يحافظ على عزل التبعيات لهذا المشروع.
python -m venv nn-tutorialينشئ هذا مجلدًا باسم `nn-tutorial` يحتوي على بيئة Python نظيفة.
3. تفعيل البيئة الافتراضية
على Windows:
nn-tutorial\Scripts\activateعلى macOS/Linux:
source nn-tutorial/bin/activateيجب أن ترى `(nn-tutorial)` يظهر في موجه terminal.
4. تثبيت PyTorch
قم بزيارة [pytorch.org](https://pytorch.org) واختر تكوين نظامك. لمعظم المبتدئين بدون GPU، هذا الأمر يعمل:
pip install torch torchvisionهذا يثبت PyTorch (إصدار CPU) و torchvision لمجموعات بيانات الصور.
5. تثبيت المكتبات الإضافية
سنحتاج أيضًا إلى NumPy لمعالجة البيانات و Matplotlib للتصور.
pip install numpy matplotlibأمثلة الاستخدام
الآن دعنا نبني شبكة عصبية من الصفر باستخدام PyTorch. سنقوم بتدريبها على مجموعة بيانات كلاسيكية: الأرقام المكتوبة بخط اليد (MNIST). ستتعلم الشبكة التعرف على الأرقام من 0 إلى 9.
المثال 1: بناء شبكة عصبية بسيطة
أنشئ ملف Python جديدًا باسم `mnist_net.py` والصق الكود التالي.
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
# 1. تحميل وتطبيع مجموعة بيانات MNIST
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64,
shuffle=True)
testset = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=64,
shuffle=False)
# 2. تعريف بنية الشبكة العصبية
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28*28, 128) # طبقة الإدخال (784 بكسل) -> طبقة مخفية (128 خلية عصبية)
self.fc2 = nn.Linear(128, 64) # طبقة مخفية (128) -> طبقة مخفية (64)
self.fc3 = nn.Linear(64, 10) # طبقة مخفية (64) -> طبقة الإخراج (10 فئات)
def forward(self, x):
x = x.view(-1, 28*28) # تسطيح الصورة إلى متجه أحادي البعد
x = torch.relu(self.fc1(x)) # دالة التنشيط للطبقة المخفية الأولى
x = torch.relu(self.fc2(x)) # دالة التنشيط للطبقة المخفية الثانية
x = self.fc3(x) # طبقة الإخراج (بدون تنشيط، سنستخدم CrossEntropyLoss)
return x
# 3. إنشاء النموذج، تعريف دالة الخسارة والمحسن
model = SimpleNN()
criterion = nn.CrossEntropyLoss() # جيدة للتصنيف
optimizer = optim.SGD(model.parameters(), lr=0.01) # النزول التدرجي العشوائي
# 4. تدريب الشبكة
num_epochs = 5
for epoch in range(num_epochs):
running_loss = 0.0
for images, labels in trainloader:
optimizer.zero_grad() # مسح التدرجات السابقة
outputs = model(images) # تمرير أمامي
loss = criterion(outputs, labels) # حساب الخسارة
loss.backward() # الانتشار العكسي
optimizer.step() # تحديث الأوزان
running_loss += loss.item()
print(f"Epoch {epoch+1}, Loss: {running_loss/len(trainloader):.4f}")
print("Training complete!")
# 5. اختبار الشبكة
correct = 0
total = 0
with torch.no_grad(): # لا حاجة لحساب التدرجات أثناء التقييم
for images, labels in testloader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f"Accuracy on test set: {100 * correct / total:.2f}%")**شرح كل خطوة:**
- **تحميل البيانات**: نقوم بتنزيل مجموعة بيانات MNIST، وتطبيع قيم البكسل إلى النطاق [-1, 1]، وإنشاء دفعات من 64 صورة.
- **تعريف الشبكة**: `SimpleNN` يحتوي على ثلاث طبقات متصلة بالكامل. نقوم بتسطيح الصورة 28x28 إلى متجه 784 بُعدًا، ونمررها عبر طبقتين مخفيتين مع تنشيط ReLU، وأخيرًا إلى طبقة إخراج من 10 خلايا عصبية (واحدة لكل رقم).
- **حلقة التدريب**: لكل عصر (مرور كامل على البيانات)، نحسب الخسارة، ونقوم بالانتشار العكسي، ونحدث الأوزان.
- **الاختبار**: نقيم الدقة على بيانات اختبار غير مرئية. لا يتم حساب التدرجات لتوفير الذاكرة.
قم بتشغيل البرنامج النصي:
python mnist_net.pyيجب أن ترى مخرجات مثل:
Epoch 1, Loss: 0.6543
Epoch 2, Loss: 0.3210
Epoch 3, Loss: 0.2456
Epoch 4, Loss: 0.1987
Epoch 5, Loss: 0.1678
Training complete!
Accuracy on test set: 95.12%قد تختلف دقتك قليلاً، لكن يجب أن ترى حوالي 95% - ليس سيئًا لشبكة بسيطة تم تدريبها في ثوانٍ!
المثال 2: تصور التوقعات
دعنا نضيف تصورًا سريعًا لرؤية ما تتوقعه الشبكة. أضف هذا الكود في نهاية البرنامج النصي الخاص بك.
# تصور بعض صور الاختبار مع التوقعات
dataiter = iter(testloader)
images, labels = next(dataiter)
# الحصول على التوقعات
outputs = model(images)
_, predicted = torch.max(outputs, 1)
# رسم أول 10 صور
fig, axes = plt.subplots(2, 5, figsize=(10, 4))
for idx, ax in enumerate(axes.flat):
ax.imshow(images[idx].squeeze(), cmap='gray')
ax.set_title(f"True: {labels[idx].item()}, Pred: {predicted[idx].item()}")
ax.axis('off')
plt.tight_layout()
plt.show()قم بتشغيل البرنامج النصي مرة أخرى. ستظهر نافذة تعرض 10 أرقام مكتوبة بخط اليد مع تسمياتها الحقيقية وتوقعات الشبكة. سترى أن معظمها صحيح، لكن القليل قد يكون خاطئًا - هذا طبيعي.
ما التالي؟ (خطوات عملية تالية)
لقد قمت للتو ببناء وتدريب شبكة عصبية. إليك كيفية التعمق أكثر:
- **جرب بنية مختلفة**: حاول إضافة طبقات مخفية أكثر أو تغيير عدد الخلايا العصبية. شاهد كيف تتغير الدقة.
- **ضبط المعلمات الفائقة**: اضبط معدل التعلم (مثل 0.001 أو 0.1)، حجم الدفعة، أو عدد العصور.
- **جرب مجموعة بيانات مختلفة**: استخدم CIFAR-10 (صور ملونة لأشياء) عن طريق استبدال `torchvision.datasets.MNIST` بـ `torchvision.datasets.CIFAR10`. ستحتاج إلى تعديل حجم الإدخال (32x32x3) وربما إضافة طبقات التفاف.
- **تعلم عن الشبكات العصبية الالتفافية (CNNs)**: إنها أفضل بكثير لمهام الصور. `nn.Conv2d` في PyTorch هو صديقك.
- **استكشف التعلم بالنقل**: استخدم نموذجًا مدربًا مسبقًا (مثل ResNet) من `torchvision.models` وقم بضبطه بدقة لمهمتك الخاصة.
لمزيد من الدروس المتقدمة، تنشر مدونة Hugging Face ومدونة Google AI غالبًا أدلة مناسبة للمبتدئين مع أمثلة كود. منصة Towards Data Science لديها أيضًا العديد من الشروحات العملية.
الخلاصة
الشبكات العصبية ليست سحرًا - إنها سلسلة من العمليات الرياضية البسيطة التي، عند تكديسها وتدريبها، يمكنها تعلم أنماط معقدة. لقد رأيت المفاهيم الأساسية: الخلايا العصبية، الطبقات، الأوزان، دوال التنشيط، والانتشار العكسي. والأهم من ذلك، لقد قمت بتشغيل مثال عملي يتدرب على بيانات حقيقية ويقدم توقعات.
الارتباك حول الشبكات العصبية غالبًا ما يأتي من العدد الهائل من المصطلحات الجديدة، لكن كل منها يمثل قطعة صغيرة مفهومة. ابدأ بالكود الموجود هنا. قم بتعديله. اكسره. أصلحه. هذه هي أفضل طريقة للتعلم.
الآن لديك أساس. اذهب وابنِ شيئًا.
المصادر
أسئلة شائعة
عن ماذا يتحدث هذا المقال؟
يتناول هذا المقال موضوع "الشبكات العصبية، شرح للمبتدئين: ابدأ من هنا إذا كانت قد أربكتك" ضمن تصنيف شروحات. الشبكات العصبية تحاكي الدماغ البشري لمعالجة البيانات واتخاذ القرارات. يشرح هذا الدليل طبقاتها وخلاياها العصبية وتدريبها بمفاهيم بسيطة وأمثلة عملية، وهو مثالي للمبتدئين الباحثين عن الوضوح.
لمن يفيد هذا المقال؟
يفيد القراء المهتمين بفهم أدوات وتقنيات الذكاء الاصطناعي بطريقة عملية وواضحة.
ما الخطوة التالية؟
اقرأ المقال كاملاً، راجع المصادر المرفقة، ثم جرّب الأفكار المناسبة لاحتياجك بحذر.



