Redes neuronales¶


Clase5: Entrenamiento¶


Autor: Luis Fernando Apáez Álvarez


Contenido¶

  • Recapitulación: Descenso del gradiente
  • Descenso del gradiente aplicado al entrenamiento de redes neuronales

Descenso del gradiente ¶

El algoritmo del descenso del gradiente es uno de los algoritmos de optimización más populares, especialmente en el campo de las redes neuronales. Descenso del gradiente es un método general para la minimización de cualquier función $f$, así como vimos una pequeña prueba al final de la clase pasada.

Básicamente el algoritmo toma la derivada de la función en cuestión, pues ésta mide la rapidez con que cambia la función, esto es, cuando crece o decrece. Calculando la pendiente en un punto en específico, sabremos en ese punto cuando la función crece, de modo que podemos seguir la dirección contraria a la pendiente obtenida e iremos bajando hasta un punto mínimo.

EL gradiente de una función $f$ es la generalización vectorial de la derivada, siendo éste un vector que contiene la información de cuando crece la función en un punto en específico $x=(x_{1},\ldots,x_{n})$, donde:

$$ \nabla f=\left[\frac{\partial f}{\partial x_{1}},\ldots, \frac{\partial f}{\partial x_{n}}\right] $$

Ahora bien, el tamaño de paso con el cual vamos avanzando rumbo al mínimo de la función se conoce como tasa de aprendizaje. Un critero del paso puede ser que, cuando la función crece mucho, entonces debemos de descender mucho también; si crece poco, entonces sería conveniente también ir descendiendo poco. Esto es, el paso es proporcional al gradiente. Para poder controlar la proporción del paso utilizaremos un parámetro adicional $k$, de modo que el paso a dar se cuantifica como: $-k\nabla$.

Así, dada una posición inicial en el punto $x$, podemos avanzar a una nueva posición $\hat{x}$ que dependerá del paso que demos, del tamaño y de la dirección:

$$ \hat{x}=x-k\nabla f(x) $$

Para cada nueva posición podemos medir $\hat{x}-x$, y si esta cantidad es menor que cierto umbral o si alcanzamos cierto número de iteraciones, podemos decir, prácticamente, que hemos alcanzado el mínimo de la función.

La siguiente imagen representa el recorrido iterativo de las nuevas posiciones:

Cabe mencionar que este algoritmo no garantiza que lleguemos al punto mínimo, pues puede ocurrir que éste nos conduzca a un mínimo local de uan función.

desc2.PNG

Para resolver dicho problema podemos implementar adaptatibilidad a la tasa de aprendizaje $k$, esto es, ir cambiando el valor de $k$ con el tiempo. La idea anterior básicamente nos ayudará a que la búsqueda no se estabilice en un mínimo local, pues si aumentamos el valor de $k$ podemos saltar posibles caminos que nos conduzcan a los mínimos locales

desc3.PNG

conduciéndonos así al mínimo global. La modificación de la $k$ a lo largo del tiempo puede ser implementada mediante una recta, o de alguna otra forma como un comportamiento logarítmico entre otros. Para ello consideramos el par $(t_{i}, k_{i})$ que hace referencia al valor de la tasa de aprendizaje $k_{i}$ en el tiempo $t_{i}$. Por ejemplo, si consideramos $i=1,\ldots,n$, entonces la ecuación de la recta que describe el comportamiento está dada por:

$$ m = \frac{k_{n}-k_{0}}{t_{n}-t_{0}} \ \ \ \Rightarrow \ \ k(t)=mt+k_{0} $$

Con lo cual el valor de la tasa de aprendizaje cambiará en el tiempo, permitiéndonos así que el algoritmo del descenso del gradiente no se estabilice en un mínimo local.

Descenso del gradiente aplicado al entrenamiento de redes neuronales ¶

Recordemos que la inicialización de los pesos en una red neuronal es de manera aleatoria. A partir de ello se procederá de manera iterativa siguiendo un algoritmo de optimización, dentro del cual se tratará de minimizar las diferencias entre la salida real y la estimada por la red neuronal. Para ello, es común que sea empleado el algoritmo del descenso del gradiente para ajustar los parámetros de la red para minimizar los errores.

El algoritmo del descenso del gradiente utilizado para el entrenamiento de una red sigue los siguientes pasos:

  • Se introducen los datos de entrenamiento.
  • Después de los cálculos efectuados en cada capa de la red, lo cual resulta en predicciones de salida.
  • Evaluamos la función de coste que nos permite evaluar las diferencias entre las predicciones de la red y las salidas reales. El valor de la función de coste es lo que se trata de minimizar en todo momento mediante el algoritmo del descenso del gradiente.
  • Mediante el algoritmo de backpropagation comenzamos por calcular el gradiente de la función de coste respecto a los parámetros referentes únicamente de la capa de salida.
  • Una vez obtenidas las derivadas mencionadas antes, pasamos a la capa anterior y calculamos de nuevo las derivadas de la función de coste respecto a los parámetros de la capa actual en la que nos encontramos. Y así sucesivamente, seguiremos propagando hacía atrás.
  • Una vez obtenido el vector gradiente, actualizaremos los parámetros de la red, restando a su valor actual el valor del gradiente correspondiente, multiplicando por una tasa de aprendizaje: $w=w-k\nabla f$.

Estaremos repitiendo los pasos anteriores mientras el valor de la función de coste y las métricas de salida no empiecen a empeorar de manera sostenida.

Algunas variaciones del descenso del gradiente¶

  • Descenso de gradiente por lotes: Todos los datos de entrenamiento serán introducidos a la red neuronal. Este algoritmo tiene como posibles problemas el estancamiento debido a que los cálculos estarán siempre actuando bajos las mismas muestras.
  • Descenso de gradiente estocástico: Se introduce una única muestra aleatoria en cada iteración. El problema de esta versión es la lentitud de procesamiento pues ésta requerirá de varias iteraciones.
  • Descenso de gradiente estocástico por mini lotes: Se introducen $n$ muestras a la red en cada iteración, consiguiendo así que el entrenamiento sea más rápido debido a la paralelización de las operaciones,

Por otro lado, podemos conocer cómo varía el gradiente realizando el cálculo de las segundas derivadas, no obstante, este proceso representa un costo computacional elevado. Para ello existe diversas técnicas de aproximación donde se estiman las segundas derivadas, algunas de ellas son:

  • Momentum: La clave de esta técnica reside en actualizar los parámetros de la red añadiendo un término adicional que tenga en cuenta el valor de la actualización aplicada en la iteración anterior, de modo que se estarán teniendo en cuenta los gradientes anteriores además del actual.
  • RMSProp (Root Mean Square Propagation): La tasa de aprendizaje se actualiza para cada parámetros.
  • Adam (Adaptative Moment Estimation): Se trata de la combinación de las técnicas Momentum y RMSProp.

Notas¶

  • Descenso del gradiente