Programarea Ratei de Învățare (LR Schedulers) în PyTorch & Deep Learning Practic

Antrenare, Optimizare & Stare Nivel: intermediar

Ajustarea dinamică a ratei de învățare pe parcursul antrenării: CosineAnnealingLR, LinearLR cu Warmup și ReduceLROnPlateau.

Sintaxă & invocare Python
from torch.optim.lr_scheduler import CosineAnnealingLR

# Descreștere lină conform curbei cosinusoidale:
scheduler = CosineAnnealingLR(optimizator, T_max=numar_epoci, eta_min=1e-6)

# La finalul fiecărei epoci:
scheduler.step()

Descriere & Utilizare

Păstrarea aceleiași rate de învățare (Learning Rate) de la începutul până la sfârșitul antrenării este ineficientă: la început ai nevoie de pași mari pentru a explora rapid peisajul de optimizare, dar pe măsură ce modelul se apropie de soluția optimă, pașii mari riscă să sară peste minimul global.

Pachetul torch.optim.lr_scheduler oferă algoritmi de adaptare automată a ratei de învățare:

Standardul de aur în LLM-uri și modele moderne este Cosine Annealing cu Warmup: rata crește liniar în primele câteva sute de pași (Warmup) pentru a evita șocarea greutăților inițiale, apoi coboară lin urmărind o curbă cosinusoidală până la o valoare minimă eta_min. Pentru rețele clasice, ReduceLROnPlateau reduce rata automat doar atunci când eroarea de validare stagnează.

Cum să o reții ușor

💡 Ca frânarea unei mașini la semafor: apeși pedala de accelerație când pleci de pe loc (warmup), mergi cu viteză constantă pe drum drept, iar pe măsură ce te apropii de linia de sosire începi să frânezi lin ca să oprești exact la milimetru.

Opțiuni și parametri tehnici

  • CosineAnnealingLR(optimizer, T_max, eta_min): T_max este numărul de pași până la atingerea minimului, iar eta_min este cea mai mică rată permisă.
  • ReduceLROnPlateau(optimizer, mode="min", patience=3, factor=0.5): înjumătățește rata dacă pierderea nu scade timp de 3 epoci (atenție: se apelează cu scheduler.step(val_loss)!).
  • OneCycleLR: accelerează spectaculos antrenarea pe parcursul unei singure runde complete.

Exemple practice și cazuri de utilizare

  • Inspectarea ratei de învățare curente: lr_curent = scheduler.get_last_lr()[0].
  • Combinarea Warmup cu Cosine în PyTorch: ChainedScheduler sau SequentialLR([warmup_scheduler, cosine_scheduler], milestones=[5]).
  • Salvarea stării scheduler-ului în checkpoint: "scheduler": scheduler.state_dict().

Sfaturi de configurare & capcane

Atenție la plasarea apelului scheduler.step(): majoritatea scheduler-elor clasice (ex: StepLR, CosineAnnealingLR) se apelează o singură dată per epocă, dar scheduler-ele moderne de LLM (OneCycleLR, CosineAnnealingWarmRestarts) se apelează la fiecare pas de batch!

Comenzi și ghiduri înrudite