จากใน ep เรื่อง AI จำแนกรูปภาพ Image Classification หมา แมว 37 สายพันธุ์ ใน ep นี้เราจะมาเรียนรู้เทคนิคเพิ่มเติม ในเรื่อง Data Augmentation คือ Mixup และ Loss Function คือ Label Smoothing เพื่อแก้ปัญหาบางอย่างในการเทรนโมเดล Machine Learning ให้มีประสิทธิภาพดีขึ้น
Mixup คืออะไร
ตรงตามชื่อ Mixup คือ การผสมข้อมูลตัวอย่างในการเทรนโมเดล เช่น เอารูปใน Training Set มาผสมกัน โดยไม่สนใจว่าจะอยู่ Class เดียวกันหรือไม่ นำข้อมูลรูปมารวมกันแบบเส้นตรง
new_image = t * image1 + (1-t) * image2
สมมติ t เป็นเลขทศนิยม มีค่าระหว่าง 0 และ 1 ส่วน Label ก็ทำเหมือนกัน ด้วย t จากข้างบน
new_label = t * label1 + (1-t) * label2
โดยสมมติว่า Label เป็น One-Hot Encoding
หมา 70% + แมว 30%

รูปด้านบนนี้คือรูปอะไร? หมาหรือแมว? คำตอบคือ หมาพันธุ์ปั๊ก 70% + แมวพันธุ์ Birman 30%
ดังรูปด้านบน เป็นการยาก สำหรับสายตามนุษย์ ที่จะทำความเข้าใจกับรูปแบบนี้ (ถึงจะมองเห็นลาง ๆ แต่ก็ยังยากอยู่ดี) แต่สำหรับ AI / Machine Learning เป็นอะไรที่ง่ายมาก แถมยังช่วยให้สามารถเทรน / เรียนรู้ อย่างมีประสิทธิภาพเพิ่มมากขึ้นอีกด้วย
ความแตกต่างที่เห็นชัดเจนก็คือ Loss จะมากกว่า เทรนแบบปกติ ถึงแม้ Accuracy จะมากกว่าก็ตาม หมายความว่าโมเดลอาจจะทำนายด้วยความมั่นใจน้อยลงกว่าปกติ
โดยใน Implementation ก็มีรายละเอียดปลีกย่อยลงไปอีก เช่น การ Random ไม่ได้ผสมทุกครั้ง และไม่ได้ใช้ 0.7 / 0.3 ตลอด
เทคนิคใกล้เคียง Mixup เช่น AugMix, CutOut และ CutMix

มีเทคนิคอื่น ๆ ที่คล้ายกันกับ Mixup เรียกว่า AugMix, CutOut และ CutMix แต่ใช้การตัดแปะรูป หรือผสมค่าสีที่ซับซ้อนมากขึ้น จะอธิบายต่อไป
Label Smoothing คืออะไร

จากการรวมภาพ รวม Label ข้างบน แทนที่จะ Label จะเป็น One-Hot Encoding แบบปกติ ใช้กับ Cross Entropy Loss Function ในงาน Classification เหมือน ep ที่ผ่าน ๆ มา
Label กลายเป็นค่าเฉลี่ย Weight ตาม t เช่น 0.7 / 0.3 ไม่ได้เป็น 0 / 1 สุดโต่งเหมือนอย่างเคย
Dataset ข้อมูลคุณภาพไม่ค่อยดี
นักวิจัยพบว่า ในเคสที่ Dataset ข้อมูลคุณภาพไม่ค่อยดี Label มีความผิดพลาด ไม่ตรง 100% ถ้าเราบังคับให้ Label เป็น 0 / 1 กับข้อมูลที่ผิด จะทำให้โมเดลเรียนรู้ได้แย่ลง Loss Function จะ Penalty มากเกินไป โมเดลจะเรียนรู้จาก Label ผิด ๆ เหล่านั้นอย่างมั่นใจเกินไป
วิธีแก้ในเคสนี้ คือ Label Smoothing แทนที่เราจะใช้ One-Hot Encoding แบบปกติ 0 / 1 สำหรับ Dataset ข้อมูลที่คุณภาพไม่ค่อยดี เราจะใช้ 0.1 / 0.9 แทน
โดยใน Implementation ก็มีรายละเอียดปลีกย่อยลงไปอีก เช่น การ Random ไม่ได้ใช้ 0.1 / 0.9 ทุกครั้ง เป็นต้น