โดย ชิตพงษ์ กิตตินราดร | มกราคม 2563
มาจนถึงตอนนี้ เรารู้ว่ากลไกที่นำเอาอนุพันธ์ของตัวแปรต่างๆ มาอัปเดตเพื่อลด Loss ใน Cost function นั้นเรียกว่า Gradient descent ซึ่งทำงานโดยการนำเอาอนุพันธ์ไปถ่วงน้ำหนักด้วย Learning rate แล้วลบออกจาก Parameter ดังนี้:
โดย คือลำดับที่ของ Layer
กลไกการ Optimise แบบนี้ มักเกิดปัญหาว่าถ้าหากอนุพันธ์นั้นมีค่าน้อย (คือมีความชันน้อย) ก็จะทำให้ Parameter ถูกอัปเดตแต่ละรอบช้ามาก ส่งผลให้ใช้เวลานานกว่าโมเดลจะเทรนจนถึงจุดที่ Loss ค่ำที่สุดเท่าที่จะเป็นไปได้
ปัจจุบัน มี Algorithm ชั้นสูงเพื่อเพิ่มประสิทธิภาพการ Optimise ให้เลือกใช้ โดย Optimiser เหล่านี้ล้วนมีหลักการคล้ายกัน คือนำค่าอนุพันธ์ล่าสุดไปเพิ่มน้ำหนักให้แก่การ Optimise ในรอบถัดไป เพื่อเร่งความเร็วของการอัปเดตให้มากขึ้น ในบทนี้เราจึงจะมาเรียนรู้ Optimiser ชั้นสูง 3 ตัว ได้แก่ Momentum, RMSProp, และ Adam โดยเราสามารถเรียกใช้ Optimiser เหล่านี้ได้โดยการกำหนด Argument ใน Method .compile
เช่น:
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
Momentum optimiser ใช้อนุพันธ์ล่าสุดมาทำให้การเคลื่อนที่ของ Cost function นั้นพุ่งไปข้างหน้าอย่างนุ่มนวล หัวใจหลักของความสามารถนี้คือการใช้ Exponentially weighted moving average (EMA) ของอนุพันธ์ มาอัปเดต Parameter
วิธีการคำนวน Momentum มีดังนี้:
1) คำนวน Vector ของ "น้ำหนักเร่ง" โดยใช้ EMA:
2) นำค่าน้ำหนักเร่ง และ ที่ได้ ไปถ่วง Learning rate และลบออกจาก และ :
สังเกตว่าสมการที่ (5) และ (6) นั้นก็คือการอัปเดต Parameter ตามปกติ เพียงเปลี่ยนตัวแปรที่เอาไปถ่วงน้ำหนักและลบออก จากเดิมใช้ และ เป็นค่าน้ำหนักเร่ง และ
RMSProp ย่อมาจาก Root Mean Square Propagation มีคุณสมบัติคล้ายกับ Momentum แต่แทนที่จะใช้ EMA ของอนุพันธ์ตัวที่ผ่านๆ มาในการอัปเดต Parameter เปลี่ยนไปใช้ EMA ของยกกำลังสองของอนุพันธ์แทน โดยมีวิธีการคำนวนดังนี้:
1) คำนวน Vector ของ "น้ำหนักเร่ง" โดยใช้ EMA ของยกกำลังสองของอนุพันธ์:
2) นำค่าน้ำหนักเร่ง และ ที่ได้ ไปประกอบกับ และ และถ่วงกับ Learning rate ตามสมการด้านล่าง แล้วลบออกจาก และ :
โดย คือค่าคงที่ขนาดเล็กๆ ที่ป้องกันไม่ให้ตัวหารเป็น 0
สังเกตว่า Term ที่เอาไปถ่วงกับ Learning rate นั้นไม่เหมือน Momentum กล่าวคือเป็นการนำ Square root ของค่าน้ำหนักเร่งไปหารออกจากอนุพันธ์ วิธีการนี้จะช่วยจำกัดความแปรผันในทิศที่ตั้งฉากกับทิศทางที่ไปสู่จุดต่ำสุดของ Cost function ในขณะที่ Momentum สนใจในการสร้างแรงที่มุ่งไปสู่ทิศต่ำสุดของ Cost function อย่างเดียว
Adam ย่อมาจาก Adaptive Moment Estimation เป็นการรวม Momentum และ RMSProp เข้าด้วยกัน ถือว่าเป็น Optimiser ที่ดีที่สุดในปัจจุบัน มีวิธีการคำนวนดังนี้ (แสดงเฉพาะสำหรับ ):
1) คำนวน Vector ของ "น้ำหนักเร่ง" โดยใช้ EMA ตามแบบ Momentum และ Vector ของ "น้ำหนักเร่ง" โดยใช้ EMA ตามแบบ RMSProp แล้วแก้ Bias ที่เกิดจากการที่ และ ถูก Initialise ด้วย 0 (ถ้าไม่แก้จะทำให้ และ รอบแรกๆ มีค่าต่ำกว่าที่ควรจะเป็น):
2) นำค่าน้ำหนักเร่ง และ ไปประกอบกันในลักษณะเดียวกับ RMSProp คือ เป็นตัวตั้ง หารด้วย Square root ของ เพื่อจำกัดความแปรผันในทิศที่ตั้งฉากกับทิศทางที่ไปสู่จุดต่ำสุดของ Cost function แล้วถ่วงกับ Learning rate แล้วลบออกจาก และ :
ในทางปฏิบัติ แนะนำให้ใช้ Adam ไปเลย เว้นแต่จะมีปัญหาก็สามารถลองใช้ Momentum ได้
ในบทต่อไปจะพูดถึงเทคนิคการ Regularise deep neural network ซึ่งรวมทั้ง Dropout layer
หน้าแรก | บทที่ 16 Neural Network Vanishing Gradients | บทที่ 18 Neural Network Regularisation