viernes, 27 de agosto de 2010

Teoría de la resonancia adaptativa

Una red neuronal artificial es un sistema de procesamiento de información que tiene ciertas características de funcionamiento en común con las redes neuronales biológicas. Las redes neuronales artificiales se han desarrollado como generalizaciones de modelos matemáticos del conocimiento humano o de la biología neuronal, basados en las siguientes suposiciones: (1) El proceso de la información ocurre en muchos elementos simples llamados neuronas. (2) Las señales pasan entre las neuronas a través de enlaces que las unen. (3) Cada conexión entre neuronas lleva asociado un peso, el cual, en una red neuronal típica, lo que hace es multiplicar la señal transmitida. (4) Cada neurona aplica una función de activación, generalmente no lineal, a su entrada con el objetivo de determinar su señal de salida. Asimismo, una red neuronal se caracteriza por estos tres elementos o características: (1) La topología de conexiones entre neuronas, lo que recibe el nombre de arquitectura de la red. (2) El método de determinación de los pesos sobre las conexiones, denominado algoritmo de entrenamiento o de aprendizaje. (3) La función de activación que tengan sus neuronas.

La “teoría de la resonancia adaptativa”, desarrollada por Stephen Grossberg y Gail Carpenter, es un modelo de red neuronal artificial que basa su funcionamiento en la manera en que el cerebro procesa información y que describe una serie de modelos de redes neuronales que utilizando métodos de aprendizaje supervisado y no supervisado abordan problemas tales como el reconocimiento y la predicción de patrones. Grossberg y Carpenter desarrollaron la teoría de resonancia adaptiva en respuesta al “dilema de la estabilidad y plasticidad del aprendizaje, en el que se plantean las siguientes cuestiones: (1) Plasticidad del aprendizaje. Permite a una red neuronal aprender nuevos patrones. (2) Estabilidad del aprendizaje. Permite a una red neuronal retener los patrones aprendidos. (3) Conseguir que un modelo de red neuronal sea capaz de resolver uno solo de estos problemas es sencillo, el reto está en conseguir un modelo que sea capaz de dar respuesta a ambos. Las redes más conocidas, tales como el Perceptrón multicapa o el Adaline, son capaces de aprender cómo han de responder ante unos patrones de entrada pero, una vez entrenados, el intentar que aprendan nuevos patrones puede suponer el "olvido" de lo aprendido previamente.

La red neuronal basada en la teoría de la resonancia adaptativa, es una clasificadora de vectores. Un vector de entrada se clasifica dentro de una de un número de categorías, dependiendo de la similitud con los patrones previos. Si el criterio de similitud no se satisface se crea una nueva categoría. Así, la red neuronal con base en la teoría de la resonancia adaptativa resuelve el dilema entre plasticidad y estabilidad al habilitar que el aprendizaje ocurra solamente en un estado de resonancia. La red neuronal trabaja con patrones binarios los cuales se comparan con los vectores prototipo de modo que disminuye similitudes hasta que una igualdad adecuada se encuentra o se crea una nueva categoría.

Como se dijo anteriormente, el modelo asociado a la teoría de la resonancia adaptativa soluciona el dilema de la estabilidad y plasticidad del aprendizaje mediante un mecanismo de realimentación entre las neuronas competitivas de la capa de salida. Cuando a la red se le presenta un patrón de entrada este se hace resonar con los prototipos de las categorías conocidas por la red, si el patrón entra en resonancia con alguna clase entonces es asociado a esta y el centro de cluster es desplazado ligeramente para adaptarse mejor al nuevo patrón que le ha sido asignado. En caso contrario, si el patrón no entra en resonancia con ninguna clase, pueden suceder dos cosas: si la red posee una capa de salida estática entrará en saturación pues no puede crear una nueva clase para el patrón presentado pero tampoco puede asignarlo a una clase existente, si la red posee una capa de salida dinámica se creará una nueva clase para dicho patrón, esto no afectará a las clases ya existentes. En las redes de resonancia adaptativa existen dos tipos de pesos, los llamados pesos “hacia adelante”, que son pesos entre la capa oculta, o de entrada según se vea el modelo como de dos o tres capas, y la capa de salida, además de los llamados pesos de “realimentación”, que son pesos de retroalimentación entre la capa de salida y la capa oculta, o de entrada, según se vea. Los pesos hacia adelante tienen el mismo valor que los pesos de realimentación, pero normalizados.

El funcionamiento de un modelo asociado a la teoría de la resonancia adaptativa se divide en cuatro fases: (1) Fase de inicialización. En esta fase se inicializan los parámetros de la red neuronal y se establecen las señales de control. Mediante las señales de control, conocidas como ganancia y reinicio, se controla el flujo de datos a través de la red neuronal y se pasa a las otras fases. (2) Fase de reconocimiento. En la fase de reconocimiento se efectúa una operación con los datos de entrada y los pesos asociados a cada neurona de la capa de salida, el resultado de esta operación debe indicar qué clase tiene mayor prioridad para ver si los datos de entrada entran en resonancia con ella. Por ejemplo, se podría calcular la distancia euclidiana entre los datos de entrada y los pesos, la clase ganadora sería aquella cuyo peso estuviese más cerca de los datos de entrada y por lo tanto sería la primera a la que se le intentaría asociar dicho patrón. (3) Fase de comparación. En esta fase el vector de entrada y el vector producido por la capa de salida son comparados en la capa de entrada y el resultado obtenido se envía al control de reinicio. El objetivo es obtener una medida de similitud entre el vector de entrada y el vector prototipo que surge de la capa de salida. (4) Fase de búsqueda. De no representar la neurona ganadora la categoría del vector de entrada, esta neurona se desactiva y se empieza la búsqueda por otras categorías que ya posea la red. Se repiten entonces los pasos anteriores hasta que se encuentre una neurona ganadora que represente la categoría del vector de entrada. Si se repitiera el proceso hasta que no quedara ninguna neurona se llegaría a una situación de saturación de la red que podría solucionarse ampliando el número de neuronas de la red de forma dinámica.

Un sistema básico, asociado a la teoría de la resonancia adaptativa, es un modelo de aprendizaje no supervisado. Normalmente consta de un campo de comparación y un campo de reconocimiento que a su vez se compone de un parámetro de vigilancia y de un módulo de reinicio. El parámetro de vigilancia tiene una influencia considerable en el sistema: un valor mayor del parámetro de vigilancia produce recuerdos muy detallados, mientras que valores más pequeños de dicho parámetro producirán recuerdos más generales.

El campo de comparación toma un vector de entrada, normalmente una matriz bidimensional de valores, y transfiere su mejor coincidencia al campo de reconocimiento. Su mejor coincidencia estará en aquella neurona cuyo conjunto de pesos, o vector de peso, se acerque más al vector de entrada. Cada neurona del campo de reconocimiento emite una señal negativa, proporcional a la calidad de coincidencia de dicha neurona con el vector de entrada, para cada una de las neuronas del campo de reconocimiento provocando una inhibición de su valor de salida. De esta manera el campo de reconocimiento exhibe una inhibición lateral, permitiendo que cada neurona en él represente una categoría en la que se clasifican los vectores de entrada. Después de que el vector de entrada es clasificado, el módulo de reinicio compara la intensidad de la coincidencia encontrada por el campo de reconocimiento con el parámetro de vigilancia. Si el umbral de la vigilancia se cumple, se inicia el entrenamiento. De lo contrario, si el nivel de coincidencia no cumple con el parámetro de vigilancia, la neurona de reconocimiento disparada se inhibe hasta que un vector de entrada se aplique nuevamente.

El entrenamiento se inicia sólo al final del procedimiento de búsqueda, en el cual las neuronas de reconocimiento son desactivadas una a una por la función de reinicio hasta que el parámetro de vigilancia se satisface con una coincidencia de reconocimiento. Si ninguna coincidencia encontrada por las neuronas de reconocimiento supera el umbral de vigilancia una neurona no comprometida se ajusta para que concuerde con el vector de entrada. Existen dos métodos básicos para entrenar una red neuronal basada en la teoría de la resonancia adaptativa: lento y rápido. En el método lento el grado de entrenamiento de los pesos de la neurona de reconocimiento hacia el vector de entrada se calcula para valores continuos con ecuaciones diferenciales y por lo tanto depende del tiempo durante el cual el vector de entrada esté presente. Con el método rápido, se utilizan ecuaciones algebraicas para calcular el grado de ajuste de peso, utilizándose valores binarios. Si bien el aprendizaje rápido es eficaz y eficiente para ciertas tareas, el método de aprendizaje lento es biológicamente posible y puede usarse con redes en tiempo continuo, es decir, cuando el vector de entrada varía de forma continua.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Junio 14 de 2010

viernes, 20 de agosto de 2010

Ingeniería de rendimiento del software

La ingeniería del software se podría definir como el establecimiento y aplicación de principios de la ingeniería para obtener un producto denominado software. Teniendo en cuenta factores tan importantes como el costo económico, la fiabilidad del sistema y un funcionamiento eficiente que satisfaga las necesidades del usuario. Como concepto de software se entienden las aplicaciones, toda aquella parte de la informática que se desarrolla, y que posee un difícil mantenimiento debido al corto período de tiempo en el que queda obsoleto. La ingeniería del software se preocupa de la fiabilidad y el rendimiento, tratando de reducir costos y complejidad. Los modelos que utiliza están basados en teorías matemáticas bastante sólidas.

La ingeniería del rendimiento al interior de la ingeniería del software, abarca el conjunto de roles, habilidades, actividades, prácticas, herramientas y resultados aplicados a cada fase del ciclo de vida del desarrollo de sistemas, hecho que asegura que una solución sea diseñada, implementada y que cuente con el apoyo operativo para cumplir con los requerimientos de desempeño de funciones definidas para la solución. Desde la tradicional ingeniería del software, el rendimiento es mucho más que sólo el desarrollo del producto software, la ingeniería de rendimiento, a diferencia de la ingeniería del software es preferible a largo plazo. El cumplimiento de los requisitos no funcionales se valida mediante la supervisión de los sistemas de producción. La ingeniería de rendimiento se ha convertido en una disciplina independiente en una serie de grandes corporaciones, y puede ser afiliada con el grupo de arquitectura empresarial. Es bastante persuasivo, lo invade todo, recabando la colaboración de múltiples unidades de la organización, pero sobre todo dentro de la tecnología de la información propia de la organización.

Típicamente las aplicaciones del software de múltiples capas son bastante complejas y están basadas en muchos componentes y varias tecnologías que abarcan desde la interfaz del usuario hasta la base de datos y varias capas intermedias. Estas capas pueden estar basadas en marcos de trabajo, hechos internos o sistemas de terceros, bien sea comerciales o de dominio público. Respecto a las aplicaciones basadas en la “arquitectura orientada a servicios” crean complejidades adicionales. Encontrar el balance perfecto entre alto rendimiento y elevado consumo de recursos tiende a ser un gran reto tecnológico.

La ingeniería de rendimiento es parte integral del proceso creativo del diseño y arquitectura de aplicaciones del software. Como tal, puede ser descrita como la verificación y validación de varias opciones que emergen durante el diseño de la aplicación, donde se hacen y prueban prototipos para tomar la decisión más apropiada basada en las prioridades y restricciones definidas para la aplicación. De esta manera se puede encontrar el balance ideal y el más alto rendimiento posible. El análisis riguroso del rendimiento, al principio del proceso de diseño de la aplicación, es un paso crítico en la arquitectura del software para garantizar que los componentes que se van a crear satisfagan los requerimientos operacionales.

Generalmente la ingeniería de rendimiento es un proceso interactivo, donde el arquitecto trabaja de manera cercana con los desarrolladores y el ingeniero de rendimiento para obtener un conocimiento detallado de las opciones que incrementen el rendimiento y la seguridad de la aplicación. Este proceso de investigación, por el cual el equipo de profesionales va analizando y diseñando la aplicación permite desarrollar un nivel de entendimiento tan detallado, que trae como resultado la configuración ideal de todos los componentes que forman parte de la solución total para lograr el más alto rendimiento en el ambiente de producción con la carga de trabajo esperada y con capacidad de crecimiento.

Se está en presencia del cambio que se experimenta en el paradigma de gestión del rendimiento del software, con la solución de problemas a las mejores prácticas que tienden a la excelencia en el rendimiento. Con el enfoque de la ingeniería del rendimiento se producen las siguientes prácticas: (1) Los arquitectos conocen que su arquitectura soportará requerimientos de rendimiento antes de solamente comprometerse con el desarrollo del código. (2) Los gerentes de proyecto pueden continuar con el estado de resultados, de manera paralela al desarrollo del software. (3) Los especialistas de rendimiento tienen el tiempo suficiente para ejecutar las pruebas de carga y de estrés sin encontrarse con algunas "sorpresas". (4) Los riesgos para el logro de los requisitos de desempeño son identificados y direccionados al principio del proceso, ahorrando tiempo y dinero. (5) El software que cumple con los requisitos de rendimiento se entrega a tiempo y dentro de lo presupuestado.

La ingeniería de rendimiento del software es un enfoque cuantitativo, y sistemático de la evolución del costo-eficacia de los sistemas de software, útil para satisfacer los requisitos de desempeño. Este tipo de ingeniería es una tendencia orientada al software, se enfoca en las opciones de arquitectura, diseño e implementación del software. La ingeniería del rendimiento proporciona la información necesaria para construir software que satisface los requisitos de desempeño de manera adecuada y, como se dijo anteriormente, se encuentra dentro de lo presupuestado.

El concepto básico de la ingeniería de rendimiento del software es la separación del modelo de software de su entorno o modelo de hardware. El modelo de software captura los aspectos esenciales del comportamiento del software; sino que puede ser representado por medio de “grafos de ejecución”. Un grafo de ejecución es un grafo cuyos nodos representan los componentes del software de carga de trabajo y cuyas aristas representan las transferencias de control. Cada nodo se pondera mediante el uso de un vector de demanda que representa el uso de los recursos del nodo, es decir, la demanda de cada recurso.

Los modelos de hardware representan la plataforma de maquinaria y se basan en modelos de red de colas. Para especificar una red de colas, se tiene que definir: los componentes, es decir los centros de servicios; la topología, referida a las conexiones entre los centros y algunos parámetros relevantes, tales como las clases de trabajo, las tareas de enrutamiento entre los centros, la planificación de la disciplina en el servicio y la demanda en los centros de servicio). Los componentes y la especificación de la topología se realizan según la descripción del sistema, mientras que la especificación de los parámetros se obtiene de la información generada por los grafos de ejecución y del conocimiento de los recursos y capacidades. Esta distinción, por un lado, permite definir modelos de software y modelos de hardware por separado además de la solución de su combinación, por otra parte mejora la portabilidad de los modelos, por ejemplo, el rendimiento de un sistema de software específico puede ser evaluado en diferentes plataformas, y el rendimiento de una plataforma específica puede ser validado en diferentes sistemas de software. Después de haber establecido los objetivos de rendimiento, los modelos de software y hardware son construidos y por lo tanto, evaluados por un método de análisis adecuado para calcular la predicción del rendimiento.

Los objetivos de la ingeniería del rendimiento son: (1) Aumentar los ingresos comerciales al garantizar que el sistema puede procesar las transacciones dentro de los plazos necesarios. (2) Eliminar la falla del sistema que requiere de la cancelación de las actividades de desarrollo del sistema debido a falta objetiva de rendimiento. (3) Eliminar la implementación del sistema con retraso debido a problemas de rendimiento. (4) Eliminar el reproceso del sistema disponible debido a problemas de rendimiento. (5) Eliminar esfuerzos evitables del sistema de afinación. (6) Evitar costos adicionales e innecesarios en adquisición de hardware. (6) Reducir el aumento de los costos de mantenimiento del software, debido a los problemas de rendimiento en la producción. (7) Reducir los altos costos de mantenimiento del software debido al software afectado por costos fijos para un desempeño ad hoc. (8) Reducir gastos generales operativos adicionales para el manejo de problemas en el sistema debido a los problemas de rendimiento

Para obtener un buen rendimiento de las aplicaciones de software, es necesario seguir algunas reglas que garantizan la buena ejecución del software: (1) La primera medida consiste en encontrar los cuellos de botella del software y enfocar los esfuerzos en esos lugares. (2) Los patrones de uso eficiente de acceso a los datos, también conocido como entrada-salida, su uso eficiente, la reducción de la lentitud y otros accesos. (3) Diseñar los argumentos para reducir la baja concurrencia de los recursos compartidos. (4) Aprender cómo se supone que deben utilizarse la interfaz de programación de aplicaciones y los componentes de terceros. (5) Utilizar una cantidad realista de datos y usuarios para las pruebas de rendimiento, también conocido como “no prueba” con una base de datos vacía. (6) Hacer el trabajo de ingeniería de rendimiento de todo el proyecto, empezando por la capacidad de planificación de base. (7) No dedicarse solamente a “optimizar el código programado", debido a que casi nunca es útil para el rendimiento, si no tiene un proceso de ingeniería asociado.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Junio 7 de 2010

viernes, 13 de agosto de 2010

Sistemas neurodifusos

Durante los últimos treinta a cuarenta años las investigaciones en redes neuronales y en sistemas difusos han sido independientes debido en gran parte a los diferentes orígenes y motivaciones de ambos paradigmas. Hoy es ampliamente conocido que la lógica difusa ofrece un marco muy poderoso para el razonamiento aproximado que intenta modelar el proceso de razonamiento humano en un nivel cognoscitivo. Los sistemas difusos adquieren el conocimiento gracias al dominio del experto el cual es codificado dentro del algoritmo en términos de un conjunto de reglas difusas “si-entonces”. Los sistemas difusos emplean este enfoque basado en reglas e interpolan el razonamiento para responder a entradas nuevas. En contraste, las redes neuronales ofrecen una arquitectura altamente estructurada, con capacidades de aprendizaje y generalización, que intenta imitar el mecanismo neurológico del cerebro. Una red neuronal almacena conocimiento de una manera distribuida dentro de sus pesos, los cuales han sido determinados por medio del entrenamiento, para el aprendizaje, con muestras conocidas. La habilidad de generalización para entradas nuevas está basada en la estructura algebraica inherente de la red neuronal. También se ha demostrado que ambas tecnologías combinadas tienen capacidades elevadas de aproximación universal.

El avance de los sistemas de inteligencia computacional y la búsqueda de soluciones cada vez más completas para los problemas que pueden ser resueltos por estos métodos, han llevado a la unión de técnicas de “computación blanda” haciendo que las debilidades de unos sistemas se compensen con las bondades de otros. Esta última, resulta ser una fuerte motivación para realizar la unión de las técnicas de redes neuronales artificiales y lógica difusa. Recientemente se ha producido un interés considerable en la integración de las redes neuronales y la lógica difusa. Las dos tecnologías pueden ser vistas como complementarias y como consecuencia, el enfoque combinado proporciona un marco de razonamiento aproximado poderoso que tiene capacidades de aprendizaje y generalización. La tecnología combinada también cubre algunas de las desventajas de los enfoques individuales como por ejemplo la transparencia de la red neuronal y la capacidad de aprendizaje limitada de los sistemas difusos.

Dentro de las numerosas metodologías de modelado existentes en las áreas de la estadística y el aprendizaje automático, los sistemas neurodifusos presentan grandes ventajas frente a otras alternativas, al combinar las capacidades aproximativas no lineales de las redes neuronales, junto con las propiedades interpretativas de los modelos difusos. Componen una metodología que proporciona una manera simple de obtener una conclusión a partir de información de entrada imprecisa. El diseño y optimización de estos modelos, en el que los expertos pueden intervenir, resulta en un conjunto de reglas a partir de un repertorio de mediciones disponibles, que facilita el análisis y utilización de dichos modelos para un estudio más claro y en profundidad del fenómeno físico que se está modelando.

Redefiniendo las motivaciones para crear los sistemas híbridos neurodifusos, se pueden mencionar como las más relevantes las siguientes: (1) Los problemas a resolver con estas técnicas inteligentes tienen generalmente una componente de datos empíricos y otra de conocimiento previo, que con los sistemas neurodifusos pueden ser explotados a cabalidad mezclando los métodos cuantitativos y cualitativos de las redes neuronales y la lógica difusa respectivamente. (2) La expresión de conocimiento como una base de reglas lingüísticas, enriquecida o surgida con o a través de datos cuantitativos, es una forma adecuada para hacer realimentación al usuario humano de la forma como el sistema realiza las tareas. (3) Habiendo encontrado que la representación del conocimiento como un sistema difuso se acerca a la forma de razonamiento humano, es natural intentar adicionar a estos sistemas capacidades de aprendizaje, de forma que se emule mejor tal comportamiento o que se mejoren los resultados obtenidos con el uso de solamente el sistema difuso.

En los últimos años se presentaron varios sistemas neurodifusos exitosos reportados por diferentes corrientes de investigación científica. En general estos son sistemas con una estructura fija que interpretan un sistema difuso en términos de una red neuronal tal que cada paso en el proceso es equivalente a por lo menos una capa de la red neuronal. Así, la mayoría de estas arquitecturas tienen al menos una capa correspondiente a la codificación difusa, intersección, implicación y decodificación difusa. Estas arquitecturas difieren de una red neuronal convencional en términos de la uniformidad tanto de los nodos de procesamiento como de la estrategia de la interconexión con el resultado que con frecuencia se requieren algoritmos de entrenamiento modificados. Sin embargo, estas arquitecturas no proporcionan un procedimiento sistemático para determinar el número de reglas del sistema de inferencia difuso. Hay arquitecturas que fijan el número de reglas antes de realizar el entrenamiento de la red mientras que otras fijan los conjuntos difusos de la parte “si” de las reglas, lo que establece un límite para el número de reglas.

Por lo tanto, determinar el número de reglas a utilizar representa un serio problema para los sistemas neurodifusos. Algunos sistemas neurodifusos consideran al número de reglas como un parámetro de diseño más, el cual puede ser determinado utilizando un algoritmo de agrupamiento de datos y los datos de entrada-salida del sistema a modelar. Estas técnicas de agrupamiento proporcionan el planteamiento para encontrar prototipos que caracterizan un conjunto de datos. Estos prototipos son entonces utilizados como reglas difusas en un sistema neurodifuso. Los métodos de agrupamiento desarrollados funcionan bastante bien, sin embargo, procesan los datos fuera de línea por lo que la estructura temporal de los mismos es ignorada, lo que representa un problema cuando se quiere modelar o controlar un sistema en tiempo real. Por lo tanto, resulta interesante desarrollar técnicas de agrupamiento que procesen los datos en línea para modelar sistemas mediante redes neuronales difusas en tiempo real.

Las razones para usar una taxonomía de los sistemas neurodifusos es que muchas de las aproximaciones neurodifusas implementadas hasta hoy, pueden ser enmarcadas dentro de estas divisiones propuestas que se basan en las diferentes combinaciones de las redes neuronales artificiales y los sistemas difusos: (1) Modelos concurrentes. Cuando la red neuronal y el sistema difuso trabajan juntos pero sin interactuar el uno en el otro, es decir, ninguno determina las características del otro. (2) Modelos cooperativos. Cuando la red neuronal se usa para determinar los parámetros de funcionamiento del sistema difuso. En estos modelos, se distinguen dos fases, la de entrenamiento y la de funcionamiento. En la primera, la red neuronal interactúa con el sistema difuso determinando los parámetros del mismo, mientras en la segunda, la red neuronal desaparece dejando sólo el sistema difuso. (3) Modelos híbridos. En esta aproximación, los sistemas difusos y de redes neuronales, trabajan juntos en una arquitectura homogénea que puede ser interpretada como una red neuronal con parámetros difusos o como un sistema difuso con parámetros o funcionamiento distribuidos.

La estructura neurodifusa permite el uso de métodos cualitativos y cuantitativos en la construcción de modelos, en la etapa de aprendizaje, en la de funcionamiento y en la realimentación de conocimiento al usuario, permitiendo así, que todo el conocimiento se encuentre disponible. Los métodos cuantitativos que se observan en el aprendizaje que los sistemas neurodifusos pueden realizarse a partir de datos del ambiente y en su forma matemática de funcionamiento, mientras los métodos cualitativos se reflejan en el sentido lingüístico que tiene la base de conocimiento de los sistemas difusos y que genera una interacción bilateral sistema-ser humano, permitiendo la introducción de conocimiento previo al sistema y la realimentación del estado final del modelo en forma de reglas expresadas lingüísticamente desde el sistema al ser humano. Las otras ventajas, son las conocidas ya ampliamente y que vienen heredadas de los sistemas difusos y de las redes neuronales, tales como interpretación lingüística, introducción de conocimiento previo, auto-aprendizaje, generalización, interpolación, etc.

Sin embargo los sistemas neurodifusos cuentan también con algunas limitaciones: (1) Curso de la dimensionalidad. Los sistemas difusos presentan el problema del crecimiento exponencial del tamaño del modelo respecto al número de variables que poseen, haciendo poco práctico su uso para sistemas de más de cuatro dimensiones. (2) Calidad de los datos. Existen problemas asociados con la cantidad, distribución y ruido en y de los datos. Si los datos están mal distribuidos, el aprendizaje puede no ser muy bueno, presentando especialmente problemas de generalización y de interpolación si faltan muchos datos en cierta región. Este inconveniente es herencia de los sistemas neuronales y puede ser superado interpolando los datos, haciendo un tratamiento previo o buscando una representación adecuada de los mismos. (3) Conocimiento previo. En los sistemas neurodifusos es deseable tener el conocimiento previo y confiable de un experto en el sistema, pues de otro modo, se debe realizar un modelado por "fuerza bruta" exclusivamente a través de los datos numéricos empíricos y existirán problemas al no haber descripción cualitativa del sistema, a menos que se apliquen técnicas de minería de datos a la base de conocimiento del sistema neurodifuso.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 31 de 2010

viernes, 6 de agosto de 2010

Agente omnisciente

La omnisciencia, o el punto de vista omnisciente, es la capacidad de saberlo todo, o de saber todo lo que se necesite saber en un contexto determinado. Normalmente se utiliza en las religiones monoteístas como un atributo de Dios; aunque también tiene aplicaciones en la literatura. Omnisciente es un término formado por dos vocablos latinos que significa “que sabe todo”. Se trata de un adjetivo que permite nombrar al que tiene omnisciencia, es decir que tiene conocimiento de todas las cosas reales y posibles. La definición del concepto, en términos bastante abstractos, permite inferir que Dios es el único ser omnisciente. Los seres humanos no están en condiciones de conocer todas las cosas ya que dicho atributo excede a la propia condición humana. Por eso, cuando se dice que una persona es omnisciente, se hace referencia a que tiene conocimientos de muchas ciencias y materias.

Pueden distinguirse dos tipos de omnisciencia: (1) La omnisciencia inherente. Referida como la capacidad de saber todo lo que se desee saber y se pueda saber; (2) La omnisciencia total. Consiste efectivamente en saber todo lo que se puede saber. El concepto de omnisciencia es contradictorio. Se señala que se considera que Dios habría creado todo el conocimiento y que tendría conocimiento del mismo de antemano: esto implicaría una contradicción circular, ya que Dios no podría haberlo sabido todo antes de que existiera ningún conocimiento que saber. También implicaría una contradicción con el concepto del libre albedrío, ya que para que Dios pudiera saberlo todo de antemano sería necesario creer que todos los acontecimientos que pudieran suceder estarían predestinados. Esto se conoce como la paradoja de la predestinación. En la literatura, la omnisciencia se utiliza para explicar los posibles roles del narrador dentro de una historia. El narrador omnisciente suele aparecer en tercera persona y está en condiciones de describir los sentimientos de los personajes o explicar sucesos simultáneos.

Un agente es todo aquello que puede considerarse que percibe su ambiente mediante sensores y que responde o actúa en tal ambiente por medio de efectores. Los tres tipos más comunes de agentes son: agentes humanos, agentes robóticos y agentes de software. Los agentes humanos tienen ojos, oídos y otros órganos que les sirven de sensores, así como manos, piernas, boca y otras partes de su cuerpo que les sirven de efectores. En el caso de los agentes robóticos, los sensores son sustituidos por cámaras y telémetros infrarrojos y los efectores son reemplazados mediante motores. En el caso de un agente se software, sus percepciones y acciones vienen a ser las cadenas de bits codificados.

Un agente racional es aquel agente que hace lo correcto. Obviamente, esto es preferible a que haga algo incorrecto. Como un primer intento de aproximación al concepto de agente racional, se afirma que lo correcto es aquello que permite al agente obtener el mejor desempeño. Ahora es necesario decidir cómo y cuándo evaluar ese buen desempeño del agente. El término medición del desempeño se aplica al cómo: es el criterio que sirve para definir qué tan exitoso ha sido un agente. Desde luego que no existe una medida fija que se pueda aplicar por igual a todos los agentes. Podría preguntársele al agente su opinión subjetiva de cuándo le satisface a él mismo su desempeño, sin embargo, algunos de ellos no estarían en posibilidad de responder y otros, simplemente eludirán responder. En particular los agentes humanos se caracterizan por responder que “las uvas están verdes” para justificar el no haber obtenido lo que originalmente deseaban. Por lo anterior se debe insistir en la necesidad de contar con una medición objetiva del desempeño, medida que debe ser propuesta por una autoridad.

En otras palabras, las personas, en cuanto a su accionar como observadores externos, definen la norma de lo que se considera un desempeño satisfactorio en un ambiente y emplearlo en la medición del desempeño de los agentes. Un ejemplo sería el caso de un agente al que se le encomienda limpiar con una aspiradora un piso sucio. Una posible medida de su desempeño sería la cantidad de mugre eliminada en un turno de ocho horas. Una medida más elaborada consistiría en correlacionar la cantidad de electricidad consumida y la cantidad de ruido generado. Una tercera, otorgaría la máxima calificación a un agente que no sólo limpiase silenciosa y eficientemente el piso, sino que también se diera tiempo para ir de viaje el fin de semana.

El cuándo evaluar el desempeño es también importante, si sólo se midiese cuanta mugre eliminó un agente durante la primera hora del día, aquellos agentes que empiezan a trabajar rápidamente, no obstante que posteriormente realicen poco o ningún trabajo, resultarían premiados, en tanto aquellos que laboran todo el turno de manera consistente resultarían castigados. Es decir, lo importante es medir el desempeño a largo plazo, sea éste un turno de ocho horas o toda una vida.

En este punto es importante dejar en claro que existe una diferencia sustancial entre racionalidad y omnisciencia. Entrando en la temática propuesta, se dice que un agente omnisciente es aquel que sabe el resultado real que producirán sus acciones y su conducta es congruente con ello, sin embargo, en la realidad, no existe la omnisciencia. Considere el siguiente ejemplo: Un día una persona se encuentra caminando por El Prado y observa que al otro lado de la calle está un antiguo amigo. No hay tránsito en las cercanías y la persona no lleva ninguna prisa, así que, actuando racionalmente, empieza a cruzar la calle. Al mismo tiempo, a una altura de diez mil metros se desprende la puerta de la sección de carga aérea de una aeronave de pasajeros y antes de alcanzar la otra acera, queda completamente aplastada. ¿Se consideraría como irracional el haber atravesado la calle? Es improbable que en las notas necrológicas se afirme “Un idiota muere al intentar atravesar la calle”. Del ejemplo anterior se puede deducir que la racionalidad tiene más bien que ver con un éxito esperado, tomando como base lo que se ha percibido. La decisión de atravesar la calle fue racional dado que la gran mayoría de las veces el cruce habría tenido éxito y no había forma de que se hubiese previsto la caída de la puerta. Un agente que hubiera tenido un radar para detectar puertas en caída o que estuviera dentro de una caja de acero que lo protegiera, habría tenido más éxito, pero no por ello habría sido más racional. No se puede culpar al agente por no haber tomado en cuenta algo que no podía percibir.

El carácter racional de lo que se hace en un momento dado depende de cuatro factores. (1) De la medida con que se avalúa el éxito logrado. (2) De todo lo que hasta ese momento haya percibido el agente. A esta historia perceptual completa se le denomina la secuencia de percepciones. (3) El conocimiento que posea el agente acerca del medio. (4) De las acciones que el agente puede emprender. Lo anterior lleva a definir lo que es un agente racional ideal: en todos los casos de posibles secuencias de percepciones, un agente racional deberá emprender todas aquellas acciones que favorezcan obtener el máximo de su medida de rendimiento, basándose en las evidencias aportadas por la secuencia de percepciones y en todo conocimiento incorporado en tal agente.

Es necesario examinar cuidadosamente la definición anterior. Aparentemente, con esta definición se le permite a un agente emprender actividades definitivamente carentes de inteligencia. Por ejemplo, si un agente no se fija en el tráfico de ambos sentidos de una calle antes de proceder a cruzarla, su secuencia de percepciones no le podrá informar que un enorme camión carguero se aproxima a una gran velocidad. En apariencia la definición afirmaría que es correcto que el agente proceda a atravesar la calle. Sin embargo, la interpretación anterior está equivocada por dos razones. La primera es que no es racional atravesar la calle, el riesgo de hacerlo así es enorme. Segundo, un agente racional ideal invariablemente elegiría la acción de “verificar el tráfico” antes de lanzarse a la calle, ya que ésta verificación le permite obtener lo mejor de su desempeño esperado. El emprender acciones con el fin de obtener información útil es parte importante de la racionalidad.

El concepto de agente permite pensar en él como herramienta para el análisis de sistemas, no como una caracterización absoluta y tajantemente dividida al mundo en agentes y no agentes. Tómese el caso de un reloj. Puede considerársele como un objeto inanimado, o bien, como un agente sencillo. En cuanto a esto último todos los relojes hacen siempre lo correcto, mueven las manecillas, o presentan los dígitos, de manera adecuada. Los relojes son agentes degenerados dado que su secuencia de percepciones es vacía, independientemente de lo que suceda en el exterior, las acciones del reloj no se ven afectadas. En realidad lo anterior no es completamente cierto. Si el reloj y su propietario partieran de viaje de California a Australia, lo adecuado sería que el reloj se atrasara seis horas. Si las personas no hicieran lo anterior con sus relojes igual están actuando racionalmente, considerando que no cuentan con un mecanismo de percepción incorporado en sus relojes.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Mayo 24 de 2010