อยากเรียนคณิตศาสตร์ แล้วได้ใช้จริง ทำยังไง ?

Ada Kaminkure
3 min readAug 19, 2020

--

Feature map สำหรับงานวิจัยของผมครับ

สวัสดีครับท่านผู้อ่านที่รักทุกท่าน ผมก็เป็นคนหนึ่งนะครับที่เคยมีความคิดแบบนี้ตอนสมัยเด็ก ๆ

เพราะตอนช่วง ม.4 ผมมีความคิดเสมอว่า ทำยังไงจะไม่ต้องเรียนวิชาอื่น ๆ อยากเรียนแค่ คณิตศาสตร์อย่างเดียว แต่มันคงเป็นไปไม่ได้ใช่ไหมครับ เพราะว่าในชีวิตเรายังมีอะไรที่ต้องเรียนรู้อีกเยอะแยะมากมายเต็มไปหมด

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

แต่ในความเป็นจริงมันกลับเป็นสาขาวิชาที่เติมเต็มความฝันของผมอย่างยิ่ง~

เพราะวิทยาการคอมพิวเตอร์ที่ จุฬาลงกรณ์มหาวิทยาลัย นั้น !!!

เราโฟกัส และให้ความสำคัญอย่างยิ่งกับคณิตศาสตร์ในเชิงคอมพิวเตอร์ และรูปแบบวิธีที่ใช้ในการแก้ปัญหา ที่เน้นนำไปใช้จริง ๆ

และถึงแม้บางอย่างเราจะยังมองไม่ออกว่าจะนำไปใช้ ได้อย่างไร

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

ถ้าเราต้องการแก้ปัญหาที่ยังไม่เคยมีใครแก้มาก่อน หรือยังแก้ได้ไม่ดีพอ “คณิตศาสตร์” คือ คำตอบ

ในคณิตศาสตร์เราสนใจ วิธีการหาคำตอบที่นำเราไปสู่ “คำตอบของปัญหา”
แต่ด้วยวิธีการที่สวยงาม หรือ Elegant Solution

เพราะบางทีการหาคำตอบ มันก็ง่ายเกินกว่าที่จะต้องมานั่งทดในกระดาษ
ในทางคอมพิวเตอร์เราเรียกวิธีทำนองนี้ว่า “Brute force” คือ การให้ได้คำตอบมา ไม่ว่าจะต้องวนลูป infinite รอบ หรือจะต้องคำนวนหนักแค่ไหนก็ตาม (มัน คือ การทรมานคอมพิวเตอร์)

แต่สำหรับ Elegant solution นั้นช่างแตกต่าง

ท่านเคยเปิดเฉลยคำตอบ ในหนังสือคณิตศาสตร์ชั้นดีต่าง ๆ ใช่ไหมครับ
แล้วมีความรู้สึกว่า “ว้าว! คิดได้ไงเนี่ย” เพราะวิธีการทั้งเรียบง่าย และสวยงาม

ในขณะที่เราต้องคำนวน เชื่อมโน้น นี่นั้น มโหฬาร มหาศาล เต็มไปหมด ทดโน้น ทดนี่ ทดนั้น แต่ในเฉลยกลับอ้างทฤษฎีบทสวย ๆ ที่เราเคยอ่านผ่านตามาแล้วหลายล้านรอบ แต่ด้วยการตีความที่สุดยอด ก็ส่งผลทำให้วิธีการของผู้ทำเฉลยนั้นสวยงามสุด ๆไปเลยยยยยยยย~

ผมขอยกตัวอย่าง function ที่มีหน้าตาที่เราคุ้นเคยกันมาก ๆ เช่น

เนื่องจากผมมักทำงาน กับภาพถ่ายทางการแพทย์ที่ต้องอาศัยความละเอียดของภาพถ่ายสูงในช่วง -2³¹ to 2³¹-1 ซึ่งเป็นจำนวนจริง สูงแค่ไหนถามใจดู โดยปกติเรามักจะคุ้นเคยกับภาพถ่ายที่มีค่าเป็นจำนวนเต็มในช่วง 0–255 มากกว่าใช่ไหมครับ

ดังนั้นปัญหามันก็เลยเกิดขึ้น เพราะผมต้องการที่จะเขียนเป็น png ในช่วง 0–255 (aka unsigned bytes) สำหรับการนำไป training & validation ต่อใน CNN model

ขบวนการแก้ปัญหาจึงเริ่มต้นขึ้น อันดับแรกในสายเลือดความเป็น Programmer เราต้องมองหา Library ที่ optimized มาดีแล้วสุด ๆ ก่อน (เป็นเหตุผลที่ฟังแล้วดูดี แต่จริง ๆ นำไปสู่คำว่า “ขี้เกียจ” ทำเองได้เหมือนกัน)

ก็ได้ลองใช้ 2–3 ที่แล้วพบว่ายังคงมีปัญหาอื่น ๆ ตามมามากมาย ความอดทนผมเลยหมดเลยลง กระดาษ ปากกาในมือผมสั่นไปหมดแล้ว!!!

ดังนั้นผมก็เลยลองเขียน Converter function สำหรับการเปลี่ยน Scale ดังที่ได้กล่าวมาแล้วนั้น (ก็เหมือนการเปลี่ยนจาก องศา C ไปเป็น F แหละครับ ^^)

แนวคิดของ Function ข้างต้นนั้นง่ายดายมากครับ

เมื่อ ผมกำหนดให้…

(min, max) คือ ค่าสูงสุด-ต่ำสุด ของ range เดิม

(a, b) คือ ค่าสูงสุด-ต่ำสุด ของ range ใหม่

และ

x คือ ค่าใน range เก่าที่เราต้องการ map ไป range ใหม่

สังเกตุให้ดีว่าเวลาเรานำไปเขียนโปรแกรมจริง ๆ เรามักจะสร้างตัวแปรคำนวนแยก ๆ กันไว้ ดังนั้น

S ของผมตัวนี้จึงเป็น Scaling factor สำหรับการแปลงค่าครับ
(ป.ล จริง ๆ ผมจะชอบตั้งชื่อตัวแปรแนวนี้ว่า k มากกว่า แต่อันนี้ตั้งชื่อตามความหมายแล้วกันเนอะ)

จุดนี้ในตัวเศษของเรามีไว้เพื่อ ทำการเลื่อน (Translate) ค่า x ของเรา
ถ้าสังเกตุให้ดีจะพบว่า ถ้า x = min ตรงนี้จะกลายเป็น 0 ดังนั้นเรากำลังคิดอยู่ในช่วง [0 , +infinity)

เมื่อนำมารวมกันกับ Scaling factor จะได้ว่า

ซึ่ง ณ ตอนนี้จะทำให้เราได้ค่าที่อยู่ใน range ใหม่ออกมาแล้ว แต่ก็อาจจะยังมีความผิดพลาดอยู่บ้างหาก ค่าต่ำสุดของ range ใหม่ไม่ได้เป็นศูนย์
ดังนั้น ผมเลยจะเลื่อน ค่า f(x) กลับไปด้วย ค่าต่ำสุดของ range ใหม่ (a)

เรียบร้อยครับ เป็นยังไงฮะ สุดท้ายเราได้สมการเชิงเส้น หน้าตาธรรมด๊า ธรรมดาออกมาแบบนี้ เหมาะสมต่อการนำไปใช้งาน และเขียนโปรแกรมแล้วใช่ไหมครับ

แต่ก่อนจากลากันไป เอาตัวอย่างจริง ของการใช้งานนี้ไปก่อนครับ

ป.ล. ตอนนำไปใช้จริง เราใช้กันแบบ Vectorization นะครับ ถ้าเอาตาม function นี้จะต้องวนลูป 2 ลูป นะครับ ^^

เราสามารถเพิ่มความน่าสนใจของโลก Programming เพิ่มขึ้นไปอีกระดับได้ด้วย Mathematics อย่าพึ่งคิดว่าสิ่งที่เรียนมา หรือกำลังเรียนจะไม่มีโอกาสได้นำไปใช้ครับ

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

และคุณจะรัก เหมือนผม และอีกหลายล้านคนทั่วโลกครับ^^

--

--

Ada Kaminkure
Ada Kaminkure

Written by Ada Kaminkure

Indie Game Dev, Software Engineer, Teacher, and Self-Taught Mathematician

Responses (1)