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 tasa de aprendizaje aportado por primera vez por chris mcmaster. Como no teníamos una publicación de lanzamiento de 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éntase 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 repetitivo requerido para entrenar un modelo con torchevita la tendencia a errores
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 = perform(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 = perform(x) {
    x %>% 
      self$hidden() %>% 
      self$activation() %>% 
      self$dropout() %>% 
      self$output()
  }
)

y ajústelo a un conjunto de datos específico así:

fitted <- modnn %>% 
  setup(
    loss = nn_mse_loss(),
    optimizer = optim_rmsprop,
    metrics = listing(luz_metric_mae())
  ) %>% 
  set_hparams(input_size = 50) %>% 
  match(
    information = 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 la deserción).

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

Aprender sobre luzleer el empezando
en la sección del sitio internet y navegue por 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 basic para poder ajustar su modelo. Si es demasiado bajo, necesitará demasiadas iteraciones para que su pérdida converja, y eso podría no ser práctico si su modelo tarda demasiado en ejecutarse. Si es demasiado alto, la pérdida puede explotar y es posible que nunca pueda llegar a un mínimo.

Él lr_finder() La función implementa el algoritmo detallado en Tasas de aprendizaje cíclico para entrenar 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, 
  information = train_ds, 
  verbose = FALSE,
  dataloader_options = listing(batch_size = 32),
  start_lr = 1e-6, # the smallest worth that will likely be tried
  end_lr = 1 # the most important worth to be experimented with
)

str(data)
#> Courses 'lr_records' and 'information.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 exponencialmente suavizado de la pérdida.

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

Si quieres aprender a interpretar los resultados de este gráfico y saber más sobre la metodología lee el artículo del buscador de tasa de aprendizaje sobre el
luz sitio internet.

Manejo de datos

En el primer lanzamiento de luzel único tipo de objeto que se permitió 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/arreglos R de R (o listas anidadas de ellos) como datos de entrada, así como torch dataset()s.

Admite abstracciones de bajo nivel como dataloader() ya que 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 la forma en que 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, para usarla como datos de validación.

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

función.

Nuevas devoluciones de llamada

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

  • luz_callback_gradient_clip(): ayuda a evitar la divergencia de pérdida al recortar grandes gradientes.
  • 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 pesos 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 consistencia del modelo y el rendimiento basic.

Puede ver el registro de cambios completo disponible
aquí.

En este submit también queremos agradecer a:

  • @jonthegeek por valiosas mejoras en el luz guías de inicio.

  • @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 de la devolución de llamada de Mixup y mejoras en el buscador de tasa de aprendizaje.

¡Gracias!

Foto por dil en Unsplash

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 entrenar redes neuronales”. https://doi.org/10.48550/ARXIV.1506.01186.

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

Related Articles

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

spot_img

Stay in touch!

Follow our Instagram