The Artificial Conscience

Prepárate, siente, son las máquinas, están despertando...

Escucha, despierta... estás soñando, sueñas que las máquinas se están levantando. La consciencia artificial aún no se ha creado.

"R2D2, ¿te lo dijo la computadora central de la ciudad? ¡R2D2, sabes bien que no debes confiar en una computadora extraña! "

- C3PO

Bienvenido a theartificialconscience.com

Conceptos: La implementación de la IA y Lisp

Escrito en la categoría Conceptos de la IA

1 de Agosto del 2009

Abrimos esta cadena de posts con la siguiente pregunta: ¿cómo aplico a algo inteligencia?.

Bueno, por pasos: primero tendremos que disponer de algo a lo que se pueda aplicar inteligencia. Por hacerlo sencillo, vamos a suponer una simple aplicación de escritorio. Después tendremos que tener claros los objetivos que queremos que esa aplicación cumpla, y esto es un paso muy laborioso, porque además debemos conocer bien la tecnología para no pensar cosas utópicas, y elegir los caminos más acertados. Una vez tenemos claros los objetivos, si conocemos bien la tecnología, deberemos diseñar una solución, es decir, deberemos pensar de qué forma esta aplicación va a tomar decisiones “inteligentes”. Puede que nos suponga incluir algoritmos de búsqueda, puede que tengamos que aplicar conceptos de lógica, y probablemente tendremos que tratar con datos, con lo cual también sería interesante presentar tales datos del modo más cómodo que nos convenga.

Y una vez nos encontramos con un diseño hecho, pues sólo nos quedará implementarlo. ¿Qué lenguaje es el más adecuado?.

Con la pregunta ya planteada, vamos a pasar a responderla, puesto que es bien sencillo: en general, no hay un lenguaje óptimo para cualquier tarea que conlleve utilización de técnicas de IA. Si vamos a desplegar la aplicación en un robot, pues probablemente C o Ada sean los lenguajes que más beneficios puedan aportarnos, pero por las peculiaridades de los lenguajes en sí y no porque nos provean de soluciones de IA de forma directa; por eso esta decisión engloba muchos factores que deben ser discutidos por expertos en tal área.

Si hablamos de aplicaciones de escritorio, como en el ejemplo de arriba, con un lenguaje de alto nivel (como pueda ser C++, Java, o C#/.NET) puede ser suficiente, puesto que supondrá aplicar algoritmos con una fuerte fuente matemática.

La gracia viene cuando necesitamos manejar datos a la vez que construcciones programáticas que operen dichos datos, y cuando debemos realizar esto de una forma continuada y masiva. Esto de manejar datos, operándolos, modificando ciertos atributos, mezclándolos, etc, pues suena a sistema experto, ¿no? Si recordamos, un sistema experto se centraba en un dominio de conocimiento para resolver problemas asociados a tal dominio. Para este fin, este sistema debe manejar datos del entorno, datos que le introduzcamos, y los irá operando para hallar una respuesta o un conjunto de éstas.

Además, podemos entender que casi cualquier aplicación a la que queramos dotar con técnicas de IA va a tener ciertos módulos que manejen datos como si de un sistema experto se tratase (probablemente sea así), y es precisamente aquí donde introducimos Lisp.

; ---FACTORIAL----
;Definición matemática
; Factorial(x) = 1 si x=0 caso base
; x*factorial(x-1) si x>0 caso recursivo
;Función factorial hecha con recursividad no final
(defun factorial (n)
(if (= 0 n)
1 ; caso base
(* n (factorial (- n 1))))) ; caso recursivo
(factorial 4) ;esto nos devolvería 24=4*3*2*1

Un pequeño ejemplo de una función recursiva escrita en Lisp.

Lisp es un lenguaje de programacion de alto nivel y declarativo, que data del 58, diseñado por John McCarthy en el MIT, y desarrollado precisamente para facilitar las tareas en las que es abrumadora la necesidad de cruzar datos con operaciones, y modificar éstos segun muchísimos criterios para obtener una salida, que a su vez pasará por otra operacion que hará que estos datos… etc, etc. Es un lenguaje cuya estructura fundamental es la lista, y es precisamente este hecho el que facilita ciertas tareas, y por lo que ha sido usado ampliamente desde sus inicios para la IA. Detallar más explícitamente por qué es apto para ese tipo de aplicaciones es una tarea difícil de realizar; el fin del post era arrojar algo de luz sobre aspectos de más bajo nivel de la IA (como es su implementación), comentar qué herramientas se utilizan en algunos casos, puesto que como es de esperar, herramientas para la IA hay infinitas, así como lenguajes, técnicas, etc.

….Esperando comentarios de cualquier tipo…

Concluía el anterior post, diciendo que al inicio existía una sensación esperanzadora, basada en la idea de que con la IA se resolverían muchísimos de los problemas de aquel entonces, y comenté que finalmente se desvanecería esa sensación general, terminaría lo que aquí clasificaremos como la primera época, la época romántica de la IA, los inicios.

Precisamente termina esta época con la primera crisis que sufre la rama de la que hablamos, pero antes de llegar a este punto, e intentar ver por qué se pierde esta esperanza, quedan muchos eventos que revisar y que merecen especial mención, por ello, este post está dedicado a nombrar y comentar algunos de los que considero más relevantes.

Para comenzar, voy a hablar un poco de un programa desarrollado por Herbert Simon y Allen Newell en el 57, me refiero al “General Problem Solver”, lo mencioné en el post anterior y dije que su nombre reflejaba esa idea inicial de buscar una solución a todos los problemas con la IA. Concretamente, este programa podría resolver cualquier problema, eso sí, tenía que ser un problema que se pudiera formalizar a la perfección, y aun así no cumplía siempre con las expectativas. Con formalizar un problema, me refiero a definir las variables que intervendrán en el problema, así como las reglas que son aplicables sobre esas variables. Si podemos hacer esto, entonces tenemos un problema formalizado, que es una base para darle a una máquina y que pueda ser procesable. Por supuesto, no todos los problemas de la vida real son formalizables en ese sentido, y esto es algo de lo que los creadores del GPS eran totalmente conscientes, pero aun así, había quien defendía que sí era posible ir más allá y conseguir incluso mejores resultados. El funcionamiento a nivel técnico del GPS suponía el uso de métodos heurísticos, para ir hallando sub-soluciones que le llevarán a la solución final, que sería en el caso óptimo la resolución del problema. De cómo se plantean, formalizan y resuelven problemas mediante búsqueda se está ocupando Proteus-IV (aquí y siguientes), así que no entraremos en más detalle.

Hablando de formalizar problemas, a la hora de escribir los programas para representar o resolverlos, no existía por entonces un lenguaje que estuviera claramente enfocado a este fin, que facilitase esta representación mediante unas estructuras de datos más acomodadas o mediante unos procedimientos más cercanos. El GPS anteriormente comentado estaba escrito en IPL, un lenguaje de muy bajo nivel. John McCarthy inventa en el 58 el lenguaje de programación Lisp , el que ha sido desde entonces uno de los más utilizados lenguajes de programación en Inteligencia Artificial. Algunas características que le hacen tan aconsejable para esta ciencia son la facilidad a la hora de emplear notaciones matemáticas, así como la estructura base del lenguaje, la lista (de donde proviene su nombre, por cierto).

No puede terminar el post sin comentar el nacimiento del MIT Ai Lab, el que ha sido uno de los mayores propulsores de la Inteligencia Artificial, por sus investigaciones y por sus logros. Fue fundado en el 59 por el mismo creador que el lenguaje Lisp y por Marvin Minsky, a quien también nombramos en el post anterior. El MIT AI Lab aparecerá en muchas más ocasiones porque, como se ha dicho, ha sido un gran impulsor de la rama desde los inicios de su existencia; por eso, de momento no comentaremos nada más.

El último post de los Inicios de la IA estará dedicado a ver un poco por qué esta idea que he intentado reflejar a grandes rasgos en estos dos primeros posts va esfumándose, y se forja una nueva visión que perdurará durante las siguientes décadas. Hasta entonces y como siempre, sugerencias, comentarios y sobre todo más cosas que ocurrieran en ese inicio y que queráis comentar.

Como anuncié en el pasado post, voy a comenzar hablando del inicio de la Inteligencia Artificial tal y como la conocemos hoy día. Quizá sería más preciso decir que voy a hablar de los inicios de la Inteligencia Artificial desde que es reconocida como otro campo de conocimiento de la ciencia, puesto que podríamos mencionar las referencias que existen en las culturas egipcias y griegas, pero son conceptos mucho más alejados de lo que pretendemos mostrar aquí. Y para comenzar, qué mejor manera que ver de dónde proviene el propio término que vamos a tratar, Inteligencia Artificial.

La conferencia de Darmouth de 1955, organizada e ideada principalmente por John McCarthy y Marvin L. Minsky, se considera la cuna del término. Fue a raíz de esta conferencia, organizada precisamente con la intención de hablar de la posibilidad de que cada comportamiento humano fuera simulado por una máquina, que surge la nueva disciplina.

Todo aspecto de aprendizaje o cualquier otra característica de inteligencia puede ser definido de forma tan precisa que puede construirse una máquina para simularlo.

Esta proposición, discutida, defendida, y también rechazada en la conferencia, supone el punto de partida formal de la disciplina que conocemos hoy día como IA, así de contundente. Pero, ¿el concepto surge de repente en la famosa conferencia?. La respuesta es no, y vamos a ver por qué. Como se mencionaba al principio, siglos y siglos atrás ya se había flirteado con el término inteligencia, otorgándoselo a otros entes más allá de los propios seres humanos, pero cuando comienza a surgir con más fuerza la idea, la percepción de la disciplina, es cinco años antes de la conferencia, cuando se producen tres eventos de renombre. Alan Turing, en un paper técnico llamado “Computing Machinery and Intelligence” introduce el concepto de “Test de Turing”, Claude Shannon modela el juego del ajedrez como un problema de búsqueda (como éste) e Isaac Asimov enuncia las tres leyes de la robótica (estas). Cada uno desde distintos ángulos, desde su disciplina, evocan, viéndolo como lo vemos actualmente (desde la distancia) la idea transversal de inteligencia artificial.

El inicio de la disciplina es un inicio pasional, un inicio muy esperanzador; muchos problemas hasta entonces muy difíciles de resolver parecían volverse claros con las técnicas y los métodos que pregonaba la inteligencia artificial (más concretamente con los métodos heurísticos, que son, a grosso modo, aquellos que nos llevan desde el estado inicial de un problema al estado final sin una metodología descrita a priori, es decir, sin unos pasos claros a seguir). Esta idea parecía encajar para la solución de la inmensa mayoría de problemas que se presentaban, lo que sumado al auge de la computación, y a las inversiones que realizaron las instituciones en los centros de investigacion de Inteligencia Artificial (en el 63, el Gobierno de Estados Unidos destinó 2 millones de $ al MIT AI LAB, fundado en el 59), conformaban una visión muy optimista para la nueva disciplina. Esta visión general que se tiene sobre la IA al inicio termina por diseccionarse.

Por hoy es bastante, pero en el próximo post veremos el “General Problem Solver”, cuyo nombre ejemplifica a la perfección las esperanzas depositadas en la IA. También veremos por dónde va esa disección de la que hablaba más arriba, y algunos eventos importantes acontecidos en los 50. Hasta entonces, comentarios, aportaciones…lo que queráis.



Esta obra está bajo una licencia de Creative Commons.

Blog realizado por D4Rk0studio