แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
การสกัดคุณลักษณะเทียบกับการปรับจูนแบบละเอียด เลเยอร์ที่ตรึงไว้ และกรณีที่การเรียนรู้แบบถ่ายโอนมีประโยชน์
แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
การเรียนรู้แบบถ่ายโอนคืออะไร
การเรียนรู้แบบถ่ายโอนนำโมเดลที่ฝึกด้วยชุดข้อมูลขนาดใหญ่กลับมาใช้เป็นจุดเริ่มต้นสำหรับงานใหม่ที่เกี่ยวข้อง แทนที่จะเรียนรู้คุณลักษณะด้านภาพตั้งแต่ต้น คุณสามารถนำคุณลักษณะที่โครงข่ายเรียนรู้ไว้แล้วมาใช้ได้
วิธีนี้ลดปริมาณข้อมูลและทรัพยากรการคำนวณที่ต้องใช้เพื่อให้ได้ความแม่นยำสูงลงอย่างมาก
พื้นฐานของ ImageNet
โมเดลด้านภาพส่วนใหญ่ที่ฝึกไว้ล่วงหน้าถูกฝึกด้วย ImageNet ซึ่งมีภาพประมาณ 1.4 ล้านภาพ ครอบคลุม 1000 คลาส
ระหว่างการฝึกนี้ โครงข่ายจะเรียนรู้ลำดับชั้นของคุณลักษณะ ได้แก่ ขอบและสีในชั้นต้น พื้นผิวในชั้นกลาง และส่วนต่าง ๆ ของวัตถุใกล้ชั้นบน คุณลักษณะระดับต่ำเหล่านี้ถ่ายโอนไปใช้กับงานด้านภาพเกือบทุกประเภทได้ดี
เหตุใดคุณลักษณะระยะแรกจึงถ่ายโอนได้
ชั้นคอนโวลูชันแรก ๆ ตรวจจับรูปแบบทั่วไป เช่น ขอบ ก้อนรูปร่าง และการไล่ระดับสี ซึ่งปรากฏในภาพธรรมชาติทุกภาพ ไม่ว่าจะเป็นภาพแมว ภาพเอกซเรย์ หรือภาพถ่ายดาวเทียม
ชั้นที่ลึกกว่าจะมีความเฉพาะเจาะจงกับงานมากขึ้น เพราะนำขอบเหล่านั้นมาประกอบเป็นส่วนต่าง ๆ ของวัตถุใน ImageNet นี่จึงเป็นเหตุผลที่เรามักเก็บชั้นต้นไว้ แล้วเปลี่ยนหรือฝึกชั้นหลังใหม่
กลยุทธ์ที่ 1: การสกัดคุณลักษณะ
การสกัดคุณลักษณะจะตรึงทุกชั้นของฐานที่ฝึกไว้ล่วงหน้า ทำให้น้ำหนักของฐานไม่เปลี่ยนแปลง ฐานจะทำหน้าที่เป็นตัวสกัดคุณลักษณะแบบคงที่ และคุณจะฝึกเฉพาะส่วนหัวการจำแนกใหม่ขนาดเล็กที่อยู่ด้านบนเท่านั้น
ใช้วิธีนี้เมื่อชุดข้อมูลของคุณมีขนาดเล็กและคล้ายกับ ImageNet วิธีนี้ทำงานรวดเร็วและต้านทานการเรียนรู้เกินพอดี เนื่องจากมีพารามิเตอร์ที่สามารถฝึกได้จำนวนน้อย
base.trainable = False
model = Sequential([
base, # frozen ImageNet features
GlobalAveragePooling2D(),
Dense(num_classes, activation="softmax") # only this trains
])กลยุทธ์ที่ 2: การปรับจูนละเอียด
การปรับจูนละเอียดจะปลดการตรึงชั้นบนของฐาน แล้วฝึกชั้นเหล่านั้นร่วมกับส่วนหัว ทำให้โครงข่ายปรับคุณลักษณะระดับสูงให้เข้ากับข้อมูลเฉพาะของคุณได้
ใช้วิธีนี้เมื่อคุณมีข้อมูลมากขึ้นหรือโดเมนของคุณแตกต่างจาก ImageNet เช่น ภาพสแกนทางการแพทย์ ควรปรับจูนละเอียดด้วยอัตราการเรียนรู้ที่ต่ำมากเสมอ เพื่อหลีกเลี่ยงการทำลายน้ำหนักที่ฝึกไว้ล่วงหน้า
การสกัดคุณลักษณะเทียบกับการปรับจูนละเอียด
- การสกัดคุณลักษณะ: ตรึงฐาน ฝึกเฉพาะส่วนหัว ทำงานรวดเร็วมาก เหมาะที่สุดสำหรับข้อมูลขนาดเล็กและคล้ายกัน
- การปรับจูนละเอียด: ปลดการตรึงชั้นบนของฐานและฝึกส่วนหัวร่วมกัน ทำงานช้ากว่า เหมาะที่สุดสำหรับข้อมูลขนาดใหญ่หรือแตกต่างกัน
แนวทางที่ใช้กันทั่วไปคือทำการสกัดคุณลักษณะก่อน จากนั้นจึงปรับจูนละเอียดในระยะที่สองเมื่อส่วนหัวเริ่มคงที่
ข้อกำหนดด้านปริมาณข้อมูล
ปริมาณข้อมูลที่คุณมีจะเป็นตัวกำหนดกลยุทธ์:
- ภาพไม่กี่ร้อยภาพ: ใช้การสกัดคุณลักษณะเท่านั้น (ตรึงทุกอย่าง)
- ไม่กี่พันภาพ: สกัดคุณลักษณะก่อน จากนั้นปรับจูนละเอียดเฉพาะไม่กี่ชั้นบน
- หลายหมื่นภาพขึ้นไป: ปรับจูนละเอียดส่วนที่ใหญ่ขึ้นของฐาน หรืออาจปรับจูนทั้งโครงข่าย
ข้อมูลยิ่งน้อยยิ่งควรตรึงชั้นไว้มากขึ้น เพราะพารามิเตอร์ที่สามารถฝึกได้น้อยลงจะลดความเสี่ยงของการเรียนรู้เกินพอดี
การเปลี่ยนส่วนหัวการจำแนก
โมเดล ImageNet ให้ผลลัพธ์เป็น 1000 คลาส งานของคุณอาจมีจำนวนคลาสแตกต่างกัน ดังนั้นให้ลบส่วนบนเดิมออก (include_top=False) แล้วติดตั้งส่วนหัวของคุณเองที่มีขนาดตรงกับจำนวนคลาสของคุณ
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.2)(x)
outputs = layers.Dense(5, activation="softmax")(x) # 5 custom classes
model = Model(base.input, outputs)การประมวลผลล่วงหน้าต้องตรงกัน
ตระกูลโมเดลที่ฝึกไว้ล่วงหน้าแต่ละตระกูลคาดหวังอินพุตที่ปรับขนาดด้วยวิธีเดียวกับตอนฝึกด้วย ImageNet การใช้ preprocess_input ที่ตรงกันเป็นสิ่งจำเป็น มิฉะนั้นความแม่นยำจะลดลงอย่างมาก
from tensorflow.keras.applications.resnet50 import preprocess_input
# Scale pixels exactly as ResNet50 expects
x = preprocess_input(raw_image_batch)การควบคุมอัตราการเรียนรู้
ระหว่างการสกัดคุณลักษณะ อัตราการเรียนรู้ปกติ เช่น 1e-3 ก็เพียงพอ เพราะมีเพียงส่วนหัวใหม่ที่ฝึกเท่านั้น
ระหว่างการปรับจูนละเอียด คุณต้องลดอัตราการเรียนรู้ลงให้เล็กมาก เช่น 1e-5 การปรับครั้งใหญ่จะลบล้างน้ำหนัก ImageNet ที่เรียนรู้มาอย่างพิถีพิถัน ซึ่งเรียกปรากฏการณ์นี้ว่าการลืมอย่างรุนแรง
ขั้นตอนการทำงานทั่วไป
- โหลดฐานที่ฝึกไว้ล่วงหน้าด้วย
include_top=False - ตรึงฐานและฝึกส่วนหัวใหม่ (การสกัดคุณลักษณะ)
- ปลดการตรึงชั้นบนและฝึกใหม่ด้วยอัตราการเรียนรู้ที่เล็กมาก (การปรับจูนละเอียด)
- ประเมินผลและแปลงโมเดลเพื่อการนำไปใช้งาน
แนวทางแบบแบ่งระยะนี้ให้ความแม่นยำสูงได้แม้ใช้ชุดข้อมูลขนาดไม่ใหญ่มาก
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับกลยุทธ์การเรียนรู้แบบถ่ายโอนของคุณ
สรุป
คุณได้เรียนรู้ว่าการเรียนรู้แบบถ่ายโอนนำคุณลักษณะที่ฝึกไว้ล่วงหน้าด้วย ImageNet กลับมาใช้ (ภาพ 1.4 ล้านภาพ, 1000 คลาส) การสกัดคุณลักษณะจะตรึงฐานไว้สำหรับชุดข้อมูลขนาดเล็กและคล้ายกัน ส่วนการปรับจูนละเอียดจะปลดการตรึงชั้นบนด้วยอัตราการเรียนรู้ที่เล็กมากสำหรับข้อมูลขนาดใหญ่หรือแตกต่างกัน
ใช้การประมวลผลล่วงหน้าให้ตรงกับฐาน เปลี่ยนส่วนหัวให้เหมาะกับคลาสของคุณ และใช้ขั้นตอนการทำงานแบบแบ่งระยะ ต่อไปเราจะนำแนวคิดนี้ไปเขียนโค้ดด้วย VGG16 และ ResNet50
คำถามที่พบบ่อย
บทเรียน “แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน”
การสกัดคุณลักษณะเทียบกับการปรับจูนแบบละเอียด เลเยอร์ที่ตรึงไว้ และกรณีที่การเรียนรู้แบบถ่ายโอนมีประโยชน์ คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดและกลยุทธ์การเรียนรู้แบบถ่ายโอน
- การใช้ VGG16 และ ResNet50 เป็นแบบจำลองพื้นฐาน
- การปรับจูนแบบละเอียด: การยกเลิกการตรึงและการฝึกใหม่
- MobileNet และ EfficientNet สำหรับการนำไปใช้งานที่ขอบเครือข่าย