Nöral Yapılandırılmış Öğrenme: Yapılandırılmış Sinyallerle Eğitim

Sinirsel Yapılandırılmış Öğrenme (NSL) , özellik girdilerine ek olarak yapılandırılmış sinyallerden yararlanarak sinir ağlarını eğitmek için yeni bir öğrenme paradigmasıdır. Yapı, bir grafikle temsil edildiği gibi açık olabilir veya karşıt karışıklığın neden olduğu gibi örtük olabilir.

Yapılandırılmış sinyaller, etiketlenmiş veya etiketlenmemiş olabilecek örnekler arasındaki ilişkileri veya benzerliği temsil etmek için yaygın olarak kullanılır. Bu nedenle, sinir ağı eğitimi sırasında bu sinyallerden yararlanmak, özellikle etiketli veri miktarı nispeten küçük olduğunda, model doğruluğunu artırabilen hem etiketli hem de etiketsiz verileri kullanır. Ek olarak, düşmanca bozulma eklenerek oluşturulan örneklerle eğitilen modellerin, bir modelin tahminini veya sınıflandırmasını yanlış yönlendirmek için tasarlanmış kötü niyetli saldırılara karşı sağlam olduğu gösterilmiştir.

NSL, Neural Graph Learning'in yanı sıra Adversarial Learning'e genelleme yapar. TensorFlow'daki NSL çerçevesi, geliştiricilerin yapılandırılmış sinyallerle modelleri eğitmeleri için aşağıdaki kullanımı kolay API'leri ve araçları sağlar:

  • Keras API'leri , grafiklerle (açık yapı) ve çekişmeli bozulmalarla (örtük yapı) eğitime olanak tanır.
  • Daha düşük seviyeli TensorFlow API'leri kullanılırken yapıya sahip eğitimi etkinleştirmek için TF operasyonları ve işlevleri
  • Eğitim için grafikler oluşturmaya ve grafik girdileri oluşturmaya yönelik araçlar

Yapılandırılmış sinyallerin dahil edilmesi yalnızca eğitim sırasında yapılır. Bu nedenle, sunma/çıkarım iş akışının performansı değişmeden kalır. Nöral yapılandırılmış öğrenme hakkında daha fazla bilgi çerçeve tanımımızda bulunabilir. Başlamak için lütfen kurulum kılavuzumuza bakın ve NSL'ye pratik bir giriş için eğiticilerimize göz atın.

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