<$BlogRSDUrl$>

Pro·Log·[IR]

Programación Lógica y Recuperación de Información

«Algorithm = Logic + Control» Robert Kowalski (1979)

¡Importante! esta página hace uso de estilos recogidos en la especificación CSS2, no soportados por el navegador que está utilizando. Por favor, lea esta recomendación al respecto.

Archivo

Guardado por meses.

Enlaces

Los siguientes listados son una referencia a partir de la cual ampliar la búsqueda de sitios relacionados (i).

Bitácoras en castellano

Bitácoras en inglés

Directorios, metablogs

Programación lógica, Inteligencia Artificial, Recuperación de Información

Usabilidad, Arquitectura de la Información

Listas, foros, wikis

Matemáticas, ciencias

Miscelánea

Búsquedas

Búsqueda simple en varios de los motores más conocidos. Para mayor precisión, entrar en la página correspondiente e ir al apartado de búsqueda avanzada.

Búsqueda con Google
 

Búsqueda con Yahoo!
 

Búsqueda con AlltheWeb

Varios

Esta página traducida:

Traducción al catalán, internostrum; traducción al portugués, universia.

Reciba un aviso de nuevos comentarios (por Bloglet).


Agregue este sitio a su lector de "feeds" (sindicación mediante el sistema Atom).

Sobre este sitio

Espacio dedicado a la programación lógica y la recuperación de información, con una atención especial al lenguaje Prolog y otros lenguajes afines, pertenecientes al paradigma lógico y declarativo. También se tratará de hablar de estos temas desde la perspectiva de la Biblioteconomía y la Documentación.

En esta página

31.10.03

Redes Neuronales Artificiales y computación distribuida: CCortex

En la edición del suplemento Ciberp@ís de ayer 30 de octubre, se da cuenta (página 8) de la iniciativa empresarial de Marcos Guillén en el campo de la Inteligencia Artificial (IA), en tanto que fundador de Artificial Development (AD). Esta empresa, radicada en Silicon Valley, trabaja actualmente en el prototipo de superordenador CCortex, consistente en el desarrollo de un modelo particular de Red Neuronal Artificial (RNA o ANN por sus siglas en inglés), que trata de emular las funciones cognitivas presentes, de modo particular, en la región del córtex cerebral humano, con el soporte técnico de un cluster muy potente de servidores:

"Artificial Development is building CCortex, a complete 20-billion neuron emulation of the Human Cortex and peripheral systems, on a cluster of 100 computers - the largest neural network created to date."

"CCortex is a massive spiking neuron network emulation and will mimic the human cortex, the outer layer of gray matter at the cerebral hemispheres, largely responsible for higher brain functions. The emulation covers up to 20 billion layered neurons and 2 trillion 8-bit connections."

A modo de aclaración conviene explicar que un cluster de ordenadores es un sistema distribuido en paralelo, formado por servidores interconectados de forma que comparten sus recursos, siendo considerados, a todos los efectos, como un solo servidor. Además de aumentar la capacidad de cálculo y de memoria, al combinarse las velocidades y características individuales de proceso, los cluster de ordenadores presentan la ventaja de mejorar notablemente la disponibilidad general del sistema, al preverse de antemano, estadísticamente, la tasa de inoperabilidad de cada uno de los servidores que forman la red distribuida.

Las características técnicas y lógicas de la red distribuida que soporta al prototipo de emulación cognitiva y neuronal CCortex, sitúan a este sistema, por capacidad de cálculo, y atendiendo a los datos proporcionados por AD, entre los 20 primeros superordenadores más rápidos existentes en la actualidad:

"The cluster being assembled at AD.com Data Center is a  high-performance, parallel supercomputer, composed of 500 nodes and one thousand processors, 1.5 terabytes of RAM, and 80 terabytes of storage."

"The low-cost software/hardware system runs on Linux, Intel and AMD processors. When all sections are assembled, CCortex is expected to reach a theoretical peak performance of 4,800 Gflops, making it one of the top 20 fastest computers in the world. The cluster will be used as a test bed for beta versions of CCortex."

La orientación de trabajo y desarrollo de este proyecto, con la vista puesta en su aplicación práctica al mundo de los negocios, se dirige hacia la investigación y la búsqueda de nuevas soluciones sobre algunos de los principales problemas que ha enfrentado tradicionalmente la computación aplicada a la IA, entendida ésta como modelización del pensamiento y el razonamiento humanos: visión y reconocimiento de patrones (pattern recognition), aprendizaje automatizado (machine learning, específicamente aprendizaje cognoscitivo, aquel que permite la creación de descripciones de clases, o generalizaciones a través del análisis de ejemplos particulares), reconocimiento del lenguaje (speech recognition), interacción hombre-máquina a nivel de habla, etc.

El esquema de red neuronal del proyecto CCortex mejora y añade nuevas características al tipo básico de red Hebbiana (descrita inicialmente por el psicólogo D.O. Hebb en "The organization of Behavior", 1949), modelo, algoritmo matemático o regla de aprendizaje asociativo, conceptualizada para emular, de manera muy simplificada, el modelo conexionista neuronal presente en la forma de operar del cerebro humano respecto de los procesos de aprendizaje.

"[...] Hebb, introdujo [...] dos ideas fundamentales que han influido de manera decisiva en el campo de las redes neuronales: la idea de que una percepción o un concepto se representa en el cerebro por un conjunto de neuronas activas simultáneamente; y la idea de que la memoria se localiza en las conexiones entre las neuronas (sinápsis). Las hipótesis de Hebb, basadas en investigaciones psicofisiológicas, presentan de manera intuitiva el modo en que las neuronas memorizan información, y se plasman sintéticamente en la famosa regla aprendizaje de Hebb [...]. Esta regla indica que las conexiones entre dos neuronas se refuerzan si ambas son activadas. Muchos de los algoritmos actuales proceden de los conceptos de este psicólogo, y a pesar de las críticas recibidas [...] sigue teniendo una gran influencia."

La ley o regla de Hebb se resume en la siguiente afirmación:

"Si un elemento de procesado simple recibe una entrada de otro elemento de procesado y ambos están activos, el peso correspondiente a su conexión debería reforzarse (aumentar)".

En otras palabras, y a tenor de lo descrito por Hebb, la conexión entre dos neuronas se fortalecerá si en la mayoría de las ocasiones las dos neuronas se "encienden" juntas.

En "Character Recognition with Hebbian Links" se describe, de forma breve e introductoria, la aplicación práctica de una RNA basada en "enlaces Hebbianos", en este caso al reconocimiento de caracteres, diseñada para diferenciar dos posibles situaciones, y "recordar" la diferencia encontrada, como parte del proceso de aprendizaje de la red. Esas dos situaciones son la presencia o no de determinado estado de un píxel, en su posición dentro de la estructura reticular de píxeles de una imagen o figura. Entiéndase por "píxel" un punto en concreto de la rejilla cuadriculada de miles de puntos individuales, formada en pantalla u otro medio de salida por la representación binaria de una imagen.

Del esquema básico de la regla de aprendizaje asociativo de Hebb, se derivan otros algoritmos y reglas de aprendizaje: redes de adaptación probabilística de Hopfield (J.J. Hopfield, 1982), regla Delta (utilizada para el cálculo de los pesos en las estructuras neuronales conocidas como "Adaline"), etc. Se pueden localizar varios enlaces relativos a las RNA en una anotación anterior, en la que se hablaba de su aplicación a la Documentación, a los que cabría añadir nuevas referencias, dentro de la ingente cantidad de información que sobre este particular se puede localizar tanto en la bibliografía en soporte impreso como en Internet:

Las RNA se vienen aplicando al campo de la Documentación y la RI a través de varias vías de trabajo, fundamentalmente: mapas autoorganizativos (SOM, Self-Organizing Maps) para la visualización y la recuperación de información; minería de datos (Data Mining); reconocimiento de patrones binarios asociados al contenido documental (creación de índices a partir de datos en bruto) y procesos de reconocimiento óptico de caracteres (OCR) para gestión y procesamiento de grandes masas documentales. Se trata por tanto, en general, de procesos de clasificación automática de la información, y búsqueda posterior mediante métodos alternativos a los tradicionales (ficheros inversos, registros relacionales, búsquedas secuenciales, etc.).

Los esfuerzos actuales para el desarrollo futuro de CCortex y otros proyectos de IA, fundamentados sobre la base de redes neuronales artificiales orientadas a los procesos de aprendizaje y reconocimiento, más eficientes y aproximadas, en relación con las utilizadas hoy en día, al modo de razonar y aprehender la realidad característico de los seres humanos, se centran en la consecución de modelos matemáticos y algorítmicos de las funciones de la memoria y la consciencia humanas, avances que deberán ir necesariamente acompañados por un desarrollo paralelo y creciente de la capacidad de cálculo y almacenamiento de los sistemas computacionales de proceso de datos.

[0] comentarios | # | lista |

17.10.03

Wiki para usuarios y desarrolladores de SWI-Prolog/XPCE

La comunidad de desarrolladores y usuarios de SWI-Prolog/XPCE, el compilador y entorno de desarrollo para Prolog creado y mantenido bajo la especificación ISO/Edimburgo (*) por el SWI (Universidad de Amsterdam), tiene su propio "Wiki" (definición de Wiki). Como herramienta de publicación utiliza TWiki, y es posible encontrar abundante documentación y ayudas sobre múltiples aspectos de este intérprete para Prolog, su librería para programación de interfaces gráficas de usuario (GUI's), y en general sobre dicho lenguaje de programación lógica.

Para tomar contacto con los contenidos de esta herramienta de publicación compartida, puede ser una buena idea, además de usar el buscador del sitio, comenzar por navegar a través de la página FAQ. Muy resumidamente, encontramos en este Wiki los siguientes apartados, al margen de los dedicados a la explicación y gestión de la propia herramienta de publicación:

Existe otro Twiki, Prolog Standardization, también auspiciado por el SWI, a través del cual los usuarios registrados pueden ayudar y hacer sugerencias en la tarea de definir y elaborar propuestas de estandarización que amplíen y perfeccionen la norma internacional vigente en la actualidad (ISO/IEC 13211-1, Programming Language Prolog Part I - General Core, 1995), primera y única aprobada hasta el momento como estándar ISO. El objetivo de esta iniciativa es unificar los planteamientos existentes al respecto, y superar la situación actual de dispersión [1] [2] del lenguaje, que se contrapone con la deseable y definitiva normalización de un estándar Prolog, dispersión que se materializa en la aparición de diversas implementaciones, comerciales y/o con fines académicos, a lo largo de los últimos años.

Estas implementaciones rara vez han soportado la totalidad de predicados ISO, y por contra han hecho uso de métodos y predicados particulares, no presentes en otras distribuciones. Tampoco han sido infrecuentes las diferencias de sintaxis en la escritura del código, e incluso la necesidad de hacer una declaración previa del tipo de variable/s que se va a utilizar (cadena de caracteres, constante, constante numérica, lista, etc.), cuando una de las características del lenguaje Prolog es precisamente que no es necesario hacer esa declaración, siendo sustituida, cuando lo requieren las necesidades de ejecución del programa, por comprobaciones de tipo. Veamos algunos ejemplos, ejecutados directamente en la línea de órdenes del intérprete:

?- integer(hola).

No
?- integer(75).

Yes
?- float(23).

No
?- float(88.5).

Yes

Las comprobaciones de tipo se realizan mediante una serie de predicados predefinidos que, dada una variable o parámetro de entrada, comprueban si se trata del tipo esperado, fallando en caso contrario. Los de uso más frecuente son "integer/1", "float/1", "number/1" y "atom/1". En un nivel de abstracción superior, es posible comprobar si un argumento (variable) está o no instanciado, mediante los predicados "var/1" y "nonvar/1".

Adviértase el uso de la notación functor/aridad para referenciar los predicados, donde el número que se indica tras la barra obliqua "/" expresa el número de argumentos ("0" en caso de ausencia de éstos). Así por ejemplo, si tomamos el predicado "append(X,Y,Z)", "append" es el functor, siendo "X", "Y" y "Z" los argumentos, y se expresa "append/3".

También es frecuente expresar los predicados, en las referencias técnicas del lenguaje Prolog, como sigue: "read(-Term)", "write(+Stream, +Term)", etc., donde el signo "-" (menos) denota que el predicado devolverá el argumento referenciado como un valor de salida, mientras que el signo "+" (más) indica lo contrario, el argumento es un valor de entrada. En determinados predicados los argumentos tienen un caracter reversible, es decir, pueden funcionar tanto como variables de entrada como de salida. Un ejemplo de estos últimos es el predicado "append/3". Dadas dos listas "L1" y "L2", devuelve una tercera lista "L3" que es el resultado de la concatenación de aquellas:

?- append([1,2],[3,4],Lista).

Lista = [1, 2, 3, 4]

Yes

Pero tambien, dada la lista concatenada "L3" y una de las dos listas iniciales, es capaz de proporcionar la lista restante:

?- append([1,2],Lista,[1,2,3,4]).

Lista = [3, 4]

Yes

El carácter reversible de los argumentos se indica mediante el símbolo "?", de forma que el predicado "append/3" se expresa en la notación que se viene comentando como "append(?L1, ?L2, ?L3)".

¿Un ejemplo práctico de comprobación de tipo? Supongamos un programa cuyo fin es determinar si una fecha introducida por el usuario como valor de entrada, se ajusta a un formato determinado (por ejemplo DD/MM/AA), y es además conforme con el sistema de calendario vigente en los países occidentales (calendario gregoriano). Este programa, entre otros cálculos, debería comprobar si lo introducido por el usuario son constantes numéricas, y no cualquier otra cosa, para lo cual se utilizaría el predicado "integer/1", que comprueba si el argumento de entrada es un número entero, fallando en caso contrario.

Téngase en cuenta que el programa descompondría, en primer lugar, la variable introducida por el usuario como una cadena única de caracteres, por ejemplo, "17/10/03", en tres variables distintas, "17", "10" y "03", que se corresponderían, respectivamente, con el día, mes y año de la fecha introducida.

La siguiente comprobación que debería hacer el programa es si se trata o no de la fecha de un año bisiesto. Son años bisiestos los múltiplos de 4, con la salvedad de aquellos que terminan en "00" (excepto casos especiales como el año 2000, que sí fue bisiesto). Este cálculo se puede realizar fácilmente, siendo de nuevo necesaria la utilización de una comprobación de tipo, mediante "integer/1" también en esta ocasión:

Cociente is Anio/4, integer(Cociente)

Si un número entero es múltiplo de 4, se entiende fácilmente que el cociente resultante de su división entre 4 debe ser también un número entero. Por tanto, la sentencia anterior se encarga de dividir la variable de entrada correspondiente al año ("Anio") entre 4, y si la variable de salida resultante ("Cociente") es un número entero, se infiere que la variable "Anio" se corresponde con un año bisiesto. Para calcular la situación contraria, se podría utilizar la siguiente sentencia:

Cociente is Anio/4, float(Cociente)

El predicado "float/1" comprueba si el argumento de entrada es una constante numérica de carácter decimal. Realmente no es necesaria esta segunda sentencia, ya que con la primera se contemplan implícitamente las dos posibles situaciones, es decir, que la variable "Cociente" sea o no una constante numérica entera, pudiendo obrar en consecuencia la ejecución del resto del programa (comprobación de los meses del año y los días del mes).

(*) El "estándar" de Edimburgo tiene su origen en el Prolog descrito por C.S. Clocksin y W.F. Mellish en su libro "Programming in Prolog" (Springer-Verlag, 1981), obra que ha conocido, traducida al castellano, varias ediciones a cargo de la editorial Gustavo Gili (e.g. Barcelona, 1993; ISBN: 84-252-1339-8).

[0] comentarios | # | lista |

1.10.03

OpenCourseWare (MIT): libre acceso al conocimiento

OCW es un proyecto liderado por el MIT, en colaboración con dos fundaciones norteamericanas, que tiene como finalidad poner a libre disposición de todos los potenciales interesados los materiales en formato electrónico que forman parte de los cursos impartidos por el Instituto Tecnológico de Massachusetts:

"[...] a free and open educational resource for faculty, students, and self-learners around the world. OCW supports MIT's mission to advance knowledge and education, and serve the world in the 21st century. It is true to MIT's values of excellence, innovation, and leadership."

"[...] is a large-scale, Web-based electronic publishing initiative [...] Provide free, searchable, access to MIT's course materials [...] Create an efficient, standards-based model that other institutions may emulate to openly share and publish their own course materials."

En el momento de escribir estas líneas están disponibles los materiales de 500 de dichos cursos, pertenecientes a 33 disciplinas académicas, referidas sobre todo al área de las ciencias exactas y la tecnología, pero también al campo de las ciencias sociales y las humanidades, e incluyen lecturas de clase (*) y lecturas complementarias, exámenes, trabajos de curso, tutoriales, bibliografías, etc., en diversos formatos de archivo.

El conjunto de asignaturas que más se aproximan a las áreas de interés de este sitio, son las que encontramos bajo los epígrafes "Electrical Engineering and Computer Science", "Brain and Cognitive Sciences", y "Linguistics and Philosophy", sin descartar por supuesto los contenidos parciales de otras asignaturas.

En cualquier caso hay que hacer notar que la iniciativa del MIT no es estrictamente original: muchos departamentos universitarios y asignaturas impartidas por su profesorado, tienen publicados en la red, e.g. [1] [2] [3], materiales de trabajo y estudio (en algunos casos restringidos al respectivo cuerpo discente), y es en estos espacios donde en muchas ocasiones se localizan recursos de gran relevancia, materiales bibliográficos de carácter especializado al margen, atendiendo al interés del investigador y el estudioso no estrictamente perteneciente al ámbito universitario o a la institución en particular. Tampoco son infrecuentes las páginas y portales de asociaciones de estudiantes del espectro universitario que hacen lo propio dentro de sus áreas de interés académico.

Quizás lo novedoso del proyecto OCW, en comparación con otras instituciones de similar prestigio internacional, dedicadas a la docencia universitaria y la investigación, es la intención de ofrecer un único punto de acceso, integrado, perfectamente estructurado y jerarquizado, al conjunto de materiales y recursos educativos de las asignaturas y seminarios impartidos por el MIT, con una clara vocación de poner en común, sin limitaciones, el conocimiento acumulado a lo largo de décadas de actividad, así como hacer de esta iniciativa un referente normalizador para futuras iniciativas de similares planteamientos y fines.

Por último reseñar que en colaboración con el portal de universidades Universia, están traducidos al castellano y al portugués los materiales educativos de parte de los cursos del MIT, si bien de momento la oferta es limitada.

(*) En el mundo académico anglosajón se entiende por "lectures" lo que nosotros conocemos como "diapositivas de clase", complementadas según el caso por más o menos texto explicativo.

[0] comentarios | # | lista |


Pro·Log·[IR],

Publicación: Blogger | Estadísticas: eXTReMe Tracking

Se recomienda ver este sitio con Mozilla 1+, Firefox 0.8+ ó Netscape 7+. Si no queda más remedio, con IE 6+. Si lo desea, comunique cualquier problema al respecto. También será bien recibida cualquier sugerencia sobre el contenido. La fuente de letra preferente es Georgia. Se prohibe la utilización del diseño de la página salvo autorización expresa del autor. Los contenidos escritos son de uso libre, siempre que se cite la fuente.