Neural Structured Learning:使用結構化信號進行訓練

Neural Structured Learning (NSL) 是一套新的學習模式,運用特徵輸入內容和結構化信號來訓練類神經網路。結構可以是用圖形表示的顯式結構,也可以是由對抗式擾動產生的隱式結構。

結構化信號通常用於表示樣本之間的關係或相似性 (樣本可能已加上標籤,也可能未加上標籤)。因此,在訓練類神經網路期間運用這些信號,可讓你掌握已加上標籤和未加上標籤的資料,進而提高模型準確率 (尤其是當已加上標籤的資料量相對較少的時候)。此外,如果訓練模型的樣本是透過增加對抗式擾動所產生,模型將能有效對抗惡意攻擊 (惡意攻擊的目標是讓模型產生不正確的預測或分類)。

NSL 可一般化為類神經圖形學習對抗式學習。TensorFlow 中的 NSL 架構提供下列容易使用的 API 和工具,協助開發人員使用結構化信號來訓練模型:

  • Keras API:可讓你使用圖形 (顯式結構) 以及對抗式擾動 (隱式結構) 來訓練模型。
  • TF 運算和函式:讓你在使用較低階的 TensorFlow API 時,運用結構訓練模型
  • 工具:用於建構圖形及建立圖形輸入內容以進行訓練

結構化信號只會在訓練期間進行整合,因此不會影響提供/推論工作流程的效能。如要進一步瞭解 Neural Structured Learning,請參閱我們的架構說明。請參閱我們的安裝指南,瞭解如何開始使用;如需 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})