Machine Learning ฉบับ Pokemon ง๋ายง่าย
** โดยเนื้อหาจะไม่มีสมการใดๆมาเกี่ยวข้องเพื่อง่ายต่อการเข้าใจเบื้องต้นนะครับ **
Machine Learning คืออะไร ทำไมใครๆก็พูดถึง ??
เนื่องจากเริ่มแรกผมก็สงสัยจึงได้เขามาในวงการนี้และมาศึกษาอย่างเต็มตัวจนค้นพบว่า อ้ายเจ้า Machine Learning เนี่ยก็คือการให้เจ้าเครื่องจักรได้ทำการเรียนรู้ ผ่านกระบวนการต่างๆ
การสอนเครื่องจักรให้ตอบสนองกับสิ่งที่เจอได้ และตอบคำถามเราได้อย่างถูกต้องนั่นเอง
คำถามคือเราสอนมันอย่างไรดี ??
ทีนี้ลองมาเทียบกับคนเรา เวลาเราเรียนรู้อะไรซักอย่างก็ต้องมาจากการรับรู้ผ่านประสาทสัมผัสใช่ไหมครับ เช่น ตา มองเห็น เรียนรู้การเคลื่อนไหวต่างๆ และบันทึกเก็บไว้ในสมอง
- อย่างถ้าเราอุ้มเจ้า Pikachu ขึ้นมาแล้วโดนช๊อต ถามว่าครั้งต่อไปเราจะอุ้มมันใหม่ไหม (นั่นคือการเรียนรู้ผ่านสัมผัส)
- อาจจะมีคนที่อุ้ม และคนที่ไม่อุ้ม !!
- แน่นอนถ้า “เจ็บ” อาจจะไม่อุ้มก็ได้นะ (นั่นคือตอบสนอง หรือคำตอบจากการเรียนรู้นั่นเอง)
และนี่คือการเรียนรู้ของมนุษย์ แต่เดี๋ยวก่อนนะ เครื่องจักรมันเจ็บปวดได้ด้วยหรอ เห้ย !! ไม่ใช่อย่างนั้นครับ เราก็ให้เจ้าเครื่องจักรเนี่ยรับรู้ผ่านข้อมูลต่างๆ เหมือนที่เรารับรู้ผ่านความรู้สึกนั่นเอง เช่นอัพโหลดข้อมูลเข้าไป
โดยข้อมูลที่เราอัพโหลดก็เหมือนหนังสือที่เราอ่าน หรือตาที่เรามองเห็นเพื่อรับรู้ หรือสัมผัสที่รับรู้ผ่านทางผิวหนังของมนุษย์นั่นเอง
เอ๋ มาถึงตรงนี้เพื่อนๆคงไม่สงสัยหร่อกนะว่า มนุษย์เราเรียนรู้ได้อย่างไร
แต่เครื่องจักรนี่สิ มันอ่านรับข้อมูลหรืออ่านข้อมูล แบบไหนกันนะ
ขอยกตัวอย่างให้เห็นภาพง่ายๆละกันนะ
ประเภทของข้อมูลที่ให้เครื่องจักรเรียนรู้
- ไฟลล์ เอกสารต่างๆที่จัดให้อยู่ในรูปแบบ ตาราง (Table) หรือเรียกว่า SQL (ฐานข้อมูลที่มีโครงสร้าง แถว คอลัมน์ชัดเจน)
- เป็นรูปภาพรูปแบบของ NoSQL (มีโครงสร้างที่ไม่เป็นแบบแผน)
- เป็นเสียง / วิดีโอ รูปแบบของ NoSQL (มีโครงสร้างที่ไม่เป็นแบบแผน)
พอเข้าใจเรื่องข้อมูลที่ส่งให้เครื่องจักรเราเรียนรู้แล้วนะครับ
ต่อไปก็เป็นวิธีการสอนพวกเค้าละ ว่าจะสอนอย่างไรดี ??
วิธีสอน หรือให้เครื่องจักรเรียนรู้ ??
โดยปกติ วิธีในปัจจุบันจะมีอยู่ 3 รูปแบบใหญ่ๆ
- Supervised Learning
- Unsupervised Learning
- Semi-supervised Learning
โดยแต่ละรูปแบบก็มีข้อดีข้อเสียแตกต่างกันไป ถ้างั้นเราไปดูรูปแบบแรกกันก่อนเลย
Supervised Learning
เป็นการเรียนรู้โดยระบุแน่ชัดว่าสิ่งที่เห็น หรือรับรู้ไปนั้น ให้ผลลัพธ์ที่แน่ชัดอย่างไร
ยกตัวอย่างเช่นภาพด้านล่าง หากเราไม่เคยเห็นมาก่อนอาจจะงงๆ แต่ถ้าบอกว่าภาพนี้คือ เจ้า Pikachu นะ ทุกคนก็จะร้องอ๋อ นี่คือ Pikachu !!
ผลลัพธ์จากการตอบชื่อจากภาพ คือการเรียนรู้ว่า นี่คือ Pikachu ในทางกลับกันหากเราเห็นภาพนี้แล้วให้เราบอกว่านี่คือภาพอะไร เราเองก็คงตอบไม่ได้เช่นกัน เครื่องจักรเองก็ด้วยครับ เค้าก็จะงงๆ Error กันไป !!
แล้วถ้า มีภาพใหม่มาล่ะ !! คล้ายกันเลย
เอ๋ !! มันเหมือน Pikachu ไปซะทุกภาพเลย แล้วจะตอบอะไรดีเนี่ย
- หลายคนคงตอบว่า 3 ภาพนี้ก็คือเจ้า Pikachu เหมือนกันหมดนี่หน่า
- เนื่องจากเราเรียนรู้แบบ Supervised Learning หรือการสอนแบบเฉพาะ ไม่ม่ีการประยุกต์ใดๆทั้งสิ้น สุดท้ายแล้ว เครื่องจักร หรือแม้แต่เราก็จะตอบ 3 ภาพนี้ว่า Pikachu ไงล่ะ !
- แต่จริงๆแล้ว เจ้า 3 ตัวนี้ถ้าเป็นคนที่ชอบ Pokemon จริง (เปรียบได้กับเครื่องจักรที่ได้รับการเรียนรู้ หรือมีข้อมูลที่มากพอ ก็จะตอบได้ถูกต้อง
ภาพแรก คือ Ditto
ตาของเค้าจะเป็นจุดเล็กๆ ต่างจากตัวอื่นๆ ซึ่งเป็นลักษณะเฉพาะตัว
ภาพสอง คือ Mimikyu
ตัวนี้ชื่อ Mimikyu โดยตรงเลย จากการเอาผ้ามาคลุมเลียนแบบ Pikachu
ภาพสาม คือ Pikachu
จะเห็นว่าเจ้า Pikachu ตัวจริงแอบอยู่ข้างหลังก้อนหินสีเหลือง
จากตรงนี้ทำให้เราตระหนักได้อย่างนึงว่าการเรียนรู้แบบ Supervised Learning ถ้าหากเรียนน้อย รู้น้อย ก็จะตอบคำถามพลิกแพลงไม่ได้ และไม่เข้าใจคำถามใหม่ๆ ซึ่งแน่นอน เวลาตอบก็จะเอ๋อๆ หรือตอบแต่คำตอบเดิมๆให้เห็นนั่นเอง
คนเราก็เช่นกัน…
และแน่นอนว่า การจะให้สอนเครื่องจักรว่าภาพนี้ชื่ออะไร ต้องใช้คนที่เก่งในด้านนั้นๆซึ่งทำให้ข้อมูลที่จะสอนนั้นมีราคาแพงมากขึ้นอีก แต่ไม่มีคำตอบกำกับก็ตอบไม่ได้ว่ามันคืออะไร ?? แล้วจะทำอย่างไรดีนะ ??
Unsupervised-Learning
การเรียนรู้แบบไม่ระบุคำตอบ หรือไม่มีการสอนแบบตายตัวจึงเกิดขึ้นมา
หลายคนคงสงสัยว่า เห้ยไม่สอนแล้วจะตอบอย่างไร ?
เจ้าวิธีการสอนแบบนี้เป็นการเรียนรู้ผ่านกลุ่มข้อมูลที่มีปริมาณมากระดับนึง แต่สามารถแยกออกจากกันหรือแบ่งแยกให้เป็นกลุ่มๆได้ ซึ่งการที่เราแยกออกจากกัน หรือแบ่งเป็นกลุ่มๆได้นี่แหละ คือจุดเริ่มต้นของการตอบคำถาม เพราะเมื่อเราแยกเป็นกลุ่มได้ แสดงว่าข้อมูลแต่ละกลุ่มต้องมีลักษณะบางอย่างที่คล้ายๆกัน หรืออาจจะเป็นข้อมูลเดียวกันนั่นเอง และข้อมูลที่แตกต่างกันก็ย่อมมีลักษณะที่แตกต่างจากกลุ่มอื่นๆด้วย
จากภาพจะเห็นว่ามี Pokemon อยู่ทั้งหมด 6 ตัวด้วยกัน ซึ่งมีความคล้ายกัน และแตกต่างกันอย่างเห็นได้ชัด เป็นที่แน่นอนหากเราให้เครื่องจักรเรียนรู้ หรือมนุษย์เรียนรู้ก็จะสามารถแบ่งกลุ่มได้อย่างน้อยๆก็ 3 กลุ่ม
เย้ ! ตอนนี้เราสามารถแบ่งกลุ่มของ Pokemon ที่มีชื่อต่างกันได้แล้ว จากลักษณะภายนอกที่เราเห็นครั้งแรกนั่นเอง แต่แน่นอนว่าคำตอบที่ได้อาจจะไม่ได้ถูกต้อง 100 % ดังนั้นจึงต้อง หาลักษณะอื่นๆมาจำแนกต่อ เพื่อแบ่งกลุ่มให้ดียิ่งขึ้นในลำดับต่อไป
จะเห็นว่าการเรียนรู้แบบ Unsupervised-Learning ช่วยตอบคำถามได้แบบหยาบๆก่อน แต่ก็ต้องใช้จำนวนข้อมูลระดับนึงในการจำแนก และการจำแนกข้อมูลนั้นก็ไม่สามารถแยกได้ชัดเจน หากไม่มีลักษณะเฉพาะตัวก็จะทำให้การแยกกลุ่มนั้นลำบากขึ้น (มี Noise เยอะนั่นเอง) ดั่งภาพข้างล่าง
งง เลยใช่ไหมครับว่าจะเริ่มแบ่งกลุ่มจากตรงจุดไหนดี และจะได้กี่กลุ่ม ??
ดังนั้นความหลากหลายของลักษณะของข้อมูลก็เป็นสิ่งสำคัญในการเรียนรู้ เพราะถ้ามันไม่แตกต่างตั้งแต่เริ่มแรก เราก็คงตอบแบบ งงๆ อยู่ดีเหมือนเรียนของยากก่อนเลย ซึ่งเปรียบได้กับเด็กทารกที่ให้เรียนแคลคูลัส ก็คงไม่สามารถตอบอะไรได้ และไม่เข้าหัวอยู่ดี ด้วยประการนี้เอง จึงมีการเรียนรู้อีกแบบเกิดขึ้น เพื่อลดข้อจำกัดของปริมาณข้อมูล และการเรียนรู้ที่สามารถจำแนกตอบคำถามได้เฉพาะมากขึ้นนั่นคือ
Semi-supervised Learning
Semi-supervised Learning
การเรียนรู้แบบผสมผสานทั้ง Unsupervised และ Supervised เข้าร่วมกัน เพื่อลดปัญหาของ
- การที่เรามีข้อมูลเรียนรู้น้อย
- ประหยัดงบจากข้อมูลที่มีราคาแพง และหาที่มีคำตอบอยู่แล้วยาก
โดยมีลำดับการเรียนรู้ดังนี้
- นำข้อมูลที่มีทั้งคำตอบ และไม่มีคำตอบมารวมกัน (เป็นช่วงที่ข้อมูลยังมีน้อยอยู่)
ตอนนี้มีข้อมูลที่มีคำตอบเพียง 2 ตัวเท่านั้นคือ Pikachu และ Mimikyu
2. นำไปเรียนรู้แบบ Unsupervised Learning จะได้การแบ่งแบบในภาพ แต่เพิ่มเติมคือ ตอนนี้เราเอาข้อมูลที่มีคำตอบอยู่แล้วมาช่วยแบ่งด้วยนะ จะได้กลุ่มประมาณนี้
กลุ่มที่ได้มีความแตกต่างจาก Unsupervised Learning
ด้านบน เล็กน้อย เพื่อนๆมองออกไหมเอ่ย
- ปริมาณกลุ่มที่มีมากกว่า
- Pattern ที่มีลักษณะเฉพาะตัวมากขึ้นจากการระบุคำตอบมาให้แล้ว
- Mimikyu แยกออกมาเป็นอีกกลุ่มหนึ่ง
- กลุ่มที่คล้ายกับ Pikachu แต่ยังไม่มีชื่อ ก็จะถูกนำมารวมกันจัดเป็นอีกกลุ่มหนึ่ง และกลุ่มนี้ชื่อทุกตัวก็จะกลายเป็น Pikachu แบบหยาบๆ รอการเรียนรู้เชิงลึกต่อไป
Pattern จาก Supervised-Learning มาช่วยในระดับหนึ่ง
3. นำไปเรียนรู้ต่อหลังจากแบ่งกลุ่มได้แล้ว แต่ละกลุ่มที่แบ่งแยกออกมาจะทำการติดคำตอบให้เพื่อที่การเรียนรู้ครั้งหน้าจะเราจะได้เรียนรู้ง่ายขึ้น เก่งขึ้น ตอบคำถามได้แม่นยำขึ้นนั่นเอง
ตอนนี้เราติดเพิ่มที่ Mew, และ Zorua ถ้ามีข้อมูลมาใหม่คล้ายๆกันก็จะตอบได้ทันที
4. ทำแบบนี้จนได้ข้อมูลที่มีคำตอบมากพอ แล้วนำไปตอบคำถามแบบอื่นๆ ทดลองดูว่าความแม่นยำในการตอบคำถามมีกี่ % (เรียกอีกแบบว่า นำไปทำนายผล)
5. ลองป้อนข้อมูลใหม่เข้าไปดูซิว่าจะตอบแบบไหนกันน้า
และคำตอบที่ได้ก็จะประมาณนี้ครับ
แน่นอนว่าความถูกต้องอาจจะไม่ 100 % เพราะข้อมูลที่ใหม่นั้นอาจจะมีลักษณะไม่เหมือนกันเลยก็ได้ หรืออาจจะมีลักษณะที่คล้ายคลึงกันบ้างบางประการ ซึ่งก็ทำให้มนุษย์เรา หรือ เครื่องจักรสามารถตอบคำถามนั้นๆได้
ซึ่งความถูกต้องนี่แหละถูกคิดออกมาเป็น เปอร์เซ็นต์ ถ้าถูกหมดก็ได้ 100% และแน่นอนว่าเครื่องจักรเราเรียนรู้ได้อย่างเทพมากๆ เหมือนเข้าห้องสอบเจอข้อมูลแบบไหนมาก็ตอบหมดนั่นเอง
และหากเราคิดความถูกต้องจากการให้เครื่องจักรเรียนรู้เพื่อจะตอบ ก็จะได้เป็นเปอร์เซ็นต์ความถูกต้อง = 50% นั่นเองครับ
Accuracy = (จำนวนที่ตอบถูก / จำนวนข้อมูลทั้งหมด)*100%
Accuracy = (3/6)*100%
Accuracy = 50%
จบแล้วนะครับ สำหรับ Machine Learning ฉบับ Pokemon เข้าใจง๋ายยยยง่าย
สำหรับใครที่สนใจในเรื่อง Machine Learning ก็ติดตามกันต่อได้ จะพยายามเขียนให้เข้าใจง่ายๆ และเริ่มยากขึ้นเรื่อยๆตามเนื้อหานะครับ เรียนรู้ไปด้วยกันนะ
ขอบพระคุณทุกท่านที่ติดตามครับ
More Share, More Fun