الرياضيات في التعلم العميق
Mathematics for deep learning
بسم إلله الرحمن الرحيم
بدأنا في الجزء الأول من هذه السلسلة من المقالات بإستعراض أهم العناصر الأساسية في موضوع الجبر الخطي وقمنا بإعطاء بعض الأمثلة التطبيقية بإستخدام لغة بايثون ومكتبة (Numpy), وفي هذا الجزء سوف نقوم بإستعراض وشرح بعض العمليات (Operations) التي تجرى على هذه العناصر مع إعطاء الأمثلة التطبيقية المناسبة, فلنبدأ على بركة إلله تعالى.
عملية التبديل (Transposition)
عن طريق عملية التبديل نستطيع تحويل المتجه الذي هو عبارة عن صف من الأرقام إلى متجه عبارة عن عمود من الأرقام وبالعكس, وكما موضح في الشكل التالي:
وكذلك نستطيع عن طريق هذه العملية تحويل صفوف أي مصفوفة إلى أعمدة والأعمدة إلى صفوف, فإذا كانت لدينا مصفوفة هي (A) فبعد إجراء عملية التبديل (Transposition) عليها يصبح الرمز الخاص بها هو (AT):
وكما موضح بالشكل التالي:
والآن نبدأ بتطبيق بعض الأمثلة على إستخدام عملية التبديل (Transposition) على بعض العناصر.
المثال الأول:
في هذا المثال نقوم أولاً بإنشاء مصفوفة (2 × 3) أي أنها تتكون من ثلاثة صفوف وعمودان وكما يلي:
نقوم بتطبيق عملية التبديل (Transposition) عليها وكما يلي:
وإذا أردنا أن نعرف الشكل الجديد للمصفوفة ومقارنته بالشكل الأصلي للمصفوفة قبل إجراء العملية نقوم بكتابة الكود التالي:
نلاحظ أن المصفوفة الأصلية تحتوي على ثلاثة صفوف وعمودان, في حين أنها أصبحت ذات صفين وثلاثة أعمدة بعد إجراء عملية التبديل (Transposition) عليها.
عملية الجمع (Addition)
إضافة مصفوفة إلى مصفوفة أخرى
نستطيع أن نقوم بعملية جمع للمصفوفات بشرط أن تكون بنفس الشكل (Shape) أي بنفس عدد الصفوف وعدد الأعمدة, حيث نقوم بجمع الأعداد ذات الدليل (index) المعين في أحد المصفوفات مع مايقابلها من الأعداد ذات نفس الدليل في المصفوفة أو المصفوفات الأخرى وكما في المعادلة التالية:
نلاحظ من المعادلة أعلاه أن العدد ذو الدليل (1,1) من المصفوفة الأولى قد أضيف إلى العدد ذي الدليل الذي يماثله من المصفوفة الثانية ليشكلا بمجموعهما عدداً يحمل نفس الدليل (1,1) في المصفوفة الجديدة المتشكلة من حاصل جمع المصفوفتين (A) و (B).
الشكل التالي يوضح تطبيق عملية جمع مصفوفتان متشابهتان من حيث الشكل (shape):
المثال الثاني:
سوف نقوم في هذا المثال بإنشاء مصفوفتان متشابهتان من حيث الشكل هما (A) و (B), ثم نقوم بجمعهما معاً لتكوين مصفوفة جديدة هي (C) وكما في الكود الموضح في الشكل أدناه:
إضافة عدد (Scalar) إلى مصفوفة
يمكننا أيضاً تطبيق عملية الجمع (Addition) بين عدد (Scalar) مع مصفوفة (Matrix) وكما موضح في المعادلة التالية:
المثال الثالث:
في هذا المثال نقوم بإضافة عدد (Scalar) إلى مصفوفة (Matrix), حيث نقوم أولاً بإنشاء المصفوفة (A) وكما في الكود التالي:
نقوم بعدها بإضافة العدد (8) إلى المصفوفة وإظهار النتيجة:
نستطيع أن ننظر إلى عملية إضافة عدد (Scalar) إلى مصفوفة (Matrix) على أنه عملية توسعة للعدد وجعله مطابقاً للمصفوفة من حيث الشكل (Shape) لكي تكون عملية الجمع (Addition) مستوفية الشروط أي يكون العنصران المجموعان متشابهين من حيث الشكل (Shape) كما ذكرنا مسبقاً.
نستطيع أن نوضح ذلك حسب المعادلة التالية:
تسمى عملية التوسعة هذه (Broadcasting).
عملية التوسعة (Broadcasting)
نحتاج في حالات معينة أن نقوم بجمع عنصر صغير الحجم كأن يكون عدد (Scalar) أو متجه (Vector) ذات عمود واحد مع مصفوفة (Matrix) ذات بعدين أو مع تينسر (Tensor) ذات ثلاثة أبعاد أو أكثر, ففي هذه الحالة نستطيع أن نفترض بأن العنصر الصغير يتم توسعته إلى الشكل الذي يشابه شكل (Shape) المصفوفة المطلوب جمعه معها. إن عملية التوسعة هذه تسمى (Broadcasting).
المعادلة التالية تمثل عملية تطبيق مبدأ التوسعة (Broadcasting) على متجه (Vector) قبل جمعه مع مصفوفة (Matrix):
حيث نلاحظ من المعادلة أعلاه بأنَّ المتجه ذات الشكل (1 × 3) أي عمود واحد ذي ثلاثة صفوف, قد تم تحويله إلى مصفوفة ذات الشكل (2 × 3) أي عمودين كل منهما ذو ثلاثة صفوف, حيث تم إضافة نفس العمود الذي يحويه المتجه كعمود ثاني لكي يتحول المتجه إلى مصفوفة ذات عمودين حتى يتشابه من حيث الشكل مع المصفوفة وبذلك تكون عملية الجمع مستوفية للشروط.
المثال الرابع:
في هذا المثال سوف نقوم بإضافة متجه (Vector) إلى مصفوفة (Matrix), وبعبارة أخرى إضافة مصفوفة ذات عمود واحد (3 x 1) إلى مصفوفة ذات عمودين (3 x 2), حيث إننا قلنا سلفاً بأنه يمكننا أن نعتبر المتجه على أنه مصفوفة ذات عمود واحد.
لنبدأ بكتابة الكود التالي:
نلاحظ من الكود أعلاه بأننا إذا أردنا إنشاء متجه (Vector) ذات عمود واحد (وليس صف واحد) يجب أن نعامله كمصفوفة ذات بعدين ونعتبر كل صف يحتوي على رقم واحد فقط.
ملاحظة: في بعض الأحيان فإنَّ الأرقام التي تحويها المصفوفة أو التي يحويها المتجه تسمى خلايا (Cells).
عملية ضرب المصفوفات والمتجهات
(Multiplying Matrices and Vectors)
تعتبر عملية الضرب الأساسية في الجبر الخطي والتي يطلق عليها (حاصل الضرب النقطي) أو (Dot product) من العمليات المهمة جداًّ في مواضيع تعلم الآلة (Machine Learning) وكذلك في علم البيانات (Data Science), وسوف نوضح بعض خصائصها وإستخداماتها.
إن عملية الضرب (Dot product) بين مصفوفتين أو بين مصفوفة ومتجه تعتمد على شرط أساسي وهو أن يكون عدد الأعمدة في المصفوفة الأولى مساوياً إلى عدد الصفوف في المصفوفة الثانية, وتتكون من خلال عملية الضرب هذه مصفوفة جديدة يكون عدد صفوفها مساوياً لعدد صفوف المصفوفة الأولى, وعدد أعمدتها مساوياً لعدد أعمدة المصفوفة الثانية.
تتم عملية الضرب بأن نقوم بضرب كل عدد أو خلية (Cell) من الصف الأول من المصفوفة الأولى بما يقابله من عدد أو خلية (Cell) في العمود الأول من المصفوفة الثانية, بعدها نقوم بجمع نتائج الضرب فيصبح لدينا عدد نعتبره العدد الأول في العمود الأول في المصفوفة الجديدة, ثم نكرر نفس العملية مابين الصف الثاني من المصفوفة الأولى والعمود الأول أيضاً من المصفوفة الثانية ونجعل الناتج يمثل العدد الثاني في العمود الأول من المصفوفة الجديدة, وإذا كانت المصفوفة الثانية تمتلك عموداً ثانياً نقوم بتكرار نفس العملية ولكن بإستخدام العمود الثاني للمصفوفة الثانية لتكوين خلايا (Cells) العمود الثاني من المصفوفة الجديدة.
الشكل التالي يوضح عملية ضرب من نوع (Dot product) بين مصفوفة ذات شكل (3 x 2) مع متجه ذات شكل (2 x 1), حيث يتولد لدينا من هذه العملية متجه (3 x 1):
إذا كانت المصفوفة الأولى ذات شكل (m x n) فيجب أن تكون المصفوفة الثانية ذات شكل (n x z) حيث (z) يمثل عدد الأعمدة للمصفوفة الثانية وممكن أن يأخذ أي عدد صحيح, فإنَّ المصفوفة الناتجة من هذه العملية تكون ذات شكل (m x z).
المثال الخامس:
مصفوفة (Matrix) ومتجه (Vector)
لنبدأ أولاً بتطبيق عملية الضرب نوع (Dot product) على مصفوفة (Matrix) و متجه (Vector) وكما في المعادلة التالية:
A x b = C
حيث إنَّ:
ثم نقوم بكتابة المعادلة الرياضية الخاصة بعملية ضرب المتجهات (Dot product):
بعدها نقوم بتطبيق المعادلة أعلاه على المصفوفة والمتجه (A, b) الذين إفترضناهما حيث نحصل على:
حيث نلاحظ إننا حصلنا على متجه ذات شكل (3 x 1), حيث إنَّ عدد صفوفه هي نفسها عدد صفوف المصفوفة الأولى (A), أما عدد أعمدته فهي نفس عدد أعمدة المتجه (b) والتي هي (1).
نقوم الآن بكتابة الكود الخاص بتنفيذ عملية الضرب (Dot product) بإستخدام مكتبة (Numpy) وكما يلي:
نستطيع تنفيذ عملية الضرب (Dot production) بطريقة ثانية وكما يلي:
لمثال السادس:
مصفوفتان (Two Matrices)
نقوم في هذا المثال بتطبيق عملية ضرب المصفوفات (Dot product) على مصفوفتين هما (A) و (B) وكما يلي:
A x B = C
حيث إنَّ:
وبعد تطبيق المعادلة الخاصة بضرب المصفوفات (Dot product) نحصل على مايلي:
والآن نقوم بتطبيق عملية الضرب على نفس المصفوفتين ولكن بواسطة الكومبيوتر وبإستخدام مكتبة (numpy) ونرى النتيجة:
نلاحظ أنَّ النتيجة التي حصلنا عليها مطابقة للنتيجة التي حصلنا عليها بإستخدام الطريقة اليدوية.
وبهذا نكون قد إنتهينا من هذا الجزء, وسيليه الجزء القادم إنشاء ألله حيث سنتناول فيه خصائص عملية ضرب المتجهات (Dot product) مع بعض الأمثلة.
ملخص ماجاء في هذه المقالة
بدأنا في هذه المقالة بإستعراض بعض العمليات التي يتم تطبيقها على المصفوفات, حيث تطرقنا إلى عملية التبديل (Transposition) وعملية جمع المصفوفات (Addition) وعملية التوسعة (Broadcasting), وأخيراً عملية ضرب المصفوفات والمتجهات (Multiplication).
قمنا بشرح وتوضيح هذه المواضيع من خلال أمثلة متعددة.
المهندس حسن فنجان عداي
تعليقات
إرسال تعليق