12월 7일 Women in ML 심포지엄 참석 지금 등록

신경 구조화 학습: 구조화된 신호를 사용한 훈련

NSL(Neural Structured Learning) 은 기능 입력 외에 구조화된 신호를 활용하여 신경망을 훈련하는 새로운 학습 패러다임입니다. 구조는 그래프로 표현되는 명시적이거나 적대적 섭동에 의해 유도되는 암시적일 수 있습니다.

구조화된 신호는 일반적으로 레이블이 지정되거나 레이블이 지정되지 않은 샘플 간의 관계 또는 유사성을 나타내는 데 사용됩니다. 따라서 신경망 훈련 중에 이러한 신호를 활용하면 레이블이 지정된 데이터와 레이블이 지정되지 않은 데이터를 모두 활용하여 특히 레이블이 지정된 데이터의 양이 상대적으로 적은 경우 모델 정확도를 향상시킬 수 있습니다. 또한, 적대적 교란을 추가하여 생성된 샘플로 훈련된 모델은 모델의 예측 또는 분류를 오도하도록 설계된 악의적인 공격에 대해 강력한 것으로 나타났습니다.

NSL은 Neural Graph LearningAdversarial Learning 으로 일반화됩니다. TensorFlow의 NSL 프레임워크는 개발자가 구조화된 신호로 모델을 훈련할 수 있도록 다음과 같은 사용하기 쉬운 API 및 도구를 제공합니다.

  • 그래프(명시적 구조) 및 적대적 교란(암시적 구조)을 사용한 교육을 가능하게 하는 Keras API .
  • 하위 수준 TensorFlow API를 사용할 때 구조를 사용하여 교육을 가능하게 하는 TF 작업 및 기능
  • 훈련을 위한 그래프 작성 및 그래프 입력 구성 도구

구조화된 신호 통합은 훈련 중에만 수행됩니다. 따라서 제공/추론 워크플로의 성능은 변경되지 않은 상태로 유지됩니다. 신경 구조화 학습에 대한 자세한 내용은 프레임워크 설명 에서 찾을 수 있습니다. 시작하려면 설치 가이드 를 참조하고 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})