Pembelajaran Terstruktur Neural: Pelatihan dengan Sinyal Terstruktur

Neural Structured Learning (NSL) adalah paradigma pembelajaran baru untuk melatih jaringan saraf dengan memanfaatkan sinyal terstruktur selain input fitur. Struktur dapat eksplisit seperti yang diwakili oleh grafik atau implisit seperti yang disebabkan oleh gangguan permusuhan.

Sinyal terstruktur biasanya digunakan untuk mewakili hubungan atau kesamaan di antara sampel yang dapat diberi label atau tidak berlabel. Oleh karena itu, memanfaatkan sinyal ini selama pelatihan jaringan saraf memanfaatkan data berlabel dan tidak berlabel, yang dapat meningkatkan akurasi model, terutama ketika jumlah data berlabel relatif kecil . Selain itu, model yang dilatih dengan sampel yang dihasilkan dengan menambahkan gangguan permusuhan telah terbukti kuat terhadap serangan berbahaya , yang dirancang untuk menyesatkan prediksi atau klasifikasi model.

NSL menggeneralisasi ke Neural Graph Learning serta Adversarial Learning . Kerangka kerja NSL di TensorFlow menyediakan API dan alat yang mudah digunakan berikut bagi pengembang untuk melatih model dengan sinyal terstruktur:

  • Keras API untuk mengaktifkan pelatihan dengan grafik (struktur eksplisit) dan gangguan permusuhan (struktur implisit).
  • Operasi dan fungsi TF untuk mengaktifkan pelatihan dengan struktur saat menggunakan API TensorFlow tingkat lebih rendah
  • Alat untuk membuat grafik dan membuat input grafik untuk pelatihan

Memasukkan sinyal terstruktur dilakukan hanya selama pelatihan. Jadi, kinerja alur kerja penyajian/inferensi tetap tidak berubah. Informasi lebih lanjut tentang pembelajaran terstruktur saraf dapat ditemukan dalam deskripsi kerangka kerja kami. Untuk memulai, silakan lihat panduan penginstalan kami , dan untuk pengenalan praktis tentang NSL, lihat tutorial kami.

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})