神经结构化学习:使用结构化信号进行训练
神经结构化学习 (NSL) 是一种新的学习范式,通过利用结构化信号以及特征输入来训练神经网络。结构可以是显式的,如由图表示,也可以是隐式的,如由对抗性扰动诱导。
结构化信号通常用于表示样本之间的关系或相似性,这些样本可能是标记的或未标记的。因此,在神经网络训练期间利用这些信号可以利用标记数据和未标记数据,从而提高模型精度,尤其是在标记数据量相对较少的情况下。此外,使用添加对抗性扰动生成的样本训练的模型已被证明对恶意攻击具有鲁棒性,这些攻击旨在误导模型的预测或分类。
NSL 概括为神经图学习 以及对抗性学习。TensorFlow 中的 NSL 框架为开发人员提供了以下易于使用的 API 和工具,用于使用结构化信号训练模型
- Keras API 用于启用使用图(显式结构)和对抗性扰动(隐式结构)进行训练。
- TF 操作和函数 用于在使用低级 TensorFlow API 时启用使用结构进行训练
- 工具 用于构建图并构建用于训练的图输入
仅在训练期间才合并结构化信号。因此,服务/推理工作流程的性能保持不变。有关神经结构化学习的更多信息,请参阅我们的框架描述。要开始使用,请参阅我们的安装指南,并了解 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})