ก่อนจะไปทำความรู้จัก Backpropagation คืออะไร – ก่อนอื่นขอกล่าวถึง Geoffrey Hinton กันก่อน ซึ่งรู้จักกันในฐานะผู้บุกเบิกในการนำ Backpropagation กลับมาประยุกต์ใช้กับเครือข่ายประสาทเทียมแบบหลายชั้น (Multilayer Neural Network) ทำให้เกิดการพัฒนาวงการ Deep Learning อย่างก้าวกระโดด และเป็นที่ยอมรับอย่างแพร่หลาย นับเป็นหนึ่งในบุคคลสำคัญที่สุดในวงการปัญญาประดิษฐ์ (AI) โดยเฉพาะอย่างยิ่งในสาขาวิชา Deep Learning !
— ผลงานเปลี่ยนโลกของ Geoffrey Hinton เชียวว ตามไปอ่านได้ที่ Learning representations by back-propagating errors
สารบัญ
ทำความเข้าใจว่า Backpropagation คืออะไร ? แบบง่ายๆ
“Backpropagation อัลกอริทึมสำหรับฝึกสอน Neural Network : NN” – หากเข้าใจว่า NN เปรียบเหมือนโครงสร้างของระบบประสาทในสมอง Backpropagation คือวิธีการเรียนรู้ของสมองรูปแบบหนึ่ง ซึ่งเป็นวิธีการในการคำนวณความผิดพลาดย้อนกลับไปยังชั้นต่างๆ ของเครือข่ายในสมอง เพื่อฝึกให้สมองทำงานได้ดีขึ้นหลังจากกำจัดข้อผิดพลาดต่างๆ ออกไปเรียบร้อยแล้ว
การจำแนกสัตว์ในสวนสัตว์
เราจะยกตัวอย่างการประยุกต์ใช้หลักการข้างต้นเพื่อฝึกสอนเครือข่ายประสาทเทียมให้สามารถจำแนกภาพสัตว์ชนิดต่างๆ โดยนำภาพสัตว์ที่มีป้ายกำกับชนิดของสัตว์มาป้อนให้เครือข่ายเรียนรู้ เมื่อเครือข่ายเรียนรู้จากข้อมูลจำนวนมาก ก็จะสามารถนำไปใช้จำแนกภาพสัตว์ใหม่ๆ ได้อย่างแม่นยำ เมื่อเราป้อนภาพของสิงโตเข้าไป เครือข่ายก็จะบอกได้ว่าเป็นสิงโตนั่นเอง
เริ่มต้นคำทำนายด้วย Perceptron อย่างง่าย
ก่อนไปเริ่มต้นกระบวนการคำนวณผลลัพธ์ของเครือข่ายประสาทเทียม (Forward Propagation) เราไปทำความรู้จักเครือข่ายประสาทเทียมอย่างง่ายกันก่อนเพื่อใช้เป็นต้นแบบในการคำนวณเพื่อให้ง่ายต่อการทำความเข้าใจ นั้นคือเครือข่าย Perceptron ซึ่งเปรียบเสมือนเป็นแบบจำลองทางคณิตศาสตร์ของเซลล์ประสาทในสมองมนุษย์ ดังรูปตัวอย่าง
Perceptron จะประกอบไปด้วย
- Input Layer ค่าข้อมูลที่เรานำเข้าสู่เครือข่ายประสาทเทียม แทนด้วย X1, X2, … , Xn
- Weights ค่าน้ำหนักของ Input แต่ละตัว ในครั้งแรกจะทำการสุ่มขึ้นมา แทนด้วย W1, W2, … , Wn
- Bias ค่าคงที่ ที่เพิ่มเข้ามาในสมการเพื่อช่วยปรับเปลี่ยนผลลัพธ์ของโมเดล จะช่วยให้โมเดลมีความยืดหยุ่นมากยิ่งขึ้น แทนด้วย B
- Sum ผลรวมถ่วงน้ำหนัก Perceptron จะเป็นการคำนวณผลรวมของ Input ที่ถูกคูณด้วย Weight รวมทั้งเพิ่มค่า Bias เข้าไป
- Activation Function ฟังก์ชันการกระตุ้นใช้แปลงผลรวม Sum ให้อยู่ในรูปแบบของค่าผลลัพธ์ ซึ่งมีหลากหลายฟังก์ชันให้เลือกใช้ตามความเหมาะสมของโมเดล
- Output ผลลัพธ์ของโมเดลที่ใช้เพื่อทำนาย หรือจัดประเภทของข้อมูลตามโจทย์
Forward Propagation หนทางเพื่อไปสู่คำทำนาย
การทำงานของเครือข่ายประสาทเทียมเริ่มต้นจากการรับข้อมูลเข้า (Input) ซึ่งมาในรูปแบบตัวแปร X1 ถึง Xn ที่มีน้ำหนัก (Weights) หรือ W1 ถึง Wn กำหนดควบคู่ไว้ด้วย
ซึ่งในขั้นตอนแรกของการคำนวณ ค่าน้ำหนักจะได้มาจากการสุ่มขึ้น (Random) รวมทั้งค่า Bias ซึ่งแทนด้วยค่า b
จากนั้นจึงทำการคำนวณผลรวมแบบถ่วงน้ำหนัก (Sum) ดังสมการ
สมมติว่าเรามี Input 2 ค่า X1 = 0.5 , X2 = 0.8 และมีค่าน้ำหนัก W1 = 0.4 , W2 = 0.3 ตามลำดับ และได้กำหนด Bias เริ่มต้นไว้ที่ 0.1 จะได้สมการดังนี้
เมื่อได้ผลรวมแบบถ่วงน้ำหนักเรียบร้อยแล้ว จำเป็นต้องนำเข้าฟังก์ชันกระตุ้น (Activation Function) กันต่อ
เพื่อแปลงผลรวมให้อยู่ในรูปแบบผลลัพธ์ที่ต้องการก่อน ดังสมการ
ในที่นี้เราจะปรับค่าผลลัพธ์ให้อยู่ในช่วงของข้อมูลระหว่าง 0-1 เราจึงเลือกใช้ฟังก์ชันปรับค่าที่ชื่อว่า Sigmoid Function ซึ่งเป็น Activation Function ประเภทหนึ่ง
ผลลัพธ์สุดท้ายจาก Forward Propagation จะเป็น 0.63 ซึ่งสามารถใช้เพื่อการทำนายต่อไปได้
เมื่อเรียบร้อยแล้วจะเสร็จสิ้นขั้นตอนการ Forward Propagation ทั้งหมด ซึ่งเป็นกระบวนการคำนวณผลลัพธ์จาก Input ผ่านเลเยอร์ต่างๆ ของเครือข่ายประสาทเทียม
Forward Propagation เป็นเพียง .. ขาไปแบบไม่หวนกลับ (เชิงเส้นตรง →)
ถ้าเครือข่ายประสาทเทียมมีชั้น Layer ที่ซับซ้อนยิ่งขึ้น เราจะทำอย่างไรให้การคำนวณผลลัพธ์สามารถปรับค่าน้ำหนักเพื่อเพิ่มความแม่นยำได้มากขึ้นหล่ะ เพราะฉะนั้น Backpropagation จึงเป็นคำตอบ
Backward Propagation ปรับปรุงความแม่นยำในการเรียนรู้
หลักการของ Backward Propagation คือการย้อนกลับเพื่อปรับค่าน้ำหนักที่เหมาะสมให้กับเครือข่ายประสาทเทียมที่มีความซับซ้อน หรือ Multi-Layer Perceptron (MLP) โดยเป็นการปรับน้ำหนักที่เชื่อมต่อระหว่างชั้นต่างๆ ให้เหมาะสมยิ่งขึ้น ซึ่งกระบวนการนี้ใช้ หลักการ Gradient Descent ร่วมกับ Chain Rule ของแคลคูลัส เพื่อลดค่าความผิดพลาดที่เกิดขึ้นจากการทำนาย ด้วยวิธีการดังต่อไปนี้
1. คำนวณข้อผิดพลาด (Error Calculation) เมื่อได้ค่าผลลัพธ์ 𝑦 จาก Forward Propagation แล้ว เราจะเริ่มต้น Backward ด้วยการคำนวณค่าข้อผิดพลาด 𝐸 ซึ่งเป็นส่วนต่างระหว่างค่าผลลัพธ์จริง 𝑦true ซึ่งเท่ากับ 1 และค่าที่ทำนาย 𝑦pred (ในที่นี้เท่ากับ 0.63) โดยใช้ฟังก์ชันวัดค่าเสียหาย (Loss Function) เช่น Mean Squared Error (MSE) เข้ามาช่วย
2. คำนวณ Gradient ของข้อผิดพลาด (Gradient Calculation) เพื่อปรับปรุงโมเดลเราจะใช้กฎลูกโซ่ (Chain Rule) เพื่อหาว่าการเปลี่ยนแปลงของค่าน้ำหนัก W1, W2, … , Wn ส่งผลต่อค่าความผิดพลาดอย่างไร เราต้องหาความชัน (Gradient) ของค่าความผิดพลาดต่อค่าน้ำหนัก Wi ด้วยสมการดังนี้
แทน
เริ่มต้นหา Gradient ของค่าน้ำหนักตัวแรกอย่าง W1 ได้ดังนี้
3. ปรับปรุงค่าน้ำหนัก (Update Weights) เมื่อเราได้ Gradient แล้ว เราจะใช้ค่า Gradient นี้เพื่อปรับปรุงค่าน้ำหนักโดยการลบ Gradient คูณด้วยอัตราการเรียนรู้ 𝜂 (Learning Rate) ตามสมการต่อไป
ทำการปรับปรุงน้ำหนักของทุกค่าน้ำหนัก W1, W2, … , Wn ซ้ำ ๆ จนค่าข้อผิดพลาดลดลงถึงระดับที่พอใจ
การปรับจูนค่าน้ำหนักของเครือข่ายประสาทเทียม และการปรับอัตราการเรียนรู้ของโมเดลคือหัวใจหลักของการทำ Backward Propagation เพื่อย้อนกลับไปปรับค่าน้ำหนักที่เหมาะสม เพื่อช่วยแก้ไขข้อผิดพลาดของโมเดล ทำให้โมเดลมีประสิทธิภาพสูงสุด
หมายเหตุ : บทความนี้มุ่งเน้นการทำความเข้าใจการทำงานของเครือข่ายประสาทเทียม ซึ่งเป็นเพียงส่วนหนึ่งของเทคโนโลยี AI/ML แต่ในความเป็นจริงการพัฒนาโมเดลที่ซับซ้อน อาจต้องอาศัยเครื่องมือ และเทคนิคอื่นๆ ร่วมด้วย เช่น การเขียนโค้ดภาษา Python ซึ่งจะเข้ามาช่วยประมวลผลชุดข้อมูลขนาดใหญ่ การใช้ ML Tools ต่างๆ เพื่อใช้เตรียมชุดข้อมูล และฝึกอบรมโมเดล
บทสรุป
Forward Propagation เป็นกระบวนการคำนวณค่าที่ได้จากการนำข้อมูล (Input) ไปคูณกับค่าน้ำหนัก (Weight) และผ่านฟังก์ชันการกระตุ้น (Activation Func) ในแต่ละเลเยอร์ของเครือข่ายประสาทเทียมจนได้ค่าผลลัพธ์สุดท้าย ซึ่งเป็นคำทำนาย – ในส่วน Backward Propagation จะคำนวณความผิดพลาดระหว่างค่าที่ทำนายได้กับค่าจริง จากนั้นจะใช้เทคนิค Gradient Descent เพื่อปรับค่าพารามิเตอร์ของเครือข่ายให้ลดความผิดพลาดลง เพื่อให้การทำนายในครั้งต่อไปแม่นยำ และมีประสิทธิภาพยิ่งขึ้น
แหล่งข้อมูลเพิ่มเติม : geeksforgeeks.org/backpropagation-in-neural-network