Transformers documentation

Tìm kiếm siêu tham số

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Tìm kiếm siêu tham số

Các siêu tham số như learning rate, batch size và số epochs ảnh hưởng đáng kể đến kết quả huấn luyện. Trainer.hyperparameter_search() tìm ra tổ hợp tốt nhất bằng cách chạy nhiều thử nghiệm, mỗi thử nghiệm sử dụng một bộ giá trị khác nhau, và trả về kết quả tốt nhất.

Mỗi lần thử nghiệm sẽ khởi tạo một mô hình mới bằng model_init, lấy mẫu các siêu tham số mới, chạy một vòng lặp huấn luyện đầy đủ và báo cáo một mục tiêu cho backend tìm kiếm. Backend sử dụng mỗi mục tiêu để định hướng cho lần thử nghiệm tiếp theo. Sau khi tất cả các lần thử nghiệm hoàn tất, các siêu tham số tốt nhất sẽ được trả về trong một ~trainer.utils.BestRun.

Khởi tạo một mô hình

Bắt đầu mỗi thử nghiệm bằng một mô hình mới để tránh trạng thái từ các lần chạy trước. model_init được gọi ở đầu mỗi thử nghiệm và trả về một phiên bản mô hình mới, do đó mỗi thử nghiệm đều bắt đầu từ cùng một trọng số ban đầu.

from transformers import AutoModelForCausalLM

def model_init(trial):
    return AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")

trainer = Trainer(
    model_init=model_init,
    args=args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)

Không truyền cả model= và model_init= cùng lúc, nếu không Trainer sẽ gây ra lỗi.

Định nghĩa không gian tìm kiếm

Tạo một hàm xác định không gian tìm kiếm. Định dạng phụ thuộc vào backend. Nếu bạn không định nghĩa hàm hp_space, không gian tìm kiếm mặc định sẽ bao gồm learning_rate, num_train_epochs và per_device_train_batch_size.

# install one of these hyperparam search backends
pip install optuna
pip install wandb
pip install ray[tune]
Optuna
Ray Tune
Weights & Biases

Optuna là một framework nhẹ để tối ưu hóa siêu tham số.

def hp_space(trial):
    return {
        "learning_rate": trial.suggest_float("learning_rate", 1e-6, 1e-4, log=True),
        "per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", [16, 32, 64, 128]),
    }

Chạy tìm kiếm

Cung cấp một hàm compute_objective tùy chọn để xác định mục tiêu tối ưu hóa. Mặc định, hàm này sẽ là eval_loss nếu có, hoặc tổng của tất cả các giá trị metric nếu không. Hãy truyền một hàm rõ ràng để tránh phụ thuộc vào giá trị mặc định này. backend tìm kiếm sẽ tối ưu hóa mục tiêu qua n_trials lần chạy theo một direction nhất định.

def compute_objective(metrics):
    return metrics["eval_loss"]

best_run = trainer.hyperparameter_search(
    hp_space=hp_space,
    compute_objective=compute_objective,
    n_trials=30,               # how many trials to run
    direction="minimize",      # or "maximize" for metrics like accuracy/F1
    backend="optuna",          # "optuna", "ray", or "wandb"
)

hyperparameter_search() trả về một ~trainer.utils.BestRun chứa giá trị mục tiêu và tổ hợp siêu tham số tốt nhất.

best_run = trainer.hyperparameter_search(...)

best_run.objective        # 0.38  (best eval loss)
best_run.hyperparameters  # {"learning_rate": 5e-5, "num_train_epochs": 4, ...}

Áp dụng các siêu tham số tốt nhất vào TrainingArguments và huấn luyện lại trên toàn bộ tập dữ liệu.

Update on GitHub