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


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

هذا ما يُعرف بـ الذكاء الاصطناعي العدائي (Adversarial AI)، وهو أحد المجالات الأكثر إثارة للبحث، حيث ندرس نقاط ضعف النماذج وكيفية تحسينها.

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

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

في هذا المشروع العملي، قررت أن أجرب هذه الفكرة على نموذج MobileNetV2، أحد أشهر النماذج المدربة مسبقًا على مجموعة بيانات ImageNet، للتعرف على آلاف الكائنات.

البرنامج يقوم بمحاكاة هجوم عدائي على الصور. باختصار، نبدأ بصورة طبيعية، ثم نضيف تغييرات صغيرة جدًا على قيم البكسلات بحيث:

  • يظل المظهر البصري للصورة طبيعيًا للإنسان.
  • لكن النموذج يتعرف عليها بشكل خاطئ.


الخطوات الأساسية للفكرة كالتالي:

  1. تحميل نموذج مدرب مسبقًا (MobileNetV2).
  2. إدخال صورة طبيعية، مثل صورة باندا.
  3. حساب التدرجات (gradients) بالنسبة للصورة لتحديد كيفية تعديل البكسلات بحيث يُخدع النموذج.
  4. إنشاء نسخة معدلة من الصورة تُسمى الصورة العدائية (adversarial image).
  5. مقارنة تنبؤ النموذج بين الصورة الأصلية والصورة العدائية.


كيف يعمل الهجوم العدائي؟

البرنامج يستخدم خوارزمية FGSM (Fast Gradient Sign Method)، والتي تعمل بطريقة منهجية:

  • أولًا، نحسب دالة الخسارة (loss) للنموذج بالنسبة للصورة الأصلية. دالة الخسارة هي مقياس "الخطأ" للنموذج: كلما كانت القيمة كبيرة، يعني أن النموذج أخطأ كثيرًا، وكلما كانت صغيرة، يعني أن النموذج توقع بشكل صحيح تقريبًا.
  • ثانيًا، نحسب تدرج الخسارة بالنسبة لكل بكسل في الصورة باستخدام GradientTape. GradientTape هو أداة في TensorFlow لحساب أي اتجاه يجب أن نغير فيه الصورة لكي تزداد أو تنقص الخسارة. هذا يسمح لنا بمعرفة أي البكسلات تؤثر أكثر على تنبؤ النموذج.
  • ثالثًا، نعدل كل بكسل بإضافة إشارة التدرج (sign of the gradient) مضروبة في قيمة صغيرة epsilon.
  • النتيجة: صورة معدلة تبدو للعين البشرية طبيعية، لكن النموذج يخطئ في التعرف عليها.

يمكنك تخيل الأمر كما لو أنك تغيّر القليل من الظلال في الصورة: العين لا تلاحظ الفرق، لكن الذكاء الاصطناعي يتلقى بيانات مختلفة كليًا ويصل إلى استنتاج خاطئ.

خطوات عمل البرنامج:

البرنامج مكتوب بلغة Python ويستخدم مكتبات TensorFlow وKeras، ويتكون من عدة مراحل:
أولًا تحميل النموذج والوزن المدرب مسبقًا:
model = MobileNetV2(weights="imagenet") 

تحميل صورة ومعالجتها:

يمكنكم تحميل صورة محلية أو من خلال رابط ويب (هنا أقوم بتحميل صورة محلية)،
أيضًا يجب وضع الصورة داخل ملف المشروع وتسميته باسم واضح (قمت بتسمية الصورة بـ panda لأنني سأختبر البرنامج على صورة الباندا).
img = image.load_img("panda.jpg", target_size=(224, 224)) 
x = image.img_to_array(img) 
x = np.expand_dims(x, axis=0) 
x = preprocess_input(x) 
x = tf.convert_to_tensor(x, dtype=tf.float32) 

التنبؤ بالصورة الأصلية:

preds = model.predict(x) 
print("Original Prediction:", decode_predictions(preds, top=1)[0]) 

حساب التدرجات وإنشاء الصورة العدائية:

with tf.GradientTape() as tape: 
    tape.watch(x) 
    prediction = model(x) 
    loss = loss_object(tf.one_hot([388], preds.shape[-1]), prediction) 
 
gradient = tape.gradient(loss, x) 
signed_grad = tf.sign(gradient) 
adv_x = x + epsilon * signed_grad 
adv_x = tf.clip_by_value(adv_x, -1, 1) 

تنبؤ النموذج بالصورة العدائية:

adv_preds = model.predict(adv_x) 
print("Adversarial Prediction:", decode_predictions(adv_preds, top=1)[0]) 

بعد تشغيل البرنامج ستظهر نافذه تجمع بين الصورتين (الأصلية والعدائية) كما في الصورة:


لاحظوا كيف أن الصورة العدائية طبيعية للعين البشرية، وكيف أنه ليس بمقدورنا ملاحظة الفرق البصري الطفيف في البكسلات "مقابل الاختلاف الكبير في التنبؤ" من جانب نموذج الذكاء الاصطناعي.

النتائج:

  • التنبؤ الأصلي: giant_panda بثقة 69.03%
  • التنبؤ العدائي: titi (نوع من القرود) بثقة 25.46%


هذا يُظهر بوضوح كيف أن التعديل الطفيف غير المرئي على الصورة خدع النموذج تماماً وغيّر تصنيفه من "باندا عملاقة" إلى "قرد تيتي"!

قد تسأل: أين تكمن خطورة هذه التجربة؟

في الواقع هذه العملية العدائية للصور قد يستخدمها المهاجمون لأغراض تدميرية او تخريبية، فعلى الرغم من أن التجربة تعليمية، إلّا أن الهجمات العدائية لها إمكانات خطيرة إذا أُسيء استخدامها، مثل:

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

وعمومًا الأمثلة كثيرة وتشمل عددة مجالات منها:

  • التلاعب بالأنظمة الطبية
  • الاحتيال المالي
  • التضليل الإعلامي

هنا بعض الأمثلة من العالم الحقيقي:

  • وضع ملصقات على علامات الطرق جعلت السيارة تعتقد أن السرعة المسموحة 85 mph بدلاً من 35 mph
  • نظارات خاصة تجعل الشخص غير مرئي لكاميرات المراقبة
  • ملصقات صغيرة على الوجه تخدع أنظمة التعرف