Machine Learning เบื้องต้น

หมายเหตุ ผู้อ่านสามารถดู table of contents ของบทความ machine learning ได้ที่ https://goo.gl/BExvUQ

บทความนี้เราจะมาทำความคุ้นเคยกับ machine learning โดยเริ่มจากพื้นฐานการทำงานในกลุ่ม supervised learning ซึ่งเป็นกลุ่มที่ง่ายต่อความเข้าใจมากที่สุดก่อนนะครับ

supervised learning จากที่เราเคยพูดคุยกันไปบทความที่แล้วว่ามันคือกลุ่มที่ computer จะทำการทำนายหรือ predict ค่าต่างๆโดยเรียนรู้จากการเราได้ทำการสอนหรือ training มันโดยถ้าเขียนเป็นเป็นสูตรของ supervised learning ก็จะออกมาเป็น

โดยที่ f คือ function ที่ประมวณผล X คือ input กับ Y คือ output ตามสื่อต่างๆที่เกี่ยวกับ machine learning อาจจะเลือกใช้คำอธิบายอื่นเช่น input อาจจะใช้ว่า predictors, independent variables, features หรือ variables ส่วน output อาจจะใช้คำว่า response หรือ dependent variable ทั้งนี้ไม่ว่าจะใช้คำไหนความหมายก็เหมือนเดิม

หน้าที่ของเราคือการป้อน dataset ให้ machine ทำการ learning จาก dataset เพื่อทำปรับปรุง f ให้สามารถ predict output ในอนาคตได้ใกล้เคียงกับ label ที่อยู่ใน dataset เรามาลองสมมุติตัวอย่างของการเรียนรู้กัน เช่นสมมุติว่าเราได้รับหน้าที่ออกแบบ machine learning เพื่อคำนวนจำนวนความเย็นที่เราควรปล่อยในห้อง server โดยแทนเบอร์ความเย็นจาก 1 ถึง 10 โดยเบอร์ความเย็นที่เพิ่มขึ้นเปลี่ยนแปลงไปตามสถานะการใช้งานของ server ในห้องเช่นถ้า server ในห้องทุกตัวกำลังทำการประมวณผลงานที่หนักพร้อมกันส่งผลเกิดความร้อนที่สูงขึ้นทำให้ต้องเปิดความเย็นที่อัตราที่สูงขึ้น หรือ ถ้า server ในห้องมีเพียงไม่กี่ตัวที่กำลังประมวณผลงานหนักๆอยู่แต่ที่เหลือไม่ได้ใช้งาน อัตราความเย็นที่ถูกปล่อยก็ควรจะลดลงตามเพื่อประหยัดพลังงาน

ขั้นแรกเราต้องมี dataset ซึ่งเป็นข้อมูลในอดีตของการใช้งานเครื่องทำความเย็นพร้อมทั้งข้อมูลการใช้พลังงานของ server ซึ่งได้ทำการบันทึกไว้ย้อนหลังอาจจะ 1 เดือนหรือ 1 ปี โดยทั่วไปยิ่งมี dataset ไว้ train machine เยอะความแม่นยำก็จะเยอะขึ้น ภายใน จะแทน X เป็นพลังงานที่ server ใช้จากนั้นนำมาเข้า function f เพื่อทำการประมวณผลและปรับปรุง f ให้สอดคล้องกับ output ซึ่งคือปริมาณความเย็นในแต่ละช่วง เราสามารถเขียนสูตรดังกล่าวได้ว่า

^Y แทน output ที่ได้จากการทำนาย ส่วน^f คือ function f ที่ได้รับการปรับแต่ง กล่าวโดยสรุปคืองานสาย supervised learning ของ machine learning คือการปรับแต่ง ^f ยังไงให้ได้ ^Y แม่นยำที่สุด แต่นั้นไม่ได้หมายความว่าเราจะสามารถใส่ข้อมูลอะไรเข้าไป train ก็ได้แล้วปล่อยให้ computer ปรับปรุง ^f เองแล้วผลลัพธ์จะออกมาอย่างแม่นยำ No no no มันไม่ง่ายขนาดนั้น ผมชอบคำพูดนึกแต่จำไม่ได้แล้วว่าได้ยินจากที่ไหนน่าจะเป็น video นึงในช่อง pydata ใน youtube เค้ากล่าวว่า “ถ้าเราใส่ขยะเข้าไปใน machine learning ก็จะได้ขยะออกมา” ซึ่งมันเป็นจริงที่สุด คำถามต่อมาแล้วเราจะแทนค่า X ด้วยอะไรหรือใส่อะไรลงไปใน ^f คำตอบคือเริ่มจากการสำรวจ dataset ที่อยู่ในมือ เรามีข้อมูลอะไรบ้าง ซึ่งข้อมูลต่างๆใน dataset เราจะเรียกว่า features ซึ่งจากตัวอย่างข้างนั้น features ต่างๆใน dataset สามารถแสดงตัวอย่างได้ดังนี้รูปด้านล่างนี้ จะเห็นว่าใน dataset ตัวอย่างเรามี features คือ ลำดับรายการ, วันที่, เวลา, จำนวนไฟฟ้า server และปริมาณความเย็นที่ใช้ ณ ขณะนั้น

ตัวอย่างข้อมูลที่อยู่ใน dataset

เมื่อเราสำรวจ dataset แล้วต่อมาที่เราต้องทำคือการดูความสัมพันธ์ระหว่าง features และ output ซึ่งจากตัวอย่างจะเห็นได้ว่า ลำดับรายการ, วันที่ และ เวลา ไม่ได้ส่งผลต่อการตัดสินใจว่าควรจะปล่อยความเย็นท่าไร แต่สิ่งที่เป็นตัวกำหนดหลักคือ พลังงานทั้งหมดที่ server ใช้ซึ่งจากรูปด้านล่างมันคือความสัมพันธ์แบบ linear

กราฟ linear แสดงความสัมพันธ์

ในกรณีที่ความสัมพันธ์ระหว่าง X และ Y เป็นแบบ linear เราจะสามารถแสดงสูตรการทำงานใน function f ได้ว่า

สูตร linear model
ข้อมูลสมมุติเมื่อนำมาเข้าสูตร

ขั้นตอนต่อมาที่ machine จะทำเมื่อได้รับข้อมูลดังกล่าวคือคำนวนหาค่า B0 และ B1 หรือเรียกว่าการค่าหา coefficients เพื่อนำมาคำนวนร่วมกับ input เพื่อให้ได้ output ที่แม่นยำที่สุด ซึ่งการค่าหา coefficients นี้ถือเป็นหัวใจหลักของ supervised learning เลยทีเดียวเพราะมันบ่งชี้ว่าการ perdict ที่ machine จะคำนวนออกมาจะมีประสิทธิภาพมากแค่ไหน ในส่วนนี้จะขอลงรายละเอียดวิธีการคำนวนค่า B ในบทความของ linear regression (https://goo.gl/j9FcaJ)นะครับ

สุดท้ายนี้ถ้าท่านใดมีข้อสงสัยหรือคำชี้แนะใดๆสามารถฝากข้อความได้ที่ https://www.facebook.com/coeffest/ นะครับ ขอบคุณมากครับที่ติดตาม