30.7 C
Colombia
lunes, julio 7, 2025

Posit AI Weblog: luz 0.3.0


Estamos felices de anunciar que luz La versión 0.3.0 ahora está en CRAN. Esta versión trae algunas mejoras al buscador de tasas de aprendizaje aportadas por primera vez por Chris McMaster. Como no teníamos una publicación de lanzamiento 0.2.0, también destacaremos algunas mejoras que se remontan a esa versión.

Qué luz?

ya que es paquete relativamente nuevocomenzamos esta publicación de weblog con un resumen rápido de cómo luz obras. Si ya sabes lo que luz Es decir, siéntete libre de pasar a la siguiente sección.

luz es una API de alto nivel para torch que tiene como objetivo encapsular el ciclo de entrenamiento en un conjunto de piezas de código reutilizables. Scale back el texto estándar necesario para entrenar un modelo con torchevita los errores propensos
zero_grad()backward()step() secuencia de llamadas y también simplifica el proceso de mover datos y modelos entre CPU y GPU.

Con luz puedes tomar tu torch nn_module()por ejemplo el perceptrón de dos capas definido a continuación:

modnn <- nn_module(
  initialize = operate(input_size) {
    self$hidden <- nn_linear(input_size, 50)
    self$activation <- nn_relu()
    self$dropout <- nn_dropout(0.4)
    self$output <- nn_linear(50, 1)
  },
  ahead = operate(x) {
    x %>% 
      self$hidden() %>% 
      self$activation() %>% 
      self$dropout() %>% 
      self$output()
  }
)

y ajustarlo a un conjunto de datos específico de esta manera:

fitted <- modnn %>% 
  setup(
    loss = nn_mse_loss(),
    optimizer = optim_rmsprop,
    metrics = listing(luz_metric_mae())
  ) %>% 
  set_hparams(input_size = 50) %>% 
  match(
    knowledge = listing(x_train, y_train),
    valid_data = listing(x_valid, y_valid),
    epochs = 20
  )

luz entrenará automáticamente su modelo en la GPU si está disponible, mostrará una bonita barra de progreso durante el entrenamiento y manejará el registro de métricas, todo mientras se asegura de que la evaluación de los datos de validación se realice de la manera correcta (por ejemplo, deshabilitando el abandono).

luz se puede ampliar en muchas capas diferentes de abstracción, por lo que puede mejorar su conocimiento gradualmente, a medida que necesite funciones más avanzadas en su proyecto. Por ejemplo, puedes implementar métricas personalizadas,
devoluciones de llamadao incluso personalizar el bucle de entrenamiento interno.

Para aprender sobre luzlee el empezando
sección del sitio internet y discover la galería de ejemplos.

¿Qué hay de nuevo en luz?

Buscador de tasa de aprendizaje

En el aprendizaje profundo, encontrar una buena tasa de aprendizaje es esencial para poder ajustarse a su modelo. Si es demasiado bajo, necesitarás demasiadas iteraciones para que tu pérdida converja, y eso podría resultar poco práctico si tu modelo tarda demasiado en ejecutarse. Si es demasiado alto, la pérdida puede explotar y es posible que nunca puedas llegar al mínimo.

El lr_finder() La función implementa el algoritmo detallado en Tasas de aprendizaje cíclico para el entrenamiento de redes neuronales
(Herrero 2015) popularizado en el marco FastAI (Howard y Gugger 2020). se necesita un nn_module() y algunos datos para producir un marco de datos con las pérdidas y la tasa de aprendizaje en cada paso.

mannequin <- internet %>% setup(
  loss = torch::nn_cross_entropy_loss(),
  optimizer = torch::optim_adam
)

data <- lr_finder(
  object = mannequin, 
  knowledge = train_ds, 
  verbose = FALSE,
  dataloader_options = listing(batch_size = 32),
  start_lr = 1e-6, # the smallest worth that might be tried
  end_lr = 1 # the most important worth to be experimented with
)

str(data)
#> Lessons 'lr_records' and 'knowledge.body':   100 obs. of  2 variables:
#>  $ lr  : num  1.15e-06 1.32e-06 1.51e-06 1.74e-06 2.00e-06 ...
#>  $ loss: num  2.31 2.3 2.29 2.3 2.31 ...

Puede utilizar el método de trazado integrado para mostrar los resultados exactos, junto con un valor de pérdida suavizado exponencialmente.

plot(data) +
  ggplot2::coord_cartesian(ylim = c(NA, 5))
Gráfico que muestra los resultados de lr_finder()

Si desea aprender a interpretar los resultados de este gráfico y conocer más sobre la metodología, lea el artículo del buscador de tasas de aprendizaje en el
luz sitio internet.

Manejo de datos

En la primera versión de luzel único tipo de objeto que se permitía utilizar como datos de entrada para match period un torch dataloader(). A partir de la versión 0.2.0, luz También admite matrices/matrices R (o listas anidadas de ellas) como datos de entrada, así como torch dataset()s.

Admite abstracciones de bajo nivel como dataloader() Como los datos de entrada son importantes, ya que con ellos el usuario tiene management complete sobre cómo se cargan los datos de entrada. Por ejemplo, puede crear cargadores de datos paralelos, cambiar cómo se realiza la mezcla y más. Sin embargo, tener que definir manualmente el cargador de datos parece innecesariamente tedioso cuando no es necesario personalizar nada de esto.

Otra pequeña mejora con respecto a la versión 0.2.0, inspirada en Keras, es que puedes pasar un valor entre 0 y 1 a match‘s valid_data parámetro, y luz Tomará una muestra aleatoria de esa proporción del conjunto de entrenamiento, que se utilizará para los datos de validación.

Lea más sobre esto en la documentación del
match()

función.

Nuevas devoluciones de llamada

En versiones recientes, se agregaron nuevas devoluciones de llamada integradas a luz:

  • luz_callback_gradient_clip(): Ayuda a evitar la divergencia de pérdidas al recortar gradientes grandes.
  • luz_callback_keep_best_model(): Cada época, si hay una mejora en la métrica monitoreada, serializamos los pesos del modelo en un archivo temporal. Cuando finaliza el entrenamiento, recargamos pesas del mejor modelo.
  • luz_callback_mixup(): Implementación de ‘Confusión: más allá de la minimización empírica del riesgo’
    (Zhang et al. 2017). Mixup es una buena técnica de aumento de datos que ayuda a mejorar la coherencia del modelo y el rendimiento normal.

Puedes ver el registro de cambios completo disponible
aquí.

En este put up también queremos agradecer a:

  • @jonthegeek para mejoras valiosas en el luz guías de introducción.

  • @mattwarkentin para muchas buenas concepts, mejoras y correcciones de errores.

  • @cmcmaster1 para la implementación inicial del buscador de tasa de aprendizaje y otras correcciones de errores.

  • @skeydan para la implementación del callback Mixup y mejoras en el buscador de tasas de aprendizaje.

¡Gracias!

Foto por dil en desempaquetar

Howard, Jeremy y Sylvain Gugger. 2020. “Fastai: una API en capas para el aprendizaje profundo”. Información 11 (2): 108. https://doi.org/10.3390/info11020108.

Smith, Leslie N. 2015. “Tasas de aprendizaje cíclico para el entrenamiento de redes neuronales”. https://doi.org/10.48550/ARXIV.1506.01186.

Zhang, Hongyi, Moustapha Cisse, Yann N. Dauphin y David López-Paz. 2017. “Confusión: más allá de la minimización del riesgo empírico”. https://doi.org/10.48550/ARXIV.1710.09412.

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles