ใน ep นี้เราจะมาเรียนรู้กันว่า Learning Rate คืออะไร Learning Rate สำคัญอย่างไรกับการเทรน Machine Learning โมเดล Neural Network / Deep Learning เราจะปรับ Learning Rate อย่างไรให้เหมาะสม เราสามารถเทรนไปปรับไปได้ไหม หรือต้องใช้ค่าคงที่ตลอด และโมเดลที่ Transfer Learning กับโมเดลที่เทรนใหม่เลย ต้องการ Learning Rate, จำนวน Epoch ต่างกันอย่างไร

ในการเทรนโมเดล Deep Learning เราต้องเข้าใจก่อนว่าอัลกอริทึมที่ใช้ในการเทรน ที่ชื่อว่า Gradient Descent ทำงานอย่างไร และ Hyperparameter หลักในการควบคุมการทำงานของ Gradient Descent ก็คือ Learning Rate

Learning Rate คืออะไร

Learning Rate คือ Hyperparameter ตัวหนึ่งที่ควบคุมว่าในหนึ่ง Step ของการเทรน เราจะปรับ Weight ของ Neural Network มากน้อยแค่ไหน

  • ถ้า Learning Rate มีค่าน้อย Weight ของโมเดลก็จะเปลี่ยนแปลงน้อย การทำงานของโมเดลก็จะเปลี่ยนไปน้อย Loss ก็ไม่ค่อยเปลี่ยนเท่าไร
  • ถ้า Learning Rate มีค่ามาก Weight ของโมเดลก็จะเปลี่ยนแปลงมาก การทำงานของโมเดลก็จะเปลี่ยนไปมาก Loss ก็จะเปลี่ยนแปลงมาก
Gradient descent with small (top) and large (bottom) learning rates. Source: Andrew Ng’s Machine Learning course on Coursera
Gradient descent ด้วย Learning Rate น้อยเกิน (รูปบน) และมากเกิน (รูปล่าง) เครดิต: Andrew Ng Machine Learning course on Coursera

เรามาเริ่มกันเลยดีกว่า

Open In Colab

หมายเหตุ

  • ในกรณีนี้เราถือว่า Bias คือ Weight ตัวที่ 0 ที่คุณกับ x0 (ที่ค่าเป็น 1 เสมอ) จึงถือว่า Bias เป็น Weight เหมือนกัน เราจะไม่ได้เขียนแยก ว่า Weight และ Bias

Learning Rate แบบไม่คงที่

Learning Rate ไม่จำเป็นต้องคงทีตลอดการเทรน ปัจจุบันมี Paper มากมาย นำเสนอไอเดียการเพิ่มลด Learning Rate ระหว่างเทรน เช่น

  • ค่อย ๆ ลด Learning Rate ไปเรื่อย ๆ ทุก Epoch
  • แบ่งการเทรนเป็น N Cycle แล้วเพิ่ม Learning Rate จนสุด Max ลดจนถึง Min ทุก Cycle เป็นฟันปลา
  • รวม 2 แบบบนเข้าด้วยกัน เทรน N Cycle โดยลดค่า Max Learning Rate ทุก Epoch
  • Stochastic Gradient Descent with Warm Restarts ค่อย ๆ เพิ่ม/ลด Learning Rate ด้วย Cosine Function โค้ง ๆ แทนที่จะเป็นฟันปลา
  • etc.

เชื่อว่า การเพิ่ม/ลด Learning Rate นี้จะช่วยให้ เราเทรนโมเดลได้รวดเร็วขึ้น โมเดลสามารถกระโดดข้ามภูเขา และกระโดดออกมาจาก หลุม Local Minima ได้ ซึ่งเราจะอธิบายต่อไป

รูปเปรียบเทียบ Learning Rate แบบคงที่ กับ Learning Rate แบบ Cycle เครดิต https://arxiv.org/abs/1704.00109
รูปเปรียบเทียบ Learning Rate แบบคงที่ กับ Learning Rate แบบ Cycle เครดิต https://arxiv.org/abs/1704.00109

Learning Rate สำหรับ Pretrained Model

จากบทความเรื่อง Image Classification เรามีการใช้ Transfer Learning จากโมเดล Resnet34 ตัด Layer สุดท้ายทิ้ง เทรนเฉพาะ Layer สุดท้าย ด้วย Learning Rate ที่สูง unfreeze แล้วเทรนทั้งโมเดล ด้วย Learning Rate ที่ต่ำลง และแบ่งเป็นช่วง ๆ สาเหตุเพราะว่า Layer ต่างกัน ต้องการความเปลี่ยนแปลง ของ Weight หรือ Learning Rate ที่ต่างกัน

เช่น ใน Convolution Neural Network (CNN) Layer แรก จะเป็นเรื่องพื้นฐาน เช่น เส้นตั้ง เส้นนอน เส้นทแยง Layer ต่อมาจะเป็นมุม เป็นเส้นโค้ง เป็นเรื่องที่ไม่ว่ารูปแบบไหนก็ต้องประกอบขึ้นมาจากส่วนประกอบพื้นฐานเหล่านี้ Layer เหล่านี้ต้องการ Learning Rate ที่ต่ำมาก ตรงข้ามกับ Layer หลัง ๆ ซึ่งเกี่ยวกับ Object, ดวงตา, ใบหน้า, พื้นผิว Texture, ตัวหนังสือ ที่เราต้องการ Tune ให้เข้ากับงานที่เรา ซึ่งต้องการ Learning Rate ที่สูงกว่า

ใน learner.fit_one_cycle เราจึงมีการกำหนด Maximum Learning Rate (max_lr) ด้วย split(3e-6, 3e-3) เพื่อให้ Layer แรก ๆ ได้ค่า Learning Rate น้อย ๆ คือ 3e-6 ไล่ไปจนถึง Layer สุดท้าย ได้ค่า Learning Rate มากที่สุด คือ 3-e3

Credit

แชร์ให้เพื่อน:

Surapong Kanoktipsatharporn on FacebookSurapong Kanoktipsatharporn on LinkedinSurapong Kanoktipsatharporn on Rss
Surapong Kanoktipsatharporn
Solutions Architect at Bua Labs
The ultimate test of your knowledge is your capacity to convey it to another.

Published by Surapong Kanoktipsatharporn

The ultimate test of your knowledge is your capacity to convey it to another.