Deep learning พื้นฐาน (Back propagation)

Source: Deep Learning on Medium


Go to the profile of HD COE

ในบทนี้จะกล่าวถึงการเรียนรู้ของ deep learning โดยวิธีการทำ Back propagation ซึ่งต่อจากเนื้อหาในบทที่แล้ว https://link.medium.com/AkF6Zm0DmT

Back propagation บางครั้งถูกเรียกว่า Learning หรือการเรียนรู้ เนื่องจากเป็นกระบวนการที่เสมือนว่า ทำให้โมเดลเรียนรู้ด้วยตัวเอง ซึ่งถือว่าเป็นหัวใจหลักของ Deep learning

แนวคิด Backprop คือ ในเมื่อ error คำนวณจากผลลัพธ์ y_target เปรียบเทียบกับ y_out และ ค่า y_target คำนวณจากพารามิเตอร์ W ดังนั้นหากเรารู้ว่า แต่ละพารามิเตอร์ W มีผลกระทบกับ error แค่ไหน เราก็สามารถปรับค่าพารามิเตอร์ W ให้ถูกต้องเพื่อทำให้ error น้อยที่สุด

คณิต ม ปลาย เราเรียนรู้ว่า ถ้า y=3x แล้วจะหาความชันของกราฟ ทำได้โดยการ diff dy/dx = 3 ค่าความชันคือ 3 หมายความว่า ค่า x มีผลกระทบกับค่า y ถึง 3 เท่า พูดง่ายๆ คือ การ diff ทำให้เราทราบว่า ค่า x มีผลต่อค่า y แค่ไหน

หลักการเดียวกันนี้ นำมาใช้กับการทำ Backprop นั่นคือ หากเรา diff error เทียบกับ W จะทำให้รู้ว่า ค่า W มีผลต่อค่า error แค่ไหน

จากตัวอย่างที่แล้วจะเห็นว่า error คำนวณจาก

และค่า y_out หรือ OUT_y1 คำนวณจาก

จะเห็นว่ามีฟังก์ชันซ้อนอยู่ ดังนั้นต้องใช้หลักกฎลูกโซ่ (chain rule) และค่า error ไม่ได้มาจากค่า W แค่ตัวเดียว ดังนั้นเราต้องใช้ partial differential จะได้ว่า

โดยที่ dE/dw จะเรียกว่า Partial derivative of E with respect to w หรือจะเรียกว่า The gradient with respect to w ในบทความนี้จะเรียกสั้นๆว่า เกรเดียน w

ดังนั้นหลักการคำนวณคือ แต่ละโหนดเราจะหาค่า

เอาล่ะ มาเริ่มคำนวณกับโจทย์เดิมของเรากันดีกว่า

Output layer

เริ่มต้นคำนวณ เกรเดียน w_5

(รายละเอียดการ diff ผมไม่ได้ลงรายละเอียดหากสงสัยสอบถามได้ครับ)

สุดท้ายจะได้ เกรเดียนของ w5

เราใช้วิธีการเดียวกันคำนวณเกรเดียน w7

เช่นเดียวกับ w6 และ w8

จบไปแล้วสำหรับการหาค่าพารามิเตอร์ w ของ output layer ต่อมาเราจะถอยกลับไปยัง hidden layer ซึ่งหลักการยังคงเหมือนเดิม

Hidden layer

มาเริ่มคำนวณกันที่ hidden layer h1

เกรเดียน output ซึ่งคำนวณจากสอง output เนื่องจาก output ของ h1 มีผลกับทั้ง Error ของ y1 และ y2 ดังนั้นวิธีการคำนวณคือ

เริ่มจาก เกรเดียน output ของ h1 จากโหนด y1

สังเกตว่า สองพจน์แรก เราได้คำนวณมาแล้วตอนหาเกรเดียน w ใน output layer ดังนั้นเราคำนวณพจน์สุดท้ายได้ว่า

ดังนั้น จะได้ว่า

วิธีการเดียวกันคำนวณ เกรเดียน output ของ h1 จากโหนด y2

ดังนั้นเกรเดียนตัวแรกของเรา จะได้ว่า

เอาล่ะ เรายังเหลืออีกสองตัว ซึ่งคำนวณด้วยวิธีการเดิม

สุดท้ายจะได้ เกรเดียนของ w1

ใช้วิธีการเดียวกันคำนวณเกรเดียน w3

และเช่นเดียวกันกับการหาเกรเดียน w2, w4 ซึ่งมีผลกับค่าใน h2 จะได้ว่า

ในที่สุดเราก็ได้ค่าเกรเดียนของทุกพารามิเตอร์

เป้าหมายสุดท้ายคือ ทำให้โมเดลมีความแม่นยำที่สุด นั่นคือ ทำให้ error น้อยที่สุด โดยใช้อัลกอริทึม optimization ซึ่งมีด้วยกันหลายวิธี โดยวิธีอย่างง่าย เช่น Stochastic gradient descent (SGD)

w_old : ค่าพารามิเตอร์ w เดิม

w_new : ค่าพารามิเตอร์ w ใหม่

alpha : step หรือ learning rate เป็นค่าคงที่

ตัวอย่างการอัพเดทพารามิเตอร์ w เช่น พารามิเตอร์ w3 กำหนด alpha = 0.05 จะได้ว่า

ใช้วิธีเดียวกันอัพเดท w อื่นๆ จนครบถือว่า จบกระบวนการ Backprop แล้ว

นี่คือกระบวนการเรียนรู้ของ neural network 1 รอบ จากนั้นวนกลับมา Feedforward อีกครั้งเพื่อหาค่า output y คำนวณ error แล้วเรียนรู้ Backprop อีกครั้ง ทำซ้ำแล้วซ้ำเล่าตามจำนวนรอบที่กำหนด

สรุป

บทความนี้อธิบายการเรียนรู้ (Back propagation) ของ Deep learning โดยยกตัวอย่างจากโมเดลอย่างง่าย เพื่อให้เข้าใจหลักการและแนวคิดเบื้องต้น ซึ่งจริงๆแล้ว ยังมีรายละเอียดย่อยๆ อีกหลายส่วนที่น่าสนใจ และน่าศึกษา โดยจะทยอยนำเสนอในบทความต่อๆไป

— —

บ่อยครั้งที่มักมีคำถามว่า เรียนคณิตศาสตร์กันไปทำไม บางทีอาจเป็นเพราะ เราไม่สามารถตอบได้ว่า ความหมายที่แท้จริงของมันคืออะไร

Deep learning เป็นเครื่องพิสูจน์ได้เป็นอย่างดีถึงพลังของคณิตศาสตร์ และโมเดลเหล่านี้ไม่ได้เพิ่งถูกคิดค้น เพียงแต่ย้อนหลังไป เราอาจยังไม่มีข้อมูล และประสิทธิภาพเครื่องมือเพียงพอ

นอกจากนี้จะเห็นว่าคณิตศาสตร์ที่ใช้นั้นคือเรื่องที่เราๆท่านๆ เรียนมาแล้วทั้งสิ้น เพียงแต่ต้องมองถึงความหมายของมัน