Transformers documentation

Optimasi

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

Optimasi

Modul .optimization menyediakan:

  • optimizer dengan weight decay yang tetap, yang dapat digunakan untuk fine-tuning model, dan
  • beberapa jadwal dalam bentuk objek jadwal yang mewarisi dari _LRSchedule:
  • kelas akumulasi gradien untuk mengakumulasi gradien dari beberapa batch

AdaFactor

kelas transformers.Adafactor

< >

( paramslr = Noneeps = (1e-30, 0.001)clip_threshold = 1.0decay_rate = -0.8beta1 = Noneweight_decay = 0.0scale_parameter = Truerelative_step = Truewarmup_init = False )

Parameter

  • params (Iterable[nn.parameter.Parameter]) — Iterable dari parameter yang akan dioptimalkan atau kamus yang mendefinisikan grup parameter.
  • lr (float, opsional) — Learning rate eksternal.
  • eps (tuple[float, float], opsional, default (1e-30, 0.001)) — Konstanta regularisasi untuk gradien kuadrat dan skala parameter, masing-masing
  • clip_threshold (float, opsional, default 1.0) — Ambang batas akar rata-rata kuadrat (root mean square) dari pembaruan gradien akhir
  • decay_rate (float, opsional, default -0.8) — Koefisien yang digunakan untuk menghitung rata-rata berjalan dari kuadrat
  • beta1 (float, opsional) — Koefisien yang digunakan untuk menghitung rata-rata berjalan dari gradien
  • weight_decay (float, opsional, default 0.0) — Weight decay (penalti L2)
  • scale_parameter (bool, opsional, defaultnya True) — Jika True, learning rate diskalakan oleh root mean square
  • relative_step (bool, opsional, default True) — Jika True, learning rate yang bergantung pada waktu dihitung alih-alih learning rate eksternal
  • warmup_init (bool, opsional, default False) — Perhitungan learning rate yang bergantung pada waktu bergantung pada apakah inisialisasi warm-up sedang digunakan

Implementasi pytorch AdaFactor dapat digunakan sebagai pengganti langsung untuk kode fairseq asli Adam: https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py

Paper: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost https://huggingface.co/papers/1804.04235 Perhatikan bahwa optimizer ini secara internal menyesuaikan learning rate berdasarkan opsi scale_parameter, relative_step, dan warmup_init. Untuk menggunakan jadwal learning rate manual (eksternal), Anda harus mengatur scale_parameter=False dan relative_step=False.

Implementasi ini menangani nilai presisi rendah (FP16, bfloat), tetapi kami belum mengujinya secara menyeluruh.

Pengaturan finetuning T5 yang direkomendasikan (https://huggingface.co/proxy/discuss.huggingface.co/t/t5-finetuning-tips/684/3):

  • Pelatihan tanpa LR warmup atau clip_threshold tidak disarankan.

  • Nonaktifkan pembaruan relatif

  • Gunakan scale_parameter=False

  • Operasi optimizer tambahan seperti pemotongan gradien (gradient clipping) tidak boleh digunakan bersamaan dengan Adafactor

Contoh:

Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)

Lainnya melaporkan bahwa kombinasi berikut bekerja dengan baik:

Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)

Saat menggunakan lr=None dengan Trainer, Anda kemungkinan besar perlu menggunakan AdafactorSchedule

scheduler sebagai berikut:

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

Penggunaan:

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

langkah

< >

( closure = None )

Parameter

  • closure (callable, opsional) — Closure yang mengevaluasi ulang model dan mengembalikan loss.

Melakukan satu langkah optimasi

Jadwal

SchedulerType

kelas transformers.SchedulerType

< >

( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )

Nama scheduler untuk parameter lr_scheduler_type di TrainingArguments. Secara default, menggunakan “linear”. Secara internal, ini mengambil scheduler get_linear_schedule_with_warmup dari Trainer. Jenis scheduler:

get_scheduler

transformers.get_scheduler

< >

( name: str | SchedulerTypeoptimizer: Optimizernum_warmup_steps: int | None = Nonenum_training_steps: int | None = Nonescheduler_specific_kwargs: dict | None = None )

Parameter

  • name (str atau SchedulerType) — Nama scheduler yang akan digunakan.
  • optimizer (torch.optim.Optimizer) — Optimizer yang akan digunakan selama pelatihan.
  • num_warmup_steps (int, opsional) — Jumlah langkah pemanasan yang akan dilakukan. Hal ini tidak diwajibkan oleh semua scheduler (sehingga argumen ini bersifat opsional), dan fungsi akan melempar error jika tidak diset dan tipe scheduler membutuhkannya.
  • num_training_steps (`int“, opsional) — Jumlah langkah pelatihan yang akan dilakukan. Hal ini tidak diwajibkan oleh semua scheduler (sehingga argumen ini bersifat opsional), fungsi akan melempar error jika tidak diset dan tipe scheduler membutuhkannya.
  • scheduler_specific_kwargs (dict, opsional) — Parameter tambahan untuk scheduler seperti cosine with restarts. Ketidakcocokan antara tipe scheduler dan parameter scheduler akan menyebabkan fungsi scheduler melempar TypeError.

API terpadu untuk mendapatkan penjadwal apa pun dari namanya.

get_constant_schedule

transformers.get_constant_schedule

< >

( optimizer: Optimizerlast_epoch: int = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan tingkat pembelajaran konstan, menggunakan tingkat pembelajaran yang diatur di optimizer.

get_constant_schedule_with_warmup

transformers.get_constant_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intlast_epoch: int = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan tingkat pembelajaran konstan yang didahului oleh periode pemanasan di mana tingkat pembelajaran meningkat secara linear antara 0 dan lr awal yang diatur di optimizer.

get_cosine_schedule_with_warmup

transformers.get_cosine_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • num_cycles (float, opsional, default 0.5) — Jumlah gelombang dalam jadwal kosinus (defaultnya adalah hanya menurunkan dari nilai maksimum ke 0 mengikuti setengah kosinus).
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate yang menurun mengikuti nilai fungsi kosinus antara lr awal yang diatur di optimizer ke 0, setelah periode warmup di mana learning rate meningkat secara linear antara 0 dan lr awal yang diatur di optimizer.

get_cosine_with_hard_restarts_schedule_with_warmup

transformers.get_cosine_with_hard_restarts_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: int = 1last_epoch: int = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • num_cycles (int, opsional, default 1) — Jumlah hard restart yang akan digunakan.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate yang menurun mengikuti nilai fungsi kosinus antara lr awal yang diatur di optimizer ke 0, dengan beberapa hard restart, setelah periode warmup di mana learning rate meningkat secara linear antara 0 dan lr awal yang diatur di optimizer.

get_cosine_with_min_lr_schedule_with_warmup

transformers.get_cosine_with_min_lr_schedule_with_warmup

< >

( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = None )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • num_cycles (float, opsional, default 0.5) — Jumlah gelombang dalam jadwal kosinus (defaultnya adalah hanya menurunkan dari nilai maksimum ke 0 mengikuti setengah kosinus).
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.
  • min_lr (float, opsional) — Laju pembelajaran minimum yang akan dicapai setelah jadwal kosinus.
  • min_lr_rate (float, opsional) — Laju pembelajaran minimum sebagai rasio dari laju pembelajaran awal. Jika diatur, min_lr tidak boleh diatur.

Buat jadwal dengan learning rate yang menurun mengikuti nilai fungsi kosinus antara lr awal yang diatur di optimizer ke min_lr, setelah periode warmup di mana learning rate meningkat secara linear antara 0 dan lr awal yang diatur di optimizer.

get_cosine_with_min_lr_schedule_with_warmup_lr_rate

transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate

< >

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

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • num_cycles (float, opsional, default 0.5) — Jumlah gelombang dalam jadwal kosinus (defaultnya adalah hanya menurunkan dari nilai maksimum ke 0 mengikuti setengah kosinus).
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.
  • min_lr (float, opsional) — Laju pembelajaran minimum yang akan dicapai setelah jadwal kosinus.
  • min_lr_rate (float, opsional) — Laju pembelajaran minimum sebagai rasio dari laju pembelajaran awal. Jika diatur, min_lr tidak boleh diatur.
  • warmup_lr_rate (float, opsional) — Laju pembelajaran minimum sebagai rasio dari laju pembelajaran awal. Jika tidak diatur, warmup_lr_rate akan diperlakukan sebagai float(1/num_warmup_steps).

Buat jadwal dengan learning rate yang menurun mengikuti nilai fungsi kosinus antara lr awal yang diatur di optimizer ke min_lr, setelah periode warmup di mana learning rate meningkat secara linear antara 0 dan lr awal yang diatur di optimizer.

GreedyLR

kelas transformers.GreedyLR

< >

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

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • mode (str, opsional, default "min") — Salah satu dari ‘min’ atau ‘max’. Dalam mode ‘min’, LR akan dikurangi ketika metrik berhenti menurun; dalam mode ‘max’ ketika metrik berhenti meningkat.
  • factor (float, opsional, default 0.95) — Faktor yang digunakan untuk menyesuaikan learning rate. LR dikalikan dengan factor saat plateau dan dibagi dengan factor saat ada perbaikan. Harus < 1.0.
  • patience (int, opsional, default 10) — Jumlah epoch tanpa peningkatan setelahnya learning rate akan disesuaikan.
  • threshold (float, opsional, default 1e-06) — Ambang batas untuk mengukur optimum baru.
  • threshold_mode (str, opsional, defaultnya "abs") — Salah satu dari ‘rel’ atau ‘abs’.
  • cooldown (int, opsional, default 0) — Jumlah epoch yang harus ditunggu sebelum melanjutkan operasi normal setelah LR dikurangi.
  • warmup (int, opsional, default 0) — Jumlah epoch yang harus ditunggu sebelum melanjutkan operasi normal setelah LR ditingkatkan.
  • min_lr (float atau list[float], opsional, default 0.001) — Batas bawah untuk learning rate.
  • max_lr (float atau list[float], opsional, default 1.0) — Batas atas untuk learning rate.
  • eps (float, opsional, default 1e-08) — Penurunan minimal yang diterapkan ke lr.
  • verbose (bool, opsional, defaultnya False) — Jika True, mencetak pesan ke stdout untuk setiap pembaruan.
  • smooth (bool, opsional, default False) — Jika True, menerapkan penghalusan rata-rata streaming ke metrik.
  • window_size (int, opsional, defaultnya 50) — Ukuran jendela untuk rata-rata streaming saat smooth=True.
  • reset_start (int, opsional, default 500) — Jumlah langkah untuk menunggu pada min_lr sebelum direset ke kondisi awal.

Penjadwal laju pembelajaran adaptif yang merespons metrik pelatihan.

GreedyLR secara dinamis menyesuaikan tingkat pembelajaran berdasarkan kinerja pelatihan:

  • Meningkatkan LR saat metrik membaik secara konsisten (dibagi dengan faktor)
  • Menurunkan LR saat metrik stagnan (dikalikan dengan faktor)

Hal ini berbeda dari penjadwal tradisional seperti cosine annealing karena merespons dinamika pelatihan yang sebenarnya, bukan mengikuti jadwal yang telah ditentukan sebelumnya.

Referensi: GreedyLR: A Novel Adaptive Learning Rate Scheduler <https://arxiv.org/abs/2512.14527>_

Contoh:

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

get_last_lr

< >

( )

Kembalikan tingkat pembelajaran terakhir yang dihitung oleh penjadwal saat ini.

load_state_dict

< >

( state_dict: dict[str, Any] )

Muat state dari kamus.

state_dict

< >

( )

Kembalikan status scheduler sebagai kamus.

langkah

< >

( metrics: floatepoch: int | None = None )

Parameter

  • metrics (float) — Nilai metrik yang digunakan untuk keputusan penyesuaian LR.
  • epoch (int, opsional) — Nomor epoch saat ini. Jika None, menggunakan penghitung internal.

Lakukan langkah penjadwal berdasarkan metrik yang diberikan.

get_greedy_schedule

transformers.get_greedy_schedule

< >

( optimizer: Optimizer**kwargs )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • kwargs (dict, opsional) — Parameter tambahan yang diteruskan ke scheduler. Lihat GreedyLR untuk parameter yang mungkin.

Buat penjadwal laju pembelajaran adaptif yang menyesuaikan LR berdasarkan metrik pelatihan.

get_linear_schedule_with_warmup

transformers.get_linear_schedule_with_warmup

< >

( optimizernum_warmup_stepsnum_training_stepslast_epoch = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate yang menurun secara linear dari lr awal yang diatur di optimizer hingga 0, setelah periode warmup di mana learning rate meningkat secara linear dari 0 ke lr awal yang diatur di optimizer.

get_polynomial_decay_schedule_with_warmup

transformers.get_polynomial_decay_schedule_with_warmup

< >

( optimizernum_warmup_stepsnum_training_stepslr_end = 1e-07power = 1.0last_epoch = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_training_steps (int) — Jumlah total langkah pelatihan.
  • lr_end (float, opsional, default 1e-7) — LR akhir.
  • power (float, opsional, default 1.0) — Faktor daya.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate yang menurun dengan peluruhan polinomial dari lr awal yang diatur di optimizer ke lr akhir yang didefinisikan oleh lr_end, setelah periode warmup di mana learning rate meningkat secara linear dari 0 ke lr awal yang diatur di optimizer.

Catatan: power secara default bernilai 1.0, sebagaimana pada implementasi fairseq, yang pada gilirannya didasarkan pada implementasi BERT asli di https://github.com/google-research/bert/blob/f39e881b169b9d53bea03d2d341b31707a6c052b/optimization.py#L37

get_inverse_sqrt_schedule

transformers.get_inverse_sqrt_schedule

< >

( optimizer: Optimizernum_warmup_steps: inttimescale: int | None = Nonelast_epoch: int = -1 )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • timescale (int, opsional, default num_warmup_steps) — Skala waktu.
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate akar kuadrat terbalik, dari lr awal yang diatur di optimizer, setelah periode warmup yang meningkatkan lr secara linear dari 0 ke lr awal yang diatur di optimizer.

get_reduce_on_plateau_schedule

transformers.get_reduce_on_plateau_schedule

< >

( optimizer: Optimizer**kwargs )

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • kwargs (dict, opsional) — Parameter tambahan yang akan diteruskan ke scheduler. Lihat torch.optim.lr_scheduler.ReduceLROnPlateau untuk parameter yang mungkin.

Buat jadwal dengan tingkat pembelajaran konstan yang menurun ketika metrik berhenti membaik.

get_wsd_schedule

transformers.get_wsd_schedule

< >

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

Parameter

  • optimizer (~torch.optim.Optimizer) — Optimizer yang akan dijadwalkan laju belajarnya.
  • num_warmup_steps (int) — Jumlah langkah untuk fase pemanasan.
  • num_decay_steps (int) — Jumlah langkah untuk fase peluruhan.
  • num_training_steps (int, opsional) — Jumlah total langkah pelatihan. Ini adalah jumlah dari langkah warmup, stable, dan decay. Jika num_stable_steps tidak diberikan, fase stable akan menjadi num_training_steps - num_warmup_steps - num_decay_steps.
  • num_stable_steps (int, opsional) — Jumlah langkah untuk fase stabil. Pastikan bahwa num_warmup_steps + num_stable_steps + num_decay_steps sama dengan num_training_steps, jika tidak, langkah-langkah lainnya akan menggunakan tingkat pembelajaran minimum secara default.
  • warmup_type (str, opsional, default “linear”) — Jenis warmup yang akan digunakan. Bisa berupa ‘linear’, ‘cosine’, atau ‘1-sqrt’.
  • decay_type (str, opsional, default “cosine”) — Jenis decay yang akan digunakan. Bisa berupa ‘linear’, ‘cosine’, atau ‘1-sqrt’.
  • min_lr_ratio (float, opsional, default 0) — Laju pembelajaran minimum sebagai rasio dari laju pembelajaran awal.
  • num_cycles (float, opsional, default 0.5) — Jumlah gelombang dalam jadwal kosinus (defaultnya adalah hanya menurunkan dari nilai maksimum ke 0 mengikuti setengah kosinus).
  • last_epoch (int, opsional, default -1) — Indeks epoch terakhir saat melanjutkan pelatihan.

Buat jadwal dengan learning rate yang memiliki tiga tahap:

  1. warmup: meningkatkan dari min_lr_ratio kali learning rate awal hingga learning rate awal mengikuti warmup_type.
  2. stabil: laju pembelajaran konstan.
  3. decay: penurunan dari learning rate awal menjadi min_lr_ratio kali learning rate awal mengikuti decay_type.
Update on GitHub