มาทำความรู้จัก Machine Learning เบื้องต้น

สวัสดีผู้อ่านทุกท่านครับ ในยุคปัจจุบันงานด้าน AI (Artificial Intelligence) ได้รับความนิยมเป็นอย่างสูง Machine Learning หรือแปลเป็นไทยว่าการเรียนรู้ของเครื่องกลนั้น เป็นหนึ่งในศาสตร์ที่เป็นตัวขับเคลื่อนงานด้าน AI หลายๆงานอยู่

อะไรคือ Machine Learning ?

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

ปัจจุบันอัลกอริทึมที่ใช้ในการแก้ปัญหานั้นมีจำนวนมาก (มากกว่า 100) โดยเราจะแบ่งอัลกอริทึมออกเป็น 3 ประเภท ซึ่ง 3 ประเภทนี้จะเป็นที่อ้างถึงบ่อยในช่วงหลัง

  1. การเรียนรู้แบบมีผู้สอน (Supervised Learning)
  2. การเรียนรู้แบบไม่มีผู้สอน (Unsupervised Learning)
  3. การเรียนรู้แบบเสริมแรง (Reinforcement Learning)

การเรียนรู้แบบมีผู้สอน (Supervised Learning)

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

“การมีผู้สอน” ในที่นี้หมายความว่า ในข้อมูลที่ใช้ฝึก (Training Data) เราจะมีมนุษย์มาคอยแยกประเภทหรือบอกผลลัพธ์ (Label) ที่ควรจะเป็นไปไว้ด้วย จากนั้นเราจะนำข้อมูลที่ใช้ฝึก (ที่มี Label) ไปผ่านอัลกอริทึมสำหรับสร้างโมเดลที่ไว้ทำนายผลลัพธ์

เมื่อเราได้โมเดลที่ไว้ทำนายแล้ว เราจะนำข้อมูลใหม่ที่เครื่องไม่เคยเห็น กล่าวคือไม่ใช่ข้อมูลชุดเดียวกันกับข้อมูลฝึกหัด เครื่องจะต้องทำนาย (Predict) ว่าคำตอบที่ได้ควรจะเป็นอะไร

Figure credit: Sebastian Raschka, Python Machine Learning

ภาพด้านบนคือ รูปแบบพื้นฐานของการเรียนรู้แบบมีผู้สอน เรามาดูกันว่าแต่ละส่วนคืออะไร

  1. Labels เป็นส่วนที่ผู้สอนกำหนดให้ว่าจากข้อมูลที่ให้นั้นคำตอบที่ถูกคืออะไร
  2. Predictive Model ผลจากการฝึกคือโมเดลที่ใช้ในการทำนายผลลัพธ์
  3. New Data ข้อมูลที่เครื่องไม่เคยเห็น (ใส่เข้ามาตอนใช้งานจริง หรือตอนที่ต้องการวัดประสิทธิภาพของโมเดล)
  4. Prediction ผลที่เครื่องทำนายออกมา

ประเภทของการเรียนรู้แบบมีผู้สอนจะแยกออกเป็นสองประเภท

  1. การแยกประเภท (Classification)
  2. การถดถอยเชิงสถิติ (Statistical Regression)

การแยกประเภท Classification

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

  1. ภาพใบหน้าคือข้อมูลฝึกหัด
  2. ชื่อของบุคคลในภาพคือ Label
  3. หากเรามีภาพใหม่ที่ไม่รู้ว่าเป็นใคร และส่งเข้ามาให้เครื่องทายอันนั้นคือ New Data
  4. ผลการทายว่า เช่นทายภาพว่าเป็น Robert Downy Jr. เป็นการ Prediction

คำว่า แยก“ประเภท” (Class) ในที่นี้ก็คือชื่อของคนนั้นเอง

คำตอบคือ Label กับ Class ไม่ใช่อย่างเดียวกัน แต่มีความสัมพันธ์เชื่อมโยงกันอยู่ เรามายกตัวอย่างจากการจดจำใบหน้ากันดู

Label เป็นสิ่งที่เราระบุลงไปเพื่อการฝึกฝน เช่นหากเรามีรูปภาพคน 100,000 ภาพ เราจะต้อง Label ลงไปทั้ง 100,000 ภาพ

Class เป็นกลุ่มของชุดคำตอบที่เป็นไปได้ เช่น เรามี 100,00 ภาพก็จริง แต่ใน 100,00 ภาพนั้นเป็นภาพของคน 10 คน จะได้ว่า Class ของเรานั้นจะเท่ากับ 10

การถดถอยเชิงสถิติ (Statistical Regression)

การถดถอยเชิงสถิติเป็นการหาความสัมพันธ์ระหว่างตัวแปร เช่น พื้นที่ของที่ดิน (x) กับราคาที่ดิน (y) โมเดลที่ใช้ในการหาความสัมพันธ์มีด้วยกันอยู่หลายแบบ แต่ที่นิยมกันคือการถดถอยเชิงเส้น (Linear Regression)

Figure credit: Sebastian Raschka, Python Machine Learning

ตัวอย่างการถดถอยเชิงเส้น ในที่นี้เราจะใส่ข้อมูลเป็น x และ ระบุค่า y ที่ควรจะเป็น จากนั้นเครื่องจะประมาณเส้นใดๆ ที่จะสามารถประมาณค่าของ y จาก x ที่กำหนดได้ดีที่สุด

การเรียนรู้แบบไม่มีผู้สอน (Unsupervised Learning)

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

เช่น ในโครงสร้าง DNA เราอยากตามหายีนที่ส่งผลให้คนมีตาสีฟ้าหรือสีดำ เราไม่รู้ว่าตรงไหนของ DNA ที่ส่งผลต่อสีตา

เรารู้แต่ว่าข้อมูล DNA ของคนที่เรานำมาทดสอบมีสองกลุ่ม กลุ่มหนึ่งคือ คนที่มีตาสีฟ้า อีกกลุ่มคือคนที่มีตาสีดำ

เราอยากให้เครื่องตรวจหาว่าส่วนไหนของ DNA ที่แสดงความแตกต่างออกมาอย่างเด่นชัดระหว่างกลุ่ม และเหมือนกันมากในกลุ่มเดียวกัน

การเรียนรู้แบบไม่มีผู้สอนแบ่งออกเป็น 2 ประเภท

  1. การจับกลุ่มของข้อมูล (Clustering)
  2. การลดจำนวนมิติเพื่อบีบอัดข้อมูล (Dimensionality Reduction)

การจับกลุ่มของข้อมูล (Clustering)

ในบางที่เรามีข้อมูลจำนวนมากที่เราไม่สามารถจะใส่ Label ได้ไหว เรารู้แต่ว่าข้อมูลของเรานั้นประกอบด้วยจำนวน Class เท่าใด เราอาจจะระบุให้เครื่องแบ่งข้อมูลออกเป็นจำนวน Class ที่เราต้องการ จากนั้นเราค่อยมาระบุเองว่าแต่ละกลุ่มที่เครื่องพบคืออะไร จากที่เราจะต้องระบุ Label จำนวนมากจะลดลงเหลือแค่เท่ากับจำนวน Class

Figure credit: Sebastian Raschka, Python Machine Learning

ภาพตัวอย่างการจับกลุ่มข้อมูลจากข้อมูลเข้าสองมิติ (ข้อมูลเข้าเป็นตัวเลขสองค่าคือ x1 และ x2) เราไม่รู้ว่าตัวไหนอยู่ในกลุ่มใด (จุดสีเทา) แต่เรากำาหนดให้เครื่องหาวิธีแบ่งกลุ่มข้อมูลออกเป็นสามกลุ่ม และ ได้ผลออกเป็นบริเวณขอบเขตของแต่ละกลุ่ม

การลดจำนวนมิติเพื่อบีบอัดข้อมูล (Dimensionality Reduction)

การลดจำนวนมิติเพื่อบีบอัดข้อมูล เป็นกลไกที่ทำให้เราไม่จำเป็นต้องเก็บข้อมูลไว้ครบ แต่ก็ยังสามารถจำแนกข้อมูลได้ เช่นเรามีข้อมูลสามมิติของข้อมูลหลายๆคลาส สิ่งที่เราต้องการคือ การลดข้อมูลให้เหลือสองมิติและยังสามารถนำไปแยกประเภทคลาสได้ดีเท่าเดิม (อาจดีขึ้นเป็นไปได้)

Figure credit: Sebastian Raschka, Python Machine Learning

เพราะเราไม่ทราบว่าการจะแปลงข้อมูลสามมิติให้เป็นสองมิติที่ดีได้อย่างไร โดยการจัดเรียงข้อมูลนั้นมีโครงสร้างแบบ Unknown Structure (โดยเฉพาะตอนเป็นสามมิติเราไม่มีวิธีการแสดงผล) เราอาจจะกำหนดไปเพียงแค่ว่าโมเดลของการเปลี่ยนแปลงข้อมูลเป็นอย่างไร เช่น

หมายความว่าเราจะสร้างค่า Z ใดๆมาจากการรวมกันแบบเชิงเส้นของค่า x ทั้งสามแกน แต่เราไม่รู้ว่าค่า k แต่ละอันควรเป็นเท่าใด และเราต้องการให้เครื่องหาให้

การเรียนรู้แบบเสริมแรง (Reinforcement Learning)

หลายคนอาจเคยคิดอยากจะให้คอมพิวเตอร์เล่นเกมแทนเรา หรือที่เราเคยชินกับคำว่า “Bot” ถ้าเป็นเกมเก็บเลเวลแบบปกติ เราอาจจะเขียนโปรแกรมให้มันดำเนินตามกฏอะไรบางอย่างไปเรื่อยๆ แต่ถ้าเป็นเกมอย่าง Mario ล่ะ

Figure credit: Youtube, Super Mario AI from 2009 Reinforcement Learning Competition

เราอาจจะใช้โมเดลการให้รางวัลเมื่อบอทเราสามารถทำแต้มได้ดี และให้มันคอยสังเกตว่าการทำ Action แต่ละอย่างแล้วจะได้คะแนนสุดท้ายออกมาเป็นเท่าไร

ถ้าเราทำ Action ตามลำดับต่างๆ ออกมาแล้วคะแนนดี เราก็จะได้รางวัล (Reward) เครื่องจะเริ่มจดจำลำดับการทำ Action แล้วได้คะแนนดี และพยายามจะทำ Action นั้นเรื่อยๆ การที่มันได้รางวัลเท่ากับเป็นการสนับสนุนให้โปรแกรมทำ Action นั้นซ้ำๆ ยิ่ง Action นั้นได้รางวัลมาก ก็จะทำแบบนั้นบ่อยๆ สิ่งที่สำคัญคือ เราต้องคิดโมเดลการให้คะแนนที่ดี

Figure credit: Sebastian Raschka, Python Machine Learning

ภาพด้านบนจะเป็นภาพรวมของการเรียนรู้แบบเสริมแรง โดย Agent จะทำหน้าที่คอยใส่ Action ให้กับระบบ จากนั้น Action เข้าสู่สถานะหนึ่งในระบบและถูกประเมินออกมาเป็นคะแนน โดยจะทำแบบนี้ไปเรื่อยๆจนกว่าจะสามารถสรุปผลลัพธ์ของคะแนน (เกมจบ หรือตาย)

สำหรับบทความหน้าเราจะมาพูดถึง Introduction to Artificial Neural Network กันนะครับ

แล้วเจอกันครับ !!!

Reference

  1. Sebastian Raschk, Python Machine Learning
  2. Shai Ben-David and Shai Shalev-Shwartz, Understanding Machine Learning: From Theory to Algorithms
  3. Pinyo Taeprasartsit, Computer vision class Silpakorn University

ConvoLab

Leading Enterprise Chat Management Platform in Thailand

Natthawat Phongchit

Written by

Data Scientist @Data Wow

ConvoLab

ConvoLab

Leading Enterprise Chat Management Platform in Thailand

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade