Apprendimento strutturato neurale: allenamento con segnali strutturati
Neural Structured Learning (NSL) è un nuovo paradigma di apprendimento per addestrare le reti neurali sfruttando segnali strutturati oltre agli input delle funzionalità. La struttura può essere esplicita come rappresentata da un grafo o implicita come indotta da perturbazione contraddittoria.
I segnali strutturati sono comunemente usati per rappresentare relazioni o somiglianze tra campioni che possono essere etichettati o non etichettati. Pertanto, l'utilizzo di questi segnali durante l'addestramento della rete neurale sfrutta i dati sia etichettati che non etichettati, il che può migliorare l'accuratezza del modello, in particolare quando la quantità di dati etichettati è relativamente piccola . Inoltre, i modelli addestrati con campioni generati aggiungendo perturbazione del contraddittorio si sono dimostrati robusti contro gli attacchi dannosi , progettati per fuorviare la previsione o la classificazione di un modello.
NSL generalizza all'apprendimento con grafi neurali e all'apprendimento contraddittorio . Il framework NSL in TensorFlow fornisce le seguenti API e strumenti facili da usare per consentire agli sviluppatori di addestrare modelli con segnali strutturati:
- API Keras per abilitare la formazione con grafici (struttura esplicita) e perturbazioni contraddittorie (struttura implicita).
- Operazioni e funzioni TF per abilitare l'addestramento con struttura quando si utilizzano API TensorFlow di livello inferiore
- Strumenti per costruire grafici e costruire input grafici per la formazione
L'incorporazione di segnali strutturati viene eseguita solo durante l'allenamento. Pertanto, le prestazioni del flusso di lavoro di pubblicazione/inferenza rimangono invariate. Maggiori informazioni sull'apprendimento strutturato neurale possono essere trovate nella nostra descrizione del framework . Per iniziare, consulta la nostra guida all'installazione e, per un'introduzione pratica a NSL, dai un'occhiata ai nostri tutorial.
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})