Skip to content

Juan Mellado

IA: Redes Neuronales (10)

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.

IA: Redes Neuronales (9)

Las neuronas artificiales clasifican conjuntos de valores encontrando fronteras de decisión sobre dichos conjuntos. Sabiendo que las fronteras de decisión son siempre ortogonales (perpendiculares) a los vectores de pesos, se puede afirmar que el problema de encontrar una frontera de decisión es el mismo que el de encontrar un vector de pesos. Dado uno se conoce el otro.

Aprendizaje Automático

Imaginemos que queremos clasificar un conjunto de valores en dos clases. Los valores representados como cruces rojas en una clase y los valores representados como guiones verdes en la otra clase.

Nube de PuntosEs evidente que el conjunto de datos es linealmente separable. Se puede trazar una línea recta que separe el conjunto en dos. Las cruces a un lado y los guiones al otro. Es decir, se puede trazar una frontera de decisión. O lo que es lo mismo, se puede encontrar un vector de pesos que determine dicha frontera. El propósito de un algoritmo de Aprendizaje Automático es precisamente encontrar dicho vector de manera automática.

Uno de los algoritmos más sencillos es el que propuso originalmente junto con el diseño del Perceptron. Dicho algoritmo puede resumirse en los siguientes pasos:

1. Generar una frontera de decisión de forma aleatoria

2. Por cada valor del conjunto de valores siendo clasificado:

a. Comprobar si el valor está correctamente clasificado respecto a la frontera

b. Si no está correctamente clasificado variar la frontera para clasificarlo correctamente

3. Repetir el paso 2 hasta que todos los valores estén correctamente clasificados

Algoritmo que puede reformularse utilizando las características conocidas del producto escalar aplicado al vector de pesos y todos los posibles vectores de entrada:

1. Generar un vector de pesos aleatorios W

2. Por cada vector de entrada X :

a. Calcular el producto escalar W \cdot X

b. Si el producto escalar es negativo, y el valor no está correctamente clasificado:

Sumar X a W

c. Si el producto escalar es positivo, y el valor no está correctamente clasificado:

Restar X de W

3. Repetir el paso 2 hasta que no se produzca ningún cambio en W

Estos pasos se pueden representar de forma gráfica. Siendo el primer paso el de generar un vector de pesos aleatorios, lo que permite trazar una primera frontera de decisión, perpendicular a dicho vector.

Algoritmo de Clasificación - Paso 1El segundo paso es iterar por todos los valores, comprobando el signo del producto escalar entre el vector de pesos y el vector definido por cada valor. Suponiendo que se quiere clasificar las cruces rojas en el lado de la frontera de decisión donde el producto escalar es positivo, y los guiones verdes en el otro lado, donde es negativo.

En este caso la mayoría de los valores están bien clasificados, sin embargo, una cruz roja está incorrectamente clasificada. Está en el lado equivocado de la frontera. El producto escalar es negativo cuando debería ser positivo.

Para corregir la frontera de decisión se suma el vector del valor incorrectamente clasificado al vector de pesos. Esto tiene sentido en la medida que se mueve el vector de pesos hacia la dirección a la que apunta el vector del valor, haciendo que sean más similares que antes. Es decir, reduciendo el ángulo entre ambos, aumentando el producto escalar.

Algoritmo de Clasificación - Paso 2La nueva frontera de decisión ahora clasifica correctamente la cruz roja, pero también clasifica incorrectamente otros valores, entre ellos un guión verde. El producto escalar es positivo cuando debería ser negativo.

Algoritmo de Clasificación - Paso 4Para corregir la frontera de decisión se resta el vector del valor incorrectamente clasificado del vector de pesos. Lo que tiene sentido en la medida que mueve el vector de pesos en dirección contraria a la que apunta el vector del valor, aumenta el ángulo entre ambos, reduciendo el producto escalar.

Algoritmo de Clasificación - Paso 4Finalmente todos los valores quedan correctamente clasificados.

Algoritmo de Clasificación - Paso 5 Notar que si en el paso anterior se hubiera corregido la frontera utilizando las cruces rojas incorrectamente clasificadas en vez del guión verde el resultado hubiera sido el mismo, aunque la frontera de decisión pudiera haber sido otra un poco distinta.

Puerta AND

Se puede comprobar la efectividad del algoritmo haciendo que encuentre el vector de pesos que modela una puerta lógica AND. O dicho de otra forma, entrenando de forma automática una neurona artificial para que encuentre por si misma los valores de configuración que modelan una puerta AND.

Para ello primero se debe decidir la topología de la red neuronal a utilizar, que en este caso estará compuesta por una única neurona, con dos entradas, una salida, y la función escalón unitario como función de activación:

X = [x_1, x_2, 1]

W = [w_1, w_2, b]

f(W \cdot X) = \begin{cases} 0 & \quad \text{if } W \cdot X < 0 \\ 1 & \quad \text{if } W \cdot X \geq 0 \end{cases}

Para aplicar el algoritmo se necesita también recopilar un conjunto de valores de entrada a utilizar para el entrenamiento, y el resultado deseado d , del inglés «desired», para cada una de dichas entradas. Lo que en este caso se corresponde básicamente con la tabla de la verdad de la puerta lógica AND:

  \begin{matrix} & \mathbf{x_1} & \mathbf{x_2} & & \mathbf{d} \\ X_1 = & [0, & 0, & 1] & 0 \\ X_2 = & [0, & 1, & 1] & 0 \\ X_3 = & [1, & 0, & 1] & 0 \\ X_4 = & [1, & 1, & 1] & 1 \end{matrix}

Información que habitualmente se representa de forma combinada de la siguiente forma:

[X_1, d_1] = [0, 0, 1, 0]

[X_2, d_2] = [0, 1, 1, 0]

[X_3, d_3] = [1, 0, 1, 0]

[X_4, d_4] = [1, 1, 1, 1]

En este punto ya se puede empezar a aplicar el algoritmo, cuyo primer paso es generar un vector de pesos aleatorio:

W = [0.8, -0.1, -2.5]

A continuación se comprueba la salida de la neurona contra la salida deseada, para cada uno de los valores de entrada, hasta que se encuentre una salida que no corresponda con la deseada:

f(W \cdot X_1) = f(0.8*0 -0.1*0 -2.5*1) = f(-2.5) = 0

f(W \cdot X_2) = f(0.8*0 -0.1*1 -2.5*1) = f(-2.6) = 0

f(W \cdot X_3) = f(0.8*1 -0.1*0 -2.5*1) = f(-1.7) = 0

f(W \cdot X_4) = f(0.8*1 -0.1*1 -2.5*1) = f(-1.8) = 0

La salida de la neurona para el vector de entrada X_4 no se corresponde con la salida deseada d_4 . El deseado es 1 y se obtiene un 0. En consecuencia se suma el vector X_4 al vector de pesos W :

W = W + X_4 = [0.8, -0.1, -2.5] + [1, 1, 1]  = [1.8, 0.9, -1.5]

Y se vuelve a realizar la comprobación de las salidas con los nuevos pesos:

f(W \cdot X_1) = f(1.8*0 + 0.9*0 -1.5*1) = f(-1.5) = 0

f(W \cdot X_2) = f(1.8*0 + 0.9*1 -1.5*1) = f(-0.6) = 0

f(W \cdot X_3) = f(1.8*1 + 0.9 *0 -1.5*1) = f(0.3) = 1

El valor deseado para X_3 es 0, pero se obtiene 1, por lo que se resta dicha entrada de los pesos y se vuelve a iterar:

W = W - X_3 = [1.8, 0.9, -1.5] - [1, 0, 1]  = [0.8, 0.9, -2.5]

f(W \cdot X_1) = f(0.8*0 + 0.9*0 -2.5*1) = f(-2.5) = 0

f(W \cdot X_2) = f(0.8*0 + 0.9*1 -2.5*1) = f(-1.6) = 0

f(W \cdot X_3) = f(0.8*1 + 0.9*0 -2.5*1) = f(-1.7) = 0

f(W \cdot X_4) = f(0.8*1 + 0.9*1 -2.5*1) = f(-0.8) = 0

El valor deseado para X_4 es 1, pero se obtiene 0, por lo que se suma dicha entrada a los pesos y se vuelve a iterar:

W = W + X_4 = [0.8, 0.9, -2.5] + [1, 1, 1] = [1.8, 1.9, -1.5]

f(W \cdot X_1) = f(1.8*0 + 1.9*0 -1.5*1)= f(-1.5) = 0

f(W \cdot X_2) = f(1.8*0 + 1.9*1 -1.5*1) = f(0.4) = 1

El valor deseado para X_2 es 0, pero se obtiene 1, por lo que se resta dicha entrada de los pesos y se vuelve a iterar:

W = W - X_2 = [1.8, 1.9, -1.5] - [0, 1, 1]  = [1.8, 0.9, -2.5]

f(W \cdot X_1) = f(1.8*0 + 0.9*0 -2.5*1)= f(-2.5) = 0

f(W \cdot X_2) = f(1.8*0 + 0.9*1 -2.5*1) = f(-1.6) = 0

f(W \cdot X_3) = f(1.8*1 + 0.9*0 -2.5*1) = f(-0.7) = 0

f(W \cdot X_4) = f(1.8*1 + 0.9*1 -2.5*1) = f(0.2) = 1

Finalmente la red retorna el valor deseado para cada entrada y el algoritmo termina.

Convergencia

Se puede demostrar matemáticamente que el algoritmo converge (encuentra una solución) en un número finito de pasos cuando se aplica sobre un conjunto de valores linealmente separables. Donde el número máximo de pasos dados será siempre igual o menor que:

\bigg(\cfrac{R}{\gamma}\bigg)^2

Siendo R la distancia al valor más alejado del centro de coordenadas, y \gamma (gamma) la distancia al valor más cercano a la frontera de decisión.

También se puede demostrar que el algoritmo tiene las mismas limitaciones que tiene el Perceptron. Es decir, que sólo puede clasificar conjuntos de valores linealmente separables. Siendo el ejemplo paradigmático de esta limitación el problema de tratar de implementar una puerta XOR con una única neurona artificial.

Frontera de Decisión Imposible - Puerta XOREl algoritmo no converge para este caso. No existe ningún vector de pesos que defina una frontera de decisión que separe los valores en dos clases. El algoritmo siempre estaría oscilando entre una clase y otra. Clasificaría un valor de una clase a un lado. A continuación detectaría que hay un valor de la otra clase mal clasificado, y vuelta a empezar.

También es importante notar que el algoritmo no resulta práctico de aplicar en redes neuronales con varias capas. Ya que ello implica que el error en cada neurona de cada capa debe corregirse de forma individual. Es decir, que es necesario disponer de antemano de la salida esperada en todas y cada una de las neuronas de la red. Información de la que habitualmente no se dispone, ya que lo habitual es tener un conjunto de entradas y el resultado esperado a la salida de la red, no la salida esperada en cada neurona de la red.

Función de Activación Revisitada

Las funciones de activación determinan la salidas de las neuronas, es decir, como varían en función de las entradas y los pesos. Las funciones de activación de tipo escalón, como la función escalón unitario, resultan útiles para implementar sistemas de clasificación, pero a costa de transicionar de forma muy brusca de un valor a otro. Lo que desde un punto de vista matemático quiere decir que no son continuas, y por tanto no derivables en todos sus puntos.

Función de Activación - Escalón Unitario

Este comportamiento de las funciones de tipo escalón tiene una gran influencia en los algoritmos de Aprendizaje Automático basados en proponer una configuración inicial de pesos, probar dicha configuración contra una serie de entradas cuya salida esperada se conoce de antemano, y corregir la configuración en función del error cometido.

Utilizando una función escalón es posible cambiar el valor de los pesos de una neurona de forma significativa y que su salida siga siendo la misma. Lo que quiere decir que la salida no es proporcional a la magnitud del error cometido que ha motivado el cambio de los pesos. Las neuronas de una capa no reciben ninguna información acerca del error cometido en la capa previa. El error no se propaga a través de la red.

Una mejor opción por tanto es utilizar funciones de activación continuas y derivables en todos sus puntos. La derivada de una función permite cuantificar el efecto que tiene en la salida la variación de la entrada. Al utilizar funciones de activación derivables se puede obtener su derivada, y consecuentemente, se puede cuantificar el efecto que tiene en la salida variaciones en las entradas o en los pesos.

Función Sigmoide

Un ejemplo de función activación derivable y continua en todos sus puntos es la función sigmoide, también conocida como función logística simple:

\sigma(x) = \cfrac{1}{1 + e^{-x}}

Esta función \sigma (sigma) convierte los valores negativos en 0 y los positivos en 1, de forma brusca en los extremos, y de forma más suave en las proximidades del centro del eje de coordenadas, siendo derivable en todo el intervalo.

Función de Activación - Sigmoide

La salida de esta función puede interpretarse como un cálculo de probabilidades. La probabilidad de que una entrada pertenezca a la clase 1. Los valores netos positivos tienen una mayor probabilidad de pertenecer a la clase 1, de activar la neurona, y los valores negativos una menor probabilidad de pertenecer a la clase 1, de inhibir la neurona. Característica por la que la función sigmoide se utiliza habitualmente para construir sistemas de regresión, que realizan predicciones en vez de clasificaciones.

La función escalón unitario condiciona la clasificación de las entradas en función única y exclusivamente del signo del producto escalar. Si es negativo la entrada se clasifica como perteneciente a la clase 0, en caso contrario como perteneciente a la clase 1. Es decir, una entrada tiene un cincuenta por ciento de probabilidad de pertenecer a una clase u otra.

La función sigmoide en cambio realiza una predicción en función del signo y la magnitud del producto escalar. Las entradas tienen una probabilidad de pertenecer a una clase u otra que varía en función del valor del producto escalar en las proximidades de cero.

Utilizar la función sigmoide no cambia el hecho de que el algoritmo de aprendizaje no converge si el conjunto de datos en estudio no es linealmente separable. Pero permite construir una red neuronal que retorne la probabilidad de que una entrada pertenezca a una clase u otra, frente a la función escalón que retorna siempre una clase sin ninguna otra información que permita cuantificar la exactitud de dicha clasificación.

En el siguiente diagrama está representada una frontera de decisión sobre un conjunto de valores que no es linealmente separable.

Frontera de Decisión - Sigmoide

Cuando se introduce una entrada en la neurona la función de activación sigmoide retorna la probabilidad de que dicha entrada esté correcta o incorrectamente clasificada en función de su posición con respecto a la frontera de decisión. De esta forma, la red informa de que los puntos A y B tienen una alta probabilidad de que estén correctamente clasificados en sus respectivas clases, mientras que los puntos C y D tienen una probabilidad de que no lo estén, pequeña para C y grande para D.

Existen otras funciones de activación más populares hoy en día que la función sigmoide, pero es importante en la medida que fue la función que se introdujo originalmente cuando se desarrollaron los algoritmos de Aprendizaje Automático.

Derivada

La derivada de la función sigmoide presenta la característica de que puede escribirse haciendo referencia a la propia función sin derivar de la siguiente forma:

\sigma'(x) = \sigma(x)(1 − \sigma(x))

Expresión que puede obtenerse partiendo de las siguientes reglas generales del cálculo de derivadas:

\big(u(x)^{-1}\big)' = -u(x)^{-2} u'(x)

\big(a u(x) + b v(x)\big)' = a u'(x) + b v'(x)

\big(e^{u(x)}\big)' = e^{u(x)} u'(x)

Desarrollando la expresión de la derivada:

\sigma'(x) = \cfrac{d}{dx} \left( \cfrac{1}{1 + e^{-x}} \right) = \cfrac{d}{dx} (1 + e^{-x})^{-1} = -(1 + e^{-x})^{-2} \cfrac{d}{dx} (1 + e^{-x})

= -(1 + e^{-x})^{-2} \left( \cfrac{d}{dx} (1) + \cfrac{d}{dx} (e^{-x}) \right) = -(1 + e^{-x})^{-2} \left( 0 + \cfrac{d}{dx} (e^{-x}) \right)

= -(1 + e^{-x})^{-2} \left( e^{-x} \cfrac{d}{dx} (-x) \right) = -(1 + e^{-x})^{-2} (-e^{-x}) = (1 + e^{-x})^{-2} e^{-x}

= \cfrac{e^{-x}}{(1 + e^{-x})^{2}}

Y simplificando la ecuación obtenida:

\sigma'(x) = \cfrac{e^{-x}}{(1 + e^{-x})(1 + e^{-x})} = \cfrac{1}{1 + e^{-x}} \cfrac{e^{-x}}{1 + e^{-x}} = \cfrac{1}{1 + e^{-x}} \cfrac{e^{-x} + 1 - 1}{1 + e^{-x}}

= \cfrac{1}{1 + e^{-x}} \left( \cfrac{1 + e^{-x}}{1 + e^{-x}} - \cfrac{1}{1 + e^{-x}} \right) = \cfrac{1}{1 + e^{-x}} \left( 1 - \cfrac{1}{1 + e^{-x}} \right)

=\sigma(x)(1 − \sigma(x))

Aprendizaje Automático Supervisado

Es importante entender en este punto que las técnicas de Aprendizaje Automático representan un cambio de paradigma. En el desarrollo tradicional de aplicaciones las reglas que resuelven un problema se escriben de manera explícita. Sin embargo, utilizando técnicas de Aprendizaje Automático, las reglas se infieren de forma automática. Una vez inferidas las reglas se puede introducir cualquier conjunto de datos de entrada en la red neuronal, incluso datos no utilizados originalmente para inferir las reglas, y obtener una respuesta como en cualquier aplicación tradicional.

Cuando el algoritmo utilizado para inferir las reglas necesita un conjunto de datos previamente clasificado se define como Aprendizaje Automático Supervisado, debido a que los datos de entrada deben ser supervisados manualmente antes de poder ser utilizados para entrenar la red neuronal.

La necesidad de dicho conjunto de datos es uno de los inconvenientes de estas técnicas. Ya que si se quiere entrenar una red neuronal para que distinga si una imagen contiene una mesa o una silla hay que proporcionar al algoritmo imágenes indicando para cada una de ellas si contiene una mesa o una silla.

Otro inconveniente es la necesidad de diseñar manualmente la topología de la red neuronal. Es decir, decidir el número de capas, el número de neurona por capa y la función de activación en cada capa. Esto es más importante de lo que pueda parecer a priori, ya que si la red no tiene la capacidad suficiente no podrá resolver el problema. Por ejemplo, no se puede modelar una puerta XOR con una única neurona.

IA: Redes Neuronales (8)

Todas las redes neuronales vistas hasta ahora han sido diseñadas manualmente, escogiendo una topología y parámetros de configuración adecuados para cada problema. Esto era factible en la medida que los problemas eran sencillos, se conocían todas las entradas y salidas, y se podían deducir las relaciones existentes entre las mismas. En la práctica, los tipos de problemas que se intentan resolver mediante redes neuronales son complejos y las relaciones nada evidentes. Es por ello que se aplican técnicas de Aprendizaje Automático, capaces de encontrar los parámetros de configuración adecuados para resolver un problema concreto.

Vector de Pesos Revisitado

Los pesos se han tratado hasta ahora como una forma de ponderar las entradas con el objetivo de dar mayor importancia a unas que otras. Pero en la práctica, el estudio de la relación entre el vector de pesos y los vectores de entrada representa el primer paso para la elaboración de un procedimiento de Aprendizaje Automático.

Los vectores de pesos y entradas se relacionan a través de la función de cálculo del valor neto, que puede escribirse como el producto escalar entre ambos vectores:

z = \displaystyle\sum_{i=1}^{n} w_i x_i = W \cdot X = |W||X|\cos{\theta}

El producto escalar representa una forma de calcular el ángulo \theta (theta) que forman dos vectores entre sí. Cuando los vectores apuntan en la misma dirección el coseno es 1 y el valor del producto escalar es positivo. Cuando los vectores son perpendiculares el coseno es 0 y el producto escalar es cero. Cuando los vectores apuntan en direcciones opuestas el coseno es -1 y el producto escalar es negativo. En posiciones intermedias el signo depende del ángulo concreto que forman los vectores.

Producto EscalarLo que se puede interpretar diciendo que el valor neto es una medida de la diferencia del vector de entradas con respecto al vector de pesos. Cuanto más semejantes sean las entradas de los pesos mayor será el neto. Y cuanto más distintas sean menor será el neto.

Recordando que la función de cálculo del valor neto define un hiperplano formado por todos los puntos que se encuentran sobre la superficie definida por la siguiente ecuación:

W \cdot X

Y que la frontera de decisión sobre dicho hiperplano está formada por los puntos que cumplen la siguiente expresión:

W \cdot X = 0

Debe ser claro que para que se cumpla dicha expresión debe ocurrir que el producto escalar sea cero, o lo que es lo mismo, que W y X sean perpendiculares. O dicho de otra forma, que la expresión de la frontera de decisión representa el conjunto de todos los vectores X perpendiculares a W .

Esta nueva interpretación de la relación entre el vector de pesos y los vectores de entrada permite obtener otra visión del funcionamiento interno de una neurona artificial. Por ejemplo, consideremos una neurona artificial que implementa una puerta lógica NOT.

Neurona Artificial - Puerta NOTEsta neurona tiene un vector de pesos de dos dimensiones:

W = [-1, 0.5]

Y dos posibles vectores de entrada, uno para el valor negativo y otro para el positivo, siguiendo el criterio habitual de que 0 es negativo y 1 positivo:

X_1 = [0, 1]

X_2 = [1, 1]

El vector de pesos es perpendicular a la frontera de decisión, por lo que conociendo dicho vector se puede determinar la frontera. Y examinando la orientación de los vectores de entrada con respecto al vector de pesos se puede determinar en qué lado de la frontera se encuentran.

Frontera de Decisión - Puerta NOTEl resultado se puede verificar examinando el signo del producto escalar entre el vector de pesos y cada uno de los posibles vectores de entrada:

W \cdot X_1 = (-1) * 0 + 0.5 * 1 = 0.5

W \cdot X_2 = (-1) * 1 + 0.5 * 1 = -0.5

Para el primer vector de entrada el producto es positivo, así que se encuentra en el mismo lado que el vector de pesos. Para el segundo vector es negativo, así que se encuentra al otro lado.

Este procedimiento es válido para cualquier número de dimensiones, por lo que de forma general se habla de vectores ortogonales, en vez de perpendiculares. A partir de tres dimensiones resulta difícil de representar, por lo que es mejor pensar en el vector de pesos como un patrón que identifica un conjunto de características determinadas que se quieren analizar, de forma que cada entrada introducida en la neurona se compara con dicho patrón con el objetivo de obtener un valor que indica su grado de similitud. Si son muy similares entonces el valor es alto y la neurona tiene una mayor probabilidad de activarse.

Para entender mejor esto se puede pensar en vectores que tengan algún tipo de interpretación semántica, en vez de considerarlos sólo como un conjunto de números cualesquiera. Por ejemplo, en un sistema de clasificación de imágenes, donde una neurona puede estar dedicada a detectar un determinado patrón de píxeles, con su vector de pesos W representando un patrón de 3 filas y 3 columnas de píxeles en forma de cruz. De forma que contra dicho patrón se pueden comparar imágenes de entrada cualesquiera, como X_1 X_2 .Vector de Pesos - PatrónLa primera imagen no se asemeja en absoluto al patrón, la segunda sólo se diferencia en un par de píxeles. Al calcular el producto escalar se obtiene un valor de la semejanza de cada imagen con el patrón definido por el vector de pesos. La imagen que más se parece al patrón obtiene un valor más alto y tiene mayor probabilidad de activar la neurona.

IA: Redes Neuronales (7)

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.Función 2DY 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.

Fronteras de Decisión - Función 2DUna 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.Red Neuronal - Función 2D

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.Fronteras de Decisión - Función 2DEn 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.

IA: Redes Neuronales (6)

El modelo de neurona artificial utilizado hasta ahora para modelar puertas lógicas y clasificar nubes de puntos es adecuado para trabajar con un rango de valores discretos conocidos. Pero en la práctica se puede trabajar con dicho modelo en cualquier rango de valores numéricos de una forma más genérica. Para facilitar la explotación de esta característica es conveniente revisar el propio diseño de neurona artificial.

Neurona Artificial Revisitada

En el diseño original de neurona artificial existe una dependencia entre la función de activación y el umbral de activación. Se presupone que todas las funciones de activación realizan una clasificación en base a dicho umbral.

Neurona ArtificialSin embargo, el umbral de activación es una característica de las neuronas que puede incorporarse al cálculo del valor neto de una forma natural, eliminando su dependencia con la función de activación.

El valor neto se calcula como la suma ponderada de las entradas por los pesos. Si a dicho neto se le resta el umbral de activación, y el resultado es negativo, se puede interpretar que no se ha alcanzado el umbral. Si es cero es que está justo en el umbral. Y si es positivo es que se ha superado el umbral. De esta forma es el propio signo del valor neto el que puede indicar si se ha superado o no el umbral, y se puede eliminar esa responsabilidad de decidir si se ha superado o no el umbral de la función de activación.

Neurona Artificial

En este diseño se introducen los siguientes cambios:

  • Al vector de valores de entradas se le añade un nuevo elemento con valor 1 :

X = \begin{bmatrix} x_1 \ldots x_n, 1 \end{bmatrix}

  • Al vector de pesos se le añade un nuevo elemento con valor b :

W = \begin{bmatrix} w_1 \ldots w_n,  b \end{bmatrix}

Siendo b el «sesgo», del inglés «bias», que sustituye al umbral de activación:

b = -T

  • El cálculo del valor neto de entrada incluye el sesgo:

z = \displaystyle\sum_{i=1}^{n-1} w_i x_i + b

Expresión que a veces se formula mediante el producto escalar:

z = W \cdot X

O como producto de matrices:

z = WX^T , siendo X^T la matriz traspuesta de X

  • La función de activación escalón se sustituye por la función escalón unitario, del inglés «unit step»:

f(x) = \begin{cases} 0 & \quad \text{if } x < 0 \\ 1 & \quad \text{if } x \geq 0 \end{cases}

Esta función activa la neurona cuando el neto es mayor o igual que cero.

Este diseño es totalmente equivalente al utilizado anteriormente, pero tiene la ventaja de que permite tratar todos los parámetros de manera homogénea con tan sólo dos vectores.

Interpretación Geométrica Revisitada

Añadir el sesgo al cálculo del valor neto de entrada implica añadir un término independiente a la combinación lineal de las entradas por los pesos.

En el caso más sencillo, con una única entrada x_1 , la función del cálculo del valor neto es la ecuación de una recta de la forma:

w_1 x_1 + b

Donde w_1 es la pendiente de la recta y b el punto de corte con el eje de ordenadas. Es decir, la superficie definida por la función del valor neto sigue siendo una recta, pero en vez de cortar siempre el eje de ordenadas en el origen ahora lo hace en el punto b .

Por su parte, la función de activación ahora define una frontera de decisión sobre dicha recta de la forma:

w_1 x_1 + b = 0

Lo que quiere decir que la frontera de decisión ahora es siempre el punto de corte de la recta con el eje de abscisas.Frontera de Decisión - 2DEsto no implica grandes cambios con respecto al diseño anterior en la medida que se puede seguir trazando cualquier recta. La única diferencia es que ahora la frontera de decisión siempre es el eje de abscisas. Lo que se corresponde con la idea antes planteada de que el signo del valor neto determina si se ha superado o no el umbral de activación.

Por su parte, para el caso de dos dimensiones, la superficie definida sigue siendo un plano. El término independiente b en la ecuación del plano tiene el mismo efecto que en la ecuación de la recta, haciendo que el plano ya no corte siempre el origen de coordenadas. 

w_1 x_1 + w_2 x_2 + b

Igualmente, la frontera de decisión sigue siendo una recta sobre el plano. 

w_1 x_1 + w_2 x_2 + b = 0

Sólo que ahora dicha recta se corresponde siempre a la intersección con el plano definido por los ejes sobre los que se representan x_1 y x_2 .

Frontera de Decisión - 3D

La vista cenital no se ve alterada. Ni tampoco el comportamiento para un número mayor de dimensiones, donde se trabaja con hiperplanos.