viernes, agosto 18, 2006

Mi propia mini-introducción a lo que son las Redes Neurales Artificiales

Me decidí a publicar en este blog algunas ideas que tengo en el tema de las Redes Neurales Artificiales. Sin embargo esto que escribiré en estos días no va a tener mucho sentido para quienes no han tenido la oportunidad de entrar en el tema de las redes neurales artificiales (que llamaré RNAs), entre otras cosas. Por eso, voy a contarles poco a poco, para que mis palabras sean menos extrañas. ¡Espero no ser muy aburrido!

Empecemos con las RNAs:

Una RNA no es más que una función matemática. Es decir, es una expresión matemática que recibe unos datos de entrada (se realizan ciertas operaciones con esas datos, utilizando unos parámetros (valores conocidos que forman parte de la RNA), y al final la función arroja un resultado. Lo que tienen estas funciones, que hace que se les pueda llamar RNAs, es que son funciones compuestas por muchas funciones muy sencillas, que se originaron, en principio, tomando como inspiración el modelo de una neurona (biológica).

Una neurona artificial (cada una de las funciones sencillas) tiene (a su vez) unos datos de entrada, que son la metáfora de los "estímulos" que recibe una neurona biológica. Tiene también una función de activación, que define la decisión que ella toma, en términos de "exitarse" o "inhibirse". Si los estímulos "satisfacen" a la neurona (dependiendo de "lo que diga" la función de activación), la salida o respuesta de la neurona es "grande", representando la "excitación" de la misma. De igual forma, si los estímulos no son los que "satisfacen" a la neurona, la salida de la neurona es baja, representando la inhibición.

Ejemplo: la función escalón..

Esta es una que dice: "¡Okey! si lo que me das (entrada) es positivo, te responderé con un 1 (respuesta o salida). Si lo que me das es negativo, entonces me pongo pichirre y mi respuesta será nula, es decir 0". La salida = 1 sería la de excitación, y la otra la de inhibición. La función de activación sería la "función escalón", centrada en "0". Eso de centrada en "0" se refiere a que el valor con el que se está comparando la entrada (preguntándose si es mayor o menor) es "0". Ese valor con el que se compara, también es llamado "umbral".

Ahora veamos: si lo que sale de una nerona, lo consideramos la entrada a otra neurona con otra función de activación (no necesariamente igual), entonces, en términos de "redes", la estaríamos "conectando". Varias neuronas artificiales "conectadas" entre si, conforman una RNA. Si se representa cada neurona como un círculo, y cada conexión como una flecha, podemos ver por qué se le llama Red.

(Cuando publiqué esta entrada inicialmente, escribí esto: "Todavía no se como mostrar una imágen acá en mi blog, así que pido disculpas por no ponerles un ejemplo... pero visiten wikipedia buscando Neural Networks y podrán ver la imágen que quería poner", tras lo cual mi estimada "Aire" me dejó su comentario dándome luces sobre el procedimiento para publicar!)

En la Figura 1 les he colocado una imágen que saqué de wikipedia, que representa una RNA.

Figura 1: Red Neural Artificial de Realimentación Positiva y una sola capa oculta

Volviendo al tema, nótese que:
* hay muchas "arquitecturas" de como se conectan entre si las neuronas en una RNA
* hay muchas funciones de activación, aparte del escalón.

Variando estas dos características, se obtienen RNAs que pueden servir para muchas cosas. Entre otras cosas, satisfacen necesidades no atendidas por el cómputo clásico:
* Su respuesta depende de operaciones paralelas que pueden ser masivas,
* También pueden hacerse las operaciones de forma distribuída,
* Pueden aprender,
* Pueden generalizar,
* Pueden adaptarse,
* Pueden procesar información inherente a un contexto,
* Pueden tolerar fallas (que alguna de las neuronas no funcione),
* Si se implementan en forma electrónica, son dispositivos de bajo consumo de energía.

En general, es curioso que aunque no son redes neurales biológicas, las RNAs son parecidas a estas en que, a diferencia de las arquitecturas de cómputo clásicas, su desempeño es EXCELENTE en problemas "perceptivos" como el reconocimiento de patrones. Normalmente estas tareas resultan tremendamente complicadas para los métodos clásicos.

Se usan para:
* Clasificación de patrones (reconocimiento de caracteres, voz, imágenes de rostros, tipos de ondas, tipos de células sanguíneas, inspección de circuitos electrónicos impresos en tarjetas, diagnosis médica),
* Agrupamiento (un algoritmo "explora" las similitudes entre diferentes patrones, y define grupos en los que los coloca,... esto es usado en data mining, compresión de información y análisis exploratorio de datos, por ejemplo...),
* Aproximación de Funciones (se tienen un conjunto de puntos que pertenecen a una superficie "desconocida", que la RNA puede aproximar, tratando de pasar cerca de todos los puntos conocidos, y de poder predecir el comportamiento de la función en regiones donde no se conocen puntos),
* Pronósticos (esto es muy importante y necesario para la toma de decisiones en la gestión empresarial, la ciencia y la ingeniería... ejemplos conocidos comprenden la predicción de valores en la bolsa y la predicción de condiciones meteorológicas),
* Optimización (hay problemas en matemáticas, ingeniería, estadística, medicina, economía... que se pueden entender como si fueran problemas de optimización. La idea es encontrar una solución que satisfaga unas ciertas restricciones de tal forma que una cierta función, llamada "objetivo", sea maximizada o minimizada),
* Control (hay problemas en los que un sistema que cambia en el tiempo, necesita ser estabilizado.. por ejemplo, las vibraciones de un avión ante turbulencias, que deben ser compensadas por los alerones para que la cabina esté estable... Si ese fuese el caso de control a ser resuelto, una RNA puede comportarse de forma adaptativa para controlar de manera correcta el movimiento de los alerones),

¡Como puede verse, sus aplicaciones son MUY variadas!

Antes de despedirme en esta entrada (porque ya debería ponerme a trabajar), quería aclararles que una RNA se adapta, aprende, generaliza, etc... ¡pero no lo hace sola! ... por lo general. Lo que se hace, cuando el entrenamiento es supervisado (vean wikipedia si quieren saber lo que eso significa con más detalle), es lo siguiente:
1) Darle a la red una entrada, para la que sabemos qué es lo que quisiéramos que la RNA respondiera (es decir, la salida deseada es conocida),
2) Vemos qué fue lo que respondió la RNA, y lo comparamos con lo que debería haber respondido
3) En base a cuánto se equivocó la RNA, se ajustan las características de la RNA, para que la próxima vez no se equivoque con ese ejemplo. Los parámetos son cambiados de forma apropiada, como "castigo" por haber dado una respuesta equivocada.

Luego de que una RNA ha aprendido lo suficiente como para responder bien ante una buena cantidad de ejemplos, se fijan los parámetros, y la RNA está lista para ser utilizada.

Es como cuando un niño muy pequeño no sabe la diferencia entre un caballo y un perro. El señala a un caballo y trata de adivinar.. "¡papá! ¿ese es un perro?", y el padre responderá, si la conjetura es errada, "¡no hijo! ese es un caballo bebé".. y así sucesivamente. El niño irá construyéndose su propia idea de lo que es un caballo y lo que lo diferencia de un perro, y eventualmente (luego de preguntar unas 20 veces, a lo mejor) no necesitará preguntar más a su papá si el caballo hay que sacarlo a pasear, o si puede montarse en el perro grande que está por allá... ;o)

Esto es muy distinto a que uno le diga al niño que vea si tiene pezuñas o uñas, dientes planos o "puyúos", si hace "Guau" o "gruñe", y que en base a eso sepa si es caballo o perro. Acá el niño no estaría aprendiendo en base a experiencias propias, sino que tendría una listita de cosas que resumen la experiencia del papá.

Bueno.. esto es todo por ahora...

Espero al menos haber dejado la sensación de que las RNAs son algo muy útil e interesante, y que realmente no es más que una forma de armar funciones matemáticas, y no una tecnología demasiado complicada y ajena a lo que pudimos aprender en la escuela secundaria.

Si desean conocer mi trabajo de grado en el área de RNAs, pueden visitar mi página web y allí descargar el pdf.

¡Nos vemos en el espejo!

Orestes

PD: son bienvenidos los comentarios, sugerencias, críticas constructivas, preguntas... ehh.. ¡y los comentarios jocosos también!

4 comentarios:

Aire dijo...

¡Holaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!

¡¡¡Soy María Eulalia, por si no te acuerdas de mí!!! :P

Me alegra saber que has entrado en la blog manía jajajajaja, y en especial he de decirte que me gusta muchísimo este post: últimamente me ha llamado la atención estos temas y tenía ganas de aprender algo de ellos. Ya sé a quien debo preguntarle jejejeje.

Otra cosa: me gustaría citarte en mi página http://airevirtual.blogspot.com/ Usaré este artículo para ello, si no te molesta...

Te mando un beso. ¡Un placer re-encontarte! Extraño el mundo USB snif....

María Eulalia, alias Aire

Orestes dijo...

Saludos doncella!!!!
Cuando quieras te echo los cuentos respecto a esto, en aquello que sea lo que te llama la atención.. pues es un mundo muuuy grande! jeje

Por otro lado, CLARO QUE NO ME MOLESTA que me cites.. jeje.. ;o) lo que no se es si a la gente le va a interesar este artículo en particular! jejeje! Ya te estoy agregando a mis links del blog.

No extrañes el mundo USB, llévalo contigo! ;oP

Aire dijo...

Gracias lokillo :)

Te mando un beso grande. Ya te copio a mi página.

¡Ah! Para las imágenes: Mira, hay dos formas de hacerlo:

1) Al crear un mensaje nuevo, si vas a la sección que dice "Redactar", pues observarás unos botoncitos que incluyen uno de imagen... allí le das click y sigues los pasos.

2) Si escoges la sección que dice html y tienes una imagen en la web con una dirección específica, puedes añadirla colocando:

‹img src="http://tuimagen.jpg"›

Y listo. En esta página: http://es.tldp.org/Manuales-LuCAS/doc-curso-html/doc-curso-html/index.html podrás encontrar algo más sobre este tipo de pequeños detalles de html.

Cualquier duda, llame a 800-MARIA

Saludos :)

P.D. En esta página: http://imageshack.us/ puedes subir imágenes a la red completamente gratis.

Yukino M. dijo...

Ajá... si así manejas neuronas, puede que se te haga complicado :I

...Sólo imagínate el trauma de ese niño cuando vaya con su mami y le diga emocionado "Mira mami, un caballo bebé!" Y la madre le conteste "No hijo, eso es un POTRO".

Qué barbaridad la tuya de crear traumas a infantes. tsk, tsk, tsk.

No me convences ;P

Un besito.
Yukino M.

P.D.: Muy lindo tu blog... ;)

Nube de Fragmentos (¿ah?)