كل ما ستتعامل معه في تعلّم الآلة والتعلّم العميق — صورة، جدول ميزات، تنبؤ نموذج — هو في جوهره مصفوفة أو متجه. هذه الصفحة تشرح الحد الأدنى الذي تحتاجه فعليًا، بدون الدخول في تعريفات رياضية أكاديمية.
ما هو المتجه (Vector)؟
متجّه = قائمة مرتّبة من الأرقام. كل رقم له موقع في القائمة (مَوْضع أول، ثان، ثالث...).
أمثلة عملية من مشاريع AI:
سعر منزل واحد = [120000] # متجه بُعد واحد (رقم واحد)
بيانات منزل: مساحة، غرف، عمر = [85, 3, 20] # متجه بثلاثة أبعاد
ميزات صورة 28×28 بالأسود والأبيض = 784 رقمًا (متجه بُعد 784)
لاحظ أن المتجه ليس "كمية لها اتجاه" بالضرورة (المعنى الفيزيائي) — في تعلّم الآلة، المتجه مجرد صف من الأرقام.
في بايثون بـ NumPy (الذي تعلّمته في NumPy للذكاء الاصطناعي):
import numpy as np
# متجه صف
v = np.array([1, 2, 3, 4])
print(v.shape) # (4,) — أربع قيم
print(v[0]) # 1.0 — العنصر الأول
ما هي المصفوفة (Matrix)؟
مصفوفة = جدول من الأرقام مرتّب في صفوف وأعمدة. كل صف متجه، وكل عمود متجه.
مصفوفة ميزات 5 منازل × 3 أعمدة (مساحة، غرف، عمر):
عمود 1 عمود 2 عمود 3
صف 1: 120 3 10
صف 2: 200 4 5
صف 3: 85 2 20
صف 4: 300 5 2
صف 5: 150 3 15
في NumPy:
houses = np.array([
[120, 3, 10],
[200, 4, 5],
[ 85, 2, 20],
[300, 5, 2],
[150, 3, 15],
])
print(houses.shape) # (5, 3) — 5 صفوف × 3 أعمدة
print(houses[0]) # الصف الأول = [120, 3, 10]
print(houses[:, 0]) # العمود الأول = [120, 200, 85, 300, 150]
الشكل (Shape) — أهم مفهوم
كل ndarray له shape يخبرك بأبعاده. تذكّر:
- شكل
(n,)= متجه (بعد واحد)، فيه n قيمة. - شكل
(m, n)= مصفوفة، فيها m صف و n عمود. - شكل
(m, n, k)= مصفوفة ثلاثية الأبعاد (مثل صورة RGB: m صف × n عمود × 3 قنوات لون).
# مثال على شكل ثلاثي الأبعاد: صورة RGB صغيرة
image = np.random.random((64, 64, 3))
print(image.shape) # (64, 64, 3)
# 64 → ارتفاع (صفوف)
# 64 → عرض (أعمدة)
# 3 → قنوات لون (أحمر، أخضر، أزرق)
عمليات أساسية على المتجهات والمصفوفات
جمع وطرح عنصر بعنصر
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a + b) # [11 22 33]
print(b - a) # [9 18 27]
ضرب بعدد (Scaling)
a = np.array([1, 2, 3])
print(a * 5) # [5 10 15]
ضرب عنصر بعنصر (ضرب Hadamard)
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a * b) # [10 40 90] — ضرب كل عنصر بما يقابله
هذا ليس ضرب المصفوفات الذي درسته في الجبر الخطي — بل ضرب عنصر بعنصر.
ضرب المصفوفات الحقيقي (Matrix Multiplication)
هذا هو الضرب الذي يحوّل البيانات إلى تنبؤات في الشبكات العصبية:
# ضرب مصفوفة بمتجه
X = np.array([[1, 2],
[3, 4],
[5, 6]]) # شكل (3, 2)
w = np.array([0.5, 0.25]) # شكل (2,)
y = X @ w # شكل (3,)
print(y) # [1.0, 2.5, 4.0]
@ في NumPy = ضرب مصفوفات حقيقي (متوافق مع الأشكال).
التبديل (Transpose)
تبديل صفوف المصفوفة بأعمدتها:
A = np.array([[1, 2, 3],
[4, 5, 6]]) # شكل (2, 3)
print(A.T.shape) # (3, 2)
كيف تظهر في مشاريع الذكاء الاصطناعي؟
- الجداول (DataFrames) هي في الحقيقة مصفوفات تحت الغطاء. Pandas يحول الجدول إلى NumPy عند تدريب النماذج.
- الصور هي مصفوفات ثلاثية الأبعاد:
(ارتفاع, عرض, قنوات_لون). - النصوص بعد تحويلها إلى embeddings هي مصفوفات:
(عدد_الجمل, بُعد_التمثيل). - أوزان الشبكة العصبية هي مصفوفات بين كل طبقة والتي بعدها.
- التنبؤ = مصفوفة المدخلات @ مصفوفة الأوزان + متجه الانحياز (bias).
# مثال مبسط: تنبؤ خطي بسيط (Linear Regression)
# المعادلة: y = X @ w + b
X = np.array([[1], [2], [3], [4]]) # 4 أمثلة، كل واحد بميزة واحدة
w = np.array([2.5]) # الوزن
b = np.array([1.0]) # الانحياز
y = X @ w + b
print(y) # [3.5, 6.0, 8.5, 11.0]
مصطلحات ستحتاجها كثيرًا
| المصطلح | المعنى |
|---|---|
| Vector | مصفوفة ذات بُعد واحد (صف أو عمود). |
| Matrix | مصفوفة ذات بُعدين (صفوف وأعمدة). |
| Tensor | تعميم لأكثر من بُعدين. |
| Shape | tuple يصف عدد القيم في كل بُعد. |
| Dot product | ضرب متجهين يعطي عددًا واحدًا. |
| Element-wise | عملية عنصر بعنصر. |
| Transpose | تبديل الصفوف بالأعمدة. |
أخطاء شائعة
- خلط الضرب العنصري مع ضرب المصفوفات:
a * bليسa @ b. النتائج مختلفة تمامًا. - أشكال غير متوافقة: ضرب المصفوفات يحتاج
(m, k) @ (k, n)=(m, n). NumPy يعطيك خطأ واضح إذا كانت الأشكال غير متوافقة. - التفكير بأن "المتجه = سهم في الفراغ": في الرياضيات العامة نعم، في تعلّم الآلة المتجه مجرد قائمة أرقام مرتّبة.
- عدم التفكير في الشكل: قبل أي عملية، اطبع
.shapeللمصفوفات. هذا يوفّر ساعات من الأخطاء.
الخطوات التالية
- الجبر الخطي للذكاء الاصطناعي — العمليات الكاملة على المصفوفات: ضرب، عكس، تحليل.
- الاحتمالات — كيف نتعامل مع عدم اليقين في النماذج.
- NumPy للذكاء الاصطناعي — كيف تستخدم هذه المفاهيم عمليًا.