Minimum point ตอนที่ 2: Differentiation คือคำตอบ
การหาจุดต่ำสุดของฟังก์ชันมันจะเป็นเรื่องราวที่ง่ายขึ้นมากเลยหากรู้ว่าฟังก์ชันนั้นมีลักษณะเป็นยังไง ยกตัวอย่างว่าเป็นฟังก์ชัน f(x) = x ^ 2 ที่มีลักษณะเป็นแบบรูปที่ 1 ก็แทบจะบอกได้ในทันทีว่าจุดต่ำสุดนั้นอยู่ในบริเวณจุดสีแดงอย่างแน่นอน
แต่ในการพล็อตกราฟแต่ละกราฟได้นั้นแสดงว่า สำหรับที่แต่ละค่าของ x เราต้องคำนวณ y ที่สอดคล้องเตรียมรอไว้อยู่แล้ว แล้วบางทีกว่าจะหาได้ครบก็กินเวลานานจนเกินรอ ยิ่งในยุคที่ทุกอย่างต้องไว slow life ไม่ใช่คำตอบอีกต่อไป จึงเกิดคำถามว่าทำไมถึงต้องพล็อตกราฟทุกครั้งเพียงเพื่อที่จะระบุตำแหน่งของจุดต่ำสุดจุดเดียวเท่านั้น มันคุ้มค่าแล้วหรอ
มันมีวิธีไหนอื่นบ้างอีกรึเปล่าที่สามารถหาจุดต่ำสุดได้โดยไม่จำเป็นต้องรู้ค่าของฟังก์ชันทั่วทั้งขอบเขตที่สนใจ
Differentiation คือคำตอบ
หากพูดถึงในทางทฤษฎี ความเป็นไปได้ในการหาจุดต่ำสุดของฟังก์ชันโดยที่ไม่ต้องคำนวณค่าของฟังก์ชันในแต่ละจุดนั้นยังมีอยู่ แต่จำเป็นที่จะต้องมีเงื่อนไขเพิ่มเติม นั่นคือว่า
- เราต้องรู้ก่อนว่าฟังก์ชันมีหน้าตา (explicit form) เป็นยังไง อย่างเช่นว่าฟังก์ชันนั้นมีหน้าตาเป็น x ^ 2
- ฟังก์ชันนั้นต้อง smooooooooooth ในระดับหนึ่ง ซึ่งหมายความคร่าว ๆ ได้ว่ามีความต่อเนื่อง นุ่มนวล กราฟไม่มีการขึ้นลงอย่างฉับพลัน
ภายใต้เงื่อนไขนี้ เราสามารถหาจุดต่ำสุดได้ด้วยความรวดเร็สจากการใช้ second derivative test ซึ่งวิธีนี้ได้รับแรงบันดาลใจมาจากการสังเกตลักษณะพฤติกรรมของจุดบริเวณรอบ ๆ จุดต่ำสุดว่าทำตัวน่าสงสัยยังไงบ้าง
ยกตัวอย่างเช่น มีฟังก์ชัน f(x) = x ^ 2 โดยที่จะสนใจในช่วงของ x ตั้งแต่ -10 ถึง 10 จากในบทความนี้ เรารู้มาแล้วว่าจุดต่ำสุดของฟังก์ชันดังกล่าวอยู่ที่ (0, 0) แสดงว่าเพื่อให้เกิดจุดต่ำสุดเมื่อ x มีค่าเท่ากับ 0 แสดงว่า ถ้าเราค่อย ๆ เพิ่มค่า x ไปเรื่อย ๆ จากตั้งแต่ -10 ในช่วงที่ยังไม่เจอจุดต่ำสุด ลักษณะกราฟจะดิ่งลงเรื่อย ๆ (เหมือนราคาหุ้นในพอร์ต) จนเมื่อไหร่ก็ตามที่เจอจุดต่ำสุดและผ่านพ้นจุดนี้ไปได้แล้ว ลักษณะกราฟก็จะเปลี่ยนทิศทางเป็นขาขึ้น
ด้วยข้อสังเกตนี้เลยกลายเป็นว่าถ้ามาดูความชันของแต่ละจุดในกราฟมันก็น่าจะเป็นไปได้ที่จะพอระบุตำแหน่งของจุดต่ำสุดได้ เพราะจุดต่ำสุดจะทำตัวเหมือนเป็นการวกกลับของทิศทางกราฟ หากระบุได้ว่าความชันของกราฟที่จากเดิมดิ่งลงมาก ๆ แล้วอยู่ ๆ ก็เริ่มดีขึ้นจนเหมือนยูเทิร์น บริเวณตรงนั้นแหล่ะที่น่าจะมีจุดต่ำสุดอยู่
ซึ่งในทางคณิตศาสตร์ก็มีการศึกษาอย่างละเอียดในการอธิบายความชัน (slope, gradient) ของฟังก์ชันที่จุดต่าง ๆ ทั่วทั้งขอบเขตที่สนใจ มีลักษณะบางจุดที่สามารถหาความชันได้ บางจุดก็หาไม่ได้ ซึ่งสามารถอ่านเพิ่มเติมได้ที่บทความนี้ (แต่ตอนนี้ยังกดไปอ่านไม่ได้)
โดยแนวคิดคร่าว ๆ ของความชันจะเป็นว่าให้ลากเส้นมาสัมผัสกับฟังก์ชันที่จุดที่สนใจแล้ว (เหมือนเส้นสีแดงในรูปที่ 2) ความชันของเส้นตรงนั้นมีค่าเท่าไหร่ ก็จะเป็นเป็นความชันของฟังก์ชันที่จุดนั้นเลย โดยถ้ากราฟเส้นตรงที่มาสัมผัสนี้เฉียงลงค่าความชันจะมีค่าเป็นลบ และในทางกลับกันค่าความชันจะกลายเป็นค่าบวกเมื่อกราฟเส้นเตรงที่มาสัมผัสเฉียงขึ้น
แล้วอย่างนั้น ความชันที่จุดต่ำสุดควรมีค่าเป็นเท่าไหร่ ในเมื่อโซนทางซ้ายที่ก่อนจะถึงจุดต่ำสุดมีความชันเป็นลบไปแล้ว ส่วนโซนทางขวาก็มีความชันเป็นบวก
ด้วยความนุ่มนวลของกราฟที่เป็นหนึ่งในเงื่อนไขของการใช้กระบวนการนี้ในการหาจุดต่ำสุดของฟังก์ชัน จะเป็นการการันตีว่าถ้าทางซ้ายมีความชันเป็นลบและทางขวาเป็นบวก แล้วตรงที่จุดต่ำสุดจะมีความชันเป็นอื่นใดเลยไม่ได้นอกจากต้องมีค่าเป็นศูนย์เท่านั้น หรือก็คือ
ความชันที่จุดต่ำสุดมีค่าเป็นศูนย์
มากกว่านั้น ถ้าให้ความสนใจไปที่ความชันอีกจะได้ว่าจากความชันทางซ้ายของจุดต่ำสุด, ความชันที่จุดต่ำสุด, และความชันทางขวาของจุดต่ำสุด ค่อย ๆ มีการเพิ่มขึ้นจากที่เป็นค่าลบ ก็เริ่มมาเป็น 0 และก็เพิ่มขึ้นเป็นค่าบวกในท้ายที่สุด ข้อเท็จจริงตรงนี้จะสามารถสรุปได้ว่าการเปลี่ยนแปลงของความชันนี้จะต้องมีทิศทางที่เพิ่มขึ้นบริเวณจุดต่ำสุดด้วย หรือก็คือ
ความชันของความชันที่จุดต่ำสุดต้องมีค่าเป็นบวก
และนี่เองก็เป็นที่มาของการตั้งชื่อกระบวนการนี้ว่า second derivative test เพราะว่าเราสามารถหาความชันได้จาก differentiation เพื่อหา derivative ของฟังก์ชัน แต่คราวนี้เราสนใจไปที่ความชันของความชัน เลยกลายเป็นว่าต้อง differentiate 2 รอบจนได้เป็น second derivative
differentiation คือกระบวนการ ส่วน derivative คือผลของการทำ differentiation
หน้าที่ของเราที่เหลือก็คือไปทดสอบดูว่ามีจุดไหนในขอบเขตที่สนใจที่มันเข้าข่ายกับข้อมูลอมูลที่ได้จากพฤติกรรมของจุดต่ำสุดทั้ง 2 ข้อนี้รึเปล่า
จากทฤษฎีสู่การนำไปใช้งาน
การจะให้ทดสอบกับทุกจุดในขอบเขตที่สนใจเลยมันอาจจะโหดร้ายเกินไป จึงมีการใช้ประโยชน์จากข้อมูลแรกที่เราได้มาว่า “ความชันที่จุดต่ำสุดเป็นศูนย์” ในการคัดกรองเบื้องต้นเพื่อเหลือเฉพาะจุดที่มีแนวโน้มว่าใช่ ต้องใช่แน่ ๆ เท่านั้นเพื่อไปทดสอบใน second derivative test ต่อไป
แต่ด้วยตัวข้อความที่อาจกำกวมอย่าง “ความชันที่จุดต่ำสุดเป็นศูนย์” นี้เองสามารถถูกถอดความมาได้ว่า “ถ้าจุดนั้นเป็นจุดต่ำสุดแล้วความชันที่จุดนั้นจะมีค่าเท่ากับศูนย์” ซึ่งพอเมื่อเป็นประโยค “ถ้า…แล้ว” แบบนี้ อาจทำให้เข้าใจผิดได้ว่าความเป็นไปได้ในทางกลับกันก็ต้องเป็นจริงด้วย
ซึ่งบนโลกที่เต็มไปด้วยอุปสรรคที่ไม่เคยปราณีใครนี้ การบอกในทางกลับกันว่า “ถ้าจุดนั้นมีความชันเป็นศูนย์แล้ว จุดนั้นนั่นแหล่ะคือจุดต่ำสุด” จะไม่จริงเสมอไป เพราะตัวอย่างที่ยกมาค้านได้ก็คือจุดสูงสุดที่มีพฤติกรรมคล้าย ๆ กับจุดต่ำสุดเลย เพียงแต่กลับด้านกันเท่านั้น หมายความว่าความชันทางด้านซ้ายของจุดสูงสุดจะเป็นบวกแล้วค่อยกลายเป็นลบเมื่อผ่านจุดสูงสุดไปแล้ว
ยกตัวอย่างในรูปที่ 4 ถ้าได้ลองลากเส้นตรงเพื่อสัมผัสจุดสีแดงทั้งสองจะพบว่าความชันของเส้นตรงเหล่านั้นจะเป็น 0 หรือก็คือเส้นตรงเหล่านั้นเป็นเส้นแนวนอนแบนราบเลย แต่ว่าจุดสองจุดนี้อาจจะมีจุดที่เป็นจุดต่ำสุดจริง ๆ ก็ได้ หรือบางทีอาจจะเป็นจุดที่แอบเนียนมาก็ได้เช่นกัน
ถึงแม้ว่าผลมันจะมีตัวที่แอบเนียนมาอยู่บ้าง แต่ก็เป็นประโยชน์อย่างมากในการช่วยระบุจุดต่าง ๆ ที่มีแววว่าจะเป็นจุดต่ำสุดได้ เพราะแทนที่จะต้องไปไล่ดูทุกจุดที่เป็นไปได้ในขอบเขตที่สนใจ เราก็สามารถลดเวลาลงมาดูเฉพาะจุดที่มันมีความชันเป็น 0 ก็เพียงพอแล้ว แต่ต้องไม่ลืมว่าจุดที่ได้มานั้น ไม่ใช่ว่าทุกจุดจะเป็นจุดต่ำสุดได้เสมอไป
มาถึงตรงนี้จะเห็นว่าจุดที่มีความชันเป็น 0 นั้นเริ่มมีบทบาทขึ้นมาแล้ว พอสปอตไลท์เริ่มส่งไปถึง น้องก็เดบิวต์ด้วยชื่อที่เท่ขึ้นว่า critical point หรือ stationary point นั่นเอง
แต่ก็ไม่ต้องกังวลใจไป เพราะเราจะตรวจสอบจุดที่มีแววเหล่านี้อีกทีด้วยการดูไปที่ความชันของความชัน (second derivative) ว่ามีค่าเป็นบวกรึเปล่า ถ้าใช่แสดงว่าจุดนั้นแหล่ะที่เป็นจุดต่ำสุดจริง ๆ แต่ถ้ามันจะไม่ใช่ก็คือไม่ใช่ ก็ต้องทำใจมูฟออนกันต่อไป
ความน่าเศร้าของ second derivative test
อย่างไรก็ตาม วิธีการ second derivative test นี้จะเป็นการระบุตำแหน่งของจุดต่ำสุดในลักษณะของ local minimum เท่านั้น เพราะฉะนั้นในการที่จะไปถึง global minimum ก็อาจจะนำค่า x จาก local minimum ที่ได้มาจากการทดสอบนี้กลับไปแทนในตัวฟังก์ชันดูเพื่อเปรียบเทียบค่าว่าในบรรดา local minimum เหล่านั้นตัวไหนให้ค่าต่ำสุดของต่ำสุดอีกที
และบางทีในความโชคร้ายของจุดต่ำสุดของต่ำสุดที่เฟ้นหามาจาก local minimum นั้น อาจจะต้องมาดูค่าที่ขอบของโดเมน (boundary value) ด้วย เพราะว่าบางทีลักษณะฟังก์ชันที่เราสนใจมันอาจจะไม่ได้เอื้ออำนวยให้หาจุดต่ำสุดได้อย่างตรงไปตรงมาด้วยวิธีการนี้ และจุดต่ำสุดแบบ global minimum ดันไปอยู่ที่ค่าขอบของโดเมนแทน
จะเห็นว่าวิธีการของ second derivative test นั้นเป็นวิธีการที่ทรงพลังมาก ๆ เพียงแค่รู้ว่าฟังก์ชันถูกเขียนให้อยู่ในรูปแบบไหน และสามารถหาความชันของความชันได้ทุกจุดในโดเมน ก็จะสามารถใช้หาตำแหน่งของ local minimum ได้เลย และถ้าอยากได้ global minimum ก็อาจจะมีรายละเอียดนิดหน่อยให้ต้องคิดเพิ่มเติม แต่ประเด็นหลัก ๆ เลยคือในหลาย ๆ เหตุการณ์ เราไม่สามารถรับรู้ได้เลยว่าฟังก์ชันที่เราต้องการรู้จุดต่ำสุดมันมีหน้าตาเป็นยังไงกันแน่ และไม่ต้องถามว่ามัน smooth มั้ย ซึ่งก็ไม่สามารถตอบได้
ในเมื่อเงื่อนไขที่จำเป็นไม่สามารถถูกยืนยันได้ จะฝืนใช้ second derivative test ต่อไปดูจะดันทุรังไปเปล่า ๆ แล้วคำถามคือ ในเคสแบบนี้ เรามีวิธีการหาจุดต่ำสุดของฟังก์ชันได้ยังไงในเมื่ออะไร ๆ ก็ดูไม่เป็นใจขนาดนี้ ติดตามต่อได้ในบทความนี้ครับ