Skip to main content

การไล่ระดับโคตร

อัปเดตบน September 03, 20242 นาทีอ่าน


การแนะนำ

ลองนึกภาพว่าเรามีฟังก์ชัน f(x)f(x) และเราต้องการหาค่าต่ำสุดของมัน คุณจะทำอย่างไร?

ง่ายใช่มั้ย? เราเพียงต้องแก้สมการต่อไปนี้:

f′(x)=0f'(x) = 0

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

มาสร้างสัญชาตญาณกันหน่อย

สมมติว่าเรามีฟังก์ชัน f พร้อมด้วยกราฟที่สอดคล้องกัน:

Graph 1

เริ่มจากจุดสุ่ม x0x_{0} กันก่อน เป้าหมายคือการย้ายจุดนี้และทำให้มันเข้าใกล้ x∗x* มากขึ้นเรื่อยๆ โดยที่ f′(f'(x*)=0) = 0 ดังนั้นปัญหาสามารถแบ่งออกเป็นสองส่วน:

  • เราควรย้ายจุด xx ไปในทิศทางใด? ซ้ายหรือขวา?

  • เราควรย้ายเท่าไหร่?

ทิศทาง

มาสร้างสัญชาตญาณเพื่อตอบคำถามแรกกัน ลองดูที่จุดต่อไปนี้:

Graph 2

Graph 3

โปรดทราบว่า:

  • เมื่อจุด x0x_{0} อยู่ทางด้านขวาของจุดที่เหมาะสมที่สุด x∗x* เส้นสัมผัสของมันจะเพิ่มขึ้น

  • เมื่อจุด x0x_{0} อยู่ทางด้านขวาของจุดที่เหมาะสมที่สุด x∗x* เส้นสัมผัสของเส้นสัมผัสจะลดลง

ทิศทางของเส้นถูกกำหนดโดยเครื่องหมายของความชัน:

  • เส้นตรงขึ้นไป   ⟹  \implies ความชัน aa เป็น บวก

  • เส้นตรงลงไป   ⟹  \implies ความชัน aa เป็น ลบ

หมายเหตุ: \

ความชันของเส้นสัมผัสเส้นโค้งของฟังก์ชัน ณ จุดใดจุดหนึ่ง x0x_{0} นั้นไม่เกินค่าอนุพันธ์ ณ จุดนั้น f′(x0)f'(x_{0}):

tangent(x∗0):g(x)=f′(x∗0).(x−x∗0)+f(x∗0)tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0})

เพื่อเป็นคำตอบสำหรับคำถาม "เราควรย้าย x0x_{0} ที่ไหน?":

  • f′(x0)<0f'(x_{0}) < 0   ⟹  \implies x0x_{0} ทางด้านขวาของ x∗x*   ⟹  \implies เราต้องย้าย x0x_{0} ไปทางซ้าย

  • f′(x0)>0f'(x_{0}) > 0   ⟹  \implies x0x_{0} ทางด้านซ้ายของ x∗x*   ⟹  \implies เราต้องย้าย x0x_{0} ไปทางขวา

##ขั้นตอน

สำหรับคำถามที่สอง เราควรย้าย x0x_{0} ? เท่าไหร่

ลองดูตัวอย่างต่อไปนี้:

Graph 4

Graph 5

เราสามารถสรุปได้ว่า:

  • x0x_{0} อยู่ใกล้กับ x∗x* => ความชันของแทนเจนต์มีค่าน้อย => f′(x0)f'(x_{0}) มีค่าน้อย

  • x0x_{0} อยู่ห่างจาก x∗x* => ความชันของแทนเจนต์มีขนาดใหญ่ => f′(x0)f'(x_{0}) นั้นใหญ่

จากการตอบคำถามทั้งสองข้อ เราได้สรุปว่าความรู้เรื่องอนุพันธ์ในจุด x0x_{0} เท่านั้นที่จะให้ข้อมูลเชิงลึกมากมายเกี่ยวกับทิศทางและระยะห่างของจุดที่เหมาะสมที่สุด x0x_{0} ได้

โคตรลาด

การไล่ระดับสีเป็นการกำหนดคำตอบของคำถามสองข้อก่อนหน้า เป็นอัลกอริธึมการทำซ้ำการปรับให้เหมาะสมซึ่งจะประมาณฟังก์ชัน x∗x* ขั้นต่ำที่เริ่มต้นจากจุดเริ่มต้นแบบสุ่ม x0x_{0} อัลกอริทึมระบุไว้ดังนี้:

x∗n+1=x∗n−lr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

ที่ไหน:

  • dfdx∗n\frac{\mathrm{d} f}{\mathrm{d} x*{n}} ไม่เกินอนุพันธ์ของ ff ในจุด x∗nx*{n}

  • lrlr เป็นค่าคงที่บวกที่กำหนดว่าขั้นต่างๆ จะใหญ่แค่ไหน

โปรดสังเกตว่า:

  • xnx_{n} อยู่ทางขวาของ x∗x* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xn−ค่าบวกx_{n+ 1} = x_{n} - ค่าบวก => xnx_{n} เคลื่อนไปทางซ้าย

  • xnx_{n} อยู่ทางด้านซ้ายของ x∗x* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => x∗n+1=x∗n+positivex*{n +1} = x*{n} + positive => xnx_{n} เลื่อนไปทางขวา

  • xnx_{n} ใกล้กับ x∗x* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} ใกล้ 00 => อัปเดตเล็กน้อยเป็น xนx_{ น}

แบบทดสอบ

  • การไล่ระดับลงจะหยุดวนซ้ำเมื่อใด:

  • เมื่อ xnx_{n} มีขนาดเล็กพอ

  • เมื่อ xnx_{n} อยู่ใกล้กับ x0x_{0}

  • เมื่อ dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 XXX

  • เราจะเลือก x0x_{0}: ได้อย่างไร

  • เราสุ่มเลือก XXX

  • เราถือว่ามันอยู่ในละแวก xnx{n}

  • มันขึ้นอยู่กับปัญหา

  • เหตุใดเราจึงต้องมีการไล่ระดับสี:

  • เนื่องจากคอมพิวเตอร์ไม่มีประสิทธิภาพเพียงพอที่จะคำนวณอนุพันธ์

  • เพราะมันยากมากที่จะหาสูตรอนุพันธ์ของโมเดลการเรียนรู้เชิงลึก XXX

  • เนื่องจากฟังก์ชันมีจุดต่ำสุดในพื้นที่มากกว่าหนึ่งรายการ

เรียนรู้ทักษะทางเทคนิคออนไลน์ด้วย Code Labs Academy

เรียนรู้ทักษะทางเทคนิคออนไลน์ด้วย Code Labs Academy

เข้าร่วมชุมชนที่สนับสนุนของเราปลดล็อกศักยภาพของคุณและเริ่มต้นเส้นทางอาชีพที่คุ้มค่า