למידה מובנית עצבית: אימון עם אותות מובנים

למידה מובנית עצבית (NSL) היא פרדיגמת למידה חדשה להכשרת רשתות עצביות על ידי מינוף אותות מובנים בנוסף לתשומות תכונות. המבנה יכול להיות מפורש כפי שהוא מיוצג על ידי גרף או משתמע כתוצאה מההפרעה היריבית.

בדרך כלל משתמשים באותות מובנים כדי לייצג קשרים או דמיון בין דגימות שעשויות להיות מתויגות או ללא תווית. לכן, מינוף אותות אלה במהלך אימונים ברשת עצבית רותם נתונים מסומנים ובלתי מסומנים, מה שיכול לשפר את דיוק המודל, במיוחד כאשר כמות הנתונים המסומנת קטנה יחסית . בנוסף, מודלים שהוכשרו עם דגימות שנוצרו על ידי הוספת הפרעה יריבה הוכחו כחסינים כנגד התקפות זדוניות , שנועדו להטעות את החיזוי או הסיווג של המודל.

NSL מכליל ללימוד גרפים עצביים כמו גם למידה יריבה . מסגרת NSL ב- TensorFlow מספקת את ממשקי ה- API והכלים הקלים לשימוש הבאים למפתחים להכשיר מודלים עם אותות מובנים:

  • ממשקי API של Keras כדי לאפשר אימונים עם גרפים (מבנה מפורש) והפרעות סותרות (מבנה מרומז).
  • TF אופציות ופונקציות המאפשרות אימון עם מבנה בעת שימוש בממשקי API של 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})