Machine Learning ฉบับ Pokemon ง๋ายง่าย

Boyd BigData RPG
Big Data Engineering
4 min readNov 17, 2017

** โดยเนื้อหาจะไม่มีสมการใดๆมาเกี่ยวข้องเพื่อง่ายต่อการเข้าใจเบื้องต้นนะครับ **

Source: https://phyllismi.deviantart.com/art/Ditto-Mimikyu-Pikachu-624055639

Machine Learning คืออะไร ทำไมใครๆก็พูดถึง ??

เนื่องจากเริ่มแรกผมก็สงสัยจึงได้เขามาในวงการนี้และมาศึกษาอย่างเต็มตัวจนค้นพบว่า อ้ายเจ้า Machine Learning เนี่ยก็คือการให้เจ้าเครื่องจักรได้ทำการเรียนรู้ ผ่านกระบวนการต่างๆ

การสอนเครื่องจักรให้ตอบสนองกับสิ่งที่เจอได้ และตอบคำถามเราได้อย่างถูกต้องนั่นเอง

คำถามคือเราสอนมันอย่างไรดี ??

ทีนี้ลองมาเทียบกับคนเรา เวลาเราเรียนรู้อะไรซักอย่างก็ต้องมาจากการรับรู้ผ่านประสาทสัมผัสใช่ไหมครับ เช่น ตา มองเห็น เรียนรู้การเคลื่อนไหวต่างๆ และบันทึกเก็บไว้ในสมอง

เรียนรู้จากการโดนช๊อต !!!
  • อย่างถ้าเราอุ้มเจ้า Pikachu ขึ้นมาแล้วโดนช๊อต ถามว่าครั้งต่อไปเราจะอุ้มมันใหม่ไหม (นั่นคือการเรียนรู้ผ่านสัมผัส)
  • อาจจะมีคนที่อุ้ม และคนที่ไม่อุ้ม !!
  • แน่นอนถ้า “เจ็บ” อาจจะไม่อุ้มก็ได้นะ (นั่นคือตอบสนอง หรือคำตอบจากการเรียนรู้นั่นเอง)

และนี่คือการเรียนรู้ของมนุษย์ แต่เดี๋ยวก่อนนะ เครื่องจักรมันเจ็บปวดได้ด้วยหรอ เห้ย !! ไม่ใช่อย่างนั้นครับ เราก็ให้เจ้าเครื่องจักรเนี่ยรับรู้ผ่านข้อมูลต่างๆ เหมือนที่เรารับรู้ผ่านความรู้สึกนั่นเอง เช่นอัพโหลดข้อมูลเข้าไป

โดยข้อมูลที่เราอัพโหลดก็เหมือนหนังสือที่เราอ่าน หรือตาที่เรามองเห็นเพื่อรับรู้ หรือสัมผัสที่รับรู้ผ่านทางผิวหนังของมนุษย์นั่นเอง

เอ๋ มาถึงตรงนี้เพื่อนๆคงไม่สงสัยหร่อกนะว่า มนุษย์เราเรียนรู้ได้อย่างไร
แต่เครื่องจักรนี่สิ มันอ่านรับข้อมูลหรืออ่านข้อมูล แบบไหนกันนะ

ขอยกตัวอย่างให้เห็นภาพง่ายๆละกันนะ

ประเภทของข้อมูลที่ให้เครื่องจักรเรียนรู้

  • ไฟลล์ เอกสารต่างๆที่จัดให้อยู่ในรูปแบบ ตาราง (Table) หรือเรียกว่า SQL (ฐานข้อมูลที่มีโครงสร้าง แถว คอลัมน์ชัดเจน)
Source: https://pokeassistant.com/main/pokemonstats
  • เป็นรูปภาพรูปแบบของ NoSQL (มีโครงสร้างที่ไม่เป็นแบบแผน)
Source: https://imgur.com/gallery/PUKj3fj
  • เป็นเสียง / วิดีโอ รูปแบบของ 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 เข้าร่วมกัน เพื่อลดปัญหาของ

  • การที่เรามีข้อมูลเรียนรู้น้อย
  • ประหยัดงบจากข้อมูลที่มีราคาแพง และหาที่มีคำตอบอยู่แล้วยาก

โดยมีลำดับการเรียนรู้ดังนี้

  1. นำข้อมูลที่มีทั้งคำตอบ และไม่มีคำตอบมารวมกัน (เป็นช่วงที่ข้อมูลยังมีน้อยอยู่)

ตอนนี้มีข้อมูลที่มีคำตอบเพียง 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

--

--

Boyd BigData RPG
Big Data Engineering

Lead Data Scientist | Digital Marketer | Biotechnologist | Vlogger | @BigDataRPG | BS Biot30 KU69 | BD03 DPU