Una neurona artificial implementa una función. Es decir, es una aplicación que asigna a cada valor de un conjunto de entrada un valor de un conjunto de salida. Lo que permite afirmar que el objetivo de las técnicas de Aprendizaje Automático es encontrar una función concreta que implemente dicha aplicación. Afirmación que se aparta un tanto de la solución propuesta por el algoritmo original de aprendizaje del Perceptron, basada en una interpretación geométrica del problema, y no tanto en el análisis de la relación entre los valores de entrada y salida.

Regla de la Cadena

El rango de posibles valores de salida de una neurona artificial está determinado por su función de activación. Y a su vez, el rango de posibles valores de entrada de la función de activación está determinado por la función del cálculo neto. Es decir, una neurona implementa una función y que es composición de dos funciones, la del cálculo neto z y la de activación f :

y = f(z)

La función del cálculo neto es la suma ponderada de las entradas por los pesos, que es una combinación lineal, y por lo tanto derivable. Si además se cumple que la función de activación es también derivable entonces la composición de ambas funciones también lo es. Enunciado correcto desde un punto matemático gracias a un resultado del campo del cálculo de derivadas conocido como la regla de la cadena, del inglés «chain rule».

La regla de la cadena establece que si una función f es diferenciable en x , y g es una función diferenciable en f(x) , entonces la función compuesta g(f(x)) es también diferenciable en x , cumpliéndose la siguiente expresión:

\cfrac{dg}{dx} = \cfrac{dg}{df} \cfrac{df}{dx}

Este resultado permite calcular cómo varía la función g respecto a x . Y establece que dicho cálculo es simplemente el producto de la derivada de g respecto a f(x) multiplicada por la derivada de f respecto a x .

Neurona Artificial

La regla de la cadena aplicada sobre una neurona artificial permite medir cómo varía la salida respecto a un peso, el sesgo, o una entrada cualquiera:

\cfrac{\partial y}{\partial w_i} = \cfrac{dy}{dz} \cfrac{\partial z}{\partial w_i}

\cfrac{\partial y}{\partial b} = \cfrac{dy}{dz} \cfrac{\partial z}{\partial b}

\cfrac{\partial y}{\partial x_i} = \cfrac{dy}{dz} \cfrac{\partial z}{\partial x_i}

Teniendo en cuenta que la salida de la neurona es y = f(z) , es decir, el resultado de aplicar la función de activación sobre el valor neto, entonces su derivada depende de la función de activación concreta utilizada por la neurona:

\cfrac{dy}{dz} = f'(z)

Y teniendo en cuenta que el valor neto es z = w_1 x_1 + w_2 x_2 + \dotsb + b, es decir, la suma de los pesos por las entradas más el sesgo, entonces el resultado de derivar por un peso concreto w_i es la entrada asociada x_i , el resultado de derivar por el sesgo b es 1 , y el de derivar por una entrada concreta x_i es el peso asociado w_i :

\cfrac{\partial z}{\partial w_i} = x_i

\cfrac{\partial z}{\partial b} = 1

\cfrac{\partial z}{\partial x_i} = w_i

Lo que permite reescribir las expresiones anteriores, que calculan la influencia de los pesos, el sesgo, y las entradas en la salida de una neurona, de la siguiente forma:

\cfrac{\partial y}{\partial w_i} = f'(z) x_i

\cfrac{\partial y}{\partial b} = f'(z)

\cfrac{\partial y}{\partial x_i} = f'(z) w_i

Estos resultados son importantes para las técnicas de Aprendizaje Automático en la medida que proporcionan una medida objetiva del efecto causado por un cambio en un parámetro de una neurona.

Función de Pérdida

El primer paso del algoritmo básico de Aprendizaje Automático Supervisado consiste en generar un vector de pesos aleatorios, y el segundo paso en comparar el resultado obtenido contra el resultado deseado.

Es decir, la idea es disponer de un conjunto de valores de entrada [X_1, X_2, \ldots, X_T] para entrenar la neurona, el correspondiente conjunto de valores de salida deseados [d_1, d_2, \ldots, d_T] para cada una de dichas entradas, y a continuación alimentar la neurona para un obtener un resultado para cada entrada X_t usando un vector de pesos W :

y(W; X_t) = f(W \cdot X_t)

O expresado de otra forma:

y^{(t)} = f(z^{(t)})

Donde el superíndice entre paréntesis denota que la expresión se evalúa para cada muestra t concreta del conjunto del entrenamiento.

Debe ser claro, que como el vector de pesos inicial se genera de forma aleatoria, lo habitual es que el resultado obtenido sea muy distinto del deseado. Es decir, que el error cometido por la neurona sea muy grande. Lo interesante es que dicho error se puede medir mediante una función, referida habitualmente como función de coste C , del inglés «cost», función de pérdida L , del inglés «loss», o simplemente función de error E .

La función concreta a utilizar depende de la naturaleza del problema que se esté intentando resolver. No es lo mismo medir el error en una neurona que implementa un sistema de clasificación que genera probabilidades, que en una neurona que implementa un sistema de regresión que genera predicciones. En la práctica existen un conjunto de funciones con una serie de características bien definidas, y se trata de escoger la más adecuada para cada tipo de problema.

Por ejemplo, una de las funciones de error más conocidas es la función del error cuadrático:

C = \cfrac{1}{2} \big( y - d \big)^2

Esta función simplemente resta el resultado deseado d del resultado obtenido . El resultado está elevado al cuadrado para que sea siempre positivo, para penalizar los errores de mayor magnitud, y para que la función sea derivable.

Función de Coste - Error CuadráticoEl resultado está dividido por 2 simplemente para eliminar el exponente al derivar, de forma que su derivada respecto a la salida sea igual al valor del error cometido:

\cfrac{\partial C}{\partial y} = \cfrac{2}{2} \big( y - d \big) (1 - 0) = y - d

Disponer de una función que proporcione información del error cometido es importante. Sin embargo, lo importante es entender que lo deseable es conocer cómo influyen exactamente los pesos en el error, ya que estos son los que se tienen que ajustar.

Aplicando la regla de la cadena se puede construir una expresión que mida la influencia de los pesos, y el sesgo, en el error:

\cfrac{\partial C}{\partial w_i} = \cfrac{\partial C}{\partial y} \cfrac{\partial y}{\partial w_i}

\cfrac{\partial C}{\partial b} = \cfrac{\partial C}{\partial y} \cfrac{\partial y}{\partial b}

Cada una de estas expresiones representa una derivada sobre la función de error, y la derivada de una función es simplemente otra función que permite calcular la pendiente en todos los puntos de dicha función. Es decir, cuántas unidades varía la función si se varía la entrada. Lo que en este caso significa que las expresiones representan cuánto varía el error si se varía un peso o el sesgo.

Finalmente, sustituyendo y aplicando las expresiones del apartado anterior:

\cfrac{\partial C}{\partial w_i} = (y - d) f'(z) x_i

\cfrac{\partial C}{\partial b} = (y - d) f'(z)

Por otra parte, es posible también utilizar una función para obtener una medida del error total cometido al evaluar todas las entradas del conjunto de entrenamiento. Como por ejemplo, la función del error cuadrático medio:

E(W; X_1, \ldots, X_T) = \cfrac{1}{2T} \displaystyle\sum_{t=1}^{T}  \big( y^{(t)}- d^{(t)} \big)^2

Esta expresión permite calcular las derivadas que representan la influencia de cada peso, y el sesgo, en el error medio total cometido al evaluar todas las muestras:

\cfrac{\partial E}{\partial w_i} = \cfrac{\partial E}{\partial y} \cfrac{\partial y}{\partial w_i}

\cfrac{\partial E}{\partial b} = \cfrac{\partial E}{\partial y} \cfrac{\partial y}{\partial b}

Las derivadas son iguales que las anteriores, por lo que se obtiene un resultado similar:

\cfrac{\partial E}{\partial w_i} = \cfrac{1}{T} \displaystyle\sum_{t=1}^{T} \big( y^{(t)}- d^{(t)} \big) f'(z^{(t)}) x^{(t)}_i

\cfrac{\partial E}{\partial b} = \cfrac{1}{T} \displaystyle\sum_{t=1}^{T} \big( y^{(t)}- d^{(t)} \big) f'(z^{(t)})

Estas expresiones proporcionan valores concretos, pero aún es necesario entender cómo utilizarlas de manera conjunta para corregir el vector de pesos y el sesgo.

Descenso del Gradiente

El algoritmo del Descenso del Gradiente es un procedimiento utilizado en Aprendizaje Automático para corregir el vector de pesos de una neurona en función del error cometido al evaluar las muestras del conjunto de entrenamiento.

El algoritmo puede resumirse en los siguientes pasos:

1. Generar un vector de pesos aleatorios

2. Para un subconjunto del conjunto de entrenamiento:

a. Calcular los valores de salida

b. Corregir el vector de pesos y sesgo en base al error cometido:

w_i = w_i - \alpha \cfrac{\partial E}{\partial w_i}

b = b - \alpha \cfrac{\partial E}{\partial b}

3. Repetir desde el paso 2 hasta que se cumpla la condición de parada

En líneas generales sigue el mismo criterio que el algoritmo básico del Perceptron. Generar un vector aleatorio, probar con algunos valores, comparar los resultados obtenidos contra los deseados, y corregir los pesos en función del error cometido.

Donde se diferencian los algoritmos es en la forma de actualizar el vector de pesos y el sesgo en cada iteración. Estableciendo el algoritmo del Descenso del Gradiente que cada uno de estos parámetros se debe actualizar en función del error cometido. Más concretamente, en función de la magnitud de la contribución de cada parámetro concreto a dicho error, y en dirección contraria a dicha contribución. Entendiendo por contribución su derivada respecto al error, y por dirección contraria el signo negativo.

Intuitivamente, recordando que una derivada representa una pendiente que indica hacia donde crece una función, debe ser claro que modificar un peso restándole la derivada de la función de error respecto a dicho peso hace que el error cometido disminuya, ya que se disminuye la contribución al error de dicho peso concreto.

De forma visual, en el caso más sencillo, con un único peso, se puede representar cada iteración del algoritmo como un pequeño paso en la dirección de la pendiente donde se encuentra el mínimo de la función de error.Descenso del GradienteEl parámetro \alpha del algoritmo establece el tamaño de los pasos. O dicho de otra forma, cuánto se desciende en cada iteración por la pendiente. Término que se denomina habitualmente tasa de aprendizaje, del inglés «learning rate». De igual forma que cada iteración se denomina habitualmente época, del inglés «epoch».

Para el caso de dos pesos la función de error se suele representar mediante curvas de nivel (isolíneas).

Descenso del Gradiente - Isolíneas

Para un número mayor de dimensiones el principio de funcionamiento es el mismo. Descendiendo por todas las derivadas con respecto a todos los pesos al unísono.

Utilizando todas las expresiones obtenidas en los apartados anteriores se pueden reformular los pasos del algoritmo de la siguiente forma:

1. Generar un vector de pesos aleatorios W

2. Para un subconjunto B del conjunto de entrenamiento:

a. Calcular los valores de salida:

Z = W B^T

Y = f(Z)

Y' = f'(Z)

b. Corregir los pesos y el sesgo en base al error cometido:

w_i = w_i - \alpha \cfrac{1}{T} \displaystyle\sum_{t=1}^{T} \big( y^{(t)} - d^{(t)} \big) y'^{(t)} x^{(t)}_i

b = b - \alpha \cfrac{1}{T} \displaystyle\sum_{t=1}^{T} \big( y^{(t)} - d^{(t)} \big) y'^{(t)}

3. Repetir desde el paso 2 hasta que se cumpla la condición de parada

Este algoritmo recibe el nombre de Descenso del Gradiente debido a que en Matemáticas se denomina «gradiente» al conjunto de todas las derivadas de una función con respecto a todas sus variables. Es decir, cómo varía la función con respecto a cada una de sus variables.

De hecho, en Matemáticas este algoritmo representa un tipo de problema que se conoce como minimización de funciones, donde lo que se busca es el valor mínimo de una función. Entendiendo por mínimo un punto donde la derivada es cero y la función crece a ambos lados de dicho punto.

De forma general, una función puede adoptar muchas formas y presentar muchos puntos en los que su derivada sea cero. Dichos puntos pueden ser mínimos, máximos o puntos de inflexión. Descender por el gradiente hasta un mínimo no garantiza que dicho mínimo sea el mínimo global de toda la función.

Descenso del Gradiente - Puntos CríticosUna circunstancia que no ocurre en la función de coste elegida, que sólo tiene un mínimo global.

Tamaño de Batch

El tamaño del batch, que puede traducirse como «lote», es la cantidad de muestras que se toman del conjunto de entrenamiento para calcular el error en cada iteración.

Si el número de muestras es extremadamente grande es razonable pensar que el tiempo de proceso también lo será. Además de que es bastante probable, desde un punto de vista estadístico, que muchas de las muestras sean muy similares entre sí, no aportando realmente un gran valor al proceso de aprendizaje.

En estos casos, una alternativa es utilizar un subconjunto pequeño de muestras aleatorias en cada iteración. Utilizar un subconjunto pequeño reduce el tiempo de proceso, y tomarlas de forma aleatoria garantiza que los distintos patrones presentes en el conjunto de entrenamiento serán tenidos en cuenta durante el proceso de aprendizaje.

En la práctica esta solución implica que el camino seguido en el descenso por la pendiente de la función de coste será un tanto caótico, ya que en cada iteración las muestras utilizadas serán distintas, y por tanto los pesos se ajustarán contra unos valores de muestras distintos cada vez. A veces similares a los de la iteración anterior y otras veces totalmente distintos.

Descenso del Gradiente EstocásticoEl algoritmo original de Descenso del Gradiente recibe varios nombres en función de la cantidad de muestras que se toman en cada iteración:

  • Una: Descenso del Gradiente Estocástico
  • Algunas: Descenso del Gradiente Estocástico en Mini-batch
  • Todas: Descenso del Gradiente

El término «estocástico» es sólo una forma de decir que el resultado está determinado tanto por elementos predecibles como aleatorios.

Tasa de Aprendizaje

La tasa de aprendizaje determina el tamaño de los pasos dados al descender por la pendiente. Encontrar el valor adecuado para este parámetro es vital para garantizar que el algoritmo converge a una velocidad adecuada.

Si la tasa de aprendizaje es muy pequeña entonces la convergencia puede ser muy lenta, teniendo que realizar muchas iteraciones para alcanzar el mínimo.

Tasa de Aprendizaje BajaSi la tasa de aprendizaje es muy grande entonces el algoritmo puede no converger, oscilando continuamente de un lado a otro del mínimo, o incluso alejándose del mismo.

Tasa de Aprendizaje AltaPara evitar estos problemas la tasa de aprendizaje se ajusta habitualmente mediante ensayo y error estudiando la velocidad de convergencia. Es decir, representando de forma gráfica el valor del error en cada iteración, y analizando el patrón observado.

Tasa de AprendizajeLos patrones más habituales son los siguientes:

  • Rojo: Tasa de aprendizaje muy grande. El error crece rápidamente en las primeras iteraciones llegando a alejarse completamente del mínimo.
  • Azul: Tasa de aprendizaje grande. El error disminuye rápidamente en las primeras iteraciones, pero después no es capaz de aproximarse al mínimo.
  • Amarillo: Tasa de aprendizaje pequeña. El error disminuye muy lentamente, siendo necesarias muchas iteraciones para aproximarse al mínimo.
  • Verde: Tasa de aprendizaje adecuada. El error disminuye rápidamente aproximándose el mínimo.

Aunque es bastante normal tomar un valor constante para la tasa de aprendizaje, existen técnicas que varían el valor de forma dinámica en función de la velocidad a la que se reduce el error.

Condición de Parada

En una situación ideal, después de varias iteraciones, se puede esperar que el error cometido por la neurona será cero. Pero en la práctica es más acertado considerar que el error tenderá a cero.

Se considera que el algoritmo converge cuando el error alcanza un valor muy pequeño en las proximidades de cero. Valor que normalmente se determina de forma manual analizando la velocidad de convergencia.

Además, para evitar las situaciones en las que no se consigue alcanzar el mínimo, es habitual establecer un número de máximo de iteraciones. De forma que si alcanza dicho número el algoritmo termina.

En la práctica existen otros puntos a tener cuenta antes de considerar que una neurona está debidamente entrenada.