مبدأ التعلم المستمر في تعلم الآلة

السبت 14 جمادى الآخرة 1444ھ الجمعة 6 يناير 2023م
فيسبوك
تويتر
واتساب
تيليجرام
لينكدإن
المحتوى

ما هو التعلم المستمر؟

أحد أفضل النعم التي وهبها الله لنا بني الإنسان هي العقل، والمرتبط بالذكاء والقدرة على التعلم والتطور بشكل مستمر طوال عمر الإنسان. والإنسان كلما ازداد عمره وكثرت تجاربه وخبراته زاد إنتاجه وتحسنت مهاراته واستطاع الإستعانة بمهارات تعلمها في السابق لتسهل عليه عملية تعلم مهارة أو فهم معلومة جديدة. هذا المبدأ يطلق عليه علماء الذكاء الاصطناعي مصطلح التعلم المستمر (Continual Learning) أو التعلم المتزايد (Incremental Learning)، وهي قدرة نموذج الحاسب الذكي على تعلم مهارات والتعرف على معلومات جديدة بشكل مستمر بدون فقدان معلومات سابقة أو تدني الأداء لمهارات تعلمها بالسابق.

ما أهمية التعلم المستمر؟

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

ظاهرة النسيان الكارثي!

لاحظ علماء الذكاء الاصطناعي في السنوات الأخيرة ظاهرة مشؤومة لنماذج التعلم العميق باستخدام الشبكات العصبية (Neural Networks)، حيث اكتشفوا أن نماذج الذكاء الاصطناعي باستخدام هذه التقنية عند تعريضها لنوع معين من البيانات (Dataset) كصور الحيوانات مثلا، ثم تعليمها إنجاز بعض المهام (Tasks) كالتعرف على القطط والكلاب، وبعد ذلك تعريضها لـــ بيانات جديدة أو تدريبها على مهام مختلفة فإنها تقوم بنسيان ما تعلمته في السابق بالكامل! أطلق العلماء على هذه الظاهرة باسم النسيان الكارثي (Catastrophic Forgetting)، وخُلق علم جديد باسم التعلم المستمر يهدف إلى تحييد النسيان الكارثي قدر الإمكان. يرجع سبب هذه الظاهرة لطريقة تدريب نماذج الشبكات العصبية باستخدام الإنتشار الخلفي (Backpropagation) حيث تقوم هذه التقنية بتحديث أوزان الخلايا العصبية بهدف تحسين الأداء للمهمة الحالية بدون أي مراعاة للمعلومات أو المهام السابقة التي تعرض لها نموذج الذكاء الاصطناعي.

Figure 1 - Catastrophic Forgetting Phenomena [Ref].
Figure 2 - Definition of CL or lifelong learning system [Ref].

مناهج التعلم المستمر مع الشبكات العصبية

هناك عدة مناهج عامة طورها علماء الذكاء الاصطناعي لمحاربة النسيان الكارثي المصاحب للشبكات العصبية وتختلف فيما بينهما بالكفاءة والمتطلبات والشروط، مذكورة كما يلي:

1- نهج التنظيم (Regularization Approach)

يعمل هذا النهج على فكرة مبسطة تقوم بفرض شرط على خوارزمية تدريب نموذج الذكاء الاصطناعي وتحديث أوزان الشبكات العصبية (Backpropagation) مع بالأخذ بالحسبان أداء المهام السابقة وقيمة الأوزان لهذه الشبكة عن طريقة دالة خسارة (Loss Function) مصممة خصيصاً. بعض الأمثلة لطرق مشهورة تتبع هذا النهج هي:

Figure 3 - Learning without forgetting (LwF).

2- نهج العمارة الديناميكية (Dynamic Architecture Approach)

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

Figure 4 - Progressive Neural Networks.

3- نهج الإعادة (Replay Approach)

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

Figure 5 - Deep Generative Replay.

تطبيق عملي!

سنقوم بتطبيق عملي لما شرحناه بالأعلى من طرق التعلم المستمر وتفادي النسيان الكارثي. سنعتمد في تطبيقنا على مكتبة PyTorch المختصة بالذكاء الاصطناعي والتعلم العميق، وكذلك مكتبة Avalanche المختصة بتقنيات التعلم المستمر. سنقوم بكتابة كود برمجي يحاكي طريقة التعلم الساذجة (Naive Learning) باستخدام شبكة عصبية بسيطة (MLP) وبدون أي إجراء لتفعيل التعليم المستمر لتوضيح أثر النسيان الكارثي.

نبدأ بتحميل آخر نسخة من مكتبة (Avalanche)

				
					pip install avalanche-lib==0.3.1
				
			

ومن ثم نقوم بتعريف واستيراد بعض المكتبات والمتغيرات المهمة

				
					import torch
from torch.optim import SGD
from torch.nn import CrossEntropyLoss
from avalanche.benchmarks.classic import SplitMNIST, PermutedMNIST
from avalanche.evaluation.metrics import forgetting_metrics, accuracy_metrics, \
    loss_metrics, timing_metrics, cpu_usage_metrics, confusion_matrix_metrics, disk_usage_metrics
from avalanche.models import SimpleMLP
from avalanche.logging import InteractiveLogger, TextLogger, TensorboardLogger
from avalanche.training.plugins import EvaluationPlugin
from avalanche.training.supervised import Naive, LwF, EWC, GenerativeReplay

device = torch.device(
        f"cuda:0"
        if torch.cuda.is_available()
        else "cpu"
    )


				
			

ثم نقوم بالكود في الأسفل بتعريف البيانات التي سنقوم بتعرضها للنموذج وهي عبارة عن (Split MNIST Dataset) حيث تم تقسيم بيانات (MNIST) التي تحتوي بالأصل على 10 تصانيف (الأرقام العربية من 0 الى 9) الى خمسة مهام متتالية و تحتوي المهمة الأولى على الرقمين 0 و 1، ثم المهمة الثاني تحتوي على الرقمين 2 و3 وهكذا..

				
					scenario = SplitMNIST(n_experiences=5)
				
			

ثم نقوم بتعريف نموذج الذكاء الاصطناعي بالإضافة إلى طريقة التعلم ثم نبدأ تعليم النموذج

				
					# MODEL CREATION
model = SimpleMLP(num_classes=scenario.n_classes)

# DEFINE THE EVALUATION PLUGIN and LOGGERS
# The evaluation plugin manages the metrics computation.
# It takes as argument a list of metrics, collectes their results and returns
# them to the strategy it is attached to.

# log to Tensorboard
tb_logger = TensorboardLogger()

# log to text file
text_logger = TextLogger(open('log.txt', 'a'))

# print to stdout
interactive_logger = InteractiveLogger()

eval_plugin = EvaluationPlugin(
    accuracy_metrics(minibatch=False, epoch=True, experience=True, stream=True),
    loss_metrics(minibatch=False, epoch=True, experience=True, stream=True),
    #timing_metrics(epoch=True, epoch_running=True),
    forgetting_metrics(experience=True, stream=True),
    #cpu_usage_metrics(experience=True),
    confusion_matrix_metrics(num_classes=scenario.n_classes, save_image=False,
                             stream=True),
    #disk_usage_metrics(minibatch=True, epoch=True, experience=True, stream=True),
    loggers=[interactive_logger, text_logger, tb_logger]
)

# CREATE THE STRATEGY INSTANCE (NAIVE)
cl_strategy = Naive(
    model, SGD(model.parameters(), lr=0.001, momentum=0.9),
    CrossEntropyLoss(), train_mb_size=500, train_epochs=5, eval_mb_size=100,
    evaluator=eval_plugin)

# TRAINING LOOP
print('Starting experiment...')
results = []
for experience in scenario.train_stream:
    print("Start of experience: ", experience.current_experience)
    print("Current Classes: ", experience.classes_in_this_experience)

    # train returns a dictionary which contains all the metric values
    res = cl_strategy.train(experience)
    print('Training completed')

    print('Computing accuracy on the whole test set')
    # test also returns a dictionary which contains all the metric values
    results.append(cl_strategy.eval(scenario.test_stream))

				
			

بعد تشغيل الكود البرمجي الظاهر في الأعلى وإعادة تجربته مع عدة طرق للتعلم المستمر ، نلخص النتائج بالرسم البياني التالي:

نسبة الدقة النهائية على جميع المهام لـ مختلف طرق التعلم المستمر
Generative Replay 76.32%
EwC 18.31%
LwF 18.25%
Naïve 18.45%
تجدون كامل الكود البرمجي المستخدم في هذا الدرس في ملف واحد
تحياتي، عبدالعزيز العكوز.
نشرة فهم البريدية
لتبقى على اطلاع دائم على كل ما هو جديد مما تقدمه منصة فهم، انضم لنشرتنا البريدية.
طالب دراسات عليا في هندسة الحاسب اختصاص الذكاء الاصطناعي والاستشعار عن بعد بكلية الحاسب في جامعة الملك سعود. شغوف بتطبيقات الذكاء الاصطناعي بجميع أطيافه من تعلم الآلة، والتعلم العميق، ورؤية الحاسب. أقدّر رواد الأعمال أصحاب الفكر الهندسي مثل إيلون ماسك.
  1. Om omar Om omar

    مقال رائع منها للأعلى يارب

  2. زويمل مرزوق الفضل زويمل مرزوق الفضل

    بارك الله فيك وزادك من علمه وفضله

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *