Нейронно-структурированное обучение: обучение со структурированными сигналами

Нейронно-структурированное обучение (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})