Tag Archives: วิทย์ม.ต้น

วิทย์ม.ต้น: Machine Learning ใน 5 นาที, ที่ฝึก ML, คำสอนปิดม.ต้น

วิทย์โปรแกรมมิ่งวันศุกร์สัปดาห์นี้ เด็กม.3 ได้ดูคลิปการสั่งให้คอมพิวเตอร์เรียนรู้จากตัวอย่าง (machine learning หรือ ML) ได้พิมพ์ตามคลิปนี้ครับ:

ผมเล่าให้ฟังว่าถ้าเรามีข้อมูลตัวอย่างเยอะๆดีๆเราก็สามารถให้คอมพิวเตอร์เรียนรู้ด้วยเทคนิคด้าน machine learning เพื่อช่วยทำงานต่างๆให้เราได้ ยกตัวอย่างเช่นอาจช่วยวินิจฉัยโรค ช่วยรู้จักหน้าคน รู้จักคัดตัวอย่างผลไม้ ตรวจหาวัชพืช แยกแยะแมลงมีประโยชน์และมีโทษ ช่วยวาดรูป ช่วยแต่งเพลง ฯลฯ โดยตัวอย่าง (ที่ไม่สมจริง) ที่ผมลองพิมพ์ให้ดูก็เช่นแยกระหว่างไข้หวัดใหญ่และโควิด-19:

ผมแนะนำให้เด็กๆไปศึกษาวิธีบอกให้คอมพิวเตอร์ช่วยงานด้านนี้ โดยใช้เวลาว่างเข้าไปเรียนรู้ที่ https://www.kaggle.com/learn/overview

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

Neomania, เล่นและ พยายามหาความเร็วปืนใหญ่ลม

วันพุธสัปดาห์นี้เด็กๆมัธยมต้นเรียนเรื่อง neomania จากหนังสือ The Art of Thinking Clearly โดยคุณ Rolf Dobelli ที่เราชอบตื่นเต้นกับของใหม่ๆเกินไป ปัญหาก็คือของใหม่ๆหลายๆอย่างไม่ได้มีประโยชน์อะไรนักและของเก่าๆที่ใช้กันมานานๆหลายๆอย่างก็มีประโยชน์ เราต้องเลือกใช้ให้ถูก ให้มีประโยชน์

จากนั้นเด็กๆก็เล่นปืนใหญ่ลม (Vortex Cannon) กัน โดยเด็กๆได้ดูบางส่วนของคลิปพวกนี้ก่อนครับ:

มีคลิปแนะนำที่ไม่ได้ดูเพราะไม่มีเวลาพอด้วยครับ:

จากนั้นผมก็อธิบายการประกอบและเล่นของเล่นพวกนี้:

จากนั้นเด็กก็เล่นและพยายามหาความเร็วลมที่พุ่งออกมาจากปืนใหญ่ลม บรรยากาศกิจกรรมของเราครับ:

วิทย์ม.ต้น: Birthday Paradox ต่อ

วิทย์โปรแกรมมิ่งวันศุกร์นี้ เด็กๆม.3 เขียนโปรแกรมไล่ดูว่าต้องมีคนสักกี่คนอยู่ด้วยกันแล้วความน่าจะเป็นที่จะมีคนวันเกิดซ้ำกันบ้างเกิน 50% พบว่าต้องมีคน 23 คนครับ

หน้าตาฟังก์ชั่นคำนวณความน่าจะเป็นที่คน k คนจะไม่มีวันเกิดซ้ำกันเลย และมีวันเกิดซ้ำกันบ้างจะเป็นประมาณนี้ครับ:

เราวาดกราฟดูด้วย matplotlib ได้ดังนี้ครับ:

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

เช่นสมมุติว่ามีคนหลายคนใส่นาฬิกาโดยที่ไม่ได้ตั้งกันมาให้ตรงกับเวลามาตรฐานก่อน เข็มวินาทีของแต่ละคนก็อาจจะชี้เลขจาก 0 ถึง 59 ถ้าเราสมมุติว่าโอกาสที่เข็มชี้เลขต่างๆด้วยความน่าจะเป็นเท่าๆกัน เราก็สามารถหาโอกาสที่คน k คนจะมีเข็มวินาทีซ้ำกันอยู่ได้ด้วยฟังก์ชั่น prob_some_repeat(60, k) เราจะพบว่าเมื่อมีคน 10 คน ความน่าจะเป็นที่มีเข็มชี้ไปที่วินาทีซ้ำๆกันบ้างจะมากกว่า 50% ครับ

ด้วยคณิตศาสตร์ระดับสูงขึ้นไป เราจะสามารถคำนวณได้ว่าถ้ามีของให้เลือก N ชิ้น แล้วมีคน k คนมาเลือกสุ่มๆโดยโอกาสเลือกของแต่ละชิ้นเท่าๆกัน ความน่าจะเป็นที่จะมีการเลือกซ้ำจะมีค่า 50% เมื่อ k มีค่าประมาณ 1.2 √N เท่านั้นครับ

การบ้านคือให้เด็กๆไปทดลองหาว่าสำหรับของ 10, 10^2, 10^3, 10^4, 10^5, 10^6 ชิ้นต้องมีคนกี่คนเลือกถึงมีโอกาสเลือกซ้ำกันประมาณ 50% และใกล้กับค่า 1.2 √N ไหม