ออโต้จู๊นนนไปกับ OPTUNA “A hyperparameter optimization framework”

Tawan Tantakull
Super AI Engineer
Published in
2 min readApr 2, 2021

เชื่อว่าในการเทรน Model หลายๆครั้งเราปวดหัวและเสียเวลาไปกับการทำ Hyperparameters Tuning ค่อนข้างมากเลยทีเดียว ซึ่งแน่นอนว่าถ้าเราสามารถหาค่า Hyperparameters ที่เหมาะสมได้ก็สามารถเพิ่มประสิทธิภาพให้ Model ให้ดียิ่งขึ้นได้นั่นเอง

แล้วเราจะรู้หรือหาค่า parameter ว่าแบบไหนคือดีต่อ model ของเราหล่ะ?เนื่องจากเราไม่สามารถหาค่านี้ได้จากข้อมูลของเรา สิ่งที่เราพอจะได้ทำก็จะประมาณนี้

  • ทำ Cross Validation กับหลายๆ ค่า Hyperparameter ครับ
  • หา Domain Export มาดูข้อมูล ช่วยกำหนดค่าให้
  • วัดดวง!

ซึ่งแน่นอนว่าวิธีแรกเป็นวิธีที่ดี เราสามารถเขียนโปรแกรมแล้วปล่อยรันให้ทดลองหลายๆค่าได้ และเราก็รู้จัก library ที่ชื่อ GridSearchCV ที่มีความสามรถนั้นกันดี แต่ในบทความนี้ผมจาแนะนำ library ที่ชื่อว่า OPTUNA

OPTUNA เคลมว่าเป็น “A hyperparameter optimization framework” นั่นหมายถึง ค่าที่ได้เป็นค่าที่เหมาะสมกับ Model ของเราแล้ว

ภายใน OPTUNA มีโมดูลให้เลือกใช้ได้กับหลาย Model ในบทความนี้จะมาแนะนำการใช้ library OPTUA ในการจูน LightGBM เบื้องต้น เพื่อไม่ให้บทความนี้ยาวเกินไป โดยใช้ LightGBM Tuner เป็นหนึ่งในโมดูลของ OPTUNA ซึ่งการใช้งานนั้นตรงไปตรงมาและค่อนข้างง่าย เพียงเปลี่ยน code นิดหน่อย และแน่นอนว่าเสียเวลาในการจูนและปรับแต่ง hyperparameter น้อยลง หาสนในการที่จะใช้ libary นี้ให้เต็มประสิทธิภาพ สามารถศึกษาเพิ่มเติมได้ตามลิ้ง

Stepwise algorithm

ในการทำ hyperparameter tuning แน่นอนว่าต้อง trials และในงาน machine learning ที่ต้องใช้การคำนวนมาหาศาล เช่น การทำ Cross Validation ที่ต้องทดลองเปลี่ยนค่าตัวแปรของแต่ละตัวไปเรื่อยๆและก็ยังต้องไป cross กับตัวแปรอื่นอีก นั่นส่งผลให้เกิด search space ขาดใหญ่ ดังแสดงในรูปที่1 ดังนั้น hyperparameter optimization ที่ดีจึงควรจะลดจำนวนการ trial ให้น้อยที่สุด

โดยใน LightGBM Tuner algorithm ที่อยู่เบื้องหลังมีชื่อว่า stepwise algorithm มันจะจูน hyperparameter ที่สำคัญตามลำดับ โดยการที่ตัวแปร hyperparameter ถูกกำหนดลำดับ ทำให้เกิด search space ที่เล็กลง ดังแสดงในรูปที่2

รูปที่1
รูปที่2

แนะนำการใช้ LightGBM Tuner แบบง๊ายง่าย

Optuna ปัจจุบัน supports Python 3.6 หรือใหม่กว่านะครับ และก่อนอื่นเราจพต้องลง library ก่อนโดยจะใช้ pip หรือ conda ก็ได้นะครับ

$ pip install optuna

$ conda install -c conda-forge optuna

สามารถดู code เต็มได้ที่นี่นะครับ

โดยปกติแล้วเราใช้ตัว Booster ของ LightGBM เพื่อทำ Hyperparameter tuning ผ่านการเรียก lgb.train() โดยจะมี syntax ตามด้านบน

จะสังเกตเห็นได้ว่าในการเรียกใช้งาน Optuna เราเพียงแค่เปลี่ยนตรง import ให้ไปเรียกโมดูลของ Optuna มาใช้งาน และยังสามารถใช้ Syntax เดิมในการเขียนเหมือน Booster ของ LightGBM ได้อีกด้วย

โดยหลังจากเทรน Model เสร็จแล้วเราก็สามารถเรียกดูค่าต่างๆที่เราสนใจได้

rmse ของ LightGBM
rmse ของ Optuna

จะเห็นได้ว่า Optuna ทำหน้าที่ของมันได้ดีเลยทีเดียว โดย rmse ต่างกันอยู่ถึง 2.474 ทั้งนี้ในบทความนี้เป็นเพียงการแนะนำการใช้เบื้องต้น หากต้องการจะใช้ให้เต็มประสิทธิภาพ สามารถศึกษาเพิ่มเติมได้จากลิ้งค์ด้านล่างนี้ครับ

--

--