بقلم شفيع البيطار
مهندس معلوماتية
إن معظم التطورات الحديثة في مجال الذكاء الصنعي Artificial Intelligence هي نتيجة للتطور على صعيد التعلم الآلي Machine Learning، ولجعل تطبيقات التعلم الآلي سهلة التصميم بدأ علماء الحاسوب بتطوير ما يسمى لغات البرمجة الاحتمالية Probabilistic Programming Languages التي تتيح للباحثين المقارنة ومزج تقنيات التعلم الآلي التي قدّمت أداء جيدًا في سياقات Contexts وأوضاع معينة.
تجيب البرمجة الاحتمالية عن أسئلة من قبيل: ماذا يمكن لدرجات الحرارة المحلية أن تخبرنا عن نظام المناخ العالمي؟ أو ماذا يمكن لتصفح الوب ومعلومات الشراء الإلكتروني أن تخبرنا عن المستهلك؟ أو كيف يمكن أن تُستعمل البيانات الوراثية لتشخيص العلاجات الطبية؟ ...إلخ. وتبدو هذه الأسئلة مختلفة فيما بينها، لكنها في الحقيقة متشابهة، وجميع أجوبتها بحاجة إلى تعميم استدلالي واستقرائي للمشاهدات الملتقطة Captured Observations.
نتحدث في هذه المقالة عن مفهوم البرمجة الاحتمالية، ونستعرض ميزات لغتَي GEN و Picture اللتين تعتبران من أبرز اللغات على هذا الصعيد.
تعريف بالبرمجة الاحتمالية
تعدّ البرمجة الاحتمالية موضوع بحث مكثف منذ عام 1950، وهي أداة مهمة يستفاد منها في المجالات العلمية المختلفة؛ مثل: الإحصاء Statistics، والتعلم الآلي، والرؤية الحاسوبية Computer Vision، والعلوم المعرفية Cognitive Science، والروبوتات Robotics، ومعالجة اللغات الطبيعية Natural Language Processing وغيرها.
تعرَّف لغة البرمجة الاحتمالية بأنها لغة عالية المستوى تُجرّد أو تعمّم عملية الاستدلال والتعلم، وتكفي المبرمج مؤونة الخوض في غمارها، كي يتفرَّغ لتوصيفِ أفضلِ نموذج يشرح المعطيات الموجودة بين يديه. فالهدف منها إذن: تمكين المبرمج من أدوات النمذجة الاحتمالية وتقنيات التعلم الآلي، ولو لم تكن لديه خبرة كافية في نظرية الاحتمالات، بل يكفي أن تكون لديه الخبرة الكافية في توصيف المسألة ونمذجتها [1].
وبالبرمجة الاحتمالية تُبنى الآلات الحاسوبية التي يمكنها أن تفسِّر وتتعلم من خبراتها الحسية، وأن تتصرف بفعالية في الزمن الحقيقي، وأن تتمكن في نهاية المطاف من تصميم وبرمجة نفسها. وتفسِّر هذه الآلات الحاسوبيةُ البياناتِ بطريقتين: المحاكاة Simulation، والاستدلال الاحتمالي Probabilistic Inference.
فمثلًا في برنامج محاكاة المناخ تأخذ الآلةُ الشروطَ الابتدائية - بوصفها مدخلات - مثل درجات الحرارة السابقة لمنطقة ما، وتقديرات الطاقة المنبعثة من الشمس، ثم تعالِج افتراضات المبرمج المتعلقة بتفاعل هذه المتغيرات بعضها مع بعض. وهذه الافتراضات التي يعبَّر عنها بمعادلات رياضية هي التي تقدم لنا تنبؤات عن المناخ في المستقبل.
أما في برنامج الاستدلال الاحتمالي فتُدخَل جميع التفاعلات والعلاقات الممكنة بين مختلف عناصر النظام المناخي ومجموعة من البيانات المُلاحَظة، ثم يقوم البرنامج تلقائيًّا بتعلُّم التفاعل الأشد فاعليةً وتأثيرًا في شرح البيانات المُلاحَظة (ولو كانت هذه التفاعلات معقدة جدًّا).
وتتـسم طريقة المحاكاة في أنها تُـنـفَّـذ باتجاه واحد؛ أي من الأسباب إلى الآثار المفترضة، على حين أن طريقة الاستدلال الاحتمالي تنفَّذ في كلا الاتجاهين.
هذا وقد جرى تطوير العديد من لغات البرمجة الاحتمالية، التي هي امتداد للغاتِ برمجةٍ تقليدية معروفة، مثل: لغة ProbLog (امتداد للغة Prolog)، ولغة Infer.NET (ضمن بيئة NET Framework.)، ولغة BLOG (امتداد للغة Java)، ولغتَي GEN و Picture (امتداد للغة Julia).
لغة GEN
في عام 2015 أصدرت Google مكتبة TensorFlow، وهي مكتبة مفتوحة المصدر لواجهاتِ برمجةِ التطبيقات (APIs) التي تساعد المبتدئين والخبراء على إنشاء أنظمة التعلُّم الآلي دون الاعتماد التام على الرياضيات. وعلى الرغم من كونها مكتبة فعالة؛ إلا أنها لم تركِّز إلا على نماذج التعلُّم العميق المكلفة والمحدودة، ولم تعالِج جميع حالات الذكاء الصنعي، ومنها حالة الذكاء الصنعي الاحتمالي. ضمن هذه الحالة تنجِّز خوارزمياتُ الاستدلال عملياتٍ على البيانات وتعدِّل الاحتمالات باستمرار اعتمادًا على البيانات الجديدة للحصول على التنبؤات Predictions. ويؤدي فِعْلُ ذلك إلى إنتاج نموذجٍ يشرح كيفية عملِ التنبؤات على بيانات جديدة. ولمعالجة هذه الحالة طوَّر الباحثون لغات النمذجة المخصصة لنماذج الذكاء الصنعي ودمجوها في لغةٍ واحدة (سمِّيت Julia)، فصارت لغةً متعددة الأغراض. وتعدُّ Julia من أحدث لغات البرمجة وأسرعها نموًّا وأكثرها تقدمًا في مجال الذكاء الصنعي؛ فهي لغةٌ ديناميكية مصمَّمة للتعامل مع الأغراض العامة، وتلبي متطلبات التحليل العددي العالية الأداء وعلوم الحاسوب دون الحاجة المعتادة إلى السرعة في تجميع الأجزاء المنفصلة من الأرمزة codes التي يجري تطويرها. وذكر الباحثون أيضًا أنه يمكن استعمال هذه اللغة في تطبيقات زبون/مخدم (Client/Server) الواسعة الانتشار على شبكة الإنترنت، إضافة إلى عمليات البرمجة الخاصة بالحوسبة المتزامنة والحوسبة الموزَّعة، وأشاروا إلى أنها تعتمد على مكتبة ضخمة ومتنوعة من البيانات والخوارزميات في مجال الجبر الخطي وتوليد الأعداد العشوائية والتحويلات الرياضية السريعة.
وتطويرًا للغة Julia، نشر فريق من الباحثين في معهد ماساشوستس الأميركي للتقنية MIT ورقة بحثية في مؤتمر لتصميم لغات البرمجة وتنفيذها [2]، أشاروا فيها إلى لغةِ برمجةٍ جديدة تساعد على تنفيذ عمليات الذكاء الصنعي المختلفة ضمن مجال الرؤية الحاسوبية والعمليات الإحصائية وغيرها من عمليات التعلُّم العميق Deep Learning دون الحاجة إلى التعامل مع المعادلات الرياضية المعقدة. وبذلك تصبح برمجة تطبيقات الذكاء الصنعي وغيرها سهلةً ومناسبة للمبتدئين والمحترفين على حدٍّ سواء. ولما كانت هذه اللغة متعددة الأغراض General-Purpose، أطلقوا عليها اسم GEN. ويمكن لهذه اللغة التعامل مع الصور الثلاثية الأبعاد، الذي يُعدُّ من أصعب المهام الموجودة في عمليات الرؤية الحاسوبية.
تتكون هذه اللغة من مجموعة مختلفة من المكونات التي يمكنها القيام بعمليات الرسم البياني والتعلُّم العميق إضافة إلى أنواع مختلفة من العمليات الإحصائية والاحتمالات. ويساعد دمج هذه العناصر المختلفة على الحصول على دقة أعلى وسرعة أكبر من أي نظام آخر للذكاء الصنعي.
تطبِّق هذه اللغة، بعد أن يكتب المبرمجُ الأغراض والخوارزميات المتعلقة بالمجالات المختلفة، تقنياتِ الذكاء الصنعي؛ مثل: الرؤية الحاسوبية والروبوتات والإحصاءات، دون الحاجة إلى كتابة المكونات البرمجية المعقدة Complex Components. وتكون التنبؤات المستخرجة من كمٍّ كبير من البيانات هي جوهر العمل في هذه اللغة، حيث تقوم خوارزميات الاستدلال بعملياتٍ سريعة وضخمة ومستمرة على البيانات، وبتعديل الاحتمالات باستمرار استنادًا إلى بيانات جديدة بهدف الوصول إلى تنبؤات جديدة.
يستطيع برنامج GEN أن يستنتج الجسم الثلاثي الأبعاد، وهي مهمة صعبة التنفيذ بواسطة الرؤية الحاسوبية التي تحتوي على تطبيقات الأنظمة المستقلة Autonomous Systems والتفاعلات بين الإنسان والآلة والأنظمة الواقعية Realistic Systems. ويقوم هذا البرنامج أيضًا بعرض الرسومات والتعلُّم العميق وأنواعٍ أخرى من عمليات المحاكاة، ويؤدي الجمع بين هذه التقنيات المتنوعة إلى دقةٍ وسرعة عاليتين في تنفيذ هذه المهمة بطريقة أفضل من طرق الأنظمة السابقة التي تم تطويرها.
وقد بيَّن مطورو هذه اللغة، أنها قادرة على تبسيط تحليل البيانات؛ إذ إنها تُنشئ تلقائيًّا نماذجَ إحصائية معقدة يستعملها خبراء الإحصاء عادة لتحليل الأنماط الأساسية في البيانات وتفسيرها. فمثلًا، يمكن أن يَكتب المبرمجُ بضعة أسطر برمجية لكشف التصور عن الاتجاهات المالية ورحلات السفر الجوي وأنماط التصويت وحالات انتشار الأمراض...إلخ، على حين أن الأنظمة السابقة كانت تتطلب أن يَكتب المبرمجُ عددًا كبيرًا من الأسطر البرمجية للوصول إلى تنبؤات دقيقة.
كذلك توفر لغة GEN بنية عالية المستوى لمهام الاستدلال؛ أي قواعد التجربة والاستنباط، ويكون ذلك باستعمال أساليب متنوعة مثل التحسين والاستنباط المتغير وبعض الأساليب الاحتمالية والتعلُّم العميق.
يستفيد من هذه اللغة عددٌ من المؤسسات؛ فعلى سبيل المثال تتعاون شركة Intel مع معهد MIT لاستعمال GEN وفق الأشكال الثلاثية الأبعاد مع كاميراتها ذات الحساسية العالية والمستعملة في أنظمة الروبوتات والأنظمة الواقعية. كذلك يتعاون مختبر لينكولن مع MIT لاستعمال لغة GEN في الروبوتات الجوية للإغاثة الإنسانية والاستجابة للكوارث. واستُعملت لغة GEN كذلك في مشاريع الذكاء الصنعي في إطار البحث عن الذكاء MIT Quest for Intelligence. وتُعدّ لغة GEN عاملًا رئيسًا في مشروع MIT مع مخبر واتسون للذكاء الصنعي IBM Watson AI Lab، إلى جانب مشروع الآلة الحسية Sensual Machine التابع لوزارة الدفاع الأمريكية (U.S. Department of Defense, Advanced Research Projects Agency) الذي يهدف إلى نمذجة حواس الإنسان السليم وهو في عمر 18 شهرًا.
يوضح الشكل الآتي مثالًا على برنامج احتمالي مكتوب بلغة GEN، حيث تَظهر في القسم (a) مسألة تحليل الانحدار regression analysis بشكلها الاحتمالي والدلالي، وفي القسم (b) يَظهر النموذج المعمَّم لحل المسألة بلغة GEN، أما الشكل الهرمي لهذا النموذج فيَظهر في القسم (c).
لغة PICTURE
هي لغة برمجة احتمالية لإدراك المشهد Scene Perception؛ أي تعرُّف محتوى المشهد، وتمييز الأغراض الموجودة فيه، وتحديد نوع هذه الأغراض والعلاقات النسبية فيما بينها [3]. تهدف هذه اللغة إلى توفير آليةِ تمثيلٍ عامة ومحركِ استدلال مناسب لفئة واسعة من مشاكل إدراك المشهد، حيث تسمح للباحثين أن يعبِّروا عن نماذج الرؤية المعقدة التي يجري حلُّها تلقائيًّا باستعمال محرك الاستدلال. وتقدِّم هذه اللغة كذلك إطارًا عامًّا يهدف إلى حلِّ معظم المهام في مجال الرؤية الحاسوبية، وهو حلٌّ يتجاوز مهمة التصنيف Classification (وهي المهمة الأكثر رواجًا في هذا المجال). ويحاول هذا الإطار معالجة إحدى المسائل الأساسية في الرؤية الحاسوبية التي تتعلق بالبحث عن التمثيل الصحيح الذي يمكن استخلاصه من المشاهد البصرية Visual Scenes.
تستند لغة Picture إلى فكرة معروفة في مجال الرسوم العكسية، التي يرجع تاريخها إلى بدايات أبحاث الذكاء الصنعي. ومع أن الحواسيب كانت آنذاك بطيئة جدًّا مقارنةً بسرعاتها العالية في هذه الأيام، فإن روَّاد الذكاء الصنعي كانوا قادرين على تركيبِ صورٍ واقعية بالاستفادة من الطريقة التي ينعكس فيها الضوء على أغراض افتراضية، وهذا هو أساس العمل في تقنية Pixar المطبَّقة في صناعة الأفلام. ويقول مطوِّرو هذه اللغة إن استدلال الأشكال الثلاثية الأبعاد للأغراض من معلومات بصرية هو ببساطة نفس المسألة السابقة ولكن بطريقة معاكسة، حيث إن اللون المعطى في الصورة البصرية يمكن أن يَنتج باستعمال ضوءٍ من أيِّ لونٍ قادم من أيِّ اتجاه، فيعكس اللونَ الصحيح على السطح بالاتجاه الصحيح. ويمكن من حيث المبدأ إنتاج الصورة المرئية - عند تغطيتها ببقعة لون محدَّد - من ضوءِ أيِّ لون قادم من أيِّ اتجاه، ومنعكس على سطح اللون المناسب وبالاتجاه المناسب.
تتضمن لغة Picture مجموعة متعددة من خوارزميات الاستدلال المختلفة التي حققت نجاحًا جيدًا، ويمكن تجريب هذه الخوارزميات على أي مسألة لمعرفة الخوارزمية التي ستعمل بوجه أفضل. فمثلًا، يمكن استنتاج الشكل بطريقة احتمالية، وهذا يعني فرز الكثير من الاحتمالات المتناظرة للحصول على الخيار الأمثل. ويقول الباحثون إن تصميم هذه اللغة جرى بحيث يمكن لخوارزميات الاستدلال الخاصة بها أن تستفيد بنفسها من تقنيات التعلم الآلي وتعديل نفسها بنفسها، فهي بذلك تؤكد استراتيجيات من شأنها أن تقود إلى نتائج جيدة.
هذا ويُعدُّ استعمال التعلُّم الآلي لتحسين الاستدلال مهمةً نوعية ودقيقة، والبرمجة الاحتمالية قد تُخفف من إعادة كتابة البرنامج في ضوء مسائل مختلفة، فيمكن للبرنامج أن يكون عامًّا وشاملًا إذا كان التعلم الآلي قويًّا بما يكفي لفهم استراتيجيات مختلفة لمهام مختلفة.
وقد قام الباحثون باستعراض لغة Picture في ثلاث مسائل صعبة للرؤية الحاسوبية؛ هي: استدلال شكلٍ ثلاثي الأبعاد ومظهر مفصَّل لوجه الإنسان، واستدلال التـموضع الثلاثي الأبعاد لجسم الإنسان، واستدلال الشكل الثلاثي الأبعاد لأغراض متماثلة بنيويًّا (مثل أحجار الشطرنج). وتتكون أية إجرائية مكتوبة بلغة Picture من ثلاثة أجزاء رئيسية:
- بنيان المسألة: توصَّف فيه المَشاهد البصرية الثنائية البعد والثلاثية الأبعاد وكل المعلومات المتعلقة بإظهارها وطباعة خرج الإجرائية.
- محرك الاستدلال: يجري فيه تفسير صورة الدخل، حيث يولِّد المحرك مجموعةً متنوعة من المقترحات التي يطورها تكراريًّا للوصول إلى المقترح الأعلى احتمالًا والأكثر تمثيلًا لصورة الدخل.
- تمثيل الخرج: تمثَّل فيه المَشاهد المولَّدة الثلاثية الأبعاد بواسطة هذا البرنامج الرسومي الاحتمالي.
ويقول الباحثون إن أداء لغة Picture تنافسيٌّ مقارنةً بالمرجعية القياسية المُثلى للمسائل التي تعالجها الرؤية الحاسوبية. فمثلًا، في موضوع استدلال جسم ثلاثي الأبعاد 3D من معلومات ثنائية البعد 2D، تمكنت هذه اللغة من التفوق بالفعل على الأنظمة السابقة، ونسبة خطأ البرنامج الذي قدّر وضعية الإنسان كانت أقل بخمسين إلى ثمانين بالمئة من سابقاتها [4]. يوضح الشكل الآتي كيفية الانتقال من الصورة المشاهَدة Observed Image إلى استدلال الصورة (إعادة بناء الصورة Reconstruction)، ثم استدلال النموذج بأوضاع مختلفة للصورة، وأخيرًا استدلال النموذج بقيم جديدة لإضاءة الصورة.
ونعرض في الشكل التالي جزءًا من برنامج احتمالي مكتوب بلغة Picture، وهو يصف الملامح الرئيسية للوجه بكائنَيْن وُزِّعا بالتناظر (عينان eyes) مع كائنين آخرين أكثر تمركزًا تحتهما (الأنف nose والشفاه lips). ويتطلب هذا بالطبع القليل من العمل لترجمة هذا الوصف في بناء جملة خاصة بلغة البرمجة الاحتمالية، وتغذية عكسية Feedback، وتزويد البرنامج بأمثلة كافية من صور 2D ونظرائها من نماذج 3D. يقوم البرنامج بعملية الاستدلال اعتمادًا على إحدى تقنيات التعلُّم الآلي وهي الشبكات العصبونية الالتفافية Convolutional Neural Networks.
الخاتمة
تعتبر البرمجة الاحتمالية واحدة من أكثر المجالات الواعدة على صعيد الذكاء الصنعي، وندعو الطلاب والباحثين إلى تطوير أنظمة تستند إلى التفكير الاحتمالي بلغتي GEN و Picture، للإسهام في تصميم تطبيقات عملية وفعالة في مختلف المجالات الحيوية.
المراجع
[1] https://en.wikipedia.org/wiki/Probabilistic_programming
[2] Gen: A General-Purpose Probabilistic Programming System with Programmable Inference, Marco F. Cusumano-Towner, Feras A. Saad, Alexander K. Lew, Vikash K. Mansinghka, Massachusetts Institute of Technology, 2019
[3] Picture: A Probabilistic Programming Language for Scene Perception, Tejas D Kulkarni, Joshua B Tenenbaum, Vikash Mansinghka, Massachusetts Institute of Technology, 2015
[4] Probabilistic programming does in 50 lines of code what used to take thousands, Larry Hardesty, Massachusetts Institute of Technology, https://phys.org/news/2015-04-probabilistic-lines-code-thousands.html, 2015