Backpropagation คือวิธีที่โครงข่ายประสาทเทียมใช้คำนวณกราเดียนต์ ว่าค่าความสูญเสียจะเปลี่ยนไปมากแค่ไหนถ้าปรับน้ำหนักหรือไบแอสแต่ละตัวเล็กน้อย พูดง่าย ๆ คือมันบอกโมเดลว่าพารามิเตอร์ตัวไหนทำให้การทำนายคลาดเคลื่อนไปในทิศทางที่ผิด และมากน้อยเพียงใด
สรุปแบบสั้น ๆ คือ รันเครือข่ายไปข้างหน้า วัดความผิดพลาด แล้วค่อยไล่ย้อนกลับผ่านการคำนวณเดิมด้วยกฎลูกโซ่ วิธีนี้ทำให้โมเดลเชิงลึกจัดการได้จริง เพราะแต่ละชั้นต้องรับผิดชอบแค่อนุพันธ์เฉพาะจุดเล็ก ๆ ของตัวเอง
Backpropagation คำนวณอะไร
Backpropagation ไม่ได้ อัปเดตพารามิเตอร์ด้วยตัวเอง มันคำนวณกราเดียนต์ เช่น และ โดยที่ คือค่าความสูญเสีย จากนั้นตัวปรับเหมาะ เช่น gradient descent จะนำกราเดียนต์เหล่านี้ไปใช้ในการอัปเดตจริง
ถ้าโมเดลและฟังก์ชันความสูญเสียหาอนุพันธ์ได้ หรืออย่างน้อยหาอนุพันธ์ได้เป็นช่วง ๆ มากพอสำหรับวิธีแบบกราเดียนต์ Backpropagation จะช่วยให้คุณคำนวณกราเดียนต์เหล่านั้นได้อย่างมีประสิทธิภาพในหนึ่งรอบการไล่ย้อนกลับ
ทำไมกฎลูกโซ่จึงเป็นแนวคิดสำคัญ
ลองมองโครงข่ายประสาทเทียมเป็นสายโซ่ยาวของการคำนวณ แต่ละชั้นรับอินพุต แปลงมัน แล้วส่งผลลัพธ์ต่อไปยังชั้นถัดไป เมื่อไปถึงค่าความสูญเสีย ความผิดพลาดสุดท้ายจะขึ้นอยู่กับทุกการตัดสินใจก่อนหน้านั้น
Backpropagation ตั้งคำถามเฉพาะจุดในแต่ละขั้นว่า ถ้าค่ากลางนี้เปลี่ยนไปเล็กน้อย ค่าความสูญเสียสุดท้ายจะเปลี่ยนอย่างไร ผลกระทบเฉพาะจุดเหล่านี้จะคูณต่อกันเมื่อคุณไล่ย้อนกลับ นั่นก็คือกฎลูกโซ่ในภาษาง่าย ๆ
ตัวอย่าง Backpropagation กับนิวรอนหนึ่งตัว
ใช้นิวรอนหนึ่งตัวกับอินพุตหนึ่งค่า:
ในที่นี้ คืออินพุต, คือน้ำหนัก, คือไบแอส, คือค่าทำนาย, คือค่าเป้าหมาย และ คือฟังก์ชันซิกมอยด์
กำหนดให้
ขั้นที่ 1: Forward pass
เริ่มจากคำนวณผลรวมถ่วงน้ำหนักของนิวรอน:
จากนั้นใช้ซิกมอยด์:
แล้วคำนวณค่าความสูญเสีย:
ค่าทำนายต่ำกว่าค่าเป้าหมาย ดังนั้นค่าความสูญเสียจึงเป็นบวก
ขั้นที่ 2: Backward pass
ตอนนี้คำนวณกราเดียนต์เทียบกับน้ำหนัก
เริ่มจากค่าความสูญเสียแล้วไล่เข้าด้านใน:
สำหรับซิกมอยด์
และสำหรับผลรวมถ่วงน้ำหนัก
ตอนนี้นำแต่ละส่วนมาต่อกันด้วยกฎลูกโซ่:
แทนค่าตัวเลขลงไป:
เครื่องหมายลบมีความสำคัญ มันบอกว่าถ้าเพิ่ม หรือ ขึ้นเล็กน้อย ค่าความสูญเสียในกรณีนี้จะลดลง ซึ่งสอดคล้องกับสถานการณ์ เพราะค่าทำนายปัจจุบันต่ำเกินไป
ถ้าใช้ gradient descent ด้วยอัตราการเรียนรู้ จะได้ว่า
นี่คือแนวคิดทั้งหมดในภาพย่อ: forward pass, loss, backward pass, update
ทำไม Backpropagation จึงใช้ได้กับโครงข่ายเชิงลึก
ในเครือข่ายที่ลึกกว่าเดิม คุณก็ทำแบบเดียวกันทีละชั้น ความต่างหลักคือแต่ละชั้นซ่อนเร้นมีผลต่อค่าความสูญเสียทางอ้อมผ่านชั้นที่อยู่ถัดไป ดังนั้นกราเดียนต์ของมันจึงมีตัวประกอบจากกฎลูกโซ่มากขึ้น
Backpropagation ยังใช้งานได้จริง เพราะแต่ละชั้นต้องรู้แค่อนุพันธ์เฉพาะจุดของตัวเองและสัญญาณที่ส่งมาจากชั้นถัดไป คุณไม่จำเป็นต้องหาอนุพันธ์ของทั้งเครือข่ายใหม่ตั้งแต่ต้นสำหรับทุกพารามิเตอร์
ข้อผิดพลาดที่พบบ่อยใน Backpropagation
สับสนระหว่าง Backpropagation กับ gradient descent
Backpropagation คำนวณกราเดียนต์ ส่วน gradient descent ใช้กราเดียนต์เหล่านั้นเพื่ออัปเดตพารามิเตอร์ ทั้งสองอย่างเกี่ยวข้องกันมาก แต่ไม่ใช่ขั้นตอนเดียวกัน
ลืมว่าค่าความสูญเสียอยู่ที่ปลายทาง
การไล่ย้อนกลับเริ่มจากค่าความสูญเสีย ไม่ได้เริ่มจากชั้นซ่อนเร้นใด ๆ แบบสุ่ม ถ้าคุณหลงว่าค่าความสูญเสียขึ้นอยู่กับอะไรบ้าง สายโซ่อนุพันธ์ก็มักจะขาดทันที
มองข้ามพฤติกรรมของฟังก์ชันกระตุ้น
ฟังก์ชันกระตุ้นบางชนิดให้กราเดียนต์เล็กมากในบางช่วง ถ้าเรื่องนี้เกิดซ้ำ ๆ หลายชั้น การเรียนรู้ก็อาจช้าลงมาก
คิดว่าการไล่ย้อนกลับหนึ่งครั้งแปลว่าโมเดลเรียนรู้แล้ว
การไล่ย้อนกลับหนึ่งครั้งให้กราเดียนต์หนึ่งชุดสำหรับหนึ่งแบตช์ การฝึกโมเดลจริงมักต้องอาศัยการอัปเดตหลายครั้งกับข้อมูลจำนวนมาก
Backpropagation ใช้เมื่อไร
Backpropagation เป็นวิธีมาตรฐานในการคำนวณกราเดียนต์เพื่อฝึกโครงข่ายประสาทเทียมหลายประเภท รวมถึง multilayer perceptron, convolutional network, โมเดลแบบ recurrent และ transformer
ตัวปรับเหมาะที่ใช้จริงอาจเปลี่ยนไป และบางสถาปัตยกรรมก็มีเทคนิคเสริมในทางปฏิบัติ แต่แนวคิดแกนกลางมักเหมือนเดิม คือคำนวณค่าความสูญเสีย ส่งกราเดียนต์ย้อนกลับ และอัปเดตพารามิเตอร์เพื่อลดความผิดพลาดในอนาคต
วิธีจำแบบใช้งานได้จริง
Backpropagation คือวิธีที่มีโครงสร้างสำหรับแจกแจงว่าอะไรควรได้รับเครดิตหรือถูกตำหนิภายในโมเดลแบบหลายชั้น ถ้าผลลัพธ์ผิด วิธีนี้จะไล่รอยความผิดพลาดย้อนกลับ เพื่อให้แต่ละพารามิเตอร์ได้รับสัญญาณว่าตัวเองมีส่วนทำให้เกิดผลนั้นอย่างไร
นั่นจึงเป็นเหตุผลว่าทำไมวลี "โครงข่ายประสาทเทียมเรียนรู้อย่างไร" จึงถือว่าถูกต้องอยู่มาก การเรียนรู้เกิดจากการอัปเดตพารามิเตอร์ซ้ำ ๆ และ Backpropagation คือสิ่งที่ทำให้การอัปเดตเหล่านั้นอิงข้อมูล ไม่ใช่การสุ่มเดา
ลองทำโจทย์ที่คล้ายกัน
ใช้ตัวอย่างเดิม แต่เปลี่ยนค่าเป้าหมายจาก เป็น แล้วคำนวณ และ ใหม่ จากนั้นสังเกตว่าเครื่องหมายเปลี่ยนอย่างไร การเปลี่ยนเพียงจุดเดียวนี้ช่วยให้เห็นบทบาทของค่าความสูญเสียชัดกว่าการท่องสูตรเพียงอย่างเดียว
ต้องการความช่วยเหลือในการแก้โจทย์?
อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที
เปิด GPAI Solver →