یادگیری ساختاری عصبی: آموزش با سیگنال های ساختاریافته

یادگیری ساختاری عصبی (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})