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

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

Backpropagation คำนวณอะไร

Backpropagation ไม่ได้ อัปเดตพารามิเตอร์ด้วยตัวเอง มันคำนวณกราเดียนต์ เช่น Lw\frac{\partial L}{\partial w} และ Lb\frac{\partial L}{\partial b} โดยที่ LL คือค่าความสูญเสีย จากนั้นตัวปรับเหมาะ เช่น gradient descent จะนำกราเดียนต์เหล่านี้ไปใช้ในการอัปเดตจริง

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

ทำไมกฎลูกโซ่จึงเป็นแนวคิดสำคัญ

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

Backpropagation ตั้งคำถามเฉพาะจุดในแต่ละขั้นว่า ถ้าค่ากลางนี้เปลี่ยนไปเล็กน้อย ค่าความสูญเสียสุดท้ายจะเปลี่ยนอย่างไร ผลกระทบเฉพาะจุดเหล่านี้จะคูณต่อกันเมื่อคุณไล่ย้อนกลับ นั่นก็คือกฎลูกโซ่ในภาษาง่าย ๆ

ตัวอย่าง Backpropagation กับนิวรอนหนึ่งตัว

ใช้นิวรอนหนึ่งตัวกับอินพุตหนึ่งค่า:

z=wx+bz = wx + b a=σ(z)a = \sigma(z) L=12(ay)2L = \frac{1}{2}(a - y)^2

ในที่นี้ xx คืออินพุต, ww คือน้ำหนัก, bb คือไบแอส, aa คือค่าทำนาย, yy คือค่าเป้าหมาย และ σ\sigma คือฟังก์ชันซิกมอยด์

กำหนดให้

x=2,w=0.5,b=0,y=1.x = 2, \qquad w = 0.5, \qquad b = 0, \qquad y = 1.

ขั้นที่ 1: Forward pass

เริ่มจากคำนวณผลรวมถ่วงน้ำหนักของนิวรอน:

z=wx+b=0.52+0=1.z = wx + b = 0.5 \cdot 2 + 0 = 1.

จากนั้นใช้ซิกมอยด์:

a=σ(1)0.731.a = \sigma(1) \approx 0.731.

แล้วคำนวณค่าความสูญเสีย:

L=12(0.7311)20.036.L = \frac{1}{2}(0.731 - 1)^2 \approx 0.036.

ค่าทำนายต่ำกว่าค่าเป้าหมาย ดังนั้นค่าความสูญเสียจึงเป็นบวก

ขั้นที่ 2: Backward pass

ตอนนี้คำนวณกราเดียนต์เทียบกับน้ำหนัก

เริ่มจากค่าความสูญเสียแล้วไล่เข้าด้านใน:

La=ay.\frac{\partial L}{\partial a} = a - y.

สำหรับซิกมอยด์

az=a(1a).\frac{\partial a}{\partial z} = a(1-a).

และสำหรับผลรวมถ่วงน้ำหนัก

zw=x,zb=1.\frac{\partial z}{\partial w} = x, \qquad \frac{\partial z}{\partial b} = 1.

ตอนนี้นำแต่ละส่วนมาต่อกันด้วยกฎลูกโซ่:

Lw=Laazzw=(ay)a(1a)x.\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} = (a-y)a(1-a)x. Lb=Laazzb=(ay)a(1a).\frac{\partial L}{\partial b} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial b} = (a-y)a(1-a).

แทนค่าตัวเลขลงไป:

Lb(0.7311)(0.731)(10.731)0.0529\frac{\partial L}{\partial b} \approx (0.731 - 1)(0.731)(1 - 0.731) \approx -0.0529 Lw(0.0529)(2)0.1058.\frac{\partial L}{\partial w} \approx (-0.0529)(2) \approx -0.1058.

เครื่องหมายลบมีความสำคัญ มันบอกว่าถ้าเพิ่ม ww หรือ bb ขึ้นเล็กน้อย ค่าความสูญเสียในกรณีนี้จะลดลง ซึ่งสอดคล้องกับสถานการณ์ เพราะค่าทำนายปัจจุบันต่ำเกินไป

ถ้าใช้ gradient descent ด้วยอัตราการเรียนรู้ η=0.1\eta = 0.1 จะได้ว่า

wnew=wηLw=0.50.1(0.1058)0.5106w_{\text{new}} = w - \eta \frac{\partial L}{\partial w} = 0.5 - 0.1(-0.1058) \approx 0.5106 bnew=bηLb=00.1(0.0529)0.0053.b_{\text{new}} = b - \eta \frac{\partial L}{\partial b} = 0 - 0.1(-0.0529) \approx 0.0053.

นี่คือแนวคิดทั้งหมดในภาพย่อ: 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 คือสิ่งที่ทำให้การอัปเดตเหล่านั้นอิงข้อมูล ไม่ใช่การสุ่มเดา

ลองทำโจทย์ที่คล้ายกัน

ใช้ตัวอย่างเดิม แต่เปลี่ยนค่าเป้าหมายจาก y=1y = 1 เป็น y=0y = 0 แล้วคำนวณ Lw\frac{\partial L}{\partial w} และ Lb\frac{\partial L}{\partial b} ใหม่ จากนั้นสังเกตว่าเครื่องหมายเปลี่ยนอย่างไร การเปลี่ยนเพียงจุดเดียวนี้ช่วยให้เห็นบทบาทของค่าความสูญเสียชัดกว่าการท่องสูตรเพียงอย่างเดียว

ต้องการความช่วยเหลือในการแก้โจทย์?

อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที

เปิด GPAI Solver →