Baby Calculus for ML: แคลคูลัสพื้นฐานสุดๆไปเลย
สวัสดีครับ หลังจากที่ไม่ได้ลงอะไรเลยมาสักพักนึงวันนี้ก็จะกลับมาลงบทความเป็น Introduction to Machine learning กันต่อนะครับ จากคราวที่แล้วที่เราได้พูดถึงเรื่อง Probability กันไป ในวันนี้เราจะแวะมาดูอีกหัวข้อหนึ่งที่สำคัญไม่แพ้ Probability เลยในทาง Machine Learning นั่นก็คือ Calculus นั่นเอง
Calculus คือคณิตศาสตร์แขนงหนึ่งซึ่งสนใจศึกษาเกี่ยวกับเรื่องการเปลี่ยนแปลง [1] โดย Calculus จะเน้นอยู่ที่ 2 เรื่องหัวข้อใหญ่ๆ ได้แก่ Derivative และ Integral
ซึ่งวันนี้ เราจะไปทำความรู้จักกับสิ่งน่ารักๆ ที่เรียกว่า Derivative และ Integral กันครับ
Derivative (อนุพันธ์)
Derivative เป็นการอัตราการเปลี่ยนแปลง output ของฟังก์ชันเทียบกับ input ของฟังก์ชัน
ถ้าเรายังพอจำตอนม.ปลายกัน ได้ เราจะเคยได้หา Slope (ความชัน หรือ อัตราการเปลี่ยนแปลง) ของกราฟเส้นตรงกันมาบ้างสินะครับ
แต่ทีนี้ ในทาง Machine Learning เราแทบจะไม่เจอฟังก์ชันที่เป็นเส้นตรงเลยเนี่ยสิ แล้วเราจะหาอัตราการเปลี่ยนแปลงยังไงดีละ? ยกตัวอย่างฟังก์ชัน เช่น
*** ฟังก์ชันนี้ถูกใช้เพื่อยกตัวอย่างให้เห็นภาพคอนเซ็ปต์ของ Derivative เท่านั้น ไม่ได้ถูกนำไปใช้จริงในทาง Machine Learning ***
ซึ่งมีรูปร่างของกราฟเป็น
จริงอยู่ที่กราฟโดยภาพรวมใหญ่ๆ อาจจะไม่ใช่กราฟเส้นตรง แต่ถ้าเราลองซูมลงไปให้เล็กมากพอ เราจะเห็นว่าทุกๆที่ที่เราซูมเข้าไปนั้น สามารถประมาณเป็นกราฟเส้นตรงได้
จากสูตรการหา Slope ของเรา การซูมรูปเข้าไปแบบนั้นแปลว่าเรากำลังบีบให้ค่า Δx เล็กลงมากๆ อยู่ และถ้าเราบีบให้ค่าของ Δx เข้าใกล้ 0 เราก็จะเขียนได้ว่า
ซึ่ง “lim” เป็น Notation ที่เรียกว่า ลิมิต(limit) ที่เขียนบอกว่า ค่าของ m คือค่าที่จะได้จากฟังก์ชันที่อยู่ในลิมิต (ในที่นี้คือ Δy/Δx) เมื่อค่าของตัวแปรบางอย่างมีค่าเข้าใกล้เลขตัวหนึ่ง (ในที่นี้คือค่าของตัวแปร Δx มีค่าเข้าใกล้ 0 เขียนแทนด้วย Δx →0) ทีนี้ เราจะมาจัดรูปกันใหม่ให้มันดูดีกว่าเดิม เรารู้ว่า y = f(x) และ x1 มีค่าใกล้เคียงกับ x2 มาก (เพราะ Δx ที่เป็นผลต่างของ x2 และ x1 ลบกันมีค่าเข้าใกล้ 0) เราจะเขียนใหม่เป็น
- x1 → x1
- x2 → x1+Δh, เมื่อ h มีค่าเล็กมากๆ และ x2 — x1 = Δh และ
- y = f(x)
ซึ่งจะทำให้เราเขียนลิมิตได้ใหม่เป็น
ใช้ตรงไหนของ Machine Learning?
ปกติในทาง machine learning จะมีสิ่งที่เรียกว่า Loss function อยู่ พูดเพื่อให้เข้าใจง่ายๆ Loss Function เป็นสิ่งที่ใช้บอกว่า Machine learning model ทำงานได้ดีหรือยัง การตีความก็ตรงตามชื่อเลย Loss function = ฟังก์ชันสูญเสีย (หรือบางทีก็เรียก Objective Function, ฟังก์ชั่นต้นทุน) มีค่ามาก แสดงว่าเราสูญเสียมาก ก็แสดงว่าไม่ดี เพราะฉะนั้น สิ่งที่เราอยากจะทำคือหาทางที่จะทำให้ค่าของ Loss Function มีค่าน้อยที่สุดเท่าที่จะเป็นไปได้ ซึ่งเราสามารถใช้ Concept ของ Differentiation มาช่วยหาจุดต่ำสุดตรงนั้นได้ ซึ่งปัญหาในการหาค่าที่ทำให้ Loss Function นี้มีค่าน้อยที่สุดแล้วที่จริงมีหัวข้อแยกเป็นของตัวเองเลย ซึ่งหัวข้อนั้นเรียกว่า การหาค่าเหมาะสุด (Optimization) นั่นเอง (เกริ่นไว้คร่าวๆ เดี๋ยวน่าจะได้กลับมาพูดถึงในบทความถัดๆ ไปแน่นอน)
ทำไมต้องใช้ Derivative?
บนกราฟใดๆก็ตามเราจะสามารถหาอัตราการเปลี่ยนแปลงของกราฟได้ (ถ้าเรา Assume ว่า กราฟของเราสามารถหา Derivative ได้) ซึ่งแต่ละจุดก็จะมีอัตราการเปลี่ยนแปลงไม่เท่ากันขึ้นอยู่กับความชันของกราฟ และ ณ จุดที่เป็นจุดต่ำที่สุด (ท้องแบนๆ ของกราฟ) จะเป็นจุดที่มีอัตราการเปลี่ยนแปลงเป็น 0 หรือเข้าใกล้ 0 มากๆ ซึ่ง ในทาง Machine Learning ได้ใช้หลักการนี้เพื่อหาจุดที่ทำให้ Loss Function มีค่าต่ำสุดนั่นเอง
Integral (ปริพันธ์)
Integral เป็นการหาการสะสมของฟังก์ชัน (Accumulation of function)
พูดไปอาจจะไม่เห็นภาพ ยกตัวอย่างให้ดูเลยดีกว่า
ลองจินตนาการถึง แท่งเหล็กแท่งหนึ่ง เราอยากรู้ว่าแท่งเหล็กนี้มีน้ำหนักเท่าไหร่ ถ้าแท่งเหล็กแท่งนี้มีความหนาแน่นเท่ากันทั้งแท่ง เราคงเอาความหนาแน่นคูณกับปริมาตรของแท่งเหล็ก mass = Volume*density ไปแล้ว
แต่แท่งเหล็กนี้ดันมีความหนาแน่นไม่สม่ำเสมอกันทั้งแท่งเราเลยทำแบบนั้นไม่ได้
สมมุติว่าความหนาแน่นของแท่งเหล็กนี้ขึ้นอยู่กับความยาวของแท่งเหล็กเท่านั้นและสามารถอธิบายได้ด้วยฟังก์ชัน f(x) ถ้าเรามีข้อมูลแค่นี้ เราจะหามวลรวมของแท่งเหล็กนี้ยังไง?
ไอเดียนึงคือ การแบ่งแท่งเหล็กเป็นท่อนเล็กๆแล้วคิดน้ำหนักทีละส่วน (ความยาวท่อนนั้นๆคูณกับความหนาแน่นบริเวณนั้นๆ แล้วค่อยเอามารวมกัน
เมื่อ
Δx คือความยาวของแท่งเหล็กท่อนที่ i และ
fi(x) คือความหนาแน่นของแท่งเหล็กท่อนที่ i
ยังไม่ถูก 100% แต่ก็ยังดีกว่าการเอาความหนาแน่นมาคูณความยาวทั้งแท่งนะ
ทีนี้จะเกิดอะไรขึ้นถ้าเราแบ่งท่อนเหล็กให้เล็กลงไปเรื่อย ๆ ?
แน่นอนว่าเราก็จะได้ความถูกต้องที่มากขึ้น เราสามารถแบ่งไปจนถี่มากๆๆๆๆ หรือที่ในภาษาอังกฤษเรียกว่า Infinitesimally small เราก็จะได้
โดยเราเปลี่ยนเครื่องหมายจาก Δx เป็น dx และเปลี่ยนเครื่องหมายจาก ∑ เป็น ∫
นั่นหมายความว่า เราพยายามหาการสะสมของฟังก์ชั่น (ในที่นี้ฟังก์ชั่นคือความหนาแน่น และการสะสมของฟังก์ชั่นคือมวลของแท่งเหล็ก) นั่นเอง
Integral ที่ผมได้ยกตัวอย่างไป เป็นตัวอย่างของ Definite Integral เป็นการหาการสะสมของฟังก์ชันระหว่างจุดที่ 1 และจุดที่ 2 ซึ่งในตัวอย่างจุดที่ 1 ก็คือจุด x = 0 (เรากำหนดให้เป็นปลายแท่งเหล็กด้านหนึ่ง) ไปจนถึงจุด x=l (ซึ่งเรากำหนดให้เป็นปลายแท่งเหล็กอีกด้านหนึ่ง) นั่นเอง
ใช้ตรงไหนของ Machine Learning?
ในทาง Machine learning เราจะเห็นการใช้ Integral ได้ในหลายๆที่ ตั้งแต่การใช้หาค่า Expected Value, การหาค่าความน่าจะเป็นของ Random Variable แบบ Continuous, การใช้ใน Information Theory เป็นต้น