หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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

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})