Learning rate en Deep Learning

Contenido del Bootcamp Dirigido por: | Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

El learning rate en Deep Learning es uno de los procesos que forman parte de la optimización de hiperparámetros en Deep Learning.

En efecto, de entre todos los hiperparámetros, el learning rate y el batch size son dos parámetros directamente relacionados con el algoritmo del gradient descent. En este post, te presentamos que es el learning rate en Deep Learning.

Learning rate en Deep Learning

Para aprender sobre el learning rate en Deep Learning, te recordamos que la forma de actualizar los pesos es mediante estas fórmulas:

Learning rate en Deep Learning
learning rate que es

Lo que multiplica al ∂Etotal/∂wn, llamado η, es el learning rate, que indica la importancia que le damos al error para actualizar cada peso, es decir, la rapidez o cómo de abruptos son los cambios en los pesos.

Así, un η muy alto, hará que los cambios en los pesos sean muy grandes de una iteración a otra, lo que genera el problema de que podemos llegar a saltarnos nuestro mínimo.

Con esta imagen podrás verlo mejor:

Learning rate en Deep Learning

Otra posibilidad es establecer un η muy bajo, lo que haría que nuestra red necesitara muchísimas épocas para llegar a un mínimo aceptable. Además, correríamos el riesgo de quedarnos atrapados en un mínimo peor del mejor que podríamos conseguir con un η más alto.

Learning rate en Deep Learning

Vamos a hacer un pequeño inciso para hablar sobre los mínimos: lo que conseguimos con una red neuronal, normalmente, no es alcanzar el mínimo global de nuestra función, sino que alcanzamos un mínimo local lo suficientemente bueno como para realizar correctamente la tarea que estamos desarrollando.

Tras haber aclarado esto, queda patente lo importante que es conseguir un learning rate adecuado. Fíjate en esta imagen:

Learning rate en Deep Learning

Lo que queremos es un learning rate en Deep Learning óptimo que nos permita ir reduciendo el error conforme van pasando las épocas hasta llegar a nuestro mínimo buscado. En la gráfica, este learning rate sería la línea roja. ¿Y cómo conseguimos que nuestro learning rate sea óptimo?

Una opción muy utilizada es aplicar un decrecimiento o decay a nuestro learning rate conforme va disminuyendo la función de pérdidas (lo que indica que estamos llegando al mínimo buscado).

Learning rate en Deep Learning

Vamos a ver cómo se comportaría la última red que implementamos (la que trabajaba con el MNIST) con diferentes learning rates:

# recuerda elegir TF 1.x o no te funcionarán los ejemplos:
%tensorflow_version 1.x

TensorFlow 1.x selected.

# Ejemplos learning rate

# En primer lugar, hacemos los imports necesarios y después definimos una 
# función que creará y entrenará la red

# imports necesarios
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf

# importamos el dataset MNIST y cargamos los datos
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
Learning rate en Deep Learning
# Definimos la función para entrenar nuestra red con los parámetros deseados
def train_network(learning_rate, batch_size, n_epochs):
  
  # creamos los contenedores para nuestras entradas y salidas
  x = tf.placeholder(tf.float32, [None, 784]) # imágenes del mnist: 28*28=784
  y = tf.placeholder(tf.float32, [None, 10]) # número indicando la clase 0-9 => 10 clases

  # y creamos las variables W y b para el entrenamiento
  W = tf.Variable(tf.zeros([784, 10]))
  b = tf.Variable(tf.zeros([10]))

  # Por último, construimos el modelo
  pred = tf.nn.softmax(tf.matmul(x, W) + b)

  # Ahora, definimos nuestra función de pérdidas: esta vez, la cros-entropía
  # a veces la llaman loss, a veces cost => es lo mismo
  cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))

  # Calculamos los gradientes (gradient descent)
  grad_W, grad_b = tf.gradients(xs=[W, b], ys=cost)

  # Definimos las operaciones para actualizar los pesos con los gradientes calculados
  # y el learning rate
  new_W = W.assign(W - learning_rate * grad_W)
  new_b = b.assign(b - learning_rate * grad_b)

  # Inicializamos las variables
  init = tf.global_variables_initializer()
  
  # para almacenar el histórico de costes
  costs = []
  # empezamos la sesión
  with tf.Session() as sess:
      sess.run(init)
# entrenamiento de nuestra red
      for epoch in range(n_epochs):
          avg_cost = 0.
          total_batch = int(mnist.train.num_examples/batch_size)

          # ¿Y si en vez de actualizar los pesos para cada imagen, lo hacemos
          # de X en X imágenes?
          for i in range(total_batch):
              batch_xs, batch_ys = mnist.train.next_batch(batch_size)

              # ejecutamos la optimización
              _, _, c = sess.run([new_W, new_b ,cost], feed_dict={x: batch_xs,
                                                         y: batch_ys})

              # calculamos el coste teniendo en cuenta los batches que hay
              avg_cost += c / total_batch

          # guardamos nuestro coste en el histórico
          costs.append(avg_cost)
          
          # Imprimimos las iteraciones
          print("[{}] cost: {}".format(epoch, avg_cost))

      print("Entrenamiento finalizado!!")

      # comprobamos lo que ha aprendido nuestra red
      correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

      # calculamos el accuracy (precisión)
      accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
      print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))
# Veamos nuestra función de pérdidas con respecto a las épocas ejecutadas
  plt.plot(np.arange(0, n_epochs), costs)
  plt.title("Training Loss")
  plt.xlabel("Epoch #")
  plt.ylabel("Loss")

Por último, los valores típicos de learning rate en Deep Learning suelen ser:

  • 0.1
  • 0.01
  • 0.001

Aprende más sobre el Big Data

En este post, te hemos expuesto qué es el learning rate en Deep Learning para el desarrollo de las redes neuronales profundas.

Desde KeepCodging, te traemos el Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning, gracias al que podrás aprender mucho más sobre el learning rate en Deep Learning, así como sobre los sistemas y herramientas más importantes en el universo del Big Data¡No dudes en solicitar más información e inscríbete ahora!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado