Transformers documentation
Optimizasyon
Optimizasyon
.optimization modülü şunları sağlar:
- ağırlık çürümesi sabitlenmiş, ince ayar yapılmış modellerde kullanılabilen bir optimizör ve
_LRSchedule'dan devralan schedule nesneleri biçiminde birkaç zamanlama:- birden çok batch'in gradyanlarını biriktirmek için bir gradyan biriktirme sınıfı
AdaFactor
sınıf transformers.Adafactor
< source >( paramslr = Noneeps = (1e-30, 0.001)clip_threshold = 1.0decay_rate = -0.8beta1 = Noneweight_decay = 0.0scale_parameter = Truerelative_step = Truewarmup_init = False )
Parametreler
- params (
Iterable[nn.parameter.Parameter]) — Optimize edilecek parametrelerin veya parametre gruplarını tanımlayan sözlüklerin iterable'ı. - lr (
float, isteğe bağlı) — Dış öğrenme oranı. - eps (
tuple[float, float], isteğe bağlı, varsayılan(1e-30, 0.001)) — Sırasıyla kare gradyan ve parametre ölçeği için düzenleme sabitleri - clip_threshold (
float, isteğe bağlı, varsayılan 1.0) — Son gradyan güncellemesinin karekök ortalama kare (RMS) eşiği - decay_rate (
float, isteğe bağlı, varsayılan -0.8) — Karelerin hareketli ortalamalarının hesaplanmasında kullanılan katsayı - beta1 (
float, isteğe bağlı) — Gradyanların hareketli ortalamalarının hesaplanmasında kullanılan katsayı - weight_decay (
float, isteğe bağlı, varsayılan 0.0) — Ağırlık çürümesi (L2 cezası) - scale_parameter (
bool, isteğe bağlı, varsayılanTrue) — True ise, öğrenme hızı karekök ortalama kare ile ölçeklenir - relative_step (
bool, isteğe bağlı, varsayılanTrue) — True ise, harici öğrenme hızı yerine zamana bağlı öğrenme hızı hesaplanır - warmup_init (
bool, isteğe bağlı, varsayılanFalse) — Zamana bağlı öğrenme oranı hesabı, ısınma başlatmasının kullanılıp kullanılmadığına bağlıdır
AdaFactor pytorch uygulaması, Adam'ın orijinal fairseq kodunun yerini alacak şekilde kullanılabilir: https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py
Makale: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost https://huggingface.co/papers/1804.04235 Bu optimizörün, scale_parameter, relative_step ve warmup_init seçeneklerine bağlı olarak öğrenme hızını içsel olarak ayarladığını unutmayın. Manuel (dış) bir öğrenme hızı zamanlaması kullanmak için scale_parameter=False ve relative_step=False değerlerini ayarlamanız gerekir.
Bu uygulama, düşük hassasiyetli (FP16, bfloat) değerleri işler, ancak kapsamlı bir şekilde test edilmemiştir.
Önerilen T5 ince ayar ayarları (https://discuss.huggingface.co/t/t5-finetuning-tips/684/3):
LR warmup veya clip_threshold olmadan eğitim önerilmez.
- zamanlanmış LR ısınma sürecini sabit LR'ye geçin
- clip_threshold=1.0 (https://huggingface.co/papers/1804.04235) kullanın
Göreceli güncellemeleri devre dışı bırak
scale_parameter=False kullanın
Adafactor ile birlikte gradyan kırpma gibi ek optimizör işlemleri kullanılmamalıdır
Örnek:
Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)Diğerleri, aşağıdaki kombinasyonun iyi çalıştığını bildirdi:
Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)Trainer ile lr=None kullanırken büyük olasılıkla AdafactorSchedule kullanmanız gerekecektir
aşağıdaki gibi zamanlayıcı:
from transformers.optimization import Adafactor, AdafactorSchedule
optimizer = Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
lr_scheduler = AdafactorSchedule(optimizer)
trainer = Trainer(..., optimizers=(optimizer, lr_scheduler))Kullanım:
# replace AdamW with Adafactor
optimizer = Adafactor(
model.parameters(),
lr=1e-3,
eps=(1e-30, 1e-3),
clip_threshold=1.0,
decay_rate=-0.8,
beta1=None,
weight_decay=0.0,
relative_step=False,
scale_parameter=False,
warmup_init=False,
)adım
< source >( closure = None )
Tek bir optimizasyon adımı gerçekleştirir
Zamanlamalar
SchedulerType
sınıf transformers.SchedulerType
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
TrainingArguments içindeki lr_scheduler_type parametresi için zamanlayıcı adları.
Varsayılan olarak “linear” kullanılır. İçeride bu, Trainer içindeki get_linear_schedule_with_warmup zamanlayıcısını getirir.
Zamanlayıcı türleri:
- “linear” = get_linear_schedule_with_warmup()
- “cosine” = get_cosine_schedule_with_warmup()
- “cosine_with_restarts” = get_cosine_with_hard_restarts_schedule_with_warmup()
- “polynomial” = get_polynomial_decay_schedule_with_warmup()
- “constant” = get_constant_schedule()
- “constant_with_warmup” = get_constant_schedule_with_warmup()
- “inverse_sqrt” = get_inverse_sqrt_schedule()
- “reduce_lr_on_plateau” = get_reduce_on_plateau_schedule()
- “cosine_with_min_lr” = get_cosine_with_min_lr_schedule_with_warmup()
- “cosine_warmup_with_min_lr” = get_cosine_with_min_lr_schedule_with_warmup_lr_rate()
- “warmup_stable_decay” = get_wsd_schedule()
- “greedy” = get_greedy_schedule()
get_scheduler
transformers.get_scheduler
< source >( name: str | SchedulerTypeoptimizer: Optimizernum_warmup_steps: int | None = Nonenum_training_steps: int | None = Nonescheduler_specific_kwargs: dict | None = None )
Parametreler
- name (
strveyaSchedulerType) — Kullanılacak zamanlayıcının adı. - optimizer (
torch.optim.Optimizer) — Eğitim sırasında kullanılacak optimizör. - num_warmup_steps (
int, isteğe bağlı) — Yapılacak ısınma adım sayısı. Bu, tüm zamanlayıcılar tarafından gerekli değildir (bu nedenle argüman isteğe bağlıdır); ayarlanmamışsa ve zamanlayıcı türü bunu gerektiriyorsa fonksiyon bir hata oluşturur. - num_training_steps (`int“, isteğe bağlı) — Yapılacak eğitim adım sayısı. Bu, tüm zamanlayıcılar tarafından gerekli değildir (bu nedenle argüman isteğe bağlıdır); ayarlanmamışsa ve zamanlayıcı türü bunu gerektiriyorsa hata fırlatılır.
- scheduler_specific_kwargs (
dict, isteğe bağlı) — cosine with restarts gibi zamanlayıcılar için ek parametreler. Zamanlayıcı türü ile zamanlayıcı parametreleri arasındaki uyumsuzluk, zamanlayıcı işlevinin bir TypeError fırlatmasına neden olur.
Adından herhangi bir zamanlayıcıyı almak için birleşik API.
get_constant_schedule
transformers.get_constant_schedule
< source >( optimizer: Optimizerlast_epoch: int = -1 )
Optimizatörde ayarlanan öğrenme hızını kullanarak sabit bir öğrenme hızına sahip bir zaman çizelgesi oluşturun.
get_constant_schedule_with_warmup
transformers.get_constant_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intlast_epoch: int = -1 )
Optimizatörde ayarlanan başlangıç lr değeri ile 0 arasında doğrusal olarak artan bir öğrenme oranına sahip, sabit öğrenme oranlı bir zaman çizelgesi oluşturun.
get_cosine_schedule_with_warmup
transformers.get_cosine_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_training_steps (
int) — Toplam eğitim adımı sayısı. - num_cycles (
float, isteğe bağlı, varsayılan 0.5) — Kozinüs zamanlamasındaki dalga sayısı (varsayılan, yarım kozinüs izleyerek maksimum değerden 0'a azalmaktır). - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi.
Optimizatörde ayarlanan başlangıç lr değerinden 0'a kadar, ardından 0 ile optimizatörde ayarlanan başlangıç lr değeri arasında doğrusal olarak arttığı bir ısınma süresinin ardından, cosinus fonksiyonunun değerlerini takip ederek azalan bir öğrenme oranıyla bir zaman çizelgesi oluşturun.
get_cosine_with_hard_restarts_schedule_with_warmup
transformers.get_cosine_with_hard_restarts_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: int = 1last_epoch: int = -1 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_training_steps (
int) — Toplam eğitim adımı sayısı. - num_cycles (
int, isteğe bağlı, varsayılan 1) — Kullanılacak sert yeniden başlatma sayısı. - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi.
Optimizatörde ayarlanan başlangıç lr değerinden 0'a doğru, kosinüs fonksiyonunun değerlerini takip ederek azalan bir öğrenme oranıyla bir zaman çizelgesi oluşturun. Bu çizelgede, 0 ile optimizatörde ayarlanan başlangıç lr değeri arasında doğrusal olarak artan bir ısınma (warmup) döneminin ardından birkaç sert yeniden başlatma (hard restart) bulunur.
get_cosine_with_min_lr_schedule_with_warmup
transformers.get_cosine_with_min_lr_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = None )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_training_steps (
int) — Toplam eğitim adımı sayısı. - num_cycles (
float, isteğe bağlı, varsayılan 0.5) — Kozinüs zamanlamasındaki dalga sayısı (varsayılan, yarım kozinüs izleyerek maksimum değerden 0'a azalmaktır). - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi. - min_lr (
float, isteğe bağlı) — Kozinüs zamanlamasından sonra ulaşılacak en düşük öğrenme oranı. - min_lr_rate (
float, isteğe bağlı) — Başlangıç öğrenme hızının oranı olarak minimum öğrenme hızı. Ayarlanırsa,min_lrayarlanmamalıdır.
Optimizatörde ayarlanan başlangıç lr değerinden min_lr değerine kadar, arada 0 ile optimizatörde ayarlanan başlangıç lr değeri arasında doğrusal olarak artan bir ısınma (warmup) periyodu sonrasında, cosinus fonksiyonunun değerlerini takip ederek azalan bir öğrenme oranına sahip bir zaman çizelgesi oluşturun.
get_cosine_with_min_lr_schedule_with_warmup_lr_rate
transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = Nonewarmup_lr_rate: float | None = None )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_training_steps (
int) — Toplam eğitim adımı sayısı. - num_cycles (
float, isteğe bağlı, varsayılan 0.5) — Kozinüs zamanlamasındaki dalga sayısı (varsayılan, yarım kozinüs izleyerek maksimum değerden 0'a azalmaktır). - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi. - min_lr (
float, isteğe bağlı) — Kozinüs zamanlamasından sonra ulaşılacak en düşük öğrenme oranı. - min_lr_rate (
float, isteğe bağlı) — Başlangıç öğrenme hızının oranı olarak minimum öğrenme hızı. Ayarlanırsa,min_lrayarlanmamalıdır. - warmup_lr_rate (
float, isteğe bağlı) — Başlangıç öğrenme hızının oranı olarak en düşük öğrenme hızı. Ayarlanmazsawarmup_lr_rate, float(1/num_warmup_steps) olarak ele alınır.
Optimizatörde ayarlanan başlangıç lr değerinden min_lr değerine kadar, arada 0 ile optimizatörde ayarlanan başlangıç lr değeri arasında doğrusal olarak artan bir ısınma (warmup) periyodu sonrasında, cosinus fonksiyonunun değerlerini takip ederek azalan bir öğrenme oranına sahip bir zaman çizelgesi oluşturun.
GreedyLR
sınıf transformers.GreedyLR
< source >( optimizer: Optimizermode: str = 'min'factor: float = 0.95patience: int = 10threshold: float = 1e-06threshold_mode: str = 'abs'cooldown: int = 0warmup: int = 0min_lr: float | list[float] = 0.001max_lr: float | list[float] = 1.0eps: float = 1e-08verbose: bool = Falsesmooth: bool = Falsewindow_size: int = 50reset_start: int = 500 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - mode (
str, isteğe bağlı, varsayılan"min") — ‘min’ veya ‘max’ değerlerinden biri. ‘min’ modunda, metrik azalmayı durdurduğunda LR azaltılır; ‘max’ modunda ise artmayı durdurduğunda azaltılır. - factor (
float, isteğe bağlı, varsayılan 0.95) — Öğrenme hızının ayarlanacağı çarpan. LR, plato durumunda çarpan ile çarpılır ve iyileşme durumunda çarpana bölünür. 1.0'dan küçük olmalıdır. - patience (
int, isteğe bağlı, varsayılan 10) — Öğrenme hızının ayarlanacağı, iyileşme olmayan epoch sayısı. - threshold (
float, isteğe bağlı, varsayılan 1e-06) — Yeni optimumu ölçmek için eşik değeri. - threshold_mode (
str, isteğe bağlı, varsayılan"abs") — ‘rel’ veya ‘abs’ değerlerinden biri. - cooldown (
int, isteğe bağlı, varsayılan 0) — LR azaltıldıktan sonra normal çalışmaya devam etmeden önce beklenmesi gereken epoch sayısı. - warmup (
int, isteğe bağlı, varsayılan 0) — LR artırıldıktan sonra normal çalışmaya geçmeden önce beklenmesi gereken epoch sayısı. - min_lr (
floatveyalist[float], isteğe bağlı, varsayılan 0.001) — Öğrenme hızının alt sınırı. - max_lr (
floatveyalist[float], isteğe bağlı, varsayılan 1.0) — Öğrenme hızı için üst sınır. - eps (
float, isteğe bağlı, varsayılan 1e-08) — lr'ye uygulanan minimal azalma. - verbose (
bool, isteğe bağlı, varsayılanFalse) — True ise, her güncelleme için stdout'a bir mesaj yazdırır. - smooth (
bool, isteğe bağlı, varsayılanFalse) — True ise, metriklere akış ortalama yumuşatma uygulanır. - window_size (
int, isteğe bağlı, varsayılan 50) — smooth=True olduğunda akış ortalama için pencere boyutu. - reset_start (
int, isteğe bağlı, varsayılan 500) — Başlangıç durumuna sıfırlanmadan önce min_lr'da beklenecek adım sayısı.
Eğitim metriklerine yanıt veren uyarlama öğrenme oranı zamanlayıcısı.
GreedyLR, eğitim performansına göre öğrenme hızını dinamik olarak ayarlar:
- Metrikler tutarlı bir şekilde iyileştiğinde LR'yi artırır (faktöre böler)
- Metrikler plato yaptığında LR'yi azaltır (faktör ile çarpar)
Bu, önceden belirlenmiş bir zaman çizelgesini takip etmek yerine gerçek eğitim dinamiklerine yanıt vermesi bakımından, cosine annealing gibi geleneksel zamanlayıcılardan farklıdır.
Referans: GreedyLR: A Novel Adaptive Learning Rate Scheduler <https://arxiv.org/abs/2512.14527>_
Örnek:
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
>>> scheduler = GreedyLR(optimizer, mode="min", patience=10)
>>> for epoch in range(100):
... train(...)
... val_loss = validate(...)
... scheduler.step(val_loss)Mevcut zamanlayıcı tarafından son hesaplanan öğrenme oranını döndürür.
Durumu bir sözlükten yükler.
Zamanlayıcının durumunu bir sözlük olarak döndürür.
adım
< source >( metrics: floatepoch: int | None = None )
Verilen metrikler temelinde bir zamanlayıcı adımı gerçekleştirir.
get_greedy_schedule
transformers.get_greedy_schedule
< source >( optimizer: Optimizer**kwargs )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - kwargs (
dict, isteğe bağlı) — Zamanlayıcıya aktarılan ek parametreler. Olası parametreler için GreedyLR bölümüne bakın.
Eğitim metriklerine göre LR'yi ayarlayan bir uyumlu öğrenme oranı zamanlayıcısı oluşturun.
get_linear_schedule_with_warmup
transformers.get_linear_schedule_with_warmup
< source >( optimizernum_warmup_stepsnum_training_stepslast_epoch = -1 )
Parametreler
Optimizatörde ayarlanan başlangıç lr değerinden 0'a doğru doğrusal olarak azalan bir öğrenme oranına sahip bir zaman çizelgesi oluşturun; bu, başlangıçta 0'dan optimizatörde ayarlanan başlangıç lr değerine doğru doğrusal olarak arttığı bir ısınma (warmup) döneminden sonra gerçekleşir.
get_polynomial_decay_schedule_with_warmup
transformers.get_polynomial_decay_schedule_with_warmup
< source >( optimizernum_warmup_stepsnum_training_stepslr_end = 1e-07power = 1.0last_epoch = -1 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_training_steps (
int) — Toplam eğitim adımı sayısı. - lr_end (
float, isteğe bağlı, varsayılan 1e-7) — Bitiş LR değeri. - power (
float, isteğe bağlı, varsayılan 1.0) — Güç katsayısı. - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi.
Optimizatörde ayarlanan başlangıç öğrenme hızından, lr_end tarafından tanımlanan son öğrenme hızına kadar polinomlu bir azalma ile düşen bir öğrenme hızı zamanlaması oluşturun; bu, başlangıçta 0'dan optimizatörde ayarlanan başlangıç öğrenme hızına doğru doğrusal olarak arttığı bir ısınma süresinin ardından gerçekleşir.
Not: power, fairseq uygulamasında olduğu gibi 1.0 varsayılan değerine sahiptir; bu uygulama da https://github.com/google-research/bert/blob/f39e881b169b9d53bea03d2d341b31707a6c052b/optimization.py#L37 adresindeki orijinal BERT uygulamasına dayanmaktadır.
get_inverse_sqrt_schedule
transformers.get_inverse_sqrt_schedule
< source >( optimizer: Optimizernum_warmup_steps: inttimescale: int | None = Nonelast_epoch: int = -1 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - timescale (
int, isteğe bağlı, varsayılannum_warmup_steps) — Zaman ölçeği. - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi.
Optimizatörde ayarlanan başlangıç öğrenme hızından, öğrenme hızını 0'dan başlangıç öğrenme hızına doğrusal olarak artıran bir ısınma süresinin ardından, ters karekök öğrenme hızına sahip bir zaman çizelgesi oluşturun.
get_reduce_on_plateau_schedule
transformers.get_reduce_on_plateau_schedule
< source >( optimizer: Optimizer**kwargs )
Bir metrikin iyileşmesi durduğunda azalan sabit bir öğrenme oranına sahip bir zaman çizelgesi oluşturun.
get_wsd_schedule
transformers.get_wsd_schedule
< source >( optimizer: Optimizernum_warmup_steps: intnum_decay_steps: intnum_training_steps: int | None = Nonenum_stable_steps: int | None = Nonewarmup_type: str = 'linear'decay_type: str = 'cosine'min_lr_ratio: float = 0num_cycles: float = 0.5last_epoch: int = -1 )
Parametreler
- optimizer (
~torch.optim.Optimizer) — Öğrenme hızının zamanlamasının yapılacağı optimizör. - num_warmup_steps (
int) — Isınma aşaması için adım sayısı. - num_decay_steps (
int) — Azalma fazı için adım sayısı. - num_training_steps (
int, isteğe bağlı) — Toplam eğitim adımı sayısı. Bu, ısınma, kararlı ve azalma adımlarının toplamıdır.num_stable_stepssağlanmazsa, kararlı faznum_training_steps - num_warmup_steps - num_decay_stepsolur. - num_stable_steps (
int, isteğe bağlı) — Kararlı faz için adım sayısı. Lütfennum_warmup_steps + num_stable_steps + num_decay_stepstoplamınınnum_training_stepsdeğerine eşit olduğundan emin olun; aksi takdirde diğer adımlar varsayılan olarak minimum öğrenme oranına ayarlanır. - warmup_type (
str, isteğe bağlı, varsayılan “linear”) — Kullanılacak ısınma türü. ‘linear’, ‘cosine’ veya ‘1-sqrt’ olabilir. - decay_type (
str, isteğe bağlı, varsayılan “cosine”) — Kullanılacak azalma türü. ‘linear’, ‘cosine’ veya ‘1-sqrt’ olabilir. - min_lr_ratio (
float, isteğe bağlı, varsayılan 0) — Başlangıç öğrenme hızının oranı olarak minimum öğrenme hızı. - num_cycles (
float, isteğe bağlı, varsayılan 0.5) — Kozinüs zamanlamasındaki dalga sayısı (varsayılan, yarım kozinüs izleyerek maksimum değerden 0'a azalmaktır). - last_epoch (
int, isteğe bağlı, varsayılan -1) — Eğitimin devam ettirildiği son epoch'un indeksi.
Üç aşamalı bir öğrenme oranına sahip bir zaman çizelgesi oluşturun:
- warmup: warmup_type izlenerek başlangıç öğrenme hızının min_lr_ratio katından başlangıç öğrenme hızına kadar artırılır.
- stable: sabit öğrenme oranı.
- decay: başlangıç öğrenme hızından, decay_type'e göre min_lr_ratio ile başlangıç öğrenme hızının çarpımına doğru azalma.