Muchas veces oigo la pregunta “¿cómo puede funcionar bien la informática en un mundo que no es binario?” La verdad es que es una buena pregunta porque la lógica en que se basa la informática es binaria o discreta (los valores son 0 o 1, frío o calor… ), mientras que el mundo que nos rodea no lo es porque tenemos valores intermedios. Lo positivo es que hace tiempo ya se pensó en este problema y se encontraron dos soluciones bastante ingeniosas para que un robot pueda vivir en un ambiente tan complejo como el mundo real. ¿Queréis saber cómo se las apaña un robot para manejarse en un entorno tan complicado como el nuestro? Pues seguidme, que os lo voy a explicar.
Lógica difusa
La lógica difusa o fuzzy logic, también conocida como lógica borrosa, la postuló el ingeniero y matemático Lotfi A. Zadeh en 1965. Para comprenderla imaginemos un grifo, para un sistema binario el agua saldría fría o caliente mientras que para nosotros el agua puede estar fría, templada tirando a fría, templada tirando a caliente y caliente. Si cada uno de estos estados puede englobar muchas temperaturas, ¿cómo podría nuestro robot apañarse en tal galimatías? Un sistema difuso maneja esto de una forma muy sencilla: mediante conjuntos borrosos. Un conjunto borroso es una clase definida por una condición relajada, esto es: una variable puede pertenecer en distintos porcentajes a varios conjuntos borrosos. Para simplificar esta idea, que a priori puede parecer confusa, veamos el ejemplo del agua del grifo:
En la figura los conjuntos se solapan, por lo que podemos tener valores de temperatura que están dentro de varios conjuntos. Imaginemos que detectamos una temperatura de 15ºC: si vemos la figura, esta temperatura toca en una gran proporción el valor templado pero además toca en una pequeña proporción el valor frío. ¿Qué haría un sistema inteligente para obtener agua caliente? supongamos que la temperatura toca un 75% el valor templado y un 25% el valor frío y que nuestro sistema para pasar de frío a caliente debe dar una potencia media a la caldera para calentar el agua (supongamos 2) y en templado una potencia baja (supongamos 1), el resultado sería 2×0.25 + 1×0.75 = 1.25; por tanto, la potencia de salida que deberíamos dar a la caldera debería ser de 1,25 si nuestro sistema difuso devuelve un valor o potencia baja si nuestro sistema difuso devuelve un conjunto de salida.
Una ventaja de la lógica difusa es su sencillez, lo que da lugar a sistemas muy rápidos a la hora de tomar decisiones. Como desventaja tienen que es difícil encontrar conjuntos difusos y reglas fiables sin la participación de un experto humano. Ejemplos de sistemas que usan lógica difusa los tenemos en los aires acondicionados, las lavadoras también lo usan para decidir la cantidad de agua necesaria y el programa de lavado, el autofocus de las cámaras fotográficas y teléfonos móviles también funciona así y el ejemplo más complejo es el Metro de Sendai en Japón.
Mediante este sistema nuestro robot se manejaría en un entorno no binario de una forma muy rápida y no requeriría mucha potencia de cálculo. Ahora bien, imaginemos que nuestro robot se va a mover en un universo muy complejo que no se puede representar por conjuntos borrosos, imaginemos que además el mundo que le rodea es cambiante. En este caso necesitaríamos que nuestro robot aprendiese a trabajar en ese entorno y que aprenda de sus aciertos para ser cada vez más eficaz, para esto necesitaremos que nuestro robot tenga una Red Neuronal Artificial.
Redes Neuronales Artificiales
Las redes neuronales se inspiran en el funcionamiento del sistema nervioso biológico. Una red neuronal es un conjunto de unidades de proceso simples conectadas entre sí para la realización de una tarea compleja. El conocimiento del entorno está repartido en estas unidades elementales y esta red es capaz de aprender a comportarse, bien mediante un entrenamiento previo o bien de forma paralela a su funcionamiento. Para entender esto pongamos el ejemplo de una persona conduciendo: antes de poder conducir recibe un entrenamiento previo supervisado por un profesor. Una vez entrenado y con el carnet de conducir si se encuentra una situación nueva la resuelve como puede y, si lo logra con éxito aprende a solucionar la situación, mientras que si se equivoca corrige hasta lograr hacerlo bien.
Veamos cómo es una red neuronal:
En la figura podemos ver la topología típica de una red neuronal, ésta se compone de varias neuronas en diferentes capas. Como se observa en la figura, cada neurona tiene una serie de entradas (X1, X2, X3, …, Xn) y una salida. También se aprecia una entrada etiquetada como Wb, denominada bías, que se usa para ajustar la red neuronal y simplificar el entrenamiento. El cuerpo de la neurona no es más que una función matemática, las más empleadas son las funciones sigmoidales y las gaussianas. El aprendizaje de una red neuronal consiste en dar valor a los pesos (W1, W2, W3, …, Wn en la figura), estos pesos se multiplicarán con el valor de entrada. Cuando vemos este esquema vemos dos inconvenientes:
- No podemos garantizar que el proceso de aprendizaje sea correcto: no sabemos realmente si nuestro robot ha aprendido bien, sólo sabremos si tiene muchos o pocos aciertos.
- No podemos extraer el conocimiento adquirido por la red neuronal en forma de reglas sencillas: realmente no sabemos qué ha aprendido, sólo sabemos el valor de unos pesos.
Como podemos ver, la red neuronal se comporta como una caja negra: nuestro robot haría su trabajo y se adaptaría a situaciones nuevas pero no podemos saber cómo lo hace. Para que se adapte bien al entorno debemos diseñar muy bien la red neuronal porque la capacidad de adaptación depende del número de neuronas localizadas en la capa oculta de la red neuronal (las marcadas como Y1, Y2, Y3 en la figura). Si este número es demasiado pequeño nuestro robot no será capaz de aprender, pero si es demasiado grande perderá la habilidad de generalizar. También a mayor cantidad de neuronas ocultas habrá más conexiones entre neuronas y, por tanto, más pesos que se deben determinar. Como consecuencia de esto, se necesitará más entrenamiento. Otra parte en la que debemos esforzarnos es en entrenarle bien, con un mal entrenamiento se equivocará mucho cuando trabaje en su entorno real y necesitará más tiempo para adaptarse.
Las aplicaciones típicas de las redes neuronales las podemos encontrar en diagnósticos médicos, análisis de datos económicos, clasificación de imágenes, clasificación de proteínas, en algunos videojuegos para gestionar el comportamiento de los adversarios (por ejemplo el Neuralbot del juego Quake II), etc.
Conclusión
Después de lo que hemos visto podemos decir que no todo es 0 y 1 en informática, existen soluciones no binarias que se adaptan a nuestra realidad cotidiana. Los sistemas difusos y las redes neuronales pueden combinarse y trabajar juntos, por lo que tendríamos un robot que podría sobrevivir y hacer su trabajo sin problemas. Si después de leer esto os animáis a seguir aprendiendo sobre Redes Neuronales y sistemas Borrosos, sólo os pido que hagáis un robot que vacíe el lavavajillas y limpie la cocina (si de paso tira la basura os lo agradecería).
Este artículo nos lo envía Sara Robisco Cavite @SaraRC83, ingeniera en informática por la Universidad de Alcalá de Henares (Madrid) especializada en Inteligencia Artificial. Entusiasta de la ciencia y del arte, vive siempre aprendiendo.
Si tienes un artículo interesante y quieres que lo publiquemos en Naukas como colaborador invitado, puedes ponerte en contacto con nosotros.