AI-For-Beginners/translations/th/lessons/4-ComputerVision/09-Autoencoders
leestott 86550af01f 🌐 Update translations via Co-op Translator 2025-09-23 09:48:20 +00:00
..
AutoEncodersPyTorch.ipynb 🌐 Update translations via Co-op Translator 2025-08-29 11:12:47 +00:00
AutoencodersTF.ipynb 🌐 Update translations via Co-op Translator 2025-08-29 11:12:47 +00:00
README.md 🌐 Update translations via Co-op Translator 2025-09-23 09:48:20 +00:00

README.md

ออโตเอนโคเดอร์

เมื่อฝึก CNN หนึ่งในปัญหาคือเราต้องการข้อมูลที่มีการติดป้ายกำกับจำนวนมาก ในกรณีของการจำแนกภาพ เราต้องแยกภาพออกเป็นคลาสต่าง ๆ ซึ่งเป็นงานที่ต้องทำด้วยมือ

แบบทดสอบก่อนเรียน

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

ออโตเอนโคเดอร์ คือ "ประเภทของเครือข่ายประสาทเทียมที่ใช้เรียนรู้การเข้ารหัสข้อมูลที่มีประสิทธิภาพจากข้อมูลที่ไม่มีการติดป้ายกำกับ"

เนื่องจากเรากำลังฝึกออโตเอนโคเดอร์เพื่อจับข้อมูลจากภาพต้นฉบับให้ได้มากที่สุดเพื่อการสร้างใหม่ที่แม่นยำ เครือข่ายจึงพยายามค้นหา การฝังตัว ที่ดีที่สุดของภาพอินพุตเพื่อจับความหมายของภาพ

AutoEncoder Diagram

ภาพจาก บล็อก 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 เราสามารถเปลี่ยนแปลงองค์ประกอบของเวกเตอร์แฝงเพื่อให้ได้ตัวเลขต่าง ๆ:

vaemnist

ภาพโดย Dmitry Soshnikov

สังเกตว่าภาพผสมกันอย่างไร เมื่อเราเริ่มได้เวกเตอร์แฝงจากส่วนต่าง ๆ ของพื้นที่พารามิเตอร์แฝง เราสามารถแสดงภาพพื้นที่นี้ใน 2 มิติได้เช่นกัน:

vaemnist cluster

ภาพโดย Dmitry Soshnikov

✍️ แบบฝึกหัด: ออโตเอนโคเดอร์

เรียนรู้เพิ่มเติมเกี่ยวกับออโตเอนโคเดอร์ในโน้ตบุ๊กต่อไปนี้:

คุณสมบัติของออโตเอนโคเดอร์

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

แบบทดสอบหลังเรียน

สรุป

ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับประเภทต่าง ๆ ของออโตเอนโคเดอร์ที่มีให้สำหรับนักวิทยาศาสตร์ AI คุณได้เรียนรู้วิธีสร้างและวิธีใช้มันเพื่อสร้างภาพขึ้นมาใหม่ นอกจากนี้คุณยังได้เรียนรู้เกี่ยวกับ VAE และวิธีใช้มันเพื่อสร้างภาพใหม่

🚀 ความท้าทาย

ในบทเรียนนี้ คุณได้เรียนรู้เกี่ยวกับการใช้ออโตเอนโคเดอร์สำหรับภาพ แต่พวกมันยังสามารถใช้กับดนตรีได้ด้วย! ลองดูโครงการ MusicVAE ของ Magenta ซึ่งใช้ออโตเอนโคเดอร์เพื่อเรียนรู้การสร้างดนตรีขึ้นมาใหม่ ลองทำ การทดลอง กับไลบรารีนี้เพื่อดูว่าคุณสามารถสร้างอะไรได้บ้าง

แบบทดสอบหลังเรียน

ทบทวนและศึกษาด้วยตนเอง

สำหรับการอ้างอิง อ่านเพิ่มเติมเกี่ยวกับออโตเอนโคเดอร์ในแหล่งข้อมูลเหล่านี้:

งานที่มอบหมาย

ในตอนท้ายของ โน้ตบุ๊กนี้ที่ใช้ TensorFlow คุณจะพบ 'งาน' - ใช้สิ่งนี้เป็นงานที่มอบหมายของคุณ