كيف تستخدم TensorFlow من جوجل في برمجة الذكاء الاصطناعي؟!

كيف تستخدم TensorFlow من جوجل في برمجة الذكاء الاصطناعي!؟
6

شارك المقال 👈

Share on facebook
Share on twitter
Share on linkedin
Share on pocket

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

كان أكبر مثال لنا عن ذلك هو فيلم “Iron man“، ومساعده الشخصي “Jarvis system” الذي كان من خلاله يتحكم في كل أجهزة منزله، وأيضًا من خلال البدلة التي نفذها لنفسه وجعلته بالفعل أقوى، وليس هذا الفيلم هو المثال الوحيد ولكن هناك الكثير دعنا نتحدث عنهم في مقال آخر.

ولكن كل ذلك لم يعد خيال علمي موجود بالأفلام فقط، بل صار واقع نعيشه بدليل ما قدمه لنا “مارك زوكربيرج”  المؤسس والرئيس التنفيذي لشركة فيسبوك في آخر عام 2016، حيث أعلن عن نظام “Jarvis” وهو نظام ذكاء اصطناعي طوره في وقت فراغه، والذي باستطاعته اختيار وتشغيل الموسيقى، وتشغيل الأنوار، والتعرف على الزوار، وتحديد ما إذا كان يجب فتح الباب الأمامي للمنزل أم لا؟

After a year of coding, here's Jarvis.

تم نشره بواسطة ‏‎Mark Zuckerberg‎‏ في 20 ديسمبر، 2016

كل ذلك جميل، ولكن هل سألت نفسك كيف قام مارك بعمل هذا النظام؟ وماذا استخدم لعمله؟ الإجابة هي محور مقالنا اليوم، ولكن قبل أن نُجيب عنهم بالتفصيل دعنا نُجيب أولًا على الأسئلة التالية، ما هو الذكاء الاصطناعي، وتعليم الآلة “Machine learning”؟ وما هو الـ “TensorFlow”، وكيف نستخدمه في البرمجة؟

ما هو الذكاء الاصطناعي، ومتي ظهر، وما علاقته بتعَلم الآلة؟

منذ حوالي 60 عام وبالتحديد عام 1956 أقيم أول مؤتمر للذكاء الاصطناعي تحت اسم “Dartmouth Conference“، والذي أطلق هذا المصطلح كان الرائد والمخترع عالم الكمبيوتر “جون مكارثي” حامل لقب أبو الذكاء الاصطناعي، والذي كان هدفه جعل الآلة تُفكر مثل الإنسان أي بمعني “تعليم الآلة” تحل المشاكل بنفسها عن طريق التعلم من اكتساب الخبرات السابقة، أو من خلال تحليل الحلول الصحيحة واستنباط طريقة الحل منها، أو حتى من التعلم من خلال الأمثلة.

وأبسط امثلة الذكاء الاصطناعي الموجودة بحياتنا ونتعامل معها، عندما تقرر أنّ تلعب لعبة من المفترض أنّها تكن بين لاعبين، ولكن تختار أنّ يكون الطرف الثاني هو جهاز الكمبيوتر، وهذا ما فعله العلم “جون مكارثي” عندما قرر لعب لعبة الشطرنج مع جهاز “IBM 7090”.

جون مكارثي يلعب الشطرنج مع جهاز IBM 7090

وبالرغم من أنّ علم الذكاء الاصطناعي له أنواع مختلفة، إلّا أنّ تعلم الآلة “Machine learning” مرتبط به ارتباطًا وثيقًا، فإذا كان الذكاء الاصطناعي عبارة عن قدرة البرامج الحاسوبية على محاكاة القدرات العقلية، وطرق عملها للإنسان دون البرمجة سابقًا، كالقدرة على التعلم والاستنتاج ومن ثَم رَد الفعل، فنجد أنّ استخدامات الذكاء الاصطناعي تَعددت لتشمل مجالات عدة مثل: ألعاب الفيديو، لتصل لمعالجة اللغات الطبيعية، والتحكم الآلي، والتعليم التفاعلي.

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

أساسيات تَعلم الآلة “Machine learning”

هل حاولت قبل ذلك أن تشرح لشخص ما كيف يمكنه السباحة نظريًا؟ عن طريق أن تخبره ما هي الحركات والإيقاعات المطلوب عملها حتى يطفو فوق الماء؟ أنواع المياه التي سيسبح فيها والفرق بين مياه البحر والمياه العذبة، إذا فعلت ذلك فأنت بكل تأكيد تعمل على إضاعة وقتك ووقت من تشرح له؛ لأنّ هناك الكثير من الأشياء التي لا يمكن تعلمها نظريًا لابد من الممارسة لتعَلمها ثم إتقانها.

وهذا مشابه جدًا للتعامل مع مشاكل البرمجة، حيث أنّ هناك الكثير من المشاكل المعقدة التي لا يَقدر العقل البشري على التعامل معها، وهنا ظهر لنا ما يُسمى بالتعَلم العميق “Deep Learning” قبل ظهور الـ TensorFlow.

التعلم العميق”Deep Learning” في تعريف بسيط هو تدريب الآلات والحواسيب، حيث أنّه نموذج حسابي من خلاله تتمكن الحواسيب من فهم المكونات البدائية للغات المختلفة، عن طريق تكوين وترتيب الحروف والمصطلحات، والمرادفات والمتشابهات، وبناءً عليه عندما تزود الحواسيب بالبيانات والمعلومات المطلوبة يُمكنها أداء المهام المختلفة اعتمادًا على الاستنتاج المنطقي، ومع الزيادة في هذه المعلومات التي تحصل عليها الآلة، تتمكن بعد ذلك من التعَلم واكتساب الخبرات.

وبناءً على ذلك فالتَعلم العميق أصبح ركنًا أساسيًا من علوم الحاسب، وفتح آفاقًا استكشافية جديدة للبحث وتطوير منتجات مفيدة يستخدمها ملايين البشر يوميًا، وذلك جعل شركة جوجل تُسارع في وضع بنيتها الأساسية للتَعلم العميق “DistBelief” عام 2011، والتي سمحت لعلماء جوجل ببناء الشبكات العصبية والتدريب على آلاف العينات في مراكز البيانات.

وأدي ذلك إلى تحسين التعرف على الكلام والصور في تطبيقات جوجل بنسبة 25%، وبناء البحث الفعال عن الصور في جوجل، ولكن على الرغم من نجاح “DistBelief” إلّا أنّ استهداف الشبكات العصبية كان مقيدًا، ليؤدي ذلك إلى استحالة مشاركة الكود المصدري.

لتعلن جوجل عن “TensorFlow”

يُعتبر “TensorFlow” الجيل الثاني من نظام تَعلم الآلة لجوجل، فهو مكتبة برمجيات مفتوحة المصدر للتعَلم الآلي، حيث يُستخدم في العديد من المنتجات التجارية لشركة جوجل؛ لتميزه بالمرونة، وسهولة الاستخدام والتطبيق، والسرعة، بالإضافة إلى أهم ما يميزه وهو كونه مفتوح المصدر للجميع.

لذلك “TensorFlow” لديه قدرة عالية جدًا على البحث والرد الذكي، وتستخدمه جوجل في خدماتها المختلفة، بل الآن أصبح يُستخدم في منتجات حقيقية؛ وذلك لأنّ النظام بُني على أساس الاستعداد الكامل لخدمة الإنتاج، لسرعته والقدرة على استخدامه، فقد بُني على مصدر مفتوح يتيح وصول أي شخص للكود المصدري وتعديله، حيث يقوم النظام بتمرير البيانات المعقدة من خلال الشبكة العصبية أو الدماغ الاصطناعي، والتي تعتبر جزءًا أساسيًّا في التعليم العميق.

“ولكن أهم ما يميز “TensorFlow” بالنسبة للمبرمج هو سهولة التعبير عن أفكاره من خلاله باستخدام لغة الـ Python”

وبما أنّ لغة الـ “python” يتم تعريفها تحت مُسمى “A general purpose, high-level language”

لأنّها لغة البرمجة التي تشمل برمجة كل شيء مثل: الألعاب، المواقع، قواعد البيانات، برمجة الآلات، وأيضًا برمجة تطبيقات الموبايل.

بالإضافة إلى أنّها “An interpreted language”

لأنّ أي لغة برمجة “high-level”، تقم بكتابتها الحاسوب لا يفهمها مباشرةً، لذلك لابد أن يتم تحويلها إلى ما يُسمى بلغة الآلة “machine language” حتى يفهمها الحاسوب ويقوم بالتعامل معها، ولغة الآلة عبارة عن “0/1” وبالتالي فأنت تحتاج لوسيط يقوم بتحويل لغة البرمجة التي قُمت بكتابتها لـ لغة الآلة، في حالة لغات برمجة مثل (++)C ,C هذا الوسيط يُسمى “compiler”، وهو ما يحتاج إلي برامج أخرى تقم بتنزيلها من أجل تشغيل الكود.

ولكن في حالة لغة الـ”Python” يُسمى هذا الوسيط “interpreted”، والذي يعطيك ميزة التسهيل فكل ما تحتاج إليه تنزيل ما يعرف باسم “IDE”، لتَكتب كود البرنامج وتضغط “run” من أجل تشغيل الكود، وهذه النقطة تُعطي البايثون ميزة قوية جدًا وهي أنّها “cross platform”، حيث أنّها تقبل تشغيل الكود على أي نظام تشغيل (win/mac/linux).

“ولكن لكي نتمكن من استخدام “TensorFlow” مع لغة البرمجة “python” من أجل برمجة الذكاء الاصطناعي، لابد أن نتعرف على ما هو الـ “Tensor”، وما علاقته بعلم الرياضيات؟ وكيف من خلاله يمكن الوصول إلى خوارزميات تساعد الآلة على التنبؤ؟”

الـ Tensor في الرياضيات، هو إحدى الدالات الرياضية بجانب الأعداد أو الكميات المطلقة “generalized quantity”، التي لا تتميز بوحدات للقياس، يتميز بأنّه يحتوي في خواصه خواص الأعداد المطلقة، والمتجهات، والمعاملات الخطية، ظهر كمفهوم من الهندسة التفاضلية، وله تطبيقات كثيرة مثل معادلات آينشتاين للمجال، وميكانيكا الموائع وله أهمية كبيرة جدًا في الفيزياء والهندسة التطبيقية.

التعبير عن ال Tensor

يمكننا أن نَكتب الـ Tensor بدلالة الإحداثيات، أو المصفوفات، حيث يمكننا من خلاله تكوين مصفوفة، هذه المصفوفة بكل تأكيد تتكون من متغيرات أو إحداثيات لجسم معين على سبيل المثال، لنحصل في النهاية على مُتجه “Vector” قيمة مطلقة، ستصل إلى هذه المتغيرات إذا قُمت بترجمة مشاكل تعلم الآلة إلى دوال “Functions”، وهذه الدوال تتكون من مجموعة متغيرات؛ لأنّ الدالة عبارة عن صيغة رياضية لها وظيفة معينة تستقبل بيانات معينة، وتعطي نتائج معينة.

وبناءً على هذه البيانات ستقوم خوارزميات الآلة “ML algorithm” باستخراج شيئًا مثيرًا للاهتمام، دون الحاجة لكتابة أي كود معين، فبدلًا من كتابة التعليمات والأكواد البرمجية، يُمكنك تغذية الخوارزميات بالبيانات و هي ستقوم تلقائيًا بصياغة الخرج استنادًا إلى البيانات نفسها.

حيث أنّ التعلم العميق يتم من خلال الشبكات العصبية، وفي الأساس الشبكة العصبية تتكون من مدخلات “Inputs”، التي تأتي من داخل الشبكة لتكون ما يُسمي بمجموعة “Nodes” متصلة ببعضها البعض، لتقوم بعمل بعض العمليات والحسابات الخاصة بها ويسمى ذلك “Computation Graph”، وتعطينا في النهاية المخرجات “Outputs” .

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

لوغارتيمات تعلم الآلة

دعنا نضرب مثال على ذلك، كيف يمكن للآلة أن تتعرف على ما يظهر أمامها؟

على سبيل المثال ظهر أمامها قط، فكيف يُمكنها أن تتعرف عليه وتميزه؟ الواقع يقول أنّ الآلة ترى القط في صورة مجموعة بكسلات “Pixels” متراصة بجوار بعضها البعض، تقوم الآلة بفرض أن كل بيكسل عبارة Tensor لتُكَون مجموعة من الـ Tensors في شكل بيانات والتي يطلق عليها مدخلات ويُرمز لها برموز تمثل اتجاهات بمعاملات خطية معينة كـ “X”، “W”، “b”، ليصبح لديها متغيرات، يمكن وضعها داخل مصفوفة، ومن خلال المصفوفة تكون دوال رياضية التي ستمر على خوارزميات الآلة لتستنبط منها المخرجات.

شرح معني tensor

مصفوفة المدخلات

وفيما يلي صورتين توضح كيفية الوصول للخرج:

التعلم العميق مع Tensorflow

 

التعلم العميق مع Tensorflow

import tensorflow as tf

b = tf.Variable(tf.zeros([100]))                   # 100-d vector, init to zeroes

W = tf.Variable(tf.random_uniform([784,100],-1,1))    # 784×100 matrix w/rnd vals

x = tf.placeholder(name=”x”)                       # Placeholder for input

relu = tf.nn.relu(tf.matmul(W, x) + b)             # Relu(Wx+b)

C = […]                                          # Cost computed as a function

# of Relu

s = tf.Session()

for step in xrange(0, 10):

input = …construct 100-D input array …       # Create 100-d vector for input

result = s.run(C, feed_dict={x: input})          # Fetch cost, feeding x=input

print step, result

6