16 KiB
ออโตเอนโคเดอร์
เมื่อฝึก CNN หนึ่งในปัญหาคือเราต้องการข้อมูลที่มีการติดป้ายกำกับจำนวนมาก ในกรณีของการจำแนกภาพ เราต้องแยกภาพออกเป็นคลาสต่าง ๆ ซึ่งเป็นงานที่ต้องทำด้วยมือ
แบบทดสอบก่อนเรียน
อย่างไรก็ตาม เราอาจต้องการใช้ข้อมูลดิบ (ที่ไม่มีการติดป้ายกำกับ) เพื่อฝึกตัวดึงคุณลักษณะของ CNN ซึ่งเรียกว่า การเรียนรู้แบบกึ่งกำกับดูแล แทนที่จะใช้ป้ายกำกับ เราจะใช้ภาพฝึกเป็นทั้งอินพุตและเอาต์พุตของเครือข่าย แนวคิดหลักของ ออโตเอนโคเดอร์ คือเราจะมี เครือข่ายเอนโคเดอร์ ที่แปลงภาพอินพุตไปเป็น พื้นที่แฝง (โดยปกติจะเป็นเวกเตอร์ที่มีขนาดเล็กกว่า) จากนั้น เครือข่ายดีโคเดอร์ ซึ่งมีเป้าหมายในการสร้างภาพต้นฉบับขึ้นมาใหม่
✅ ออโตเอนโคเดอร์ คือ "ประเภทของเครือข่ายประสาทเทียมที่ใช้เรียนรู้การเข้ารหัสข้อมูลที่มีประสิทธิภาพจากข้อมูลที่ไม่มีการติดป้ายกำกับ"
เนื่องจากเรากำลังฝึกออโตเอนโคเดอร์เพื่อจับข้อมูลจากภาพต้นฉบับให้ได้มากที่สุดเพื่อการสร้างใหม่ที่แม่นยำ เครือข่ายจึงพยายามค้นหา การฝังตัว ที่ดีที่สุดของภาพอินพุตเพื่อจับความหมายของภาพ
ภาพจาก บล็อก Keras
สถานการณ์ที่ใช้ Autoencoders
แม้ว่าการสร้างภาพต้นฉบับขึ้นมาใหม่อาจดูเหมือนไม่มีประโยชน์ในตัวเอง แต่มีบางสถานการณ์ที่ออโตเอนโคเดอร์มีประโยชน์อย่างยิ่ง:
- ลดมิติของภาพเพื่อการแสดงผล หรือ ฝึกการฝังตัวของภาพ โดยทั่วไปออโตเอนโคเดอร์ให้ผลลัพธ์ที่ดีกว่า PCA เพราะมันคำนึงถึงลักษณะเชิงพื้นที่ของภาพและคุณลักษณะเชิงลำดับชั้น
- การลบสัญญาณรบกวน เช่น การลบเสียงรบกวนออกจากภาพ เนื่องจากเสียงรบกวนมีข้อมูลที่ไม่มีประโยชน์มากมาย ออโตเอนโคเดอร์ไม่สามารถใส่ข้อมูลทั้งหมดลงในพื้นที่แฝงที่ค่อนข้างเล็กได้ ดังนั้นมันจึงจับเฉพาะส่วนสำคัญของภาพ เมื่อฝึกตัวลบสัญญาณรบกวน เราเริ่มต้นด้วยภาพต้นฉบับ และใช้ภาพที่มีการเพิ่มเสียงรบกวนเทียมเป็นอินพุตสำหรับออโตเอนโคเดอร์
- การเพิ่มความละเอียดของภาพ โดยเริ่มต้นจากภาพที่มีความละเอียดสูง และใช้ภาพที่มีความละเอียดต่ำกว่าเป็นอินพุตของออโตเอนโคเดอร์
- โมเดลการสร้าง เมื่อเราฝึกออโตเอนโคเดอร์แล้ว ส่วนดีโคเดอร์สามารถใช้สร้างวัตถุใหม่โดยเริ่มจากเวกเตอร์แฝงแบบสุ่ม
ออโตเอนโคเดอร์แบบแปรผัน (VAE)
ออโตเอนโคเดอร์แบบดั้งเดิมลดมิติของข้อมูลอินพุตโดยการค้นหาคุณลักษณะที่สำคัญของภาพอินพุต อย่างไรก็ตาม เวกเตอร์แฝงมักไม่มีความหมายมากนัก กล่าวคือ หากใช้ชุดข้อมูล MNIST เป็นตัวอย่าง การค้นหาว่าตัวเลขใดที่สอดคล้องกับเวกเตอร์แฝงต่าง ๆ ไม่ใช่เรื่องง่าย เพราะเวกเตอร์แฝงที่ใกล้กันไม่ได้หมายความว่าจะสอดคล้องกับตัวเลขเดียวกันเสมอไป
ในทางกลับกัน หากต้องการฝึก โมเดลการสร้าง จะดีกว่าหากมีความเข้าใจเกี่ยวกับพื้นที่แฝง แนวคิดนี้นำเราไปสู่ ออโตเอนโคเดอร์แบบแปรผัน (VAE)
VAE คือออโตเอนโคเดอร์ที่เรียนรู้การทำนาย การแจกแจงทางสถิติ ของพารามิเตอร์แฝง หรือที่เรียกว่า การแจกแจงแฝง ตัวอย่างเช่น เราอาจต้องการให้เวกเตอร์แฝงมีการแจกแจงแบบปกติที่มีค่าเฉลี่ย zmean และส่วนเบี่ยงเบนมาตรฐาน zsigma (ทั้งค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานเป็นเวกเตอร์ที่มีมิติ d) เอนโคเดอร์ใน VAE เรียนรู้การทำนายพารามิเตอร์เหล่านี้ และดีโคเดอร์จะใช้เวกเตอร์สุ่มจากการแจกแจงนี้เพื่อสร้างวัตถุขึ้นมาใหม่
สรุปได้ว่า:
- จากเวกเตอร์อินพุต เราทำนาย
z_meanและz_log_sigma(แทนที่จะทำนายส่วนเบี่ยงเบนมาตรฐานโดยตรง เราทำนายลอการิทึมของมัน) - เราสุ่มเวกเตอร์
sampleจากการแจกแจง N(zmean,exp(zlog_sigma)) - ดีโคเดอร์พยายามถอดรหัสภาพต้นฉบับโดยใช้
sampleเป็นเวกเตอร์อินพุต
ภาพจาก บล็อกโพสต์นี้ โดย Isaak Dykeman
ออโตเอนโคเดอร์แบบแปรผันใช้ฟังก์ชันการสูญเสียที่ซับซ้อนซึ่งประกอบด้วยสองส่วน:
- การสูญเสียจากการสร้างใหม่ เป็นฟังก์ชันการสูญเสียที่แสดงให้เห็นว่าภาพที่สร้างขึ้นใหม่ใกล้เคียงกับเป้าหมายมากแค่ไหน (อาจเป็น Mean Squared Error หรือ MSE) ซึ่งเป็นฟังก์ชันการสูญเสียเดียวกับในออโตเอนโคเดอร์แบบปกติ
- การสูญเสีย KL ซึ่งทำให้แน่ใจว่าการแจกแจงตัวแปรแฝงยังคงใกล้เคียงกับการแจกแจงแบบปกติ โดยอิงจากแนวคิดของ Kullback-Leibler divergence ซึ่งเป็นเมตริกที่ใช้ประเมินว่าการแจกแจงทางสถิติสองแบบมีความคล้ายคลึงกันมากแค่ไหน
ข้อดีสำคัญของ VAE คือมันช่วยให้เราสร้างภาพใหม่ได้ง่ายขึ้น เพราะเรารู้ว่าควรสุ่มเวกเตอร์แฝงจากการแจกแจงใด ตัวอย่างเช่น หากเราฝึก VAE ด้วยเวกเตอร์แฝง 2 มิติบน MNIST เราสามารถเปลี่ยนแปลงองค์ประกอบของเวกเตอร์แฝงเพื่อให้ได้ตัวเลขต่าง ๆ:
ภาพโดย Dmitry Soshnikov
สังเกตว่าภาพผสมกันอย่างไร เมื่อเราเริ่มได้เวกเตอร์แฝงจากส่วนต่าง ๆ ของพื้นที่พารามิเตอร์แฝง เราสามารถแสดงภาพพื้นที่นี้ใน 2 มิติได้เช่นกัน:
ภาพโดย Dmitry Soshnikov
✍️ แบบฝึกหัด: ออโตเอนโคเดอร์
เรียนรู้เพิ่มเติมเกี่ยวกับออโตเอนโคเดอร์ในโน้ตบุ๊กต่อไปนี้:
คุณสมบัติของออโตเอนโคเดอร์
- เฉพาะข้อมูล - มันทำงานได้ดีเฉพาะกับประเภทของภาพที่ได้รับการฝึกมาเท่านั้น ตัวอย่างเช่น หากเราฝึกเครือข่ายเพิ่มความละเอียดบนภาพดอกไม้ มันจะไม่ทำงานได้ดีบนภาพบุคคล เพราะเครือข่ายสามารถสร้างภาพที่มีความละเอียดสูงขึ้นโดยการนำรายละเอียดที่ละเอียดมาจากคุณลักษณะที่เรียนรู้จากชุดข้อมูลฝึก
- สูญเสียข้อมูลบางส่วน - ภาพที่สร้างขึ้นใหม่ไม่เหมือนกับภาพต้นฉบับ ลักษณะของการสูญเสียถูกกำหนดโดย ฟังก์ชันการสูญเสีย ที่ใช้ระหว่างการฝึก
- ทำงานกับ ข้อมูลที่ไม่มีการติดป้ายกำกับ
แบบทดสอบหลังเรียน
สรุป
ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับประเภทต่าง ๆ ของออโตเอนโคเดอร์ที่มีให้สำหรับนักวิทยาศาสตร์ AI คุณได้เรียนรู้วิธีสร้างและวิธีใช้มันเพื่อสร้างภาพขึ้นมาใหม่ นอกจากนี้คุณยังได้เรียนรู้เกี่ยวกับ VAE และวิธีใช้มันเพื่อสร้างภาพใหม่
🚀 ความท้าทาย
ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับการใช้ออโตเอนโคเดอร์สำหรับภาพ แต่พวกมันยังสามารถใช้กับดนตรีได้ด้วย! ลองดูโครงการ MusicVAE ของ Magenta ซึ่งใช้ออโตเอนโคเดอร์เพื่อเรียนรู้การสร้างดนตรีขึ้นมาใหม่ ลองทำ การทดลอง กับไลบรารีนี้เพื่อดูว่าคุณสามารถสร้างอะไรได้บ้าง
แบบทดสอบหลังเรียน
ทบทวนและศึกษาด้วยตนเอง
สำหรับการอ้างอิง อ่านเพิ่มเติมเกี่ยวกับออโตเอนโคเดอร์ในแหล่งข้อมูลเหล่านี้:
- การสร้างออโตเอนโคเดอร์ใน Keras
- บล็อกโพสต์บน NeuroHive
- Variational Autoencoders Explained
- Conditional Variational Autoencoders
งานที่มอบหมาย
ในตอนท้ายของ โน้ตบุ๊กนี้ที่ใช้ TensorFlow คุณจะพบ 'งาน' - ใช้สิ่งนี้เป็นงานที่มอบหมายของคุณ
