Tối ưu siêu tham số với Optuna

Deep Reinforcement Learning bằng Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Siêu tham số là gì

 

 

  • DRL có nhiều siêu tham số
  • Ảnh hưởng lớn đến hiệu năng
  • Độ phức tạp tìm kiếm tăng theo số siêu tham số

 

Ví dụ
Tỷ lệ chiết khấu
PPO: clipping epsilon, entropy bonus
Experience replay: kích thước buffer, batch size
Lịch epsilon giảm dần (greedy)
Fixed Q-targets: $\tau$
Learning rate
Số lớp, số nút mỗi lớp...
Deep Reinforcement Learning bằng Python

Chọn giá trị siêu tham số như thế nào

 

Mục tiêu: phần thưởng tích lũy trung bình

Kỹ thuật tìm kiếm siêu tham số:

  • Thử-sai thủ công
  • Grid search
  • Random search
  • Thuật toán chuyên dụng

Một cỗ máy cơ khí lớn với hàng chục núm và mặt số

Deep Reinforcement Learning bằng Python

Logo Optuna

 

Quy trình Optuna:

  • Định nghĩa hàm objective
  • Tạo một study của Optuna
  • Cho Optuna lặp qua các trial

 

 

import optuna

def objective(trial): ...
study = optuna.create_study()
study.optimize(objective, n_trials=100)
study.best_params
{'learning_rate': 0.001292481, 'batch_size': 8}
Deep Reinforcement Learning bằng Python

Định nghĩa hàm objective

 

Trong hàm objective:

  • Xác định siêu tham số cần tối ưu
  • Xác định chỉ số cần tối ưu

Linh hoạt hoàn toàn trong khai báo siêu tham số:

  • float
  • integer
  • categorical

 

def objective(trial: optuna.trial.Trial):

# Hyperparameters x and y between -10 and 10
x = trial.suggest_float('x', -10, 10) y = trial.suggest_float('y', -10, 10)
# Return the metric to minimize return (x - 2) ** 2 + 1.2 * (y + 3) ** 2
Deep Reinforcement Learning bằng Python

Study trong Optuna

 

  • Dùng sqlite để lưu study
  • Lấy mẫu n_trials với sampler mặc định (TPE)
    • Ban đầu chọn siêu tham số ngẫu nhiên
    • Sau đó tập trung vào vùng hứa hẹn
  • Nếu bỏ n_trials: chạy đến khi dừng
  • Có thể tải lại study từ cơ sở dữ liệu

 

import sqlite
study = optuna.create_study(
                 storage="sqlite:///DRL.db",
                 study_name="my_study")

study.optimize(objective, n_trials=100)
loaded_study = optuna.load_study(
                        study_name="my_study", 
                        storage="sqlite:///DRL.db")
Deep Reinforcement Learning bằng Python

Khám phá kết quả study

optuna.visualization.plot_param_importances(study)

Biểu đồ cột hiển thị mức độ quan trọng của siêu tham số x và y; y là 0,71 và x là 0,29.

optuna.visualization.plot_contour(study)

Biểu đồ đường đồng mức với một điểm mỗi trial. Điểm tập trung quanh x = 2, y = -3.

Deep Reinforcement Learning bằng Python

Ayo berlatih!

Deep Reinforcement Learning bằng Python

Preparing Video For Download...