Transformers documentation

Optimización

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

and get access to the augmented documentation experience

to get started

Optimización

El módulo .optimization proporciona:

  • un optimizador con decaimiento de pesos fijo que se puede utilizar para ajustar modelos, y
  • varias programaciones en forma de objetos de programación que heredan de _LRSchedule:
  • una clase de acumulación de gradientes para acumular los gradientes de varios lotes

AdaFactor

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

Parámetros

  • params (Iterable[nn.parameter.Parameter]) — Iterable de parámetros para optimizar o diccionarios que definen grupos de parámetros.
  • lr (float, opcional) — La tasa de aprendizaje externa.
  • eps (tuple[float, float], opcional, valor predeterminado (1e-30, 0.001)) — Constantes de regularización para la escala del gradiente cuadrático y la escala del parámetro, respectivamente
  • clip_threshold (float, opcional, valor predeterminado 1.0) — Umbral de la raíz cuadrada de la media cuadrática de la actualización final del gradiente
  • decay_rate (float, opcional, valor predeterminado -0.8) — Coeficiente utilizado para calcular las medias móviles de los cuadrados
  • beta1 (float, opcional) — Coeficiente utilizado para calcular las medias móviles del gradiente
  • weight_decay (float, opcional, valor predeterminado 0.0) — Decaimiento de peso (penalización L2)
  • scale_parameter (bool, opcional, valor predeterminado True) — Si es True, la tasa de aprendizaje se escala por la raíz del cuadrado medio
  • relative_step (bool, opcional, valor predeterminado True) — Si es True, se calcula una tasa de aprendizaje dependiente del tiempo en lugar de una tasa de aprendizaje externa
  • warmup_init (bool, opcional, valor predeterminado False) — El cálculo de la tasa de aprendizaje dependiente del tiempo depende de si se está utilizando la inicialización de calentamiento

La implementación de AdaFactor en PyTorch puede usarse como un reemplazo directo para el código original de Adam de fairseq: 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 Tenga en cuenta que este optimizador ajusta internamente la tasa de aprendizaje en función de las opciones scale_parameter, relative_step y warmup_init. Para utilizar un programa de tasa de aprendizaje manual (externo), debe establecer scale_parameter=False y relative_step=False.

Esta implementación maneja valores de baja precisión (FP16, bfloat), pero no la hemos probado a fondo.

Configuraciones recomendadas para el ajuste fino de T5 (https://discuss.huggingface.co/t/t5-finetuning-tips/684/3):

  • No se recomienda el entrenamiento sin LR warmup ni clip_threshold.

  • Desactivar actualizaciones relativas

  • Use scale_parameter=False

  • Las operaciones adicionales del optimizador, como el recorte de gradientes, no deben usarse junto con Adafactor

Ejemplo:

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

Otros informaron que la siguiente combinación funciona bien:

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

Al usar lr=None con Trainer, es muy probable que necesites usar AdafactorSchedule

scheduler de la siguiente manera:

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

Uso:

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

paso

< >

( closure = None )

Parámetros

  • closure (callable, opcional) — Una closure que reevalúa el modelo y devuelve la pérdida.

Realiza un paso de optimización

Programas

SchedulerType

clase transformers.SchedulerType

< >

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

Nombres de programadores para el parámetro lr_scheduler_type en TrainingArguments. Por defecto, utiliza “linear”. Internamente, esto recupera el programador get_linear_schedule_with_warmup de Trainer. Tipos de programador:

get_scheduler

transformers.get_scheduler

< >

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

Parámetros

  • name (str o SchedulerType) — El nombre del programador a utilizar.
  • optimizer (torch.optim.Optimizer) — El optimizador que se utilizará durante el entrenamiento.
  • num_warmup_steps (int, opcional) — El número de pasos de calentamiento a realizar. No todos los programadores lo requieren (de ahí que el argumento sea opcional); la función generará un error si no se establece y el tipo de programador lo exige.
  • num_training_steps (`int“, opcional) — El número de pasos de entrenamiento a realizar. No es requerido por todos los programadores (por lo que el argumento es opcional); la función generará un error si no se establece y el tipo de programador lo requiere.
  • scheduler_specific_kwargs (dict, opcional) — Parámetros adicionales para programadores como cosine with restarts. Si el tipo de programador y los parámetros del programador no coinciden, la función del programador generará un TypeError.

API unificada para obtener cualquier programador a partir de su nombre.

get_constant_schedule

transformers.get_constant_schedule

< >

( optimizer: Optimizerlast_epoch: int = -1 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje constante, utilizando la tasa de aprendizaje establecida en optimizer.

get_constant_schedule_with_warmup

transformers.get_constant_schedule_with_warmup

< >

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

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje constante precedida por un período de calentamiento durante el cual la tasa de aprendizaje aumenta linealmente entre 0 y la lr inicial establecida en el optimizador.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • num_cycles (float, opcional, valor predeterminado 0.5) — El número de ondas en la programación coseno (el valor predeterminado es simplemente disminuir desde el valor máximo hasta 0 siguiendo un medio coseno).
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje que disminuye siguiendo los valores de la función coseno entre la lr inicial establecida en el optimizador y 0, después de un período de calentamiento durante el cual aumenta linealmente entre 0 y la lr inicial establecida en el optimizador.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • num_cycles (int, opcional, valor predeterminado 1) — El número de reinicios duros a utilizar.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje que disminuye siguiendo los valores de la función coseno entre la lr inicial establecida en el optimizador y 0, con varios reinicios duros, después de un período de calentamiento durante el cual aumenta linealmente entre 0 y la lr inicial establecida en el optimizador.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • num_cycles (float, opcional, valor predeterminado 0.5) — El número de ondas en la programación coseno (el valor predeterminado es simplemente disminuir desde el valor máximo hasta 0 siguiendo un medio coseno).
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.
  • min_lr (float, opcional) — La tasa de aprendizaje mínima a alcanzar tras el programa coseno.
  • min_lr_rate (float, opcional) — La tasa de aprendizaje mínima como proporción de la tasa de aprendizaje inicial. Si se establece, min_lr no debe establecerse.

Cree un programa con una tasa de aprendizaje que disminuye siguiendo los valores de la función coseno entre la lr inicial establecida en el optimizador y min_lr, después de un período de calentamiento durante el cual aumenta linealmente entre 0 y la lr inicial establecida en el optimizador.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • num_cycles (float, opcional, valor predeterminado 0.5) — El número de ondas en la programación coseno (el valor predeterminado es simplemente disminuir desde el valor máximo hasta 0 siguiendo un medio coseno).
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.
  • min_lr (float, opcional) — La tasa de aprendizaje mínima a alcanzar tras el programa coseno.
  • min_lr_rate (float, opcional) — La tasa de aprendizaje mínima como proporción de la tasa de aprendizaje inicial. Si se establece, min_lr no debe establecerse.
  • warmup_lr_rate (float, opcional) — La tasa de aprendizaje mínima como proporción de la tasa de aprendizaje inicial. Si no se establece, warmup_lr_rate se tratará como float(1/num_warmup_steps).

Cree un programa con una tasa de aprendizaje que disminuye siguiendo los valores de la función coseno entre la lr inicial establecida en el optimizador y min_lr, después de un período de calentamiento durante el cual aumenta linealmente entre 0 y la lr inicial establecida en el optimizador.

GreedyLR

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

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • mode (str, opcional, valor predeterminado "min") — Uno de ‘min’ o ‘max’. En el modo ‘min’, la tasa de aprendizaje se reducirá cuando la métrica haya dejado de disminuir; en el modo ‘max’, cuando haya dejado de aumentar.
  • factor (float, opcional, valor predeterminado 0.95) — Factor por el cual se ajustará la tasa de aprendizaje. La tasa de aprendizaje se multiplica por factor en un meseta y se divide por factor en caso de mejora. Debe ser < 1.0.
  • patience (int, opcional, valor predeterminado 10) — Número de épocas sin mejora tras las cuales se ajustará la tasa de aprendizaje.
  • threshold (float, opcional, valor predeterminado 1e-06) — Umbral para medir el nuevo óptimo.
  • threshold_mode (str, opcional, valor predeterminado "abs") — Uno de ‘rel’ o ‘abs’.
  • cooldown (int, opcional, valor predeterminado 0) — Número de épocas a esperar antes de reanudar la operación normal después de que se haya reducido la LR.
  • warmup (int, opcional, valor predeterminado 0) — Número de épocas a esperar antes de reanudar la operación normal después de que se haya aumentado la LR.
  • min_lr (float o list[float], opcional, valor predeterminado 0.001) — Un límite inferior para la tasa de aprendizaje.
  • max_lr (float o list[float], opcional, valor predeterminado 1.0) — Un límite superior para la tasa de aprendizaje.
  • eps (float, opcional, valor predeterminado 1e-08) — Decay mínimo aplicado a lr.
  • verbose (bool, opcional, valor predeterminado False) — Si es True, imprime un mensaje en stdout para cada actualización.
  • smooth (bool, opcional, valor predeterminado False) — Si es True, aplica suavizado de media móvil a las métricas.
  • window_size (int, opcional, valor predeterminado 50) — El tamaño de la ventana para la media móvil cuando smooth=True.
  • reset_start (int, opcional, valor predeterminado 500) — Número de pasos para esperar en min_lr antes de restablecer al estado inicial.

Planificador de tasa de aprendizaje adaptativa que responde a las métricas de entrenamiento.

GreedyLR ajusta dinámicamente la tasa de aprendizaje en función del rendimiento del entrenamiento:

  • Aumenta la LR cuando las métricas mejoran de forma consistente (divide por un factor)
  • Disminuye la LR cuando las métricas se estancan (multiplica por un factor)

Esto difiere de los programadores tradicionales, como el recocido coseno, al responder a la dinámica real del entrenamiento en lugar de seguir un programa predeterminado.

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

Ejemplo:

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

< >

( )

Devuelve la última tasa de aprendizaje calculada por el programador actual.

load_state_dict

< >

( state_dict: dict[str, Any] )

Cargar el estado desde un diccionario.

state_dict

< >

( )

Devuelve el estado del programador como un diccionario.

paso

< >

( metrics: floatepoch: int | None = None )

Parámetros

  • metrics (float) — El valor de la métrica a utilizar para las decisiones de ajuste de la tasa de aprendizaje.
  • epoch (int, opcional) — El número de época actual. Si es None, se utiliza el contador interno.

Realiza un paso del programador en función de las métricas dadas.

get_greedy_schedule

transformers.get_greedy_schedule

< >

( optimizer: Optimizer**kwargs )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • kwargs (dict, opcional) — Parámetros adicionales que se pasan al programador. Consulte GreedyLR para ver los parámetros posibles.

Cree un programador de tasa de aprendizaje adaptativa que ajuste la LR en función de las métricas de entrenamiento.

get_linear_schedule_with_warmup

transformers.get_linear_schedule_with_warmup

< >

( optimizernum_warmup_stepsnum_training_stepslast_epoch = -1 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje que disminuye linealmente desde la lr inicial establecida en el optimizador hasta 0, después de un período de calentamiento durante el cual aumenta linealmente desde 0 hasta la lr inicial establecida en el optimizador.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_training_steps (int) — El número total de pasos de entrenamiento.
  • lr_end (float, opcional, valor predeterminado 1e-7) — La LR final.
  • power (float, opcional, valor predeterminado 1.0) — Factor de potencia.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje que disminuye mediante un decaimiento polinómico desde la lr inicial establecida en el optimizador hasta la lr final definida por lr_end, después de un período de calentamiento durante el cual aumenta linealmente desde 0 hasta la lr inicial establecida en el optimizador.

Nota: power tiene un valor predeterminado de 1.0, como en la implementación de fairseq, que a su vez se basa en la implementación original de BERT en 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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • timescale (int, opcional, valor predeterminado num_warmup_steps) — Escala de tiempo.
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Cree un programa con una tasa de aprendizaje inversa de la raíz cuadrada, a partir de la lr inicial establecida en el optimizador, después de un período de calentamiento que aumenta la lr linealmente desde 0 hasta la lr inicial establecida en el optimizador.

get_reduce_on_plateau_schedule

transformers.get_reduce_on_plateau_schedule

< >

( optimizer: Optimizer**kwargs )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • kwargs (dict, opcional) — Parámetros adicionales que se pasarán al programador. Consulte torch.optim.lr_scheduler.ReduceLROnPlateau para los parámetros posibles.

Crea un programa con una tasa de aprendizaje constante que disminuye cuando una métrica deja de mejorar.

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 )

Parámetros

  • optimizer (~torch.optim.Optimizer) — El optimizador para el que se programará la tasa de aprendizaje.
  • num_warmup_steps (int) — El número de pasos para la fase de calentamiento.
  • num_decay_steps (int) — El número de pasos para la fase de decaimiento.
  • num_training_steps (int, opcional) — El número total de pasos de entrenamiento. Esta es la suma de los pasos de calentamiento, estables y de decaimiento. Si no se proporciona num_stable_steps, la fase estable será num_training_steps - num_warmup_steps - num_decay_steps.
  • num_stable_steps (int, opcional) — El número de pasos para la fase estable. Asegúrese de que num_warmup_steps + num_stable_steps + num_decay_steps sea igual a num_training_steps; de lo contrario, los demás pasos se ajustarán a la tasa de aprendizaje mínima.
  • warmup_type (str, opcional, valor predeterminado “linear”) — El tipo de warmup a utilizar. Puede ser ‘linear’, ‘cosine’ o ‘1-sqrt’.
  • decay_type (str, opcional, valor predeterminado “cosine”) — El tipo de decaimiento a utilizar. Puede ser ‘linear’, ‘cosine’ o ‘1-sqrt’.
  • min_lr_ratio (float, opcional, valor predeterminado 0) — La tasa de aprendizaje mínima como proporción de la tasa de aprendizaje inicial.
  • num_cycles (float, opcional, valor predeterminado 0.5) — El número de ondas en la programación coseno (el valor predeterminado es simplemente disminuir desde el valor máximo hasta 0 siguiendo un medio coseno).
  • last_epoch (int, opcional, valor predeterminado -1) — El índice de la última época al reanudar el entrenamiento.

Crea un programa con una tasa de aprendizaje que tenga tres etapas:

  1. warmup: aumenta desde min_lr_ratio veces la tasa de aprendizaje inicial hasta la tasa de aprendizaje inicial siguiendo un warmup_type.
  2. stable: tasa de aprendizaje constante.
  3. decay: disminución desde la tasa de aprendizaje inicial hasta min_lr_ratio veces la tasa de aprendizaje inicial siguiendo un decay_type.
Update on GitHub