18- كورس تعلم الذكاء الاصطناعي Machine Learning – Brain.js

استخدام Brain.js في الشبكات العصبية

تُعد Brain.js من المكتبات التي تجعل التعامل مع
الشبكات العصبية أسهل داخل JavaScript، لأنها تخفي
جزءًا كبيرًا من التعقيد الرياضي وراء واجهة أبسط وأكثر وضوحًا.
ولهذا تُعد مناسبة جدًا للمبتدئين الذين يريدون فهم الفكرة العملية
للشبكات العصبية دون التعمق أولًا في التفاصيل الرياضية الثقيلة.

ما هي Brain.js؟

Brain.js هي مكتبة JavaScript تساعد على بناء شبكات عصبية بسيطة،
وتدريبها على أمثلة محددة، ثم استخدامها لاحقًا للحصول على
توقعات أو احتمالات لمدخلات جديدة.

الفكرة الأساسية هنا أن الشبكة لا تُبرمج يدويًا بكل قاعدة ممكنة،
بل يتم إعطاؤها أمثلة تدريبية، ثم تتعلم منها نمط العلاقة
بين المدخلات والمخرجات.

بناء شبكة عصبية بسيطة

تبدأ الصفحة بمثال عملي على إنشاء شبكة عصبية وتدريبها على
4 حالات إدخال بسيطة. الفكرة هنا أن الشبكة تستقبل قيمًا ثنائية،
ثم تتعلم أن الناتج قد يكون zero أو one.

يبدأ المثال بإنشاء الشبكة العصبية:

مثال:
const network = new brain.NeuralNetwork();

بعد ذلك يتم تدريب الشبكة على 4 أمثلة:

مثال:
network.train([
  {input:[0,0], output:{zero:1}},
  {input:[0,1], output:{one:1}},
  {input:[1,0], output:{one:1}},
  {input:[1,1], output:{zero:1}}
]);

ثم يتم اختبار الشبكة على المدخل:

مثال:
result = network.run([1,0]);

وفي النهاية يتم عرض احتمال كل ناتج:

مثال:
result[\"one\"] + \" \" + result[\"zero\"]

كيف يعمل هذا المثال؟

في هذا المثال يتم تعليم الشبكة أن بعض المدخلات ترتبط بخروج
اسمه one، بينما مدخلات أخرى ترتبط بخروج
اسمه zero.

وعندما نمرر القيمة [1,0] إلى الشبكة بعد التدريب،
فإنها تحاول تخمين الناتج الأقرب اعتمادًا على ما تعلمته.
وتوضح الصفحة أن الناتج المتوقع في هذا المثال يكون:

  • one بنسبة تقارب 93%
  • zero بنسبة تقارب 6%

هذا يعني أن الشبكة لا تُرجع إجابة قطعية فقط، بل تُرجع
احتمالات توضح مدى ثقتها في كل ناتج ممكن.

لماذا هذا المثال مهم؟

رغم أن المثال بسيط جدًا، إلا أنه يوضح الفكرة الأساسية
للشبكات العصبية:

  • إنشاء شبكة
  • تدريبها على أمثلة
  • اختبارها على بيانات جديدة
  • قراءة النتائج على شكل احتمالات

وهذا هو نفس المبدأ الذي يُستخدم لاحقًا في مسائل أكبر
مثل التصنيف والتنبؤ وتحليل الأنماط.

التنبؤ بدرجة التباين في الألوان

بعد المثال الأول، تنتقل الصفحة إلى مثال عملي أكثر قربًا
من التطبيقات الواقعية، وهو استخدام الشبكة العصبية
للتنبؤ بما إذا كان اللون يبدو فاتحًا أو
داكنًا انطلاقًا من قيم RGB.

وتذكّر الصفحة أولًا بأن الألوان في CSS يمكن تمثيلها
باستخدام RGB، مثل:

مثال:
Black RGB(0,0,0)
Yellow RGB(255,255,0)
Red RGB(255,0,0)
White RGB(255,255,255)
Light Gray RGB(192,192,192)
Dark Gray RGB(65,65,65)

ثم تعرض مثالًا برمجيًا يدرّب الشبكة على 4 ألوان معروفة:
ألوان فاتحة وألوان داكنة.

مثال:
const net = new brain.NeuralNetwork();

net.train([
  {input:[255/255, 255/255, 255/255], output:{light:1}},
  {input:[192/255, 192/255, 192/255], output:{light:1}},
  {input:[65/255, 65/255, 65/255], output:{dark:1}},
  {input:[0, 0, 0], output:{dark:1}},
]);

نلاحظ هنا أن الصفحة تقوم بتقسيم قيم RGB على 255،
وذلك لأن الشبكات العصبية غالبًا تعمل بشكل أفضل
عندما تكون القيم مُطبَّعة بين 0 و1.

اختبار لون جديد

بعد التدريب، يتم اختبار الشبكة على لون جديد وهو
الأزرق الداكن:

مثال:
let result = net.run([0, 0, 128/255]);

ثم يتم عرض احتمالي أن يكون اللون:

مثال:
result[\"dark\"] + \" \" + result[\"light\"]

وتوضح الصفحة أن الشبكة ترجّح في هذا المثال أن اللون
داكن بنسبة تقارب 95%،
وأن احتمال كونه فاتحًا يكون منخفضًا جدًا.

  • Dark بنسبة تقارب 95%
  • Light بنسبة تقارب 4%

فكرة المثال الثاني

هذا المثال مفيد لأنه يوضح كيف يمكن للشبكة العصبية
أن تتعلم من أمثلة محدودة جدًا، ثم تحاول التنبؤ
بوصف جديد لمدخل لم تره من قبل.

فاللون الأزرق الداكن لم يكن من ضمن بيانات التدريب الأصلية،
لكن الشبكة استطاعت أن تقارنه بالأمثلة السابقة
وتقرر أنه أقرب إلى الألوان الداكنة.

ماذا نتعلم من أمثلة Brain.js؟

الأمثلة المعروضة في الصفحة توضح أن Brain.js مناسبة جدًا
لفهم المفاهيم الأساسية التالية:

  • إنشاء شبكة عصبية في JavaScript
  • تدريب الشبكة على أمثلة بسيطة
  • استخدام الشبكة على بيانات جديدة
  • قراءة النتيجة على شكل احتمالات

كما أنها توضّح أن بناء نموذج ذكي لا يعني دائمًا كتابة
قواعد معقدة يدويًا، بل يمكن الاكتفاء بإعطاء النموذج
بعض الأمثلة، ثم تركه يتعلم النمط بنفسه.

الخلاصة

يوضح هذا الدرس أن Brain.js مكتبة عملية ومبسطة
لبناء الشبكات العصبية داخل JavaScript. وتعرض الصفحة مثالًا أولًا
على شبكة عصبية بسيطة تتعلم التمييز بين zero
وone، ثم مثالًا ثانيًا على التنبؤ بما إذا كان
اللون فاتحًا أو داكنًا بالاعتماد
على RGB. ومن خلال هذين المثالين، يصبح من السهل فهم الفكرة الأساسية:
إنشاء الشبكة، تدريبها على أمثلة، ثم استخدامها للتنبؤ على مدخلات جديدة.