Transformers documentation

البحث عن المعلمات الفائقة

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

البحث عن المعلمات الفائقة

تؤثر المعلمات الفائقة مثل معدل التعلم وحجم الدفعة وعدد الفترات بشكل كبير على نتائج التدريب. يجد Trainer.hyperparameter_search() أفضل تركيبة من خلال تشغيل تجارب متعددة، كل منها بمجموعة مختلفة من القيم، وإرجاع الأفضل منها.

يُهيّئ كل تجربة نموذجًا جديدًا باستخدام model_init، ويستخرج معاملات خوارزمية جديدة، وينفّذ حلقة تدريب كاملة، ثم يُبلّغ الخلفية البحثية بقيمة الهدف. وتستخدم الخلفية البحثية كل قيمة هدف لتوجيه التجربة التالية. وبعد اكتمال جميع التجارب، تُعاد أفضل المعاملات الخوارزمية في ~trainer.utils.BestRun.

تهيئة نموذج

ابدأ كل تجربة بنموذج جديد لتجنب حالة التشغيلات السابقة. يُستدعى model_init في بداية كل تجربة ويعيد نسخة جديدة من النموذج، لذا تبدأ كل تجربة من نفس الأوزان الأولية.

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,
)

لا تقم بتمرير model= وmodel_init= معًا، وإلا سيُطلق Trainer خطأً.

تعريف مساحة البحث

أنشئ دالة تحدد مساحة البحث. يعتمد التنسيق على الخلفية (backend). إذا لم تحدد دالة hp_space، فإن البحث الافتراضي يغطي learning_rate وnum_train_epochs و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 هو إطار عمل خفيف لتحسين المعلمات الفائقة.

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]),
    }

Run the search

قدّم دالة compute_objective اختيارية لتعريف هدف التحسين. يكون الافتراضي eval_loss إذا كانت موجودة، وإلا فيكون مجموع جميع قيم المقاييس. مرّر دالة صريحة لتجنب الاعتماد على هذا الخيار الاحتياطي. يحسّن backend البحث الهدف على مدى n_trials تشغيلات في direction محددة.

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() كائنًا من نوع ~trainer.utils.BestRun يحتوي على قيمة الدالة الهدف وأفضل تركيبة للمعاملات الفائقة.

best_run = trainer.hyperparameter_search(...)

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

طبّق أفضل المعاملات الفائقة على TrainingArguments وأعد التدريب على مجموعة البيانات الكاملة.

Update on GitHub