Active Learning (Machine Learning) เป็นวิธีที่ช่วยให้โมเดลของเราเรียนรู้ได้ดีในข้อมูลที่น้อยลงครับ ซึ่งมันสามารถนำไปใช้ได้ในหลาย domain เลย ไม่ว่าจะเป็น Natural Langauge Processing, Image processing, Robotic, และอีกมากมาย ซึ่งบทความนี้เราก็จะมาทำความรู้จัก Active Learning กันครับ
Outline
- Active learning คืออะไร
- Active learning ในรูปแบบต่าง ๆ
- Query Framework
- Library & Tools
Active learning คืออะไร
มันเป็นรูปแบบหนึ่งของ (semi-supervised learning) ซึ่งจะเลือกข้อมูลไปถามผู้ใช้ โดยข้อมูลชุดที่เลือกมานี้จะต้องส่งผลดีที่สุดกับระบบ ทำให้โมเดลแม่นยำเร็วขึ้น โดยใช้ปริมาณข้อมูลที่น้อยลงกว่าการทำ supervised learning แบบปกติ
ยกตัวอย่างเช่น
การใช้วิธี Active learning เข้ามาช่วย มันจะทำการ “เลือกรูปที่คิดว่า ถ้ารู้ว่าเป็นรูปอะไรแล้วมันจะช่วยให้แยกรูปแมวได้ดีที่สุด” ไปให้ผู้ใช้ตอบ
อีกตัวอย่างครับ
( a ) — คือรูปของ data ทั้งหมดที่ labeled แล้ว
( b ) — คือ ภาพที่ใช้ข้อมูลแบบ random 30 ตัว (≈ 30% accuracy)
( c ) — คือ ภาพที่ใช้ active learning เข้ามาช่วยในการเลือกข้อมูล 30 ตัว
(≈ 70% accuracy)
จะเห็นว่าการใช้ active learning เข้ามาช่วย ทำให้โมเดลมีความแม่นยำขึ้นสูงมาก
ข้อควรระวัง: ถ้าหากว่าผู้ใช้ตอบผิด เช่นบอกว่ารูปแมวเป็นรูปหมา มันก็จะค่อนข้างเสี่ยงที่โมเดลจะแม่นน้อยลง
Active learning ในรูปแบบต่าง ๆ
Active learning สามารถนำไปใช้ได้ในหลายรูปแบบ แต่ในบทความนี้จะพูดถึง 3 แบบ นั่นคือ
- Membership Query Synthesis
- Stream-Based Selective Sampling
- Pool-Based Sampling
1. Membership Query Synthesis
รูปแบบนี้จะทำการเอาข้อมูลจากตัวอย่าง หรือ สร้างตัวอย่างใหม่ขึ้นมาให้คนบอกว่าเป็นข้อมูลอะไร
ข้อดี
- สามารถใช้ Robot มาทำงานต่อได้
เช่น ใช้ active learning แบบ membership query synthesis สร้างตัวอย่างข้อมูลขึ้นมา แล้วส่งไปให้ robot ทำการทดลอง แล้วเอาผลที่ได้มาเป็น output ของตัวอย่างนั้น
- สามารถใช้กับปัญหา Regression ได้
ข้อเสีย
- ตัวอย่างที่สร้างขึ้นมา คนอาจจะไม่สามารถแยกแยะได้
เช่น มีรูปภาพเลข 0–9 แล้วให้คนบอกว่าภาพนี้เลขอะไร การใช้วิธี membership query symthesis อาจจะทำการสร้างภาพที่คนดูไม่ออกเลยว่าเป็นเลขอะไรก็ได้
2. Stream-Based Selective Sampling
สมมติฐานหลักของวิธีนี้ unlabeled data สามารถหาได้ฟรี หรือราคาถูก เมื่อมี unlabeled data แล้ว วิธีนี้จะทำการเลือกว่าจะเอาข้อมูลนั้นมาถามหรือไม่ วิธีนี้มักเรียกว่า stream หรือ sequential active learning เพราะว่าข้อมูลจะเข้ามาทีละตัว
ข้อดี
- เหมาะกับการใช้งานบนอุปกรณ์ที่มี memory น้อย หรือจำกัด
ข้อเสีย
- สมมติฐานที่ว่า มี unlabeled data ให้ใช้ฟรี อาจจะไม่จริงเสมอไป
3. Pool-Based Sampling
แบบ Pool-Based sampling คือเรามี unlabeled data เก็บไว้อยู่แล้ว โดยมันจะทำการเลือกข้อมูลจาก unlabeled data ที่เราเก็บไว้ ออกมาถาม
Pool-Based sampling ต่างจาก Stream-based selective sampling ตรงที่ stream-based จะตัดสินใจจากข้อมูลที่เข้ามาว่าจะเอาไปถามหรือไม่ แต่ pool-based จะเลือกข้อมูลที่คิดว่าเหมาะที่สุดจากข้อมูลทั้งหมดก่อน แล้วค่อยเลือกออกไปถาม
ข้อดี
- เป็นหนึ่งในวิธีที่นิยมที่สุด (text classification, information extraction, image classification, etc.)
ข้อเสีย
- ต้องใช้พลังในการประมวลผล เพราะว่าต้องคำนวณเลือกข้อมูลจากทั้งหมด
วิธีการเลือกข้อมูล (Query Framework)
มาถึงตรงนี้ คงพอจะรู้จัก Active learning กันบ้างแล้วนะครับ และคงมีคำถามว่า แล้วเราจะเลือกข้อมูลไปถามได้ยังไง มันมีเกณฑ์ในการตัดสินใจไหม คำตอบก็คือ มีแน่นอนอยู่แล้วครับ ซึ่งแต่ละวิธีก็จะ focus ไปที่ผลลัพธ์ที่แตกต่างกัน ผมเลือกชื่อมาให้ดูคร่าว ๆ (จริง ๆ มีมากมายเหลือเกิน) เผื่อท่านใดสนใจอยากจะศึกษาเพิ่มเติม ก็นำไปหาข้อมูลเพิ่มเติมได้เลยครับผม
- Uncertainty Sampling
- Query-By-Committee
- Expected Model Change
- Expected Error Reduction
- Variance Reduction
- Density-Weighted Methods
อยากเอาไปใช้ทำยังไง?
ปัจจุบันมี library ที่ทำ active learning หลายตัวเลยครับ รวมไปถึง tools สำเร็จรูปก็มีให้ใช้พอสมควร เช่น
เราสามารถใช้ Label propagation
ใน sklearn
มาทำ active learning ก็ได้ครับ
Library
Tools
ส่งท้าย
หากใครสนใจเรื่อง Active learning ก็สามารถอ่านข้อมูลเพิ่มเติมได้ที่ references ที่แปะไว้ให้ด้านล่างได้เลยนะครับ :D แต่ถ้าใครสนใจงานเกี่ยวกับ NLP ก็มาคุยกันได้ที่ กลุ่ม Thai NLP นะคร้าบ แล้วพบกันใหม่บทความหน้า สวัสดีครับ