Back Propagation Algorithm อธิบายแบบสมัยใหม่ กล่าวคือเป็น Modular designed Back Propagation algorithm


แต่เดิม การสอน Neural Network จะเริ่มจากการมีโครงสร้างของนิวรอลเน็ตเวิร์คที่แน่นอนแล้ว จากนั้นจึงอธิบายวิธีการทำ Back Propagation เป็นเนื้อเดียวของทั้งโครงสร้าง แต่เนื่องจากการพัฒนาการใช้งาน Neural Network ในสมัยปัจจุบันมีลักษณะเป็น Modular design หมายความว่า คุณสามารถเลือกเลเยอร์ที่เป็นก้อนmodule มาใส่ ถอดเลเยอร์นั้นออก ใส่เลเยอร์นี้ตรงกลางแทนได้ เพราะฉะนั้น วิธีการสอน Back propagation จึงควรเปลี่ยนไปตามยุคสมัย ในบทความนี้ เราจะอธิบายถึงการ Back Propagation ในแบบที่มอง Layer เป็น โมดูล และเราสร้างโครงสร้างโดยการ Back Propagate แบบเป็นโมดูลได้

ก่อนจะเข้าใจ Back Propagation คุณจะต้องเข้าใจ Gradient Descent ก่อน โปรดอ่านที่นี่ นิวรอลเน็ตเวิร์ค แท้จริงคือ composite function ยังจำกันได้ไหม เรียนสมัยมัธยมปลาย Back Propagation ก็คือ Gradient Descent บน Composite function ในกรณีgradient descent เราหา first derivative เมื่อเทียบกับ Objective function ใน Back Propagation เมื่อเราหา first derivative เมื่อเทียบกับ composite function มันก็คือการใช้ Chain rule นั่นเอง กล่าวอีกอย่างคือ Back propagation ก็คือ Gradient descent with Chain rule ง่ายๆแค่นั้น


เราเริ่มจากการนิยามคำพูด "คำทาย" หมายถึงผลที่ Neural Network ทายว่าจะเป็น ส่วนคำเฉลยคือคำตอบที่เราจะสอนนิวรอลเน็ตเวิร์คว่า "ไม่ใช่ ดูคำตอบสิ" หรือ "ใช่ ทายถูกแล้ว" คำทายเราแทนด้วยตัวแปร $\mathbf{t} \in \mathbb{R}^J$ ซึ่ง$J$ คือมิติของคำเฉลยของspaceของเลขจริง "คำเฉลย"หมายถึงผลเฉลยที่รู้ล่วงหน้า  เราแทนตัวแปรคำเฉลยด้วย $\mathbf{y} \in \mathbb{R}^J$  เราเปลี่ยนสัญลักษณ์เชิงmatrix ไปเป็น scalar ด้วยการเขียนว่า $\mathbf{t} = t_1, t_2, t_3,...t_j,...,t_J$

ภาพของนิวรอลเน็ตเวิร์ค1เลเยอร์  note that $w_{ij}$ เป็น fully connect layer. หมายถึงว่ากราฟระหว่าง $y_i$ กับ $y_j$ เป็น complete bipatite graph


คำอธิบายคร่าวๆเกี่ยวกับวิธี Derive Back Propagation Algorithm ของคุณเอง

1. นิยามความแตกต่างระหว่างคำทายกับคำเฉลยในเชิงปริมาณ

สมมุติว่าคุณเลือก กำลังสองEuclidean Distance ระหว่างคำเฉลยกับคำทายในเชิงปริมาณคุณจะได้ Objective function
$$E = \frac{1}{2} \sum_{j \in \mathbb{R}^J} (t_j - y_j)^2$$ เมื่อ E คือ Energy ชนิดหนึ่งต่อไปเราจะเรียก E ว่า Energy จากสมการนี้เราสามารถใช้ Calculus หา$\frac{\partial E}{\partial y_j} \quad \forall j \in \lbrace1,...,J\rbrace$ ได้

2. เราสามารถมองได้ว่า คำเฉลย คือ Activation ของเลเยอร์ล่าง  ถ้าเป็นเช่นนั้น  เราจะสามารถทำการ Back Propagate ลงไปเลเยอร์ล่างของล่างได้ ถ้าหากว่าเราสามารถคำนวน Derivative ของ Energyเมื่อเทียบกับเลเยอร์บนได้  กล่าวคือ สมมุติว่าเราทราบ $\frac{\partial E}{\partial y_j} \quad \forall j \in \lbrace1,...,J\rbrace$ เราหวังว่าเราจะสามารถหา $\frac{\partial E}{\partial y_i} \quad \forall i \in \lbrace1,...,I \rbrace$  เราจะสมหวังได้อย่างไร ?

3. เพื่อจะหา  $\frac{\partial E}{\partial y_i}$ โดยสมมุติว่าเรารู้ค่า $\frac{\partial E}{\partial y_j}$ว่ามีค่าเท่าไหร่ , เราเริ่มจากการหา $\frac{\partial E}{\partial z_j} \quad \forall j \in \lbrace1,...,J\rbrace$ ก่อน  เมื่อ $z_j$ คือผลรวมของinputที่ถูกรับโดย$j^{th}$ node   นั่นคือ
$$z_j = \sum_{i} w_{ij}y_i \quad \forall j \in \lbrace1,...,J\rbrace$$

เมื่อ $z_j$ ถูกนิยามแบบนี้  เราสามารถกล่าวได้ว่า $y_j$ ก็คือ
$$y_j = f(z_j) \quad \forall j \in \lbrace1,...,J\rbrace$$, where f is an activation function

เมื่อเราเขียน $y_j$ ในรูป function ของ $z_j$ ได้  แน่นอนว่าเราสามารถรู้ $\frac{\partial E}{\partial z_j} $ หากว่าเรารู้ $\frac{\partial E}{\partial y_j} $
$\frac{\partial E}{\partial y_i}$ ได้ หากว่าเรารู้ $\frac{\partial E}{\partial z_j}$
$$\frac{\partial E}{\partial z_{j}} = \frac{\partial E}{\partial y_j} \cdot \frac{\partial y_j}{\partial z_j} $$  แต่ $\frac{\partial y_j}{\partial z_j} = f'(z_j) $

จากสมการด้านบน เมื่อเราเขียน $z_j$ ในรูป function ของ$y_i$ได้ แน่นอนว่าเราสามารถรู้  $\frac{\partial E}{\partial y_i}$ ได้  มันคือ
$$\frac{\partial E}{\partial y_{i}} = \sum_j  \frac{\partial z_j}{\partial y_i} \cdot  \frac{\partial E}{\partial z_j}= \sum_j w_{ij} \frac{\partial E}{\partial z_j} $$

 และนั่นตอบโจทย์ข้อ3.

4. ปัญหาของ Back Propagation สำหรับ Layer นี้มีสอง derivatives ที่เราต้องตอบค่าให้ได้ นั่นคือ $\frac{\partial E}{\partial w_{ij}}$ สำหรับ update ค่า weights และ $\frac{\partial E}{\partial y_i}$ สำหรับ back propagate ลงเลเยอร์ล่างถัดไป เหมือนที่ $\frac{\partial E}{\partial y_j}$ เคย back propagate เพื่อหาค่า $\frac{\partial E}{\partial w_{ij}}$ สำหรับเลเยอร์นี้  แต่ $\frac{\partial E}{\partial y_i}$ ตอบไปแล้วในข้อ 3. ดังนั้นข้อนี้เราจะพูดถึง $\frac{\partial E}{\partial w_{ij}}$ ว่ามีค่าเท่าไหร่  ค่าของมันคือ
$$\frac{\partial E}{\partial w_{ij}} = \frac{\partial z_j}{\partial w_{ij}} \cdot \frac{\partial E}{\partial z_j} $$
แต่จาก $z_j = \sum_{i} w_{ij}y_i $   ดังนั้น $ \frac{\partial z_j}{\partial w_{ij}}  = y_i$
ดังนั้น เรารู้ทุกอย่างเกี่ยวกับการหา $\frac{\partial E}{\partial w_{ij}}$.

สรุป  เราได้อธิบายถึงการ Back Propagation ของloss layer และ layer ต่อมา และเราได้อธิบายถึงวิธีการ Back Propagate ลง Layer ล่างถัดไป ซึ่งมันก็คือ Chain Rules ของ Calculus นั่นเอง  สำหรับเครื่องมืออย่าง Caffe จะให้เราเขียน 2 gradients สำหรับ 1 layer นั่นคือ
$\frac{\partial E}{\partial \mathbf{w}}$และ$\frac{\partial E}{\partial y_i} $


ความคิดเห็น

บทความที่ได้รับความนิยม