Overfitting จำคำตอบของข้อสอบอย่างเดียว ไม่สามารถเข้าใจความรู้ที่แท้จริงได้ — ปัญหาที่ AI เจอเหมือนมนุษย์
สวัสดีครับ ในบทความนี้ผมจะมาพูดถึงคำว่า Overfitting ซึ่งเป็นเรื่องที่ต้องระวังในการสร้างโมเดล เพราะมันจะทำให้โมเดลของเรามีประสิทธิภาพที่ลดลง แต่ว่าอะไรคือ Overfitting และอะไรคือสาเหตุที่มันเกิดขึ้น ลองมาติดตามกันในบทความนี้เลยครับ
ในการสร้างโมเดลทาง Machine Learning หรือ AI ขึ้นมาด้วยวิธีการเรียนแบบมีผู้สอน (Supervised Learning) นั้น โดยทั่วไปแล้วเราก็มักจะสอนโมเดลด้วยชุดข้อมูลจำนวนหนึ่ง แล้วเราก็จะคาดหวังให้โมเดลของเราเรียนรู้ความสัมพันธ์ของ X และ Y ว่าเมื่อ X มีรูปแบบใด แล้วจะก่อให้เกิด Y แบบใด
ตัวอย่างของความสัมพันธ์ X และ Y เช่น เมื่อเห็นเมฆดำปกคลุม ก็จะพกร่มติดตัวออกจากบ้านไปด้วยเพราะรู้ว่าเมื่อ X คือมีเมฆดำ ก็มีโอกาสเกิด Y คือมีฝนตกสูง เป็นต้น
มีขั้นตอนคือ
- ให้โมเดลของเราเรียนรู้จากชุดข้อมูลสำหรับสอน (Training Dataset)
- นำไปวัดผลการทำนายด้วยชุดข้อมูลทดสอบ (Testing Dataset)
ซึ่งการวัดผลกับชุดข้อมูลทดสอบนั้น เราทำเพื่อจำลองว่าถ้าเราเอาโมเดลไปใช้ในสถานการณ์จริง ที่โมเดลของเราต้องทำนายผลจากข้อมูลใหม่ที่ไม่เคยเห็นมาก่อนแล้ว โมเดลของเราจะสามารถทำนายได้อย่างถูกต้องอยู่หรือไม่

จุดประสงค์ที่แท้จริงของเราการสอนโมเดลของเราก็คือ ต้องการให้โมเดลของเราเข้าใจความสัมพันธ์ของ X และ Y ใช่ไหมครับ ผมจะขอเรียกความสัมพันธ์นี้ว่า “ความรู้” ของโมเดลก็แล้วกัน การวัดผลด้วยชุดข้อมูลทดสอบคือตัววัดว่าโมเดลของเรานั้นมีความรู้ที่ดีหรือไม่
สมมุติว่าเราสอนโมเดล Neural Network หนึ่งให้แยกแยะภาพ “กระต่าย” และ “ม้า” ความรู้ที่เราอยากให้โมเดลมีก็คือ รู้ว่าเมื่อสัตว์ในภาพที่มีหูยาว มีขนสีขาวปุกปุย คือกระต่าย และสัตว์ในภาพที่มีสี่ขาเรียวยาว ขนสั้น คือม้า
การเรียน และการทดสอบความรู้ในคน

จินตนาการถึงการเรียนการสอนในห้องเรียน เวลาที่ครูสอนนักเรียนให้ทำโจทย์ในห้องเรียน นักเรียนก็จะพยายามเข้าใจถึงความรู้ที่แท้จริงจากโจทย์ข้อต่าง ๆ เพื่อให้ทำโจทย์ได้คะแนนดียิ่งขึ้น
แต่ก็จะมีนักเรียนอยู่จำนวนหนึ่งที่เรียนรู้ผิดวิธีด้วยการจำว่าโจทย์ข้อไหนถามอย่างไร แล้วต้องตอบว่าอะไร แน่นอนว่านักเรียนกลุ่มนี้ก็จะได้คะแนนดีในห้องเรียนด้วย เพราะจำคำตอบได้หมดเลย จะไม่ได้คะแนนดีได้ไงล่ะ ??
แต่แล้วเมื่อเราเอาโจทย์อีกชุดนึงที่ไม่เคยให้เรียนในห้องเรียนมาก่อน มาให้นักเรียนลองทำ นักเรียนที่มีความรู้ก็จะสามารถทำโจทย์เหล่านี้ได้ แต่นักเรียนกลุ่มที่โกงด้วยการจำโจทย์ในตอนเรียนก็จะไม่สามารถทำข้อสอบชุดใหม่นี้ได้เลย ทำไมน่ะเหรอ ? ก็เพราะว่าโจทย์พวกนี้เป็นโจทย์ใหม่ ไม่มีอยู่ในความจำที่ผ่านมาเลย
ถ้าเราลองวิเคราะห์ดูจะพบว่า ที่จริงแล้วการเรียนให้ได้ความรู้ที่แท้จริงนั้นใช้พื้นที่ความจำน้อยกว่า เพราะ “ความสัมพันธ์” หรือ “ความรู้” เพียงไม่กี่ข้อก็สามารถตอบคำถามได้หลายคำถาม แต่การจะเรียนให้ได้มาซึ่งความรู้นั้นอาจจะยากกว่าหน่อย ในทางกลับกัน การจำโจทย์และคำตอบนั้นใช้พื้นที่ความจำเยอะมาก เพราะต้องจำทั้งโจทย์และคำตอบทุกข้อ แต่วิธีการเรียนก็จะง่ายกว่า
โมเดลขี้โกงด้วยการจำชุดข้อมูลสำหรับสอน เพื่อให้ได้คะแนนดี
ในการเรียนรู้ของโมเดลก็มีหลักการคล้าย ๆ กับที่คนเราเรียน เราจะมีเครื่องมือวัดหนึ่งที่ถูกกำหนดขึ้นจากจุดประสงค์ของการเรียน เรียกว่า Objective Function หรือ Loss Function โดยโมเดลจะพยายามเรียนรู้เพราะที่จะทำให้คะแนนของ Objective Function ออกมาดีขึ้นเรื่อย ๆ
การวัดผลด้วย Objective Function จะบอกเราว่าผลการทำนายที่โมเดลตอบออกมา มีความถูกต้องคิดเป็นคะแนนได้กี่คะแนน แล้วโมเดลก็จะทำการปรับ weight ที่ใช้ในการคำณวนคำตอบเพื่อให้คำตอบในครั้งถัดไปได้คะแนนมากขึ้น
ถ้าอ่านมาถึงตรงนี้แล้วงงว่าอะไรคือการปรับ weight คืออะไรละก็ แนะนำให้ลองอ่านบทความในลิงค์ด้านล่างก่อนนะครับ เป็นความเข้าใจพื้นฐานเกี่ยวกับ Neural Network ครับ https://medium.com/@dopplerz/cce9227ab599
แต่แล้ว เจ้า Neural Network ของเราก็ทำสิ่งที่ไม่คาดคิด แทนที่มันจะเรียนรู้ความสัมพันธ์ มันกลับจำข้อมูลในชุดข้อมูลสอน (Training Dataset) ซะอย่างงั้น ซึ่งก็ได้ผลดีซะด้วย เพราะคะแนนที่วัดด้วย Objective Function ออกมาดีจนน่าประทับใจ ดูเผิน ๆ ก็เป็นโมเดลที่เก่ง ฉลาด ชาติเจริญสุด ๆ
และเมื่อเจ้าโมเดลขี้โกงถูกทดสอบด้วยชุดข้อมูลทดสอบ กลับตอบไม่ถูกเลย เพราะชุดข้อมูลทดสอบไม่เหมือนกับชุดข้อมูลสำหรับสอนเลย
การที่โมเดลจำคำตอบแบบนี้แหละที่เราเรียกว่า Overfitting
ลองนึกภาพง่าย ๆ ก็เหมือนกับเสื้อผ้าที่ตัดเย็บมาสำหรับทำกิจกรรมอย่างเดียว เช่น เป็นชุดว่ายน้ำ ชุดนั้นก็จะใส่ได้อย่างจำกัด ไม่สามารถใส่ไปง่ายทั่ว ๆ ไปได้ เปรียบเทียบชุดที่ใส่ในโอกาสกลาง ๆ ที่เราใส่ไปในโอกาสที่หลากหลายกว่า อาจจะใส่ออกงานก็ดูไม่น่าเกลียดจนเกินไป ถ้าใส่ไปงานชิว ๆ ก็สามารถใส่ไปได้ไม่เป็นทางการเกินไป ใส่ลงว่ายน้ำก็ยังได้เลย
อะไรคือสาเหตุที่ทำให้เกิด Overfitting ในโมเดล
ในโมเดล Neural Network ส่วนขององค์ความรู้ที่เกิดขึ้นจะถูกบันทึกโดย weight ของโมเดล และเมื่อโมเดลมี weight จำนวนมาก ก็มีความเป็นไปได้ว่า Neural Network ของเราจะ overfit กับข้อมูลสำหรับสอน
ดังนั้น การแก้ overfitting ที่ง่ายที่สุดก็คือการกำหนด weight ในแต่ละชั้นของ Neural Network ให้มีขนาดน้อยลง เพื่อเป็นการบังคับให้โมเดลไม่สามารถจำคำตอบในจำนวนมากได้
Generalization VS. Overfitting คู่ปรับที่ฟ้าส่งมา
ย่อหน้านี้อาจจะมีการใช้คำศัพท์บางคำที่ค่อนข้างเฉพาะทาง คนที่คุ้นเคยกับ Neural Network น่าจะเข้าใจได้ทันที แต่สำหรับคนที่เป็นมือใหม่ ลองพยายามทำความเข้าใจแนวคิดดูครับ
เราพยายามสอนโมเดลให้มีความสามารถที่เรียกว่า Generalization ซึ่งหมายถึงว่าความรู้ที่โมเดลเรียนรู้มานั้นเป็นองค์ความรู้กลาง ๆ ที่เอาไปประยุกต์ได้กับหลายกรณี ซึ่งการจะเพิ่มความสามารถนี้ได้ใน Neural Network นั้น สามารถทำได้ด้วยเครื่องมือเหล่านี้
- Drop out (หรือ Dropout) — เพิ่มความยากในการเรียนรู้ด้วยการปิดข้อมูลบางส่วน ในแต่ละชั้นของ Neural Network จะมีการส่งข้อมูลต่อกันไปในแต่ละชั้น และระหว่างการส่งข้อมูลนั้น ข้อมูลบางส่วนจะถูกปิดหายไป ทำให้ความยากในการเรียนรู้เพิ่มขึ้น
- Weight decay — เป็นการกำหนดให้ค่าของ weight ไปลดคะแนนของ objective function ยิ่งค่าผลรวมของ weight มีค่ามาก objective function ของเราก็จะยิ่งถูกลดคะแนนไปด้วย เพราะการที่ weight มีผลรวมเป็นค่ามาก ๆ จะมีแนวโน้มการเกิด overfitting มากไปด้วย
- Data Augmentation — การนำชุดข้อมูลสำหรับสอนมาปรับแต่งเพื่อให้เกิดเป็นข้อมูลที่โมเดลไม่รู้จัก แต่ต้องระวังไว้ว่าการตกแต่งข้อมูลเพิ่มนั้นจะต้องไม่ทำให้ความหมายของข้อมูลนั้น ๆ เสียหรือเพี้ยนไป เช่น เราเอาภาพกระต่ายมาปรับสีเล็กน้อย ทำให้ขนสีขาวมีสี้เพี้ยนเป็นสีเหลืองเล็กน้อย แต่ต้องระวังไม่ให้เพี้ยนเกิดไป เช่นปรับจนมีขนเป็นสีชมพู
ที่จริงแล้วยังมีเทคนิคอื่น ๆ อีกที่ช่วยลด Overfitting ในโมเดล Neural Network ได้ แต่อาจจะมีบางเรื่องที่ยากเกินไป ก็เลยจะขอเก็บไว้ค่อยเล่าในครั้งถัด ๆ ไปก็แล้วกันครับ
หวังว่าบทความในวันนี้จะมีประโยชน์สำหรับผู้อ่านนะครับ
— — — — — — — — — — — — — — — — — — — — —
สำหรับใครที่สนใจทางด้าน Machine Learning & AI สามารถฟังรายการ AI Here podcast ได้ทาง Room 508 podcast channel หรือฟังได้ผ่านทาง Soundcloud และสามารถพูดคุยติชมได้ทาง Soundcloud เลยครับ
https://soundcloud.com/room508podcast/sets/ai-here
https://itunes.apple.com/us/podcast/room-508-podcast/id1425612164?mt=2
