Нейронное структурированное обучение: обучение с помощью структурированных сигналов

Нейронное структурированное обучение (NSL) — это новая парадигма обучения для обучения нейронных сетей за счет использования структурированных сигналов в дополнение к входным данным. Структура может быть явной, представленной графом, или неявной, вызванной враждебным возмущением.

Структурированные сигналы обычно используются для представления отношений или подобия между образцами, которые могут быть помечены или не помечены. Поэтому при использовании этих сигналов во время обучения нейронной сети используются как размеченные, так и неразмеченные данные, что может повысить точность модели, особенно когда количество размеченных данных относительно невелико . Кроме того, было показано, что модели, обученные с помощью выборок, созданных путем добавления враждебных возмущений, устойчивы к злонамеренным атакам , которые предназначены для того, чтобы ввести в заблуждение прогноз или классификацию модели.

NSL обобщает обучение нейронных графов , а также состязательное обучение . Платформа NSL в TensorFlow предоставляет разработчикам следующие простые в использовании API и инструменты для обучения моделей с помощью структурированных сигналов:

  • API- интерфейсы Keras для обеспечения обучения с помощью графиков (явная структура) и враждебных возмущений (неявная структура).
  • Операции и функции TF для обеспечения обучения со структурой при использовании API TensorFlow более низкого уровня.
  • Инструменты для построения графиков и построения входных данных для обучения

Включение структурированных сигналов осуществляется только во время обучения. Таким образом, производительность рабочего процесса обслуживания/вывода остается неизменной. Больше информации о нейронном структурированном обучении можно найти в описании нашего фреймворка . Чтобы начать работу, ознакомьтесь с нашим руководством по установке , а для практического ознакомления с NSL ознакомьтесь с нашими учебными пособиями.

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