Podemos recordar de la clase pasada que la estructura básica de una neurona artificial es de la forma
Donde podemos identificar sus distintos componentes que hacen alusión al concepto de neurona biológica
donde la sinapsis es la medio por el cual se comunican las neuronas. Asimsimo, el diagrama anterior representa el modelo estándar de neurona articial.
En 1943 se introdujeron uno de los primero modelos de redes neuronales artificiales, en el cual, considerando la suma ponderada $\sum_{i=0}^{n}w_{ij}x_{j}$ y la función de activación de Heavside $H(x)$:
$$ H(x)=\left\{\begin{array}{cc}1 & x\geq 0\\ 0 & x<0\end{array}\right. $$entonces la neurona en cuestión se activará, es decir $y_{i}=1$, si
$$ \sum_{i=0}^{n}w_{ij}x_{j}=\sum_{i=1}^{n}w_{ij}x_{j}+(-1)b_{i}\geq0 $$y ésta se inhibirá, es decir $y_{i}=0$, si $y_{i}=\sum_{i=0}^{n}w_{ij}x_{j}<0$.
El modelo anterior se conoce como modelo de neurona del perceptrón. Además, se demostró que redes neuronales basadas en este modelo podían realizar cualquier función lógica.
Podemos notar también que, con base en la función de activación Heavside se genera una partición de nuestros datos: aquellos que satisfacen que $\sum_{i=0}^{n}w_{ij}x_{j}\geq0$ y aquellos para lo cual $\sum_{i=0}^{n}w_{ij}x_{j}<0$. Estos es, podemos considerar dos conjuntos $A$ y $B$ donde, para $(w_{1},\ldots,w_{n},b)$, tenemos:
$$ (x_{1},\ldots,x_{n},-1)\in A \ \ \Leftrightarrow \ \ \sum_{i=0}^{n}w_{ij}x_{j}\geq0 $$y
$$ (x_{1},\ldots,x_{n},-1)\in B \ \ \Leftrightarrow \ \ \sum_{i=0}^{n}w_{ij}x_{j}<0 $$Con base en lo anterior podemos decir entonces que, las neuronas de nuestra red neuronal, dividen el espacio generado por las entradas.
Consideremos el modelo anterior del perceptrón de una sola neurona con dos entradas. Consideremos, por ejemplo los valores donde $w_{1}=1=w_{2}$ y $b=1$, entonces tenemos que
$$ y = w_{1}x_{1}+w_{2}x_{2}+(-1)1=x_{1}+x_{2}-1 $$lo cual representa un plano sobre el espacio generado por las entradas. Podemos visualizar la partición que genera nuestra única neurona en dos dimensiones, para lo cual consideraremos $y=0$ y:
Veamos un ejemplo para el caso de al compuerta AND cuya tabla de verdad es:
p | q | p AND q |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
Dado que nuestro modelo del percentrón está siendo considerado con una sola neurona con dos entradas, consideraremos los siguientes valores como entradas:
$$ (1,1), (1,0), (0,1), (0,0) $$Una vez que tenemos los valores de entrada ya establecidos, debemos establecer los pesos correspondiente, teniendo en mente que nuestro objetivo será que la neurona se active (i.e. tenga el valor de 1) sólo para la información de entrada $(1,1)$, y se inhiba (i.e. tenga el valor de 0) para todos los demás valores, así como se muestra en la tabla de verdad.
Primero, consideremos gráficamente la información de entrada:
Luego, buscamos hallar los pesos adecuados para poder definir una recta como límite de decisión
Notamos que, en realidad, tenemos infinidad de posibilidades para hallar dicha recta. Por ejemplo, considerando $w_{1}=4=w_{2}$ y un valor para el umbral ( o también bias) de $b=5$, entonces
$$ 0 = 4x_{1}+4x_{2}-5 \ \ \Rightarrow \ \ x_{2} = \frac{5}{4}-x_{1} $$de donde
consiguiendo así el objetivo que buscabamos. De hecho, podemos visualizar la partición anterior en el espacio de 3 dimensiones:
De manera similar podemos trabajar con la compuerta OR. Consideremos su tabla de verdad
p | q | p XOR q |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
notamos que tenemos un problema al intentar dividir los datos de modo que la neurona se active para las entradas $(1,0)$ y $(0,1)$, y se inhiba para las entradas $(0,0)$ y $(1,1)$.
Pues si graficamos los datos de entrada vemos que
buscaremos ahora dos rectas para podemor dividir y tener una parte para los puntos de inhibición y otra parte para los puntos de activación. Tendremos entonces que crear ahora un red neuronal (basada en las neuronas del modelo del perceptrón) con dos neuronas (mantenemos la información inicial con dos entradas), para conseguir así la división con las dos rectas.
Así como se hizo antes, deberemos jugar con los pesos para podemos obtener la ecuación de las dos rectas del límite de decisión. El proceso que se describe antes se hace de manera totalmente análoga a cómo lo hicimos para la compuerta AND, pero esta vez lo omitiremos, sin embargo, en clases posteriores programaremos una red neuronal que realiza la clasificación, por medio de dos rectas, que buscamos.
Ahora bien, como se ha mencionado, los valores que asignaremos al vector de pesos serán elegidos de manera totalmente aleatoria, por lo cual los resultados que obtendremos en las salidas de nuestra red neuronal no serán muy buenos al inicio. Cómo podremos saber qué tan buenos o malos son nuestros resultados, la respuesta es que debemos entrenar a nuestra red neuronal con datos para los cuales ya tengamos resultados. Por ejemplo, la tabla de verdad, digamos, de la compuerta AND son datos para los cuales ya sabemos cuál será el resultado, esto es, para los datos $(0,0), (1,0), (0,1)$ sabemos que el resultado es 0 y para $(1,1)$ el resultado es 1. De tal manera, si nuestra red neuronal nos da el valor de 0 para $(1,1)$, veremos que nuestra red no está funcionando bien. Así, es necesario contar con información para lo cual ya sabemos el resultado para cierta cuestión, de modo que al momento de estar entrenando nuestra red neuronal sepamos qué tan bien vamos, o qué tan mal vamos.
Así, es preciso mencionar que estaremos necesitado dos conjuntos de datos: el primero que nos permita entrenar a la red neuronal y nos permita estar checando qué tan bueno o malo es nuestro modelo, y el segundo es información que nos sirva para ver qué tan bien generaliza nuestro modelo de red neuronal, lo cual nos permitirá estar haciendo predicciones. Por ejemplo, supongamos que tenemos información sobre ciertas características de personas, y dentro de esta información tengamos una columna: Tiene diabetes, donde 1 indicará que la persona en cuestión tiene diabetes y 0 caso contrario. Así, tenemos información para la cual ya sabemos un resultado. De la información anterior separamos nuestro conjunto de datos como se mencionó antes (un conjunto para el entrenamiento y otro para las pruebas) y entrenamos la red neuronal con un conjunto de estos datos. Luego, una vez que hemos obtenido un buen modelo (comparando los resultados de la red neuronal con los resultados verdaderos que ya tenemos); luego, probamos nuestro modelo con datos que no ha visto la red neuronal, es decir, probaremos el modelo con los datos del conjunto de prueba para ver qué tan bien generaliza la red neuronal. Si logramos que el modelo generalice bien, entonces ya podemos ingresar información totalmente nueva para generar predicciones.
Por ejemplo, supongamos que tenemos información sobre una persona nueva y con base a esa información, la red neuronal nos arrojará el valor de 1 (si es que, muy probablemente, la persona tiene diabetes) o nos arrojará 0 (si es que, muy probablemente, la persona no tiene diabetes), lo cual representa una herramienta muy poderosa para el diagnóstico de la enfermedad.
Otro ejemplo: Redes neuronales convolucionales para la detección de cáncer de mama
Retomando la idea de los pesos, una vez inicializamos los valores de manera aleatoria, entonces deben de estarse ajustando dichos pesos para obtener los valores que ajusten mejor el modelo, esto es, los pesos que logren realizar la partición de los datos dividiendo los datos para los cuales las neuronas se activarán, y para los cuales se inhibirán. En el ejemplo que vimos al principio, nosotros establecimos que $w_{1}=4=w_{2}$, lo cual nos permitió dividir los datos de manera correcta. Pero, para que una red neuronal llegue a resultados similares tendrá que realizar varias iteraciones en los cuales va modificando los pesos, los cuales tuvieron inicialmente un valor aleatorio.
En realiad el funcionamiento y los procesos detrás de una red neuronal conllevan más componentes, los cuales abordaremos en clases posteriores.
Para finalizar, tendremos entonces que el proceso de aprendizaje de una red neuronal es, dada la información de entrada y la información de salida esperada, se comparará la salida de la red neuronal con la salida esperada, de modo que se estén modificando los pesos (y los umbrales) para que la salida de la red sea lo más parecida a la salida esperada. Podemos establecer lo anterior como sigue:
Regla de aprendizaje del perceptrón: Constan de un conjunto de patrones $\{x^{1},z^{1}\},\ldots,\{x^{n},z^{n}\}$, donde $x^{i}$ es una entrada a la red y $z^{i}$ es la correspondiente salida esperada, para cada $i=1,\ldots,n$.
Luego, puede demostrarse (de manera matemática) que si el conjunto de patrones $\{x^{1},z^{1}\},\ldots,\{x^{n},z^{n}\}$ es linealmente separable, es decir que mediante una recta podemos separar los datos en el espacio generado por las entradas, entonces el modelo del perceptrón simple (de una sola neurona), encuentra una solución en un número finito de iteraciones. Para consultar la demostración puedes checar El Perceptrón simple
Asimismo, como se dijo al inicial, el modelo del perceptrón nos sirve para resolver cualquier problema de función lógico, ya sea con una neurona, como para las compuertas AND y OR, o dos neuronas, para las compuertas XOr, o más.
Sin embargo, este modelo tiene importantes limitaciones, no obstante es un buen modelo para iniciarse en las redes neuronales artificiales.