การเรียนรู้เชิงโครงสร้างประสาท: การฝึกด้วยสัญญาณที่มีโครงสร้าง

Neural Structured Learning (NSL) เป็นกระบวนทัศน์การเรียนรู้แบบใหม่ในการฝึกอบรมโครงข่ายประสาทเทียมโดยใช้ประโยชน์จากสัญญาณที่มีโครงสร้างนอกเหนือจากอินพุตคุณสมบัติ โครงสร้างสามารถแสดงได้อย่างชัดเจนโดยแสดงด้วยกราฟหรือโดยปริยายซึ่งเกิดจากการก่อกวนของปฏิปักษ์

สัญญาณที่มีโครงสร้างมักใช้เพื่อแสดงความสัมพันธ์หรือความคล้ายคลึงกันระหว่างตัวอย่างที่อาจติดฉลากหรือไม่ติดฉลาก ดังนั้น การใช้ประโยชน์จากสัญญาณเหล่านี้ระหว่างการฝึกโครงข่ายประสาทเทียมจะควบคุมทั้งข้อมูลที่ติดฉลากและไม่ติดฉลาก ซึ่งสามารถปรับปรุงความแม่นยำของแบบจำลองได้ โดยเฉพาะอย่างยิ่งเมื่อ ปริมาณของข้อมูลที่ติดฉลากค่อนข้างน้อย นอกจากนี้ โมเดลที่ได้รับการฝึกด้วยตัวอย่างที่สร้างขึ้นโดยการเพิ่มการรบกวนจากฝ่ายตรงข้ามได้แสดงให้เห็นว่ามี ประสิทธิภาพในการต่อต้านการโจมตีที่เป็นอันตราย ซึ่งได้รับการออกแบบมาเพื่อทำให้การคาดการณ์หรือการจัดหมวดหมู่ของโมเดลเข้าใจผิด

NSL สรุปให้ Neural Graph Learning และ Adversarial Learning กรอบงาน NSL ใน TensorFlow มี API และเครื่องมือที่ใช้งานง่ายต่อไปนี้สำหรับนักพัฒนาในการฝึกโมเดลด้วยสัญญาณที่มีโครงสร้าง:

  • Keras APIs เพื่อเปิดใช้งานการฝึกอบรมด้วยกราฟ (โครงสร้างที่ชัดเจน) และการรบกวนจากฝ่ายตรงข้าม (โครงสร้างโดยนัย)
  • TF ops และฟังก์ชัน เพื่อเปิดใช้งานการฝึกอบรมด้วยโครงสร้างเมื่อใช้ 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})