การเรียนรู้เชิงโครงสร้างประสาท: การฝึกด้วยสัญญาณที่มีโครงสร้าง
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})