التعلم المنظم العصبي: التدريب باستخدام الإشارات المنظمة

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

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

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

  • واجهات برمجة تطبيقات Keras لتمكين التدريب باستخدام الرسوم البيانية (البنية الصريحة) والاضطرابات العدائية (البنية الضمنية).
  • عمليات ووظائف TF لتمكين التدريب مع الهيكل عند استخدام واجهات برمجة تطبيقات TensorFlow ذات المستوى الأدنى
  • أدوات لبناء الرسوم البيانية وإنشاء مدخلات الرسم البياني للتدريب

يتم دمج الإشارات المنظمة فقط أثناء التدريب. لذلك ، يظل أداء سير عمل التقديم / الاستدلال دون تغيير. يمكن العثور على مزيد من المعلومات حول التعلم المنظم العصبي في وصف إطار العمل الخاص بنا. للبدء ، يرجى الاطلاع على دليل التثبيت الخاص بنا ، وللحصول على مقدمة عملية لـ NSL ، راجع البرامج التعليمية الخاصة بنا.

import tensorflow as tf
import neural_structured_learning as nsl

# Prepare data.
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# Create a base model -- sequential, functional, or subclass.
model = tf.keras.Sequential([
    tf.keras.Input((28, 28), name='feature'),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation=tf.nn.relu),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])

# Wrap the model with adversarial regularization.
adv_config = nsl.configs.make_adv_reg_config(multiplier=0.2, adv_step_size=0.05)
adv_model = nsl.keras.AdversarialRegularization(model, adv_config=adv_config)

# Compile, train, and evaluate.
adv_model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
adv_model.fit({'feature': x_train, 'label': y_train}, batch_size=32, epochs=5)
adv_model.evaluate({'feature': x_test, 'label': y_test})