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