สวัสดีคร้าบ ผมอู๋ ตอนนี้ทำงานเป็น Data Scientist อยู่ LINE MAN Wongnai ครับ เนื่องจากผมได้ทำงานกับทางทีมฝั่งธุรกิจค่อนข้างเยอะ เพื่อนำ machine learning หรือ ML เข้าไปช่วยแก้ปัญหาในหลายด้าน แต่ส่วนใหญ่คนทั่วไปมักไม่ค่อยคุ้นเวลาเราพูดถึง ML หรือการสร้างโมเดล ซึ่งปัจจุบันเราเริ่มใช้กันทั่วในหลายๆ องค์กร และ ใกล้ตัวคนทำงานฝั่งธุรกิจมากขึ้น บทความนี้ผมจึงตั้งใจเขียนสำหรับคนทั่วไป ที่เคยได้ยินคำว่า machine learning หรือ ML แต่ไม่รู้ว่ามันคืออะไร? แล้วทำไมมันฮิตมากในช่วง 2–3 ปีที่ผ่านมา… วันนี้ผมจะมาอธิบายไอเดีย + เปรียบเทียบตัวอย่างง่ายๆ ให้ฟังครับ! วัตถุประสงค์ของบทความนี้ง่ายๆ ครับ ผมตั้งใจว่าถ้าเราอ่านบทความนี้แล้วไปเจอคนคุยเรื่อง ML อย่างน้อยเราน่าจะพอนึกออกว่า..
มาเริ่มกันเลย!! Table of Content
ก่อนเข้าเรื่อง machine learning ผมขอเปรียบเทียบกับ human learning หรือการเรียนรู้ของคนก่อนครับ ถามว่า เรามีหลักการเรียนรู้สิ่งใดสิ่งนึงอย่างไร? การเรียนรู้ของมนุษย์ผ่านการรู้จำของสมองลองนึกภาพตอนเด็กๆ เรารู้จักหมา แมวได้ยังไง? พ่อแม่อาจชี้ให้ดูแล้วพูดกรอกหูเราว่า “นี่แมวนะ!” พูดครั้งแรก เราอาจจะยัง งงๆ แต่พอครั้งถัดๆ ไปทุกครั้งที่เจอแมว เราจะโดนกรอกหูว่า “โน่นแมว นู่นแมว นี่แมว แมวๆๆๆๆ..” โอ้ยย จนสุดท้ายเราจะเริ่มชิน เมื่อย้ำหลายๆ รอบเข้า สมองเราจะจำได้ว่า เออว่ะ หูแหลมๆ ตัวเล็กๆ ขนสั้นๆ ตาแป๋วๆ คมๆ คือ “แมว” กระบวนการนี้เรียกว่า “การเรียนรู้”… ซึ่งสมองเราสามารถจดจำสิ่งต่างๆ ได้จาก “ข้อมูล” ที่ถูกส่งผ่านทางประสาทสัมผัสเข้าสู่สมอง
การที่เราจะสอนคอม ให้ “เรียนรู้” เราต้องการ input คือ “ข้อมูล (data)” เพื่อใช้ในการตัดสินใจเลือก output ให้สอดคล้องกับข้อมูลที่เรียนมา ฟังแล้วอาจดู งงๆ ลองดูตัวอย่างกันครับ ตัวอย่างการเรียนรู้ของ Machineจากตัวอย่างเดียวกัน เนื่องจากหุ่นยนต์ไม่มีระบบสัมผัสเหมือนคน เราจึงต้องเปลี่ยนข้อมูลเป็นรูปแบบที่มันอ่านรู้เรื่อง ซึ่งก็คือ แถว/คอลัมน์ หน้าตาเหมือนตาราง Excel เราจะใช้ข้อมูลเกี่ยวกับแมว เป็น input ในที่นี้อาจจะเป็น “ขนาดตัว, น้ำหนัก, ขนสั้น/ยาว” พร้อมข้อมูลกำกับ (label) ว่า “แมวหรือหมา (0/1)” กระบวนการยัดข้อมูลพร้อม label กำกับ ให้กับ machine เรียกว่า การเทรนนิ่ง (training) นั่นเอง (จริงๆ ML บางประเภทไม่จำเป็นต้องมี label ซึ่งจะพูดถึงในตอนท้าย) สุดท้ายเราจะได้ผลลัพธ์เป็น “โมเดล” ที่สามารถแยกแยะแมวจากน้ำหนักกับขนได้ (ตามข้อมูลที่เราสอนมัน) พูดง่ายๆ คือ ต่อไปถ้าเราเจอตัวอะไรเดินผ่าน เราจับมาวัด ขนาด น้ำหนัก ขน ยัดเป็น input ใส่โมเดลนี้ เราจะรู้ได้ว่าตัวนี้เป็นแมวหรือหมา! สรุป Machine Learning คืออะไร? ย้อนกลับมาที่คำถามเดิม “machine learning คืออะไร?” เราตอบสั้นๆ ได้ว่า
นี่คือไอเดียกว้างๆ ของ ML ครับ ยังไม่ต้องคิดถึงกระบวนการนะ ลองคิดดู แค่จากนิยามนี้ แสดงว่า …
เช่น ทายราคาหุ้นจากปัจจัยในตลาด, ทายชนิดสัตว์จากรูปลักษณ์, พยากรณ์อากาศจากค่าความชื้น หรือแม้แต่การหาอัตราการเกิดโรคร้ายจากผลการตรวจสุขภาพ… จะเห็นว่าประโยชน์มันมหาศาลมากกก ด้วยความเจ๋งนี้ + ยุคปัจจุบันที่เต็มไปด้วยข้อมูลมหาศาลสำหรับเทรน machine ไม่แปลกใจเลยที่ทำไม ML ตอนนี้ถึงสำคัญมากๆ! ประเภทของ Machine Learning Model
วิธีการเทรนโมเดลมีเยอะมากครับ ขึ้นกับอัลกอริทึมในการเทรน ชื่อที่เราคุ้นๆ ก็อาจจะมี Linear regression, Neural Network หรือ Deep Learning ซึ่งจะไม่ขอลงลึกในบทความนี้ แต่จะเน้นอธิบายให้เห็นภาพว่า คำว่าเทรนนั้น เป้าหมายของมันคืออะไร? เราต้องการหาอะไร? แล้วกระบวนการคร่าวๆ ของมันเป็นยังไง? เป้าหมายของการเทรน ขึ้นอยู่กับประเภทของ ML ซึ่งถูกแบ่งออกเป็น 3 ประเภท มาลุยกันทีละตัวครับ! https://nowenlightenme.com/2018/03/18/types-of-machine-learning/1) Supervised Learningแปลตรงๆ เรียนรู้แบบ supervised คือ “มีคนสอน” พูดง่ายๆ คือ machine ถูกสอนจาก data ที่มาพร้อมเฉลย! เฉลยที่ว่าคือ label นั่นเอง ตัวอย่างเช่น ข้อมูลสำหรับแยกแยะแมว-หมา จากตัวอย่างที่แล้ว ตัวอย่างข้อมูลพร้อม label ของ ML แบบ Supervised learningเราสอนคอมพิวเตอร์ว่าสัตว์ตัวที่มี ความสูง, น้ำหนัก และขน แบบนี้ เป็น “หมา” หรือ “แมว” โดยข้อมูลในคอลัมน์ที่ว่าคือ Label (คำกำกับ) นั่นเอง … ผมขอสรุปสั้นๆ ว่า
การทำนายข้อมูลในอนาคตยังแยกได้อีกสองแบบย่อยๆ คือ classification กับ regression Classification vs Regressionประเภทของการทำนายแบบนี้แบ่งออกเป็นสองแบบตามลักษณะของผลลัพธ์
จากรูป สมมติให้เป็นข้อมูลหมาแมวคล้ายตารางข้างบน ให้มองว่า แกน x , y คือ น้ำหนักกับความยาวขน ส่วนสีน้ำเงินกับแดง แทน label บอกว่า จุดคือ แมว หรือ หมา จะเห็นว่าการที่เราจะแบ่งกลุ่มหมา-แมวได้ เราต้องรู้ “เส้นแบ่ง” (classifier) ที่ชัดเจนซึ่งคือ เส้นสีดำในรูป ชาว data มักเรียกเส้นนี้ว่า “โมเดล” นั่นเอง! คำถามต่อมาคือ แล้วเราจะหาเส้นนี้ได้ยังไงล่ะ?… ใช่ครับ คำตอบคือเราต้องทำการ “เทรน” โมเดล! อย่างที่บอกครับ machine learning คือการที่เราเอาข้อมูลสอน machine ทีนี้ถ้าสอนโดยให้มันดูข้อมูลแค่ 1 ครั้ง มันจะยังไม่สามารถหาเส้นที่ดีที่สุดได้ เพราะในการเทรนแต่ละครั้ง machine จะค่อยๆ เรียนรู้จากความผิดพลาดทีละน้อย และนำมาปรับปรุงในการเทรนรอบถัดๆ ไป แต่ละรอบเราเรียกว่า iteration เมื่อลองผิดลองถูกไปหลายๆ รอบ ตัว machine ก็จะฉลาดขึ้นจนสามารถหาเส้นที่แบ่งข้อมูลได้ดีที่สุดครับ เราลองมาดูตัวอย่างจาก animation ด้านล่างครับ ตัวอย่างการเรียนรู้ของปัญหาแบบ Classification ด้วย Linear Classifier (Perceptron)จากรูป iteration หมายถึง จำนวนครั้งที่เราสอน/เทรนโมเดล จะเห็นว่ารอบแรกๆ เส้นเขียวจะเริ่มจากมั่วๆ หลังจากนั้นรอบถัดไป (สังเกตการขยับของเลข iteration) มันจะค่อยๆ เรียนรู้ (learning) แล้วขยับเข้าใกล้จุดเส้นแบ่งขึ้นเรื่อยๆ จน iteration ที่ 7 มันสามารถหาจุดที่แบ่ง หมา-แมว ได้เด็ดขาด จุดนี้เรียกว่าการ “converge” คือจุดที่เราได้เส้นที่แบ่งข้อมูลชุดนี้ได้ดีที่สุด เส้นนี้เราเรียกว่า โมเดล (model) นั่นเอง! ตอนนี้หลายคนอาจงง ว่ารู้ได้ไงว่าต้องขยับไปทางไหน? แล้วมันทำงานยังไง? อย่าเพิ่งงงฮะ อัลกอริทึมนี้ชื่อว่า Perceptron เป็นโมเดลคลาสสิกของเรื่อง classification แต่ยังไม่ต้องไปสนใจมันครับ ตอนนี้ขอให้รู้ไอเดียไว้ก่อนว่า เทรนนิ่งเนี่ย หน้าตามันเป็นอย่างเงี้ยแหละขยับๆเส้นไปมา ถ้าใครสนใจอยากศึกษาเพิ่มเติมลองดู https://en.wikipedia.org/wiki/Perceptron ตามที่ว่ามาขอสรุปว่า เป้าหมายของ classification คือ…
คำว่า “ชัดที่สุด” ในบางเคส ข้อมูลอาจไม่สามารถแบ่งด้วยเส้นตรงได้ หากจุดแดง และน้ำเงิน มีการ overlap กัน เราอาจใช้โมเดลที่ซับซ้อนขึ้นในการทำนาย เช่น Neural Network หรือ Decision Tree ในการแบ่ง ซึ่งจะพูดถึงบทความถัดๆ ไปครับ 2. Regression — คือการทำนายผลเป็นตัวเลขต่อเนื่อง เช่น ทำนายราคาหุ้นจากสภาพตลาด หรือ ทำนาย น้ำหนัก จาก ส่วนสูง และ เพศ ตามตาราง ตัวอย่างข้อมูลสำหรับ Regression ทายส่วนสูงจากน้ำหนักและเพศจะเห็นว่าข้อมูลที่เราต้องการทำนายคือความสูง เป็น “ตัวเลขต่อเนื่อง” (continuous value) ด้วยเหตุนี้ ทำให้โมเดลสำหรับปัญหาแบบ regression มีเป้าหมายต่างกับ classification นั่นคือ…
ตัวอย่างง่ายๆ เช่น ร้านอาหารอยากทำนายยอดขายเดือนหน้า เพื่อวางแผน stock วัตถุดิบได้ ยิ่งแม่น หมายความว่าเรายิ่งวางแผนได้ดียิ่งขึ้น อาจสงสัยกันแล้วว่าเราจะเทรนโมเดลที่ว่านี้ได้ยังไง? มาดูตัวอย่างกันครับ! ตัวอย่างโมเดลเส้นตรงสำหรับโจทย์ Regressionจากรูปมองว่าแกน x คือ ส่วนสูง แกน y คือ น้ำหนัก เราต้องการเส้นเทรนด์ (trend line) ที่บอกว่า ถ้าส่วนสูง ประมาณนี้ ควรมีน้ำหนักเท่าไร? นั่นคือ…
หลักการง่ายๆ คือหาเส้นที่ทาบบนข้อมูลแล้วได้ trend ที่ใกล้ข้อมูลมากที่สุด เส้นที่ว่าคือ โมเดล นั่นเอง เราอาจสร้างโมเดล (เส้นสีน้ำเงิน) จากสมการเส้นตรงง่ายๆ ที่เราเรียนตอนมัธยม คือ y = mx + c
การเทรนนิ่ง regression model คล้ายกับ classification model ครับ คือค่อยๆ เรียนรู้จาก error พอหลายๆ รอบ (เรียกว่า epoch หรือ iteration) จะสามารถได้โมเดลที่ดีที่สุด คือ เส้นที่นาบจุดได้เนียนที่สุด มี error น้อยที่สุดนั่นเอง รูป GIF ด้านล่างเป็นตัวอย่างการเรียนรู้ของ regression model ครับ ตัวอย่างการเรียนรู้โมเดล Regression จากที่นี่จากรูป รอบ (หรือ epoch) ที่ 1 เส้นจะเริ่ม จากการสุ่ม(random) ค่า m (ความชัน) และ c (จุดตัดกราฟ) ก่อน จะเห็นว่ามันเริ่มที่ไกลมากๆ แต่ในรอบถัดๆ ไป อัลกอริทึมจะค่อยๆ เรียนรู้ และนำ error มาปรับค่า m และ c ไปเรื่อยๆ จนสุดท้ายได้เป็นสมการเส้นตรงที่ทาบจุดข้อมูลแล้วมี error น้อยที่สุด สังเกตว่าแค่สมการเส้นตรง (ที่เรียกว่า Linear Regression) ไม่สามารถทาบจุดได้เนียนๆ แบบไร้ error ได้ ซึ่งในชีวิตจริง ยังมีโมเดลขั้นสูงให้เลือกใช้อีกมากมาย เช่น polynomial regression, neural network, decision tree ที่สามารถสร้างเส้นที่ทาบจุดได้แบบแทบไม่มี error เลย (แต่ตรงจุดนี้อาจเกิดปัญหา overfitting ตามมา แต่ขอไม่ลงลึกในบทความนี้ครับ) ตัวอย่างเส้นตรงที่เทรนจากโมเดลประเภท non-linear รูปจากที่นี่ถามว่าถ้างั้นใช้แต่ โมเดลขั้นสูงไปเลยสิ เราจะได้มี error น้อยที่สุด! คำตอบคือไม่ใช่ครับ ในโลกของ data science ยังมีสิ่งที่ต้องคำนึงมากกว่านั้น ไม่ใช่แค่เรื่องความแม่นยำอย่างเดียว สุดท้ายการเลือกใช้ประเภทของโมเดลต้องขึ้นกับข้อมูลและโจทย์ของเราด้วยครับ สรุป…จะเห็นว่าเป้าหมายของการทำนายทั้งสองแบบต่างกัน ทำให้ต้องมีวิธีการเทรนโมเดลที่แตกต่างกันไปด้วย ทั้งหมดนี้ ผมอยากให้ได้ไอเดียว่า… 2) Unsupervised learning วิธีนี้มีหลักการตรงกันข้ามกับ supervised ครับ เพราะ “มีข้อมูล แต่ไม่มี label”
มองโจทย์แบบนี้ว่า
จากรูปเป็นข้อมูลธุรกรรม (transaction) ของลูกค้า สแกน x และ y เป็นปริมาณการซื้อ และเวลาที่ซื้อในแต่ละ transaction มาลองทำ clustering พบว่า เมื่อดูจากพฤติกรรมลูกค้า(ปริมาณและเวลาซื้อ) เราสามารถแบ่งเป็นสองกลุ่ม แดง กับ ฟ้า ได้ชัดเจน เราอาจไม่รู้ในตอนแรกว่าสองกลุ่มคืออะไร แต่ผลลัพธ์นี้ทำให้เราเห็นแพทเทิร์นอะไรบางอย่าง . . . เมื่อนำข้อมูลมาวิเคราะห์ต่อ เราอาจได้คำตอบว่าสองกลุ่ม แบ่งเป็น ลูกค้าขาจร กับ ขาประจำ เมื่อเรารู้ประเภทลูกค้าเราสามารถ take action กับกลุ่มลูกค้าได้ตรงจุดมากขึ้น 3) Reinforcement Learning หรือ RL ตัวนี้แหวกแนวหน่อย เราสามารถเทรนได้โดยไม่จำเป็นต้องมีข้อมูลให้มันเลย… แต่จะบอกว่าไม่ใช้ข้อมูลเลยก็ไม่ถูกซะทีเดียว เพราะสิ่งที่มันทำคือมันจะค่อยๆ หาข้อมูลด้วยตัวมันเอง จากการลองผิดลองถูกหน้างาน (trial error) และนำข้อมูลสดๆ (live data) จากตรงนั้นมาเรียนรู้ พัฒนาตัวเองไปเรื่อยๆ ฟังแล้วอาจงงๆ เดี๋ยวรอดูตัวอย่าง Pacman AI ด้านล่างแล้วน่าจะเห็นภาพครับ 😁 ถ้าพูดถึงหลักการของ Reinforcement Learning คือ … การสร้าง RL model เริ่มจากเราตั้งเป้าหมายว่าอยากให้ บอทบรรลุเป้าอะไร ถ้าทำถูกเราจะให้รางวัล ส่วนทำผิดจะหักคะแนน วิธีการนี้เรียกว่าระบบ Reward system ครับ โดยที่…
อ่านหลักการแล้วอาจยังมองไม่เห็นภาพ แนะนำลองดูตัวอย่างการเทรนบอท Pacman ด้วย Deep Reinforcement Learning ดูครับ เงื่อนไขคือ Pacman ไม่มีข้อมูล (ประวัติการเดิน) ให้ แต่มีกำหนดเกณฑ์ให้คือกินเม็ดได้แต้ม โดนปีศาจก็ตาย (เสียแต้ม) แล้วเราให้บอทไปลองผิดลองถูกตามกฎที่ตั้งไว้ จะเห็นว่ารอบแรก Pacman จะเริ่มจากวิ่งไม่เป็น พอผ่านไปรอบท้ายๆ แล้ว สเต็ปโหดมากก การพัฒนาของ Pac-man bot จากการเทรน Deep Reinforcement Learning https://github.com/tychovdo/PacmanDQNhttps://camo.githubusercontent.com/bed04007ee2e5cd61804f4cf831c4cba6d61ecde/687474703a2f2f692e696d6775722e636f6d2f4d4e70724f46332e676966 เทคนิค RL พิสูจน์แล้วว่าสามารถเทรนบอทให้แข่งกับคนได้โหดมากๆ เช่น AlphaGo เล่นโกะชนะแชมป์โลกโกะแบบชิลๆ ส่วนบอท Dota2 ก็สามารถชนะทีมระดับแนวหน้าได้แล้ว นอกจากนี้ RL ยังใช้เทรนการทำงานของ self-driving car หรือ รถไร้คนขับอีกด้วย จบแล้ววคร้าบ ขอบคุณที่อ่านจนจบครับ ผมขอสรุปแบบ “ขอสามคำ” ไว้ให้จำกันง่ายๆ ตามนี้ครับ
สำหรับคนที่สนใจอยากมาเป็นส่วนหนึ่งของทีม Data ที่ LINE MAN Wongnai สามารถดูรายละเอียดและสมัครได้ที่ https://careers.lmwn.com/development |