神経構造学習: 構造化シグナルによるトレーニング

Neural Structured Learning (NSL)は、特徴入力に加えて構造化された信号を活用してニューラル ネットワークをトレーニングする新しい学習パラダイムです。構造は、グラフによって表されるように明示的にすることも、敵対的摂動によって誘発されるように暗黙的にすることもできます。
構造化された信号は、ラベル付けされているかどうかにかかわらず、サンプル間の関係または類似性を表すために一般的に使用されます。したがって、ニューラル ネットワークのトレーニング中にこれらの信号を利用すると、ラベル付きデータとラベルなしデータの両方が活用され、特にラベル付きデータの量が比較的少ない場合に、モデルの精度が向上します。さらに、敵対的摂動を追加することによって生成されたサンプルでトレーニングされたモデルは、モデルの予測または分類を誤解させるように設計された悪意のある攻撃に対して堅牢であることが示されています。
NSL は、 Neural Graph LearningとAdversarial Learningに一般化されています。 TensorFlow の NSL フレームワークは、開発者が構造化シグナルを使用してモデルをトレーニングするための次の使いやすい API とツールを提供します。
- グラフ (明示的な構造) と敵対的摂動 (暗黙的な構造) を使用したトレーニングを可能にするKeras API 。
- 下位レベルの TensorFlow API を使用するときに構造を使用したトレーニングを可能にするTF ops と関数
- グラフを作成し、トレーニング用のグラフ入力を構築するためのツール
構造化シグナルの組み込みは、トレーニング中にのみ行われます。そのため、提供/推論ワークフローのパフォーマンスは変わりません。ニューラル構造化学習の詳細については、フレームワークの説明を参照してください。開始するには、インストール ガイドを参照してください。また、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})