By Arnon Puitrakul - 29 ตุลาคม 2020
Ensemble Learning เป็นเทคนิคที่ถูกนำมาใช้ในการทำ Model ที่มีประสิทธิภาพหลายตัวมามาก เพราะเป้าหมายของมันคือการเพิ่ม Performance ให้กับ Model เป็นหลัก ซึ่งหลัก ๆ ที่เรานิยมกัน ก็จะมี Bagging และ Boosting เป็นหลัก วันนี้เราจะมาทำความเข้าใจกันว่ามันคืออะไรกันแน่
เพื่อให้เข้าใจง่าย ๆ เราอยากจะยกตัวอย่างเหตุการณ์สมมุติใกล้ตัวละกัน เราเอง เราเขียน บทความขึ้นมา เราอยากจะรู้ว่า เราเขียนแล้วอ่านรู้เรื่องมั้ย วิธีแรก เราก็อาจจะส่งไปให้เพื่อนเราช่วยอ่าน เพื่อนเราก็จะให้ข้อคิดเห็นกลับมาว่า มันยังไง ว่าซั่น แต่ก็นะ ถ้าเราเลือกเพื่อนที่ Expert มาก ๆ มาอ่าน ก็จะบอกว่า อ่านรู้เรื่อง แต่พอเอาเข้าจริง อ้าว คนอื่นอ่านไม่รู้เรื่อง แบบนี้ก็แย่เลย นี่คือตัวอย่างของการทำ Model ปกติ
ดูท่าจะยาก เอาใหม่ ๆ งั้นเราเขียนแล้ว ลงบทความเลยละกัน แล้วบอกว่า เออ ช่วย Comment มาหน่อยว่าอ่านรู้เรื่องมั้ย (Comment มาด้วย จะดีมากฮ่า ๆ) จากเดิมที่เพื่อนเราคนเดียวช่วยอ่าน ก็จะมีหลายพันคนเข้ามาช่วยกันอ่าน เราจะได้ความเห็นที่หลากหลายมากขึ้น จากตรงนี้ทำให้เราเห็นว่า การที่คนช่วยกันอ่านมากขึ้น มันก็ทำให้การทำงานได้ดีขึ้นนั่นเอง
ในเชิงของ Machine Learning ก็เช่นเดียวกัน ปกติ ถ้าเราสร้าง Model เดียว มันก็เหมือนกับ เราเอาไปถามเพื่อนคนเดียวแหละ อาจจะ Expert มาก จนอ่านรู้เรื่องไปหมด หรือ อาจจะไม่กล้าให้คำตอบจริง ๆ กับเรา แต่ Ensemble Learning เป็นการใช้หลาย ๆ Model ในการทำงาน เพื่อให้ได้ประสิทธิภาพที่ดีขึ้นนั่นเอง
ที่นิยมทั่วไป เราจะใช้เทคนิคการทำ Ensemble Learning อยู่ 2 เทคนิคด้วยกันคือ Bagging และ Boosting ที่จะมีความแตกต่างในการทำงานพอตัว
เริ่มจาก Bagging กันก่อน ในเทคนิคนี้ มันเหมือนกับเราเอาบทความของเราไปถามคนพันคนพร้อม ๆ กันเลยว่าอ่านรู้เรื่องมั้ย (เชื่อว่าคนที่อ่านมาถึงตอนนี้ก็คือ กำหมัดบอกว่า ไม่รู้เรื่อง ไปแล้ว) ในโลกแห่งความเป็นจริง มันเป็นวิธีที่เวลาเราเอาไปใช้จริงมันไม่น่ามีปัญหา เว้นแต่เราจะหาคนไม่ได้นั่นอีกเรื่อง
แต่ในเครื่องคอมพิวเตอร์ คน ที่เราเอามาเทียบ มันก็คือ Model ทีนี้ ถ้าเราบอกว่า เราอยากจะที่จะให้หลาย ๆ Model มาช่วยกันตัดสินใจออกมา และเราใช้ Model ที่สร้างจาก Parameter และ ข้อมูลเดียวกัน มันก็ไม่แปลกอะไรเลยที่มันจะได้ผลลัพธ์เหมือนกัน ดังนั้น สิ่งสำคัญมาก ๆ คือ Model จะต้องไม่เหมือนกัน ถ้าเอาง่ายแบบไม่คิดอะไรเลย เราก็จับมัน Random แล้วเราก็แบ่งเป็นชุด ๆ แล้วเอาไปทำ Model ก็น่าจะออกมาไม่เหมือนกันละ แต่แหม่ Random มันก็ทำให้ผลที่ได้มันก็ Random ไปด้วยแหละ เพื่อให้มันออกมาไม่ Random มากเราก็อาจจะใช้เทคนิคที่เรียกว่า Bootstrapping ได้ เพื่อให้แต่ละส่วนของ Dataset ที่แบ่งออกมา มีความคล้ายกับ Dataset เต็ม ๆ
หลังจากที่เราได้ Data หลาย ๆ ชุดมาแล้ว เราก็เอามันไปทำออกมาเป็น Model และให้พวกนี้แหละตัดสินใจร่วมกัน แล้วมันจะตัดสินใจร่วมกันอย่างไรละ ? เอาง่าย ๆ เลย มันก็จะมีอยู่ 2 วิธีด้วยกันคือ Averaging และ Voting ก็ตามชื่อเลยคือ การหาค่าเฉลี่ยออกมา และ การโหวต เพื่อให้มันได้ผลสุดท้ายออกมานั่นเอง
การทำแบบนี้มีข้อดีอย่างนึงคือ เราสามารถที่จะ Parallel การทำงานได้ง่ายมาก ๆ เพราะหลักการจริง ๆ มันคือการสร้าง Model หลาย ๆ ตัวที่มันไม่เหมือนกัน เราก็จับ Parallel ได้ง่ายกว่าเยอะ
ส่วน Boosting จะเหมือนกับเราเขียนแล้วเอาไปคนนึงอ่านแล้วกลับไปแก้ แล้วให้อีกคนอ่าน ไปเรื่อย ๆ ไส้ในของมันคือ การที่เราเอา Dataset ของเรามา และ เริ่มต้นให้มันมี Weight เท่ากันก่อน เอาไปสร้างเป็น Model และ ปรับน้ำหนักจากผลของ Model ทำแบบนี้ไปเรื่อย ๆ มันก็จะทำให้ Model ของเราทำงานได้ดีขึ้นเรื่อย ๆ
เล่าให้ง่ายขึ้นคือ Model ตัวต่อไป มันก็จะพยายามแก้ปัญหาของ Model เก่าไปเรื่อย ๆ ถ้าเราเอา Model ตัวสุดท้ายมาใช้เลยมันก็ไม่น่าจะมีปัญหาใช่ม่ะ ผิด!! นึกถึงตัวเราเอา ที่แก้ A แล้ว B ก็ผิด พอแก้ B เอ้า A ก็กลับมาผิดอีก นั่นแปลว่า Model แต่ละตัว ก็จะมีความเก่าไม่เหมือนกัน ดังนั้นสิ่งที่ Boosting ทำก็คือ เอาทั้งหมดนั่นแหละ มาใช้ มันก็จะทำให้ประสิทธิภาพมันดีขึ้นแน่ ๆ
วิธีนี้เป็นที่นิยมในการทำงานมาก เพราะมันเป็นวิธีที่ค่อนข้างยืดหยุ่น และ สามารถใช้ได้กับ Learning Method ที่ค่อนข้างหลากหลาย ในขณะที่ปรับลด Bias ของ Model ได้ดีมาก
โห ถามมาแบบนี้ ตอบยากเลย เอาจริง ๆ เราว่ามันไม่มีวิธีไหนใน 2 อย่างนี้ที่ดีกว่ากันหรอก มันต้องเอาไปปรับใช้กับข้อมูลของเรา บางทีข้อมูลของเรามันอาจจะชอบ Bagging หรือ Boosting ก็ได้
แต่สำหรับเราเอง ถ้าเราอยู่หน้างาน แล้วเราต้องเลือกจริง ๆ เราจะเลือกลอง Bagging ก่อน เพราะมันทำงานเป็น Parallel ทำให้เราได้ผลน่าจะเร็วกว่าการทำงานแบบ Sequential อย่าง Boosting แน่ ๆ ก็ต้องลองเลือก ๆ ใช้กันดู
Ensemble Learning คือ เทคนิคที่นำหลาย ๆ Model มาทำงานร่วมกัน เพื่อให้ได้ประสิทธิภาพสูงที่สุดเราอาจจะนำ Model ที่สร้างจากหลาย ๆ วิธีมาช่วยกันก็ได้ วันนี้เรามาเล่าเรื่อง Bagging และ Boosting ที่เป็น 2 วิธีในการที่เราทำ Ensemble Learning ก็น่าจะทำให้หลาย ๆ คนเห็นภาพได้ดีขึ้น ส่วนถ้าอยากได้ที่เป็น Math เลย ก็ต้องลองไปหาอ่านเพิ่มดู วันนี้เรามาเป็นพื้นฐานให้เฉย ๆ
เราเป็นคนที่อ่านกับซื้อหนังสือเยอะมาก ปัญหานึงที่ประสบมาหลายรอบและน่าหงุดหงิดมาก ๆ คือ ซื้อหนังสือซ้ำเจ้าค่ะ ทำให้เราจะต้องมีระบบง่าย ๆ สักตัวในการจัดการ วันนี้เลยจะมาเล่าวิธีการที่เราใช้ Obsidian ในการจัดการหนังสือที่เรามีกัน...
หากเราเรียนลงลึกไปในภาษาใหม่ ๆ อย่าง Python และ Java โดยเฉพาะในเรื่องของการจัดการ Memory ว่าเขาใช้ Garbage Collection นะ ว่าแต่มันทำงานยังไง วันนี้เราจะมาเล่าให้อ่านกันว่า จริง ๆ แล้วมันทำงานอย่างไร และมันมีเคสใดที่อาจจะหลุดจนเราต้องเข้ามาจัดการเองบ้าง...
ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...
เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...