Los valores de salida de una red neuronal están condicionados por la función de activación utilizada en la última capa. Las funciones de activación de tipo escalón sólo producen 0 ó 1, lo que resulta conveniente para implementar operaciones lógicas o sistemas de clasificación de dos clases, pero limita su uso en otros ámbitos. La solución para evitar esta limitación es utilizar otro tipo de función de activación que se adecue más a la naturaleza del problema que se está intentando resolver.
Aproximador Universal
Imaginemos una función continua en una variable de la que sólo dispone su representación gráfica.Y imaginemos ahora que queremos construir una red neuronal que retorne el valor sobre dicha curva para un valor de entrada dado. Es decir, no se quiere retornar una clase de un dominio acotado, como 0 ó 1, sino un valor cualquiera del dominio de los reales.
Como primera aproximación, en vez de intentar modelar toda la función de forma exacta, se puede simplemente tomar una serie de valores particulares sobre la gráfica a intervalos regulares, y modelar esos intervalos como fronteras de decisión de la red neuronal.
Una primera capa para las líneas verticales. Una segunda capa para las áreas delimitadas por cada par de líneas verticales. Y una tercera capa que retorne el valor adecuado para cada área.
La primera capa clasificará las entradas en función de si están a un lado u otro de una línea vertical. Esta capa actúa como un sistema de clasificación de dos clases. Emite un 1 si el valor de entrada está un lado de la línea y un 0 si está al otro lado.
z^{(1)}_1 = w^{(1)}_{1, 1} x_1 + b^{(1)}_1 = 1 * x_1 + 0 = x_1
z^{(1)}_2 = w^{(1)}_{2, 1} x_1 + b^{(1)}_2 = 1 * x _1- 4 = x_1 - 4
z^{(1)}_3 = w^{(1)}_{3, 1} x_1 + b^{(1)}_3 = 1 * x_1 - 8 = x_1 - 8
z^{(1)}_4 = w^{(1)}_{4, 1} x_1 + b^{(1)}_4 = 1 * x_1 - 12 = x_1 - 12
y^{(1)}_1 = f^{(1)}_1(z^{(1)}_1) = \begin{cases} 1 & \quad \text{if } x_1 \geq 0 \\ 0 & \quad \text{if } x_1 < 0 \end{cases}
y^{(1)}_2 = f^{(1)}_2(z^{(1)}_2) = \begin{cases} 1 & \quad \text{if } x _1- 4 \geq 0 \\ 0 & \quad \text{if } x_1 - 4 < 0 \end{cases}
y^{(1)}_3 = f^{(1)}_3(z^{(1)}_3) = \begin{cases} 1 & \quad \text{if } x_1 - 8 \geq 0 \\ 0 & \quad \text{if } x_1 - 8 < 0 \end{cases}
y^{(1)}_4 = f^{(1)}_4(z^{(1)}_4) = \begin{cases} 1 & \quad \text{if } x_1 - 12 \geq 0 \\ 0 & \quad \text{if } x_1 - 12 < 0 \end{cases}
La segunda capa clasificará los valores de entrada en función de si están entre dos líneas verticales. Cada neurona examina un par de líneas concretas. Emite un 1 si el valor de entrada está entre las dos líneas y un 0 si no lo está. En la salida de esta capa sólo habrá un valor a 1, ya que un valor de entrada sólo puede estar entre un par de líneas concretas.
z^{(2)}_1 = w^{(2)}_{1, 1} y^{(1)}_1 + w^{(2)}_{1, 2} y^{(1)}_2 + b^{(2)}_1 = 1 * y^{(1)}_1 + (-1) * y^{(1)}_2 - 1 = y^{(1)}_1 - y^{(1)}_2 - 1
z^{(2)}_2 = w^{(2)}_{2, 2} y^{(1)}_2 + w^{(2)}_{2, 3} y^{(1)}_3 + b^{(2)}_2 = 1 * y^{(1)}_2 + (-1) * y^{(1)}_3 - 1 = y^{(1)}_2 - y^{(1)}_3 - 1
z^{(2)}_3 = w^{(2)}_{3, 3} y^{(1)}_3 + w^{(2)}_{3, 4} y^{(1)}_4 + b^{(2)}_3 = 1 * y^{(1)}_3 + (-1) * y^{(1)}_4 - 1 = y^{(1)}_3 - y^{(1)}_4 - 1
y^{(2)}_1 = f^{(2)}_1(z^{(2)}_1) = \begin{cases} 1 & \quad \text{if } y^{(1)}_1 - y^{(1)}_2 - 1 \geq 0 \\ 0 & \quad \text{if } y^{(1)}_1 - y^{(1)}_2 - 1 < 0 \end{cases}
y^{(2)}_2 = f^{(2)}_2(z^{(2)}_2) = \begin{cases} 1 & \quad \text{if } y^{(1)}_2 - y^{(1)}_3 - 1 \geq 0 \\ 0 & \quad \text{if } y^{(1)}_2 - y^{(1)}_3 - 1 < 0 \end{cases}
y^{(2)}_3 = f^{(2)}_3(z^{(2)}_3) = \begin{cases} 1 & \quad \text{if } y^{(1)}_3 - y^{(1)}_4 - 1 \geq 0 \\ 0 & \quad \text{if } y^{(1)}_3 - y^{(1)}_4 - 1 < 0 \end{cases}
La tercera capa emitirá el valor correspondiente al área en que se encuentra el valor de entrada. Pero como estos valores no están limitados a 0 ó 1, no se puede utilizar una función escalón como función de activación. Esta capa utiliza en cambio la función identidad:
f(x) = x
Es decir, la salida de esta tercera capa es directamente el valor neto. Siendo el valor neto la suma de todas las salidas de la capa anterior multiplicadas por los valores correspondientes a cada área. Y como sólo una de las salidas de la capa anterior es 1, el resto es 0, entonces el valor final de salida es igual al valor correspondiente al área en el que se encuentra el valor de entrada.
z^{(3)}_1 = w^{(3)}_{1, 1} y^{(2)}_1 + w^{(3)}_{1, 2} y^{(2)}_2 + w^{(3)}_{1, 3} y^{(2)}_3 + b^{(3)}_1 = 7 y^{(2)}_1 + 3 y^{(2)}_2 + y^{(2)}_3
y^{(3)}_1 = f^{(3)}_1(z^{(3)}_1) = z^{(3)}_1 = 7 y^{(2)}_1 + 3 y^{(2)}_2 + y^{(2)}_3
Probando con distintos valores de entrada se puede comprobar que se obtiene el resultado esperado:
\begin{matrix} \mathbf{x_1} & \mathbf{y^{(1)}_1} & \mathbf{y^{(1)}_2} & \mathbf{y^{(1)}_3} & \mathbf{y^{(1)}_4} & \mathbf{y^{(2)}_1} & \mathbf{y^{(2)}_2} & \mathbf{y^{(2)}_3} & \mathbf{y_1} \\ -2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 7 \\ 2 & 1 & 0 & 0 & 0 & 1 & 0 & 0 & 7 \\ 4 & 1 & 1 & 0 & 0 & 0 & 1 & 0 & 3 \\ 6 & 1 & 1 & 0 & 0 & 0 & 1 & 0 & 3 \\ 8 & 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\ 10 & 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\ 12 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ 14 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \end{matrix}
Para obtener un mayor grado de precisión se pueden tomar más valores sobre la función. Es decir, crear más fronteras de decisión.En el límite, cuando la separación entre las fronteras tiende a cero, la salida de la red sigue perfectamente el contorno de la función original.
Para tres dimensiones las funciones representan planos, así que en vez de visualizar las áreas aproximadas mediantes rectángulos planos hay que visualizarlas como aproximadas con cilindros, ya que el comportamiento de la red en este caso es igual que el visto anteriormente como clasificador universal, donde un gran número de fronteras de decisión pueden delimitar un contorno que se ciña alrededor de un punto con cualquier grado de precisión.
Para un mayor número de dimensiones las funciones representan hiperplanos, pero el funcionamiento de la red sigue siendo el mismo. Lo que quiere decir que una red neuronal es un aproximador universal. Puede aproximar cualquier función con cualquier grado de precisión.