ML Community Day คือวันที่ 9 พฤศจิกายน! ร่วมกับเราสำหรับการปรับปรุงจาก TensorFlow, JAX และอื่น ๆ เรียนรู้เพิ่มเติม

Neural Structured Learning: การฝึกกับสัญญาณที่มีโครงสร้าง

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

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

NSL ให้ความสำคัญกับ การเรียนรู้กราฟประสาท เช่นเดียวกับ การเรียนรู้ที่ ไม่พึงประสงค์ เฟรมเวิร์ก 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})