red neuronal

En estos últimos años hemos visto un crecimiento en algunas ramas de la Inteligencia Artificial, particularmente las que corresponden a las “Redes Neuronales”, las cuales han generado una serie de herramientas interesantes, por parte de varias empresas, para “jugar” con esta idea de que nos puede ayudar en problemas que el cómputo tradicional no puede abordar por su complejidad.

Una red neuronal es un modelo matemático de las neuronas reales, las que tenemos en el cerebro. Se sabe que en una neurona, un estímulo se dispara en ella cuando entre las conexiones a la misma, una suma de impulsos llega a un umbral y entonces aparece el estímulo en la neurona que estamos midiendo.

Es claro que una sola neurona no hace que el resultado sea muy inteligente, pero una red de muchas neuronas permite finalmente que se puedan crear sistemas que reconozcan caracteres en un texto, por ejemplo.

Los avances en este sentido son muy alentadores y tenemos ejemplos como Google, que en su proyecto AlphaGo, logró que una máquina creada como una red neuronal, venciera al mejor jugador del juego de mesa oriental “Go” en un encuentro a 5 partidas.

Google, de hecho, ha puesto a disposición de quien le interese, un sistema llamado TensorFlow, que es un sistema para crear y entrenar redes neuronales.

Desde luego que son sistemas complejos de aprender, pero si son del interés del lector, puede echarse un buen clavado y ver los pros y contras de este enfoque para crear máquinas inteligentes, o bien, que exhiban inteligencia de alguna manera.

Actualmente estoy dando un curso de redes neuronales en la Facultad de Ciencias, y hemos empezado a ver los primeros esfuerzos en este campo, que datan de los años cincuenta del siglo pasado.

El “Perceptrón” es el modelo más simple de una neurona. La neurona es una célula especializada y caracterizada por poseer una cantidad indefinida de canales de entrada llamados dendritas y un canal de salida llamado axón. Las dendritas operan como sensores que recogen información de la región donde se hallan y la derivan hacia el cuerpo de la neurona que reacciona mediante una sinapsis que envía una respuesta hacia el cerebro, esto en el caso de los seres vivos, como indica la Wikipedia.

Para entender cómo funciona un perceptrón, tomemos una neurona de salida que tiene dos entradas, las cuales pueden o no mandar una señal a la neurona de salida. Estas entradas tienen valores y además pesos, los cuales se multiplican a los valores de entrada. La suma de todos los valores de entrada multiplicados por sus pesos da como resultado que la neurona de salida lance un estímulo o bien no haga nada.

perceptron01

Tomemos como problema el querer que la neurona responda a entradas de una compuerta AND, en donde dados los valores de entrada 1 y 2 (Input 1 y 2), nos dé un valor (Output) como el que se ve en la tabla.

La función AND debe pues cumplir con lo siguiente:

perceptron02

Theta es el umbral de salida.

Nosotros podemos asignar los valores que queramos a los pesos. La idea es que el Perceptrón vaya “aprendiendo” de ello cambiando los pesos de acuerdo a los resultados que obtenga. Así, consideremos la siguiente tabla:

perceptron03

con pesos w1 = -0.5 y w2 = 0.5 y umbral Theta = 1.5. Nótese que para que se dispare el estímulo, debe sobrepasarse el umbral. Entonces, podemos ver que si en la Input1 tenemos 1 y en la Input2 tenemos 1, si multiplicamos por sus pesos obtenemos:

I1w1 + I2w2 = -0.5(1) + 0.5(1) = 0

La salida (Output) es 0, pero en la compuerta AND, si los dos valores de entrada son 1, la salida debe dar 1. Consecuentemente tenemos que cambiar los pesos. Rosenblatt, el creador del perceptrón entonces creó una función de costo, que cambia precisamente los pesos. La función se maneja así: Si se esperaba un 1 y se obtuvo un cero, entonces, réstese 1 al umbral y súmese 1 a cada peso. Si en cambio, si se esperaba un 0 y se obtiene un 1, entonces súmese 1 al umbral y redúzcase cada peso en 1.

Si tomamos el caso de las dos entradas 1, que dan como salida 0, entonces cambiamos los pesos a w1 = 1-0.5 y w2 = 1 + 0.5, tendremos entonces w1 = 0.5 y w2 = 1.5. Theta será entonces 0.5 (1.5 – 1). Si aplicamos 1 en cada entrada tendremos:

(1)(0.5) + (1)(1.5) = 2, que sobrepasa el umbral, que es de sólo 0.5. Ahora con estos pesos hay que calcular las entradas 0 y 0, 0 y 1, y 1 y 0. Si dan los resultados correctos ya tenemos los pesos adecuados.

Cabe decir que si al usar unos pesos y un umbral específico, se cumple el valor que esperábamos, no cambiamos nada en la función de costo.

Nótese que esta función de costo es la manera en como cambiar los pesos y esto en la literatura de redes neuronales le llaman “aprendizaje”, aunque este término se maneja de manera muy simplificada.

El Perceptrón es el primer ejemplo de cómo una neurona, moviendo los pesos de sus entradas, reconoce, como en el caso del ejemplo, una compuerta AND y se le conoce a este método como el de propagación hacia atrás de una neurona.

Ahora al reto de la programación lúdica: Hágase un programa que resuelva el perceptrón para la compuerta AND y OR y demuéstrese que para la compuerta XOR el sistema no puede resolverlo (que de hecho, Marvin Minsky y Papert, en los años sesenta, publicaron un libro llamado “Perceptrons”, el cual mostraba las dificultades de este modelo, desanimando a los investigadores a trabajar con esta idea al no poder resolver la compuerta XOR.

Sin embargo, a través de lo que a la postre se llamarían capas escondidas (hidden layers), el problema sería resuelto y eso le dio un nuevo impulso a esta interesante idea de la Inteligencia Artificial).

El programa puede ser escrito en cualquier lenguaje y debe resolver todos los casos de las compuertas AND y OR y probar que cuando se define el XOR, los pesos o se ciclan o crecen siempre cada vez más. Hay que permitir que el usuario defina, en su perceptrón, los pesos de cada entrada, así como la compuerta que se está entrenando.

taza-morsa

¿El premio? Una taza de La_Morsa. Si gana alguien de provincia o de otro país, le mandaré un USB de al menos 8 GB. No les mando la taza porque es estúpidamente costoso pero les puedo mandar el logotipo para que se hagan una taza en algún negocio de su ciudad. La vigencia de este concurso sería de unas tres semanas.

La programación de esta red sale en un par de horas de codificación y puede ilustrar muy bien la idea atrás de las redes neuronales. Sugiero lean la referencia en donde se ponen más ejemplos al respecto.

Referencias: Redes Neuronales (Perceptrones) 

Enlaces Patrocinados
Comentarios