Posted on Leave a comment

Artificial Intelligent, Machine Learning, Deep Learning ต่างกันอย่างไร?

Artificial Intelligent (AI), Machine Learning (ML), Deep Learning (DL) เป็นคำที่ได้ยินกันบ่อย สื่อถึงความฉลาดของเครื่องจักร แต่มันต่างกันอย่างไรล่ะ ลองอ่านกันดูนะครับ

ที่จริงแล้ว แต่ละคำมีความหมายและขอบเขตที่แตกต่างกันนิดหน่อยคือ AI เป็นการพูดถึงภาพรวมกว้าง ๆ ของเครื่องจักรที่แสดงออกเหมือนว่าฉลาด มีความสามารถในการแก้ปํญหาที่ซับซ้อนได้ โดยมี ML เป็นหนึ่งในเทคนิคหนึ่งที่ใช้ทำให้ AI ดูฉลาด ส่วน DL ก็เป็นส่วนหนึ่งของ ML อีกที ดังนั้น ทั้ง AI, ML และ DL จึงมีขอบเขตและความสัมพันธ์เป็นลักษณะดังรูป

รูปที่ 1 แสดงถึง ML เป็นส่วนหนึ่งของ AI และ DL ก็เป็นส่วนหนึ่งของ ML

นี่เป็นเพียงภาพความสัมพันธ์คร่าว ๆ เท่านั้น หากต้องการความกระจ่างมากขึ้น คงต้องทำความรู้จักและเข้าใจแต่ละอย่างให้มากขึ้นอีกหน่อย ดังนี้

ถ้าแปลกันตรงตัวก็คือ “ปัญญาประดิษฐ์” นั่นเอง ปัญญาประดิษฐ์เป็นแนวคิดกว้าง ๆ ว่า เป็นคอมพิวเตอร์ หรือหุ่นยนต์ หรือเครื่องจักร สามารถแสดงการแก้ไขปัญหาได้เหมือนมนุษย์ ซึ่งต้องเน้นว่า เป็นการ “แสดง” ออกที่เหมือนมนุษย์ ไม่ใช่ “คิด” ได้เหมือนมนุษย์ โดยที่มีหลายเทคนิคที่ทำให้ เครื่องจักรสามารถแสดงออก หรือแก้ปัญหาได้ เหมือนหรือคล้ายมนุษย์ เช่น rule-based system หรือ expert system ซึ่งเป็นการที่โปรแกรมเมอร์ เขียนโปรแกรมกำหนดไว้หมดแล้วว่า เงื่อนไขแบบไหน หรือสถานการณ์ไหน ต้องเลือกอะไร หรือทำอะไร

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

นอกจาก rule-based system แล้วยังมีเทคนิคอื่น ๆ ที่ช่วยให้เครื่องจักรแสดงออกถึงความฉลาดคล้ายมนุษย์ และเทคนิคหนึ่งที่สำคัญและพูดถึงก่อนบ่อยก็คือ machine learning นั่นเอง

เป็นเทคนิคหนึ่งในการทำให้เครื่องจักรดูมีความสามารถในการแก้ปัญหาได้ฉลาดเหมือนมนุษย์ โดยมีความแตกต่างจาก rule-based system ที่สำคัญคือ แทนที่จะให้ผู้เชี่ยวชาญ หรือโปรแกรมเมอร์กำหนดเงื่อนไขต่าง ๆ ให้ชัดเจนแต่แรก แต่เป็นการให้เครื่องจักรหาเงื่อนไขที่เหมาะสมเอง ผ่านกระบวนการเรียนรู้ 

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

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

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

รูปที่ 2 แสดงความสัมพันธ์ของความเร็วลม และความสูงของคลื่น

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

สิ่งที่นักวิทยาศาสตร์ต้องทำก็คือ สร้างโมเดลทางคณิตศาสตร์ให้สอดคล้องกับข้อมูล เพื่อใช้เป็นเกณฑ์ในการบอกค่าความสูงของคลื่นที่ความเร็วลมต่าง ๆ จากข้อมูลเราเห็นว่า ความสัมพันธ์ค่อนข้างเป็นเส้นตรง ดังนั้นเราจะใช้โมเดลทางคณิตศาสตร์ (สมการ) ของเส้นตรงเพื่อเป็นตัวแทนของความสัมพันธ์นี้ ก็จะได้ดังสมาการที่ 1

y = ax + b ————– ( 1 )

  • x คือ ความเร็วลมชายฝั่ง
  • y คือ ค่าความสูงของคลื่นในทะเล
  • a และ b คือพารามิเตอร์ของโมเดล

เมื่อเราเลือกโมเดลทางคณิตศาสตร์มาแล้ว เราก็ต้องหาค่าพารามิเตอร์ a และ b เพื่อให้ได้สมาการเส้นตรงที่สมบูรณ์ ดังรูปที่ 3 

รูปที่ 3 แสดงถึงโมเดลทางคณิตศาสตร์ ที่แสดงถึงความสัมพันธ์ของข้อมูล

แต่ใครจะเป็นคนหาหาพารามิเตอร์นี้ล่ะ จากกราฟ การจะหาพารามิเตอร์ก็ไม่ยาก หาจุดตัดแกน x และ แกน y ก็น่าจะได้ประมาณว่า a น่าจะเป็น 0.5 และ b น่าจะเป็น 2 แต่ถ้าเราเป็นคนหาพารามิเตอร์ให้กับคอมพิวเตอร์ ก็เท่ากับว่านี่เป็นระบบ expert system คือเราหาให้ทุกอย่าง กำหนดทุกอย่าง เครื่องจักรไม่ต้องเรียนรู้อะไร เอาหละ เราจะไม่หาพารามิเตอร์ให้ แต่เราจะให้คอมพิวเตอร์หาพารามิเตอร์ที่เหมาะสมเอง โดยให้คอมพิวเตอร์เลือกค่าพารามิเตอร์เริ่มต้นออกมา เช่น a เป็น 1และ b เป็น -1 ก็จะได้กราฟเส้นตรงออกมาเป็นเส้นสีแดงดังรูปที่ 4 

รูปที่ 4 แสดงถึงโมเดลทางคณิตศาสตร์ที่มีพารามิเตอร์ยังไม่ดีพอ (สีแดง) และโมเดลเป้าหมายที่ต้องการ (สีเขียว)

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

ดังนั้น หน้าที่ของนักวิทยาศาสตร์ตอนนี้ก็คือ 

  1. วิเคราะห์ข้อมูลเพื่อเหลือโมเดลให้เหมาะสมกับข้อมูล จากนั้น ให้คอมพิวเตอร์หาพารามิเตอร์ที่เหมาะสมให้กับโมเดล โดย
  2. เขียนโปรแกรมให้คอมพิวเตอร์ปรับปรุงพารามิเตอร์เหล่านั้น
  3. คิดวิธีประเมินว่า พารามิเตอร์ที่ได้นั้น ดีพอแล้วหรือยัง

ส่วนเทคนิคในการเรียนรู้นั้นก็มีหลายแบบ ไม่ว่าจะเป็น decision tree, random forest, SVM และอื่น ๆ ส่วนตัวที่โดดเด่นและพูดถึงกันมาก (คงเดาได้ไม่ยาก) นั่นก็คือ Deep Learning นั่นเอง

จากการที่ได้เข้าใจแล้วว่า Machine Learning คือการหาโมเดลคณิตศาสตร์ และวิธีการปรับพารามิเตอร์ให้กับโมเดลนั้น Deep learning เป็นเทคนิคหนึ่งในนั้น เป็นการเรียนแบบการทำงานของสมองมนุษย์ ซึ่งมีหน่วยย่อยที่สุดคือเซลล์ประสาทที่เรียกว่า neuron ดังนั้นนักวิทยาศาสตร์ก็ต้องสร้าง neuron ในเชิงคณิตศาสตร์ขึ้นมา ดังตัวอย่างในรูปที่ 5

รูปที่ 5 แสดงถึงลักษณะของโมเดลคณิตศาสตร์ ที่แสดงลักษณะคล้าย neuron

จากรูปเป็นตัวอย่าง neuron ที่มี 3 input และมีพารามิเตอร์คือ 4 ตัว คือ w1, w2, w3 และ b และเราก็จะได้โมเดลคณิตศาสตร์เป็นสมาการที่ 2 ดังนี้

y = w1x1 + w2x2 + w3x3 + b ————– ( 2 )

นี่เป็นเพียงตัวอย่างหนึ่งเท่านั้น จะเห็นว่าก่อนหน้านี้ในสมาการที่ 1 มี input ตัวเดียว มีพารามิเตอร์ 2 ตัวคือ a และ b แต่ตอนนี้เริ่มซับซ้อนขึ้น คือมี input 3 ตัว และมีพารามิเตอร์ 4 ตัว

นอกจากนี้ ถ้านำ neuron หลาย ๆ ตัวมาเรียงกันเป็นแพ (layer) แล้วเอาแต่ละแพมาซ้อนกันเป็นชั้น ๆ ก็จะได้โมเดลคณิตศาสตร์ที่ซับซ้อนมากยิ่งขึ้น แล้วจะเห็นว่าข้อมูลมีการส่งต่อเพื่อประมวลผลต่อไปหลายชั้น ดังนั้นเราจึงเรียกโครงสร้างนี้ว่า Deep neural network และการใช้โครงสร้างนี้ในการเรียนรู้ ก็เรียกว่า deep learning นั่นเอง 

รูปที่ 6 แสดงถึงการเรียงตัวของ neuron ที่มีลักษณะเป็นชั้น ๆ หลาย ๆ ชั้นซ้อนกัน

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

หวังว่าผู้อ่านจะเห็นภาพในใจมากขึ้นนะครับ แล้วพบกันใหม่ ขอบคุณครับ

Posted on Leave a comment

TinyML คืออะไร

จากชื่อก็พอจะเดาได้ว่า Tiny คือ เล็กๆ และ ML ก็มาจาก Machine Learning รวมกันก็คือ machine learning ขนาดเล็ก แล้วเล็กแค่ไหนถึงเรียกว่า TinyML ล่ะ ก็เล็กขนาดที่ทำงานอยู่บน microcontroller ได้นั่นแหละ ถึงแม้ว่าจะเรียก machine learning แต่ก็มักจะไม่มีการเรียนรู้บน microcontroller (แม้ว่าจะทำได้ก็ตาม) มักมีเพียงการตัดสินใจ (inference) เท่านั้น การเรียนรู้ (trainging) จะเกิดบน desktop หรือ server แล้วนำสิ่งที่เรียนรู้ได้นั้น มาใช้บน microcontroller นั่นเป็นเพราะว่าขั้นตอนการเรียนรู้นั้นต้องการการคำนวนที่มาก และต้องใช้เวลานาน ทำให้ไม่สะดวกที่จะเรียนรู้บน microcontroller อีกเหตุผลหนึ่งก็คือ ในหลายกรณีไม่มีความจำเป็น หรือไม่ควรเรียนรู้บน microcontroller เนื่องจาก การเรียนรู้ (training) มักต้องการนักวิทยาศาสตร์ หรือผู้เชี่ยวชาญคอยดูแลขั้นตอนการเรียนรู้ เพื่อให้การเรียนรู้เป็นไปอย่างเหมาะสม ดังนั้นบน microcontroller จึงมักมีเพียงแค่ส่วนของการทำงานที่เป็นการตัดสินใจ (inference) เท่านั้น

ทำไมต้อง TinyML

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

  1. ความปลอดภัยของข้อมูล เนื่องจาก microcontroller สามารถตัดสินใจได้โดยไม่มีการส่งข้อมูลไปให้ server ทำให้มีความปลอดภัยของข้อมูลมากขึ้น โดยเฉพาะเรื่องความเป็นส่วนตัวของข้อมูล (data privacy)
  2. ต้องการ Bandwidth ต่ำ เนื่องจากการตัดสินใจ สามารถทำได้บน microcontroller จึงไม่จำเป็นต้องสื่อสารกับ server ด้วยข้อมูลปริมาณมาก ทำให้ไม่จำเป็นที่ต้องใช้การสื่อสารที่มี bandwidth สูง ซึ่งช่วยประหยัดต้นทุนได้
  3. ประหยัดพลังงาน เนื่องจาก microcontroller ใช้พลังงานน้อยกว่า desktop หรือ server หรือแม้แต่ single board computer อย่าง Raspberry Pi มาก ทำให้สามารถใช้กับ battery ก้อนเล็ก ๆ ได้
  4. ขนาดเล็ก เนื่องจาก microcontroller มีขนาดเล็กทำให้สะดวกที่จะติดตั้งลงบนอุปกรณ์ที่ขนาดไม่ใหญ่มาก เช่น drone หรืออุปกรณ์พกพาอื่น ๆ ได้ง่าย