Aprendizagem Neural Estruturada: Treinamento com Sinais Estruturados
Neural Structured Learning (NSL) é um novo paradigma de aprendizado para treinar redes neurais, aproveitando sinais estruturados, além de entradas de recursos. A estrutura pode ser explícita como representada por um gráfico ou implícita como induzida por perturbação adversária.
Sinais estruturados são comumente usados para representar relações ou similaridade entre amostras que podem ser rotuladas ou não rotuladas. Portanto, aproveitar esses sinais durante o treinamento da rede neural aproveita dados rotulados e não rotulados, o que pode melhorar a precisão do modelo, principalmente quando a quantidade de dados rotulados é relativamente pequena . Além disso, os modelos treinados com amostras geradas pela adição de perturbação adversária demonstraram ser robustos contra ataques maliciosos , que são projetados para enganar a previsão ou classificação de um modelo.
A NSL generaliza tanto a Aprendizagem de Gráficos Neurais quanto a Aprendizagem Adversarial . A estrutura NSL no TensorFlow fornece as seguintes APIs e ferramentas fáceis de usar para os desenvolvedores treinarem modelos com sinais estruturados:
- APIs Keras para permitir o treinamento com gráficos (estrutura explícita) e perturbações adversárias (estrutura implícita).
- Operações e funções do TF para permitir o treinamento com estrutura ao usar APIs TensorFlow de nível inferior
- Ferramentas para construir gráficos e construir entradas de gráficos para treinamento
A incorporação de sinais estruturados é feita apenas durante o treinamento. Portanto, o desempenho do fluxo de trabalho de veiculação/inferência permanece inalterado. Mais informações sobre aprendizagem estruturada neural podem ser encontradas na descrição do nosso framework . Para começar, consulte nosso guia de instalação e, para uma introdução prática à NSL, confira nossos tutoriais.
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})