تعلم بناء شبكة عصبية بسيطة خطوة بخطوة
هل تساءلت يومًا كيف تعمل الشبكات العصبية التي تقف خلف أنظمة الذكاء الاصطناعي الحديثة؟ من ChatGPT إلى السيارات ذاتية القيادة، كلها تعتمد على أساس رياضي عبقري يُعرف بـ "الشبكة العصبية الاصطناعية". في هذا المقال، سنأخذك في رحلة مبسطة وعملية لبناء شبكة عصبية بسيطة من الصفر باستخدام لغة Python وNumPy فقط.
🔍 ما هي الشبكة العصبية؟
الشبكة العصبية هي نموذج رياضي مستوحى من الدماغ البشري، يتكون من طبقات من "الخلايا العصبية" الاصطناعية. تستقبل هذه الخلايا مدخلات، تعالجها، وتنتج مخرجات. باستخدام تقنيات التعلم، يمكن لهذه الشبكات أن "تتعلم" أنماط البيانات وتتخذ قرارات ذكية.
🧱 مكونات الشبكة العصبية البسيطة
- المدخلات (Inputs): البيانات التي نعطيها للشبكة.
- الأوزان (Weights): تتحكم في أهمية كل مدخل.
- التحويل (Activation Function): تحدد ما إذا كانت الخلية العصبية "تنشط".
- المخرجات (Output): النتيجة النهائية.
🧪 الخطوة الأولى: إعداد البيئة
pip install numpy
✍️ الخطوة الثانية: كتابة الكود خطوة بخطوة
1. استيراد المكتبة
import numpy as np
2. إعداد المدخلات والمخرجات
# مدخلات XOR
inputs = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1]
])
# المخرجات الحقيقية
outputs = np.array([[0], [1], [1], [0]])
3. تهيئة الأوزان والبارامترات
input_layer_neurons = 2
hidden_layer_neurons = 2
output_neurons = 1
# الأوزان
weights_input_hidden = np.random.uniform(size=(input_layer_neurons, hidden_layer_neurons))
weights_hidden_output = np.random.uniform(size=(hidden_layer_neurons, output_neurons))
# الانحرافات
bias_hidden = np.random.uniform(size=(1, hidden_layer_neurons))
bias_output = np.random.uniform(size=(1, output_neurons))
4. دالة التنشيط (Sigmoid)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return x * (1 - x)
5. تدريب الشبكة
epochs = 10000
lr = 0.1
for _ in range(epochs):
# Forward Propagation
hidden_layer_input = np.dot(inputs, weights_input_hidden) + bias_hidden
hidden_layer_output = sigmoid(hidden_layer_input)
final_input = np.dot(hidden_layer_output, weights_hidden_output) + bias_output
predicted_output = sigmoid(final_input)
# Backpropagation
error = outputs - predicted_output
d_predicted_output = error * sigmoid_derivative(predicted_output)
error_hidden_layer = d_predicted_output.dot(weights_hidden_output.T)
d_hidden_layer = error_hidden_layer * sigmoid_derivative(hidden_layer_output)
# تحديث الأوزان والانحرافات
weights_hidden_output += hidden_layer_output.T.dot(d_predicted_output) * lr
bias_output += np.sum(d_predicted_output, axis=0, keepdims=True) * lr
weights_input_hidden += inputs.T.dot(d_hidden_layer) * lr
bias_hidden += np.sum(d_hidden_layer, axis=0, keepdims=True) * lr
6. طباعة النتائج
print("المخرجات بعد التدريب:")
print(predicted_output)
⚙️ ماذا تعلمت الشبكة؟
بعد عدد كافٍ من التكرارات (epochs)، ستبدأ الشبكة في التنبؤ بنتائج قريبة جدًا من الحقيقة. هكذا تتعلم الشبكات العصبية من خلال الخطأ والتعديل المستمر للأوزان.
📚 مصطلحات مفتاحية
- Backpropagation: عملية تحديث الأوزان استنادًا إلى الخطأ الناتج.
- Epoch: تمريرة واحدة عبر كامل البيانات.
- Learning Rate: معدل تعلم الشبكة.
🔮 إلى أين بعد ذلك؟
بمجرد فهمك لهذه الشبكة البسيطة، يمكنك الانتقال إلى مكتبات قوية مثل TensorFlow أو PyTorch، وبناء نماذج أكثر تعقيدًا مثل تصنيف الصور، الترجمة، أو التنبؤ بالأسواق المالية.
🧠 خلاصة
الذكاء الاصطناعي ليس سحرًا، بل هو رياضيات + خوارزميات + مثابرة. هذه الشبكة الصغيرة هي فقط بداية الرحلة نحو فهم أعماق تعلم الآلة. استمر في التعلم والتجريب، فالمستقبل ينتظرك!