Neural Network Optimisers

โดย ชิตพงษ์ กิตตินราดร | มกราคม 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

Momentum optimiser ใช้อนุพันธ์ล่าสุดมาทำให้การเคลื่อนที่ของ Cost function นั้นพุ่งไปข้างหน้าอย่างนุ่มนวล หัวใจหลักของความสามารถนี้คือการใช้ Exponentially weighted moving average (EMA) ของอนุพันธ์ มาอัปเดต Parameter

วิธีการคำนวน Momentum มีดังนี้:

1) คำนวน Vector ของ "น้ำหนักเร่ง" โดยใช้ EMA:

2) นำค่าน้ำหนักเร่ง และ ที่ได้ ไปถ่วง Learning rate และลบออกจาก และ :

สังเกตว่าสมการที่ (5) และ (6) นั้นก็คือการอัปเดต Parameter ตามปกติ เพียงเปลี่ยนตัวแปรที่เอาไปถ่วงน้ำหนักและลบออก จากเดิมใช้ และ เป็นค่าน้ำหนักเร่ง และ

RMSProp

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

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

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.