62249f711580092b8143e3b2_Jay Article images-01.png

شهد العقد الماضي تسارعًا هائلاً في إمكانات البرمجيات على حل مشاكل معقدة أكثر من أي وقت مضى، منتجات مثل Siri و Google Translate ومجالات مثل معالجة اللغة والتعرف الآلي على محتويات الصور لم تكن ممكنة لولا التقدم السريع في تقنيات تعلم الآلة والذكاء الاصطناعي، هذه التقنيات حققت تحولًا نوعيًا في جودة الحلول البرمجية وغيّرت طريقة بناء البرمجيات.

على سبيل المثال تخيل برنامجًا لتحويل مقطع صوتي إلى نص، في السابق كنت ستحتاج إلى فريق ضخم من المختصين باللغويات، وبرنامجًا معقدًا مكونٌ من نصف مليون سطر برمجي؛ لكن بعد التطورات الحديثة في مجال تعلم الآلة، أصبح الأمر ممكنًا ببرنامج قد لا يتجاوز مئة سطر برمجي، يقوم ببناء شبكة عصبونية تتعلم من كمية كبيرة من البيانات، لتحقق نتائج أقل خطئًا وأكثر دقة وصحة من البرامج الضخمة السابقة.

هذه المقالة هي مقدمة مبسطة إلى الشبكات العصبونية (Neural Networks) والتي تشكل حجر الأساس لأغلب حلول تعلم الآلة والذكاء الاصطناعي.

لنبدأ بمثال بسيط: أراد صديقك أن يشتري منزلًا، وقال إنه سعّر منزلًا مساحته 200 قدم مربع (ما يعادل 185 متر) بـ 400,000 دولار. فهل هذا سعر جيد أم لا؟

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

62249fddf08cc91a71ec5a2f_Jay Article images-02.png

شخصيًا، أول حل يرد إليّ هو معرفة متوسط سعّر القدم المربع، وهو هنا 180 دولار للقدم المربع الواحد.

مرحبًا بك في شبكتك العصبونية الأولى! هي حتمًا ليست في مستوى Siri لكنك الآن تعرف الركيزة الأساسية. وهذا شكلها المبدئي:

62249ff39b85a73d68534024_Jay Article images-03.png

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

ناتج ضرب 2000 قدم مربع في 180 هو 360,000 دولار، هذا كل ما في الأمر في هذه المرحلة. حساب التنبؤ هو عملية ضرب بسيطة، ولكن قبل ذلك، علينا التفكير في الوزن الذي سنضرب به. في هذا المثال بدأنا بمتوسط المعدل، ولكن لاحقًا سننظر في خوارزميات أفضل من الممكن أن تزداد كلما حصلنا على المزيد من المدخلات ونماذج أكثر تعقيدًا. إن العثور على الوزن الآن يعد مرحلة تدريب. لذلك إن سمعت في وقت لاحق عن شخص "يدرّب" شبكة عصبونية، فهذا يعني محاولة إيجاد الأوزان التي نستخدمها لحساب التنبؤ.

6224a012acea2458e1edc719_Jay Article images-04.png

هذا شكل من أشكال التنبؤ البسيطة التي تأخذ مدخلات، وتقوم بالحساب وتعطينا الناتج (وبما أن الناتج يمكن أن يكون ذا قيم مستمرة، فإن الاسم التقني لما لدينا سيكون "نموذج إنحدار")

دعونا نتصور هذه العملية (باختصار، سنقوم بتبديل وحدة السعر لدينا من 1 دولار إلى 1000 دولار. الآن وزننا هو 0.180 بدلًا من 180):

6224a0978f067fbb8dd98be9_Picture1.gif

أصعب، أفضل، أسرع، أقوى

هل يمكننا القيام بعمل أفضل من تقدير السعر بناءً على متوسط نقاط البيانات لدينا؟ دعنا نحاول، لنحدد أولًا ما قد يكون خيارًا أفضل في هذا السيناريو، إن قمنا بتطبيق النموذج على نقاط البيانات الثلاث التي لدينا، فما مدى جودته؟

Missing GIF

هنالك بعض الأصفر، وهذا لا يعني أمرًا جيّدًا لأنه يعني وجود أخطاء، لذلك علينا تقليص الأصفر بقدر ما نستطيع.

6224a0e754c4b88a452124aa_Slide1.png

هنا يمكننا أن نرى القيمة الفعلية للسعر، وكذلك قيمة السعر المتوقع، والفرق بينهما، سنحتاج الآن لحساب متوسط هذه الفروقات حتى يكون لدينا رقم يخبرنا عن مقدار الخطأ في نموذج التنبؤ هذا. الإشكالية هنا هي أن الصف الثالث تتواجد فيه "-63" كقيمة سالبة، علينا التعامل مع هذه القيمة السالبة إن أردنا استخدام الفرق بين القيمة المتوقعة للسعر وقيمة السعر الفعلي كمقياس للخطأ. لذا سنضيف خانة إضافية فيها تربيع الخطأ، وبالتالي نتخلص من القيمة السالبة. هذا هو تعريفنا الآن للقيام بالعمل بشكل أفضل – والنموذج الأفضل هو النموذج الذي يحتوي أخطاء أقل. يتم حساب الخطأ بقياس متوسط أخطاء كل النقاط في مجموعة البيانات. لكل نقطة، يقاس الخطأ بالفرق بين القيمة الفعلية والقيمة المتوقعة ورفعها إلى الأس 2. وهذا ما يسمى بالجذر التربيعي لمتوسط مربع الخطأ. يمكننا استخدامه كدليل لتدريب نموذجنا بجعله دالة الخسارة (أيضًا، دالة التكلفة).

الآن بعد أن حددنا عصا القياس الخاصة بنا لجعل النموذج أفضل، لنجرب بضعة قيم للوزن ومقارنتها بمتوسط اختيارنا:

Missing GIF

يمكن لهذه الخطوط تقريب القيم بشكل أفضل الآن بعد أن أصبح لدينا هذه القيمة b المضافة إلى صيغة الخط.

وفي هذا السياق، سيتم تسميتها "تحيز". وهذا يجعل شبكتنا العصبونية تبدو هكذا:

6224a221878e700f6c79013f_Jay Article images-05.png

يمكننا تعميمها بالقول إن الشبكة العصبونية ذات المدخل الواحد والمخرج الواحد (تنويه: دون طبقات مخفية) تبدو هكذا:

6224a234d2f14883a2f1bbfa_Jay Article images-06.png

في هذا الرسم البياني، W و b قيم تم إيجادها اثناء عملية التدريب، X هي المدخلات التي سيتم إدراجها بالمعادلة (يتم حساب المساحة بالقدم المربع في هذا المثال). Y هو السعر المتوقع.

سيتم الآن حساب التنبؤ باستخدام هذه الصيغة

6224a258dfbc616f4014a07e_Jay Article images-07.png

لذا فإن نموذجنا الحالي يحسب التنبؤات عن طريق التعويض عن مساحة المنزل بـ x في هذه الصيغة:

6224a270471180c5e89025ab_Jay Article images-08.png

ما رأيك أن تجرّب يدك في تدريب شبكتنا العصبونية؟ بتخفيف حدة الخسارة عن طريق تحديد الوزن والتحيز. هل يمكنك الحصول على قيمة خطأ أقل من 799؟ جرّب هنا

تهانينا، لقد قمت للتو بتدريب شبكتك العصبونية الأولى يدويًا! فلنلقي نظرة على كيفية أتمتة هذه العملية. فيما يلي مثال آخر مع وظيفة إضافية تشبه الطيار الآلي. هذه هي أزرار Step GD، تستخدم خوارزمية تسمى "الانحدار المتدرج" لمحاولة مقاربة الوزن الصحيح والقيم المتحيزة التي تقلل دالة التكلفة إلى أدنى حد.

بإمكانك استخدام هذان الرسمان البيانيّان الجديدان لمساعدتك في تتبع قيم الخطأ أثناء تغييرك لمعايير (الوزن والتحيز) النموذج. ومن المهم تتبع الخطأ لأن عملية التدريب تتمحور حول تقليله قدر الإمكان.

كيف يمكن لتدرج النسب معرفة خطوته التالية؟ عن طريق حساب التفاضل والتكامل. فكما ترى، عند معرفة الدالة التي نقوم بتقليلها (دالة الخسارة، ومتوسط y_ - y) ²) لجميع نقاط البيانات التي لدينا)، وبمعرفة المُدخلات الحالية (الوزن الحالي والتحيز)، فإن مشتقات دالة الخسارة ستخبرنا بأي اتجاه يمكن أن ندفع W و b حتى نتمكن من تقليل الخطأ إلى أدنى حد.

تعلّم المزيد عن الانحدار المتدرج وكيفية استخدامه لحساب التحيز والأوزان الجديدة في المحاضرات الأولى لدورة التعلم الآلي على Coursera.

وبعد ذلك، أصبحا اثنان

هل حجم المنزل هو المتغير الوحيد الذي يدخل ضمن تكلفته؟ من الواضح أن هنالك العديد من العوامل الأخرى. لنُضف متغيرًا آخر ونرى كيف يمكننا ضبط شبكتنا العصبونية بناءً عليه.

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

6224a39fd91be126c5df650d_Slide4.png

ستبدو شبكتنا العصبونية ذات المتغيرين بهذا الشكل:

6224a3bd28953e014259689e_Jay Article images-09.png

علينا الآن أن نجد وزنين (واحد لكل مدخل) وقيمة انحياز واحدة لإنشاء نموذجنا الجديد.

حساب الدالة Y يبدو كما يلي:

6224a3fc80b98323a8cd3cc2_Jay Article images-10.png

ولكن كيف نجد w1 و w2 ؟ أصبح الأمر أكثر تعقيدًا مقارنة بالسابق عندما كان علينا أن نقلق بشأن قيمة وزن واحدة فقط. ما هو مدى تأثير إضافة متغير "دورة مياه" على توقعنا لقيمة المنزل؟

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

هنا، سنعتمد على الانحدار المتدرج لمساعدتنا مرة أخرى، إذ لايزال قيّمًا لمساعدتنا في العثور على الأوزان الصحيحة والتحيز.

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

من المهم هنا الانتباه لضرورة عدم إدخال كل ما نعرفه عن أمثلتنا في الشبكة، بل علينا أن نكون انتقائيين حيال الميزات التي نضعها في النموذج. إن اختيار الميزات/المعالجة هو تخصص كامل له مجموعة من الممارسات السليمة والاعتبارات الخاصة به. إذا كنت تريد أن ترى مثالًا لعملية فحص مجموعة بيانات لاختيار الميزات التي تغذي نموذج التوقع، فعليك بقراءة A Journey Through Titanic رحلة عبر تيتانيك، وهو عبارة عن دفتر ملاحظات يروي فيه عمر الجابري طريقته لحل تحدي تيتانيك الذي وضعه Kaggle. حيث يعرض Kaggle مجموعة من البيانات عن معلومات الركاب على متن تيتانك كأسمائهم وجنسهم وأعمارهم ومقصوراتهم لتدريب مجموعة من المصنفات؛ ويكمن التحدي في بناء نموذجٍ يتنبأ بما إذا كان الشخص قد نجا أم لا بالنظر إلى معلوماته الأخرى.

التصنيف

لنواصل تعديل مثالنا، افرض أن صديقك أعطاك قائمة منازل، وأخبرك هذه المرة أنه قام بتصنيفهم حسب رأيه بملاءمة المساحة وعدد دورات المياه:

6224a4fe551fb8487c8167f9_Slide6.png

6224a559c20eb9306c484809_Slide7.png

سيطلب منك استخدام هذه القائمة لإنشاء نموذج يتنبأ بما إذا كان سيرغب في أحد المنازل أم لا نظرًا لحجمه وعدد دورات المياه فيه، حينها ستستخدم القائمة أعلاه لبناء نموذج، يمكنه فيما بعد أن يستخدمه لتصنيف العديد من المنازل الأخرى. ولكن هنالك تغييرٌ إضافي واحد في هذه العملية، وهو أنه احتفظ بقائمة أخرى من 10 منازل قام أيضًا بتصنيفها، لكنه أخفاها عنك، سيستخدمها لاحقًا لتقييم النموذج الذي أنشأته بعد تدريبه وتحسينه - في محاولة لضمان أن نموذجك يفهم الشروط التي ستجعله معجبًا بمواصفات المنزل.

جميع الشبكات العصبونية التي ناقشناها حتى الآن تمثل "الانحدار" - لأنها تحسب وتُخرج قيمة "مستمرة" (الإخراج يمكن أن يكون 4 أو 100.6 أو 2143.342343). ولكن في الممارسة العملية، تُستخدم الشبكات العصبونية في كثير من الأحيان في مسائل النوع "التصنيف". في هذه المسائل، يجب أن تكون مُخرجات أو نواتج الشبكة العصبونية قيمة من مجموعة من القيم المنفصلة (أو الطبقات) مثل "جيد" أو "سيئ". ونرى تطبيق ذلك في الممارسة العملية باستحداث نموذجٍ على يقين بنسبة 75٪ أن المنزل الذي وقع عليه الاختيار فعلًا "جيد" بدلًا من مجرد تصنيفه "جيد" أو "سيئ".

6224a583556df4b8ab705438_image mug.jpeg تطبيق TensorFlow الذي ناقشته في المقال السابق يعد مثالًا جيدًا لنماذج التصنيف في الممارسة العملية.

إحدى الطرق التي يمكننا بها تحويل الشبكة التي رأيناها إلى شبكة تصنيف هي إخراج قيمتين - واحدة لكل فئة (فئاتنا الآن هي "جيد" و"سيئ") ثم تمرير هذه القيم عبر عملية تسمى "softmax" ومُخرج softmax هو احتمالية كل فئة. على سبيل المثال، لنفرض أن طبقة من مخرجات الشبكة هي 2 لـ "جيد" و4 لـ "سيئ"، إذا قمنا بإدخال [2، 4] إلى softmax فإنها ستعيد [0.11، 0.88] كمُخرج. وتترجم هذه القيم لتعني أن الشبكة على يقين بنسبة 88٪ من أن القيمة المدخلة هي "سيئ" وصديقتنا لن تحب هذا المنزل.

تأخذ Softmax مصفوفة وتخرج مصفوفة بنفس الطول، لاحظ أن كل مُخرجاتها موجبة ومجموعها يصل إلى 1 ما يُعد أمرًا مفيدًا عندما نقوم بإخراج قيمة احتمالية. لاحظ أيضًا أنه على الرغم من أن 4 هي ضعف 2، فإن احتمالها ليس ضعفًا فحسب، بل هو ثمانية أضعاف احتمال 2 وهذه خاصية مفيدة تضخم الاختلاف في المخرجات وبالتالي تحسن عملية التدريب

6224a5bc2860b124db92cb10_Slide8.png

كما ترى في الصفين الأخيرين فإن softmax يمتد لأي عدد من المدخلات. لذا، إذا أضاف صديقنا الآن تصنيفًا ثالثًا (لنفرض: "جيد، لكن سأضطر لتأجير غرفة واحدة")، فإن معايير softmax باستطاعتها أن تكيف مع هذا التغيير.

خذ ثانية لاستكشاف شكل الشبكة عند تغيير عدد الميزات (x1، x2 ، x3 ... إلخ) (كالمساحة، وعدد الحمامات، والسعر، والقرب من المدارس / العمل ... إلخ) وتغيير عدد من الفئات (y1، y2، y3 ... إلخ) (كأن تكون "باهظة الثمن" ، "صفقة جيدة" ، "جيدة إذا كانت airbnb" ، "صغيرة جدًا"):

الميزات (x):

الفئات (y):

X1X2W1,1W2,1W1,2W2,2Y1Y2+b1+b2softmax

يمكنك أن ترى مثالًا على كيفية إنشاء وتهذيب هذه الشبكة باستخدام TensorFlow في هذا المرجع الذي كتبته ليرافق هذا المقال.

الهدف الأساسي

إذا كنت قد وصلت إلى هذه الفقرة، فيجب أن أكشف لك عن الدافع الآخر لكتابة هذا المقال، يُقصد بهذا المقال أن يكون مقدمة لطيفة إلى دروس TensorFlow. في حال بدأت من خلال MNIST For ML Beginners ، وصادفك هذا الرسم البياني لاحقًا:

6224a5fdf08cc922d2ec6bed_Jay Article images-11.png لقد كتبت هذا المنشور لإعداد الأشخاص الذين ليس لديهم خبرة في التعلم الآلي لهذا الرسم البياني في البرنامج التعليمي التمهيدي TensorFlow. لهذا قمت بمحاكاة أسلوبه البصري.

آمل أن تشعر بالتأهب وأن لديك فهم لهذا النظام وكيفية عمله.

يجب عليك أيضًا مواصلة تعليمك عبر تعلم الأسس النظرية والرياضية للمفاهيم التي ناقشنا هنا.

‍ بعض الأسئلة الجيدة التي عليك طرحها الآن تتضمن ما يلي: ● هل توجد أنواعٌ أخرى من دوال التكلفة؟ وأيّها الأفضل لكل تطبيق؟

● ما هي الخوارزمية الأنسب لحساب قيمة الأوزان الجديدة باستخدام الانحدار المتدرج؟

● ما هي تطبيقات التعلم الآلي في المجالات التي تعرفها بالفعل؟ ماذا يمكنك أن تصنع باستخدام هذه المعارف الجديدة ودمجها بمعلوماتك السابقة؟

● Coursera’s Machine Learning course by Andrew Ng. This is the one I started with. Starts with regression then moves to classification and neural networks.

● Coursera’s Neural Networks for Machine Learning by Geoffrey Hinton. More focused on neural networks and its visual applications.

● Stanford’s CS231n: Convolutional Neural Networks for Visual Recognition by Andrej Karpathy. It’s interesting to see some advanced concepts and the state of the art in visual recognition using deep neural networks.

● The Neural Network Zoo is a great resource to learn more about the different types of neural networks.

كتابة جهاد العمار، ترجمة مركز ذكاء ونجلاء العريفي