Historia de la IA: John McCarthy y el lenguaje de programación LISP

Thursday, January 18, 2018

Historia de la IA: John McCarthy y el lenguaje de programación LISP

Escrito por Fran Ramírez, Investigador en Eleven Paths y escritor del libro "Microhistorias: anecdotas y curiosidades de la historia de la informática". 

Vamos a comenzar el nuevo año en LUCA con una nueva sección en la cual iremos explicando brevemente algunos de los conceptos y personajes más relevantes en el mundo de la Inteligencia Artificial (IA). En este primer artículo de esta serie hablaremos de John McCarthy, considerado el padre de la Inteligencia Artificial y además es el creador unos de los lenguajes de programación más relacionado con la IA, el LISP.

Edificio del Massachusetts Institute of Technology
Figura 1 : Edificio de MIT (Fuente Madcoverboy, English Wikipedia)

 
En 1956, en una conferencia celebrada en el Dartmouth Collegue, Nuevo Hampshire, que reunía a grandes personalidades de las Matemáticas y la Física, se hablaba sobre cómo encontrar la forma de que una máquina pudiera razonar como un humano a la hora de resolver problemas. Uno de los ponentes y organizadores era John McCarthy y cuando subió al escenario utilizó un nuevo terminó para definir las nuevas técnicas de poder dotar a una máquina de inteligencia: lo llamó Inteligencia Artificial

John McCarthy nació en Boston en 1927 y desde pequeño le había interesado el funcionamiento del cerebro y las matemáticas. En 1951 recibió su doctorado en Matemáticas de la Universidad de Princeton acabando como profesor en Standford en 1962 hasta su retiro. John conoció en la misma conferencia de Dartmouth a otro grande de la IA, Marvin Minsky y ambos fundaron el departamento de IA del MIT, aunque luego John volvería a Standford para formar su propio departamento en la Universidad de Stanford llamado SAIL


Este laboratorio jugaría un rol fundamental en el desarrollo de técnicas relacionadas con la visión artificial, razonamiento y otras técnicas cuyo objetivo final era e imitar el funcionamiento del cuerpo humano y el cerebro. De SAIL saldrían grandes personalidades que luego fundaron compañías como Sun Microsystem o CISCO. Como curiosidad, John solía invitar a miembros del famoso Homebrew Computer Club a diferentes sesiones en las cuales él mismo explicaba los nuevos avances de su laboratorio. Entre esos visitantes estaban Steve Wozniak y Steve Jobs, fundadores de Apple.

John McCarthy, (al que todos llamaban “uncle John, a pesar de tener fama de ser una persona brusca), también aportó un gran avance al mundo de la computación cuando durante su estancia en el MIT en 1961. Propuso un método para optimizar y gestionar los recursos de un ordenador (mainframe por aquella época) que llamó time-sharing. Esta técnica permitía al sistema operativo asignar recursos de CPU y memoria entre los diferentes usuarios de forma concurrente. Resultó ser un gran avance en la computación, ya que permitía que muchos usuarios pudieran interactuar de forma simultánea en un mismo ordenador.

LISP (LISt Processor) apareció de forma casi natural a la vez que la IA ya que fue el resultado de la concentración de diferentes ideas entre 1956 y 1958. Algunas de estas ideas fueron obtenidas de otros lenguajes de programación como el Fortran pero además incorporaba nuevas técnicas como, por ejemplo, la computación simbólica frente a la numérica (de la cual derivó la programación simbólica), las estructuras de listas en la memoria del ordenador (su componente fundamental), el uso recursivo de expresiones de condición, el "recolector" de basura (garbage collector, encargado básicamente de liberar la memoria de los datos no utilizados), las estructuras de datos de árbol y un largo etc. La notación de escritura de programa en LISP está influenciada directamente por el método de cálculo lambda, el cual hace que LISP tenga esa estructura de programación diferente, más orientado a las matemática, que el resto de lenguajes de programación. LISP fue evolucionando poco a poco como un completo lenguaje a medida que en el laboratorio del MIT se utilizaba para implementar técnicas para probar teoremas, resolución de problemas matemáticos, teoría de juegos, etc. las cuales fueron perfeccionando el lenguaje hasta convertirlo en el lenguaje oficial de la época para la IA.


Algunos de los programas más conocidos en el mundo de la IA fueron desarrollados en LISP. Por ejemplo el famoso ELIZA, un programa de ordenador orientado al lenguaje natural desarrollado por Josep Weizenbaum también en el MIT. ELIZA permitía entablar una conversación entre un humano y la máquina que simulaba ser un terapeuta. Otro programa muy conocido y que además forma parte de los cimientos que sustentan los actuales asistentes digitales como Siri o Cortana, es SHRDLU. Este programa fue desarrollado por Terry Winograd (el profesor tutor de Larry Page, cofundador de Google, en la Universidad de Standford) y programado en LISP por Marvin Minsky. El objetivo final del programa era desarrollar técnicas que permitieran a un programa de ordenador tomar decisiones y obedecer órdenes directamente partiendo de un dialogo natural entre el humano y la máquina utilizando el idioma inglés.

Ahora vamos a dar un breve repaso al funcionamiento del lenguaje LISP para poder entender mejor por qué se convirtió en el lenguaje de la IA. Vamos a comenzar con las operaciones matemáticas las cuales se realizan de forma distinta a lo habitual. Utilizando Common Lisp, el cálculo de una función matemática desde el intérprete LISP sería:

(+ (* 4 2) 1)
9

Las variables se asignan utilizando el commando setq:

(setq x (+ (* 4 2) 1))
(print x)
9

Las condiciones funcionan de la siguiente forma:

(if (< 2 3)
  (... true ...)
  (... false ...))

Las listas son el componente clave de LISP ya que son el núcleo de prácticamente todas las operaciones. Para crear una lista y asignarla a una variable podemos utilizar también el comando setq:

(setq lst ‘(1 2 3))

Para obtener el primer valor de la lista:

(first lst)
1

Y el resto de valores de la misma:

(rest lst)
2 3

Para añadir un elemento a la lista se utiliza el comando cons:

(cons 0 lst)
(0 1 2 3)

Las funciones en LISP y la recursividad se pueden ver perfectamente en este programa que calcula las serie de Fibonacci:

(defun fibonacci (N)
   (if (or (= N 0) (= N 1))
       1
     (+ (fibonacci (- N 1)) (fibonacci (- N 2)))))

Definimos la función con el comando defun con el parámetro (N) con el número a calcular la serie de Fibonacci. Si el número calculado o introducido no es 0 o 1, se realiza el cálculo llamando recursivamente de nuevo a la misma función restando 1 y 2 al número N y finalmente realizando la suma, devolviendo el valor resultante.

La pregunta ahora es, una vez que ya vemos la importancia en la historia de la IA y cómo funciona a nivel básico LISP, ¿alguien lo utiliza hoy día? La respuesta es sí. De hecho, LISP es bastante querido por grandes hackers de la informática. Veamos algunos de ellos:

  • Paul Graham. Fundador de Y-Combinator. Programó el código fuente de su startup en LISP.
  • Robert Tappan Morris. Autor del primer gusano que infectó Internet, escribió el código Fuente de su pequeña compañía (Viaweb) en LISP.
  • Alan Kay. Pionero de los sistemas operativos orientados a objetos creó el lenguaje Smalltalk en LISP.
  • Edsger Wybe Dijkstra. Pionero en el diseño de sistemas operativos y concurrencia escribió la mayor parte de sus ensayos en LISP.

LISP también vive a día de hoy en entornos de producción de algunas empresas y organizaciones. Por ejemplo Reddit y HackerNews funcionan en LISP y otros lenguajes de programación más actuales que están directamente relacionados con la IA y el Big Data como R y Julia también están basados en LISP. Como se puede observar, LISP está lejos de ser un lenguaje obsoleto y aunque hoy día existen lenguajes de programación que funcionan mejor con las técnicas actuales de IA como Tensorflow, LISP es un lenguaje que funciona muy bien para entender los conceptos básicos de la IA como la resolución de problemas, la programación simbólica o la recursividad.

Para finalizar, no podemos olvidar que John McCarthy fue galardonado con el prestigioso ACM Turing Award en 1971 con su hoy día clásico trabajo “The Present State of Research on Artificial Intelligence”. John nos dejó el 24 de octubre de 2011 pero sus trabajos le han otorgado el honor de ser el padre de la IA y unos de los padres de la computación moderna.

Escrito por Fran Ramírez, investigador de seguridad informática en ElevenPaths y escritor del libro "Microhistorias: anecdotas y curiosidades de la historia de la informática".

No te pierdas ninguno de nuestros post. Suscríbete a LUCA Data Speaks.

No comments:

Post a Comment