Aprendizaje estructurado neuronal: entrenamiento con señales estructuradas

El aprendizaje estructurado neuronal (NSL) es un nuevo paradigma de aprendizaje para entrenar redes neuronales mediante el aprovechamiento de señales estructuradas además de entradas de características. La estructura puede ser explícita, representada por un gráfico, o implícita, inducida por una perturbación antagónica.

Las señales estructuradas se usan comúnmente para representar relaciones o similitudes entre muestras que pueden estar etiquetadas o no etiquetadas. Por lo tanto, aprovechar estas señales durante el entrenamiento de la red neuronal aprovecha tanto los datos etiquetados como los no etiquetados, lo que puede mejorar la precisión del modelo, especialmente cuando la cantidad de datos etiquetados es relativamente pequeña . Además, se ha demostrado que los modelos entrenados con muestras que se generan mediante la adición de perturbaciones antagónicas son resistentes a los ataques malintencionados , que están diseñados para confundir la predicción o la clasificación de un modelo.

NSL se generaliza a Neural Graph Learning así como Adversarial Learning . El marco NSL en TensorFlow proporciona las siguientes API y herramientas fáciles de usar para que los desarrolladores entrenen modelos con señales estructuradas:

  • API de Keras para permitir el entrenamiento con gráficos (estructura explícita) y perturbaciones antagónicas (estructura implícita).
  • Operaciones y funciones de TF para habilitar el entrenamiento con estructura cuando se usan API de TensorFlow de nivel inferior
  • Herramientas para construir gráficos y construir entradas de gráficos para entrenamiento

La incorporación de señales estructuradas se realiza únicamente durante el entrenamiento. Por lo tanto, el rendimiento del flujo de trabajo de servicio/inferencia permanece sin cambios. Puede encontrar más información sobre el aprendizaje estructurado neuronal en nuestra descripción del marco . Para comenzar, consulte nuestra guía de instalación y, para obtener una introducción práctica a NSL, consulte nuestros tutoriales.

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