Download Redes Neuronales y Algoritmos Genéticos Angel Fernando Kuri
Document related concepts
Transcript
Redes Neuronales y Algoritmos Genéticos Angel Fernando Kuri Morales Resumen Se presenta un método para entrenar redes neuronales (perceptrones multicapa) usando algoritmos genéticos. Se hace una breve discusión del modelo conexionista y el modelo evolutivo. Se presenta un caso de ejemplo y se discuten las ventajas de esta forma de entrenamiento sobre otras formas más tradicionales. 1. Introducción Las computadoras son más eficientes (más rápidas y más baratas) cada día. Esta tendencia se ha mantenido constantemente durante los últimos 50 años y, como resultado de lo anterior, se hace plausible y atractivo abordar ciertos problemas usando técnicas que hace pocos años se hubiesen desechado por incosteables ya que requieren de muchos recursos de cómputo o de mucho tiempo (estos dos elementos son, de alguna manera, intercambiables). Dentro de estas técnicas se encuentran, de manera primordial, aquellas que, de alguna manera, pretenden emular (más adelante aclararemos este concepto) fenómenos naturales de gran complejidad. La Naturaleza es prolija en el uso de sus recursos. Los tiene en abundancia y en cantidades que, en la escala humana, son prácticamente ilimitadas. En este trabajo nos referiremos a dos de estos modelos: el modelo conexionista y el modelo evolutivo. En particular nos referiremos a la manera en que estos dos modelos se han logrado entrelazar. En los párrafos que siguen expondremos los principios en los que se basan ambos modelos. Por razones de espacio nos es imposible abordarlos más que forma esquemática. Sin embargo, trataremos de sintetizar las bondades que ofrecen y sus limitaciones. En la segunda parte hablaremos del modelo conexionista y de las llamadas “Redes Neuronales Artificiales” (RNs). En la tercera parte nos referiremos al modelo evolutivo y a los llamados “Algoritmos Genéticos” (AGs). En la cuarta parte esbozaremos algunas áreas de aplicación de lo que hemos denominados “Redes Neuronales Genéticas” (RNGs) y las ventajas que éstas ofrecen sobre las RNs más convencionales. Por último, en la quinta parte ofreceremos algunas conclusiones de índole general. 2. El Modelo Conexionista y las Redes Neuronales Artificiales En las computadoras tradicionales las instrucciones básicas se ejecutan de manera secuencial en la unidad central de proceso (UCP). La UCP, tradicionalmente, sigue la denominada “arquitectura (o modelo) de von Neumann”. Esta arquitectura define un sistema que, de manera secuencial, va tomando los contenidos de la memoria central (RAM), interpretándolos y ejecutando la instrucción correspondiente. En algunos casos la instrucción indica que la localidad de RAM de la cual tomar la siguiente instrucción no es la subsecuente. Típicamente el hecho de “saltar” de una localidad de instrucción a otra depende de ciertas condiciones que los datos deben cumplir. Dicho de manera muy básica, lo que otorga a la computadora la posibilidad de exhibir un comportamiento “inteligente” es la capacidad de tomar las decisiones basadas en la satisfacción de las condiciones anotadas anteriormente. Con esta arquitectura se han desarrollado sistemas que aprenden, generalizan y clasifican: exhiben comportamientos asociados a un ser inteligente. Pero hay cosas que un ser humano puede hacer muy fácilmente, con mayor precisión y más rápidamente que una computadora de von Neumann. Por ejemplo, un ser humano, al ver la pata de un elefante sabe rápidamente que ES un elefante. Por contraste, una computadora digital tiene grandes dificultades para determinarlo. Si consideramos que una UCP actual puede llevar a cabo cientos de millones de comparaciones por segundo es claro que el mecanismo de proceso que llevan a cabo los cerebros humanos no puede estar fundamentado en el mecanismo secuencial de von Neumann. Las neuronas que conforman nuestros cerebros son mucho más lentas (del orden de milisegundos) que una compuerta digital y su capacidad de establecer comparaciones lo es también. Por otra parte, una neurona es una unidad funcionalmente muy simple. Lo único que puede “hacer” es reaccionar a los estímulos de las neuronas vecinas y emitir un estímulo que se propaga a algunas de ellas si la suma de los estímulos de entrada excede de un valor llamado el “umbral” de la neurona. Derivado de consideraciones como las anteriores, los estudiosos de la computación se dieron a la tarea de tratar de entender la aparente contradicción implícita en ellas. Y, sabiendo un poco de la forma como se conforman las redes neuronales biológicas, es relativamente fácil llegar a las siguientes conclusiones: a) En una arquitectura neuronal, el potencial primordial de cómputo se encuentra en la interacción concertada de todas las neuronas que conforman a la red. b) La información que se almacena en una red neuronal no se ubica en un punto específico del espacio; más bien está en el estado de las neuronas y en la arquitectura misma de la red. c) La capacidad de cómputo se identifica con el alto número de neuronas de la red y el aún más alto número de conexiones (“sinapsis”) entre ellas (en el humano, hay cerca de 1011 neuronas y 1015 interconexiones). Derivado de lo anterior se plantea un modelo denominado “conexionista” en el cual se preservan las dos características ya señaladas: unidades de proceso muy simples llamadas (por analogía) neuronas y un esquema de interconexión vasto y complejo . En la figura 1 se muestra un esquema de una red neuronal artificial. En esta figura, cada círculo representa una neurona y cada línea representa una sinapsis. En la figura se distinguen cuatro capas (o conjuntos de neuronas). La primera se conoce como capa de entrada o de presentación; las dos segundas se denominan “ocultas” porque no tienen contacto directo con el mundo exterior; la última se llama de “salida”. Implícito en la figura está el hecho de que, a cada sinapsis, se encuentra asociado un valor numérico llamado el “peso” de la sinapsis. En la figura ilustrada, cada neurona en todas las capas (excepto la de salida) está conectada con cada una de las neuronas en la capa siguiente. Probablemente el tipo de red más usado es el denominado Perceptrón Multicapa (PMC). Este tipo de red propaga sus señales solo hacia adelante, como se muestra en la figura 1. Figura 1. Esquema de una Red Neuronal Artificial En las RNs cada neurona representa una función simple (típicamente g(x)=1/[1+exp(x)]). Cuando se presenta un conjunto de datos a una RN, cada neurona en la capa de entrada transforma sus entradas en una salida y la propaga hacia otras neuronas en la siguiente capa. Estas, a su vez, transforman y propagan sus señales de entrada y salida, respectivamente. Las neuronas en la capa de salida, finalmente, presentan sus salidas al entorno. Se dice que una RN “aprende” cuando a un conjunto de valores de entrada la red responde con el correspondiente (y adecuado) conjunto de valores de salida. Esta posibilidad depende de la arquitectura de la red y de los pesos asociados. Típicamente la arquitectura es fija y lo que se modifica cuando se “entrena” una red son los valores de los pesos. Uno de los principales problemas a resolver cuando se entrena a una red neuronal es cómo obtener los pesos que permitan el ajuste adecuado a los valores de entrenamiento y lo hagan también a valores fuera del conjunto de entrenamiento. Es decir, se pide de una RN que aprenda y generalice. El otro problema fundamental en el campo de las RNs es aquél que se refiere a la determinación de la arquitectura de la red: cuál es el número de capas óptimo para resolver un problema dado; cómo interconectar las neuronas; qué funciones de activación elegir, etc. El Perceptrón Multicapa de Retropropagación Lo que se entiende por “adecuado” conjunto de valores de salida está determinado por una medida del error (entre los valores esperados y aquellos 2 1 p (i) y − d (i ) . ∑ 2 i =1 En donde d es el valor deseado, y es el valor obtenido, p es el número de patrones de entrenamiento y el superíndice indica el número de categorías. Para minimizar este error se aplica el denominado “algoritmo de retropropagación”, que es el siguiente. 1. Inicializar los pesos a valores aleatorios pequeños. r 2. Aleatoriamente elegir el patrón de entrada x u . 3. Propagar la señal hacia adelante a lo largo de la red. 4. Calcular δ il = g ' (h iL )[d iu − yiL ] . L es el número de capas de la red. obtenidos) a minimizar. En un PMC esta medida está dada por E = donde hli representa la entrada neta a la i-ésima unidad de la l-ésima capa y g’ es la derivada de la función de activación g. 5. Calcular las deltas de las capas precedentes propagando los errores hacia atrás: δ il = g ' (h li )∑ wlij+1δ lj+1 para l=(L-1),...,1. En donde wijl denota j el peso asociado a la conexión entre la i-ésima neurona de la capa l-1 con la j-ésima neurona de la capa l. 6. Actualizar los pesos usando ∆wl ji = η δ li y lj−1 ( 0 < η < 1 ). 7. Ir al paso 2 y repetir para el siguiente patrón hasta que el error en la capa de salida esté debajo de un umbral predeterminado o un número máximo de iteraciones sea alcanzado. Este algoritmo está tan generalizado que es conveniente hablar de un PMC de retropropagación (PMCR). En un trabajo de esta naturaleza es imposible entrar en los detalles finos de implantación del PMCR. (El lector interesado puede consultar [8, 9, 10]). Pero es importante consignar que la operación exitosa de una RN de este tipo depende de un conjunto de parámetros que el diseñador debe de elegir cuidadosamente a través de un proceso de prueba y error o, en el mejor de los casos, a ciertos heurísticos dictados por el tipo de problema y la experiencia en problemas análogos. Aún siendo así, las RNs han demostrado su eficacia y utilidad innegables por lo que, hoy por hoy, el paradigma conexionista está firmemente consolidado. 3. El Modelo Evolutivo y los Algoritmos Genéticos Para entender el modelo evolutivo es preciso reconocer que la naturaleza es un ingeniero consumado. Lo es en el sentido de que los seres vivos representan la solución al problema de la supervivencia de un organismo que se enfrenta a condiciones determinadas por el entorno en el que se desarrolla. El más conocido pionero y defensor de este punto de vista fue Darwin quien observó que las especies evolucionan poco a poco a lo largo de intervalos de tiempo que, en la escala humana, resultan enormes; que las especies actuales son el fruto de la acumulación de innumerables cambios paulatinos de otras que las antecedieron y que lo que dirige esos cambios es la pertinencia que estos tienen al favorecer la subsistencia de los individuos de la especie en función de su medio ambiente. A mediados de este siglo se empezaron a comprender las razones por las que así ocurre. Watson y Crick explicaron el mecanismo de la herencia identificando la molécula de ADN (ácido desoxirribonucleico) como la portadora de la información (a nivel celular) que determina las características del individuo. El ADN codifica al individuo (el genotipo) usando un alfabeto químico muy simple y, al ser interpretado por el organismo que lo gesta, da origen al individuo mismo (el fenotipo). El ADN, pues, contiene la información de la mejor solución (el individuo) al problema fundamental del ser vivo (la supervivencia). La teoría de la evolución que considera esta forma de transmisión de la información de una generación a otra se denomina neodarwinismo. En los seres vivos la información, pues, se encuentra contenida en su ADN. Es información intrínseca que se deriva de un proceso de aprendizaje generacional. La idea de la Computación Evolutiva y de los Algoritmos Genéticos (AGs) en particular, es simular parcialmente el proceso anterior para lograr que una computadora aprenda. Es decir, que encuentre el mejor ADN: el que permita que el individuo sobreviva mejor frente a las condiciones de su entorno (el problema a resolver). El Algoritmo Genético Simple La literatura reporta un gran número de variantes de AGs. Una de ellas (propuesta originalmente por Holland) se conoce como el “AG Simple” o “AG Canónico”. Opera de la siguiente forma [que ilustramos con un ejemplo]: a) Se identifica una forma de codificar la solución al problema [Encontrar la solución al sistema 1) f1 ( x, y ) = x 2 + y 2 + x + y − 8 = 0 ; 2) f 2 ( x, y ) = xy + x + y − 5 = 0 . La solución consiste de dos números. Cada uno de estos números se codifica con 25 bits. El primer bit es el signo; los siguientes cuatro representan la parte entera y los últimos 20 la parte decimal.] b) Se genera un número arbitrario n de posibles soluciones, al azar. [En este caso suponemos que n = 100 por lo que se generan 100 cadenas, cada una de ellas de 50 bits de longitud a las que se denomina el cromosoma o genoma]. Cada una de estas posibles soluciones es un individuo de la población. En un AG el individuo es el genoma. c) Se determina una medida de adaptación de los individuos. Esta medida nos permite calificar qué tan bien se adaptan al medio ambiente. [En el ejemplo, la medida de adaptación es: Minimizar f1 ( x, y ) + f 2 ( x, y ) sujeto a que se cumpla que f1 ( x, y ) ≥ 0 y f 2 ( x, y ) ≥ 0 . Aquellos individuos que satisfagan las condiciones y que induzcan valores menores en f1 ( x, y ) y f 2 ( x, y ) reciben una mejor evaluación; el medio ambiente les es más favorable]. Los individuos se evalúan y catalogan de acuerdo con su desempeño y se otorga una mayor probabilidad de supervivencia a los individuos más aptos. Puede pensarse que las calificaciones de los individuos definen las zonas de una ruleta. A mayor probabilidad, mayor área le toca al individuo. En la figura 2 se ilustra un caso sencillo (n = 4 ). d) La ruleta se gira n veces. Se seleccionan los n individuos elegidos en este proceso. Nótese que los individuos más aptos tienen mayores probabilidades de ser elegidos y que puede haber varias copias del mismo individuo. Aunque estadísticamente podemos esperar que los mejores individuos prevalezcan, nunca se predetermina cuáles son estos. En ese sentido, la selección induce una búsqueda aleatoria dirigida. Tenemos, pues, una nueva población resultante de aplicar el operador de selección. e) Ahora seleccionamos al azar una pareja de individuos de la nueva población. El ADN de éstos (que llamamos los padres) se va a combinar con un proceso muy simple: escogemos un punto de cruzamiento aleatoriamente e intercambiamos los segmentos correspondientes a cada uno de los padres. Este proceso se ilustra en Figura 2. Selección Proporcional. la figura 3. El denominado cruzamiento en un punto se repite n/2 veces, de manera que n padres dan origen a n descendientes o hijos. La población derivada del operador de cruzamiento es distinta a la población padre. f) Por último, induciremos el tercer operador del AGS: el operador de mutación. Su aplicación consiste, simplemente, en elegir aleatoriamente un cierto número de bits de los genomas de la población y cambiarlos: trocar los 0s por 1s y viceversa. La población mutada es distinta de la población cruzada. g) Los individuos de la nueva población (seleccionada, cruzada y mutada) se evalúan de uno en uno y los pasos (d), (e) y (f) se repiten hasta que se alcanza algún criterio de terminación. Uno muy simple es establecer a priori el número de iteraciones (generaciones) durante las cuales se aplicarán los operadores genéticos. En el ejemplo que esbozamos, nuestra meta es que el AG termine encontrando aquellos individuos que satisfagan el sistema de (a); es decir, que encuentre los valores de las variables x e y que hagan cero a f1(x,y) y a f2(x,y) simultáneamente. Nosotros hicimos un proceso análogo al mencionado y el AG nos entregó los siguientes valores: x=0.99879679; y=2.00275002. El lector puede verificar fácilmente que una solución exacta está dada por x=1 y y=2. El error en la solución encontrada por el AG es de, aproximadamente, 0.01. De manera que, entre otras muchas aplicaciones, un AG nos ofrece un método general de resolución de ecuaciones simultáneas no lineales! Figura 3. Cruzamiento en un Punto. Decir que un AG funciona y entender por qué lo hace (y cuando no) son asuntos muy distintos. En un trabajo de esta naturaleza es imposible siquiera tratar de analizar el mecanismo genético. El lector interesado puede consultar, por ejemplo, [11, 12, 13]. 4. Redes Neuronales Genéticas Como ya se anotó, los PMCRs dependen, de manera básica, del algoritmo de retropropagación (AR). Varios de los parámetros que un usuario de una RN debe determinar son impuestos por dicha forma de entrenamiento. Por ejemplo η y L en las fórmulas arriba, así como el momento, el factor de decaimiento de los pesos, el umbral de discriminación y la constante de tiempo (que no se habían mencionado1 antes). Otros más no dependen de AR. Por ejemplo, el tipo de función de activación, el esquema de interconexión de la red, las disciplina de 1 El lector interesado puede referirse a [7]. aprendizaje, la forma de presentación de las muestras de entrenamiento, etc. ¡En un PMCR podemos contar más de 45 parámetros! La idea que surge de inmediato, al conocer las bondades de los dos paradigmas anotados, el conexionista y el evolutivo, es evidente: sería posible hacer que una RN fuese optimizada (es decir, que sus parámetros de operación fuesen elegidos de alguna manera que garantizara que estos han sido elegidos de manera cercana al óptimo)? La respuesta, evidente también, es SI. Podemos “pedirle” a un AG que busque (y encuentre) por nosotros cómo establecer a) La arquitectura de la red y/o b) Los valores de los parámetros de la misma. De esta forma, el proceso de elección del detalle de una RN para resolver tal o cual problema se hace menos heurístico. Se han desarrollado varios enfoques para estos dos problemas. Por ejemplo, Montana y Davis [1] han evolucionado los pesos de las RNs; Miller, Todd y Hegde [2] han evolucionado la arquitectura de la RN usando codificación directa y Kitano [3] usó codificación gramátical para el mismo propósito. Una discusión más detallada de tales aplicaciones puede ser encontrada en [4] y [5]. Para ello, por supuesto, hay que presumir que un AG no se encuentra plagado por la misma enfermedad: la necesidad de determinar sus propios parámetros de manera casuística. De lo anotado arriba no es evidente que este sea el caso. Parecería que un AG sufre de la misma dolencia que una RN: la necesidad de ser “entonado” para cada problema2. En los trabajos que se reportan los autores, de hecho, usaron AGs “clásicos”. Pero, recuerde el lector, que no existe “el” AG. De hecho, existe un sinnúmero de variantes de AGs. Una vez elegida la variante adecuada, podemos desligarnos (relativamente) de la necesidad de establecer parámetros de manera heurística. En un trabajo reciente [6] hemos atacado el problema de entrenar un PMCR usando un tipo de AG que brinda solidez y nos permite prescindir de la definición de parámetros antes mencionada. Este tipo de AG que hemos denominado “ecléctico” (AGE) incorpora una serie de características que lo hacen esencialmente diferente de un AG simple, a saber: Dada una población de N individuos: a) Los mejores N individuos se mantienen siempre en la población (elitismo global3), b) Durante el cruzamiento, las parejas son seleccionadas de manera determinística apareando el mejor individuo con el peor; el segundo mejor con el segundo peor, y así sucesivamente, c) El cruzamiento se hace de manera anular, d) Los parámetros del AGE evolucionan junto con la mejor solución y e) El AGE determina, de manera automática, la conveniencia de invocar un algoritmo complementario llamado escalador de mutación aleatoria. Con este algoritmo se resuelve una serie de problemas inherentes a un AGS4. Cuando se usa un AGE en vez del algoritmo de retropropagación se hace innecesario definir los ya mencionados η , L, el momento, el factor de decaimiento 2 En un AG simple hay que definir, a priori, el tamaño de la población, la probabilidad de cruzamiento y la probabilidad de mutación. 3 En la literatura, a esta forma de manejo de la población se le denomina “selección µ + λ ”. 4 El lector interesado en el detalle del AGE puede consultar [7]. de los pesos, el umbral de discriminación y la constante de tiempo. Más aún, podemos tratar de minimizar el error de entrenamiento relativo a otras medidas de distancia. En el trabajo mencionado hemos minimizado las siguientes normas5: L n 1 O ( i )− Z ( i ) MEE = ∑∑ 10 s s i =1 L n 1 MAE = ∑∑ O(i ) − Z (i ) s s i =1 L n 1 MSE = ∑ ∑ (O(i ) − Z(i ))2 s s i =1 SAE = max O(i ) − Z (i ) s ,i Estas normas simplemente denotan formas de medir qué tan adecuada es la respuesta de la i-ésima neurona en relación a la respuesta deseada. Hay dos medidas de qué tan exitoso es un método de entrenamiento. Una es el índice de entrenamiento (IE) que definimos como la razón entre el número de valores correctos arrojados por la RN cuando se le presenta el conjunto de entrenamiento y el número de elementos del conjunto. El otro es el índice de generalización (IG) que es la razón entre el número de valores correctos obtenidos por la red cuando se le presentan datos fuera del conjunto de entrenamiento. El IE establece qué tan bien una RN puede aprender; el IG mide qué tan bien la RN puede generalizar. Encontramos tanto el IE como el IG para las redes neuronales genéticas. Condujimos varios conjuntos de corridas. Entrenamos la red de 5 formas diferentes: uno para cada norma definida y uno para el PMCR tradicional. Un Problema de Predicción Los resultados de un problema de predicción se muestran en la Tabla 1. Aquí se tomaron las ventas anuales de una aerolínea comercial y, de las ventas del año inmediato anterior y se predijo el comportamiento de sus ventas en el año inmediatamente siguiente. Este es un problema de interés práctico pero de difícil solución usando métodos de aproximación tradicionales. Particularmente, es difícil encontrar una forma adecuada de extrapolar los datos. Las RNs funcionan sorprendentemente bien (como se verá más adelante) pero sufren de las desventajas ya citadas. Entrenamos la red usando el AR clásico y la entrenamos, también, evolucionando los pesos asociados a las neuronas usando las normas antes mencionadas. La conclusión es que podemos prescindir del algoritmo de entrenamiento típico (retropropagación) y reemplazarlo por un AG. Con ello 5 O(i) denota el valor observado y Z(i) denota el valor deseado. disminuimos sensiblemente la necesidad de fijar parámetros de los que depende la operación de la RN. Tabla 1. Aplicación de Distintas Normas para un Problema de Predicción PRUEBA (12 ELEMENTOS) Error Promedio MEE 5.74% MAE 9.34% MSE 10.04% SAE 9.50% PMCR 17.67% ENTRENAMIENTO (108 ELEMENTOS) Error Promedio MEE 10.62% MAE 5.27% MSE 5.26% SAE 5.68% PMCR 3.35% Figura 4. Predicción usando RNGs. 5. Conclusiones Hay problemas de aprendizaje que pueden atacarse ventajosamente aprovechando las características del modelo conexionista. Sin embargo, la obtención de la correcta disposición de los elementos y/o parámetros de dichas redes ubica al usuario en una posición incierta. Depende de su habilidad personal para poder sacar aprovechar las arquitecturas neuronales. Para evitar esta dependencia casuística es posible usar el modelo evolutivo para afinar el comportamiento de la red. En este trabajo hemos no solamente mostrado que es posible combinar ambos paradigmas con las ventajas esperadas, sino que es posible determinar la bondad de las RNs usando otras medidas de desempeño. El campo donde se desarrollan ambos modelos es aún incipiente pero está tomando cada vez más auge. Debemos de esperar, en el futuro inmediato, que haya interesantes desarrollos que permitan explotar las ventajas conjuntas de ambos modelos. Referencias [1] Montana, D.J., and Davis, L.D., “Training feedforward Networks using Genetic Algorithms”, in Proceedings of the International Joint Conference on Artificial Intelligence, Morgan Kauffman, 1989. [2] Miller, G.F., Todd, P.M., and Hedge, S.U., “Designing neural networks using genetic algorithms”, in J.D. Schaffer, ed., Proceedings of the Third International Conference on Genetic Algorithms, Morgan Kauffman, 1989. [3] Kitano, H., “Designing Neural Networks using genetic algorithms with graph generation system”, Complex Systems 4:461-476, 1990. [4] Yao, X., “A Review of Evolutionary Artificial Neural Networks”, International Journal of Intelligent Systems, 8:539-567, 1993. [5] van Rooij, A.J.F., Jain, J.C., and Johnson, R.P., Neural Network Training using Genetic Algorithms, World Scientific, 1996. [6] Kuri, A., “Training Neural Networks using Non-standard Norms – Preliminary Results”, MICAI 2000. [7] Kuri, A., A Comprehensive Approach to Genetic Algorithms in Optimization and Learning, Theory and Applications, Volume 1: Foundations, pp. 215-219, Ed. Politécnico, 1999. [8] Jain, A., Mohiuddin, K., “Artificial Neurla Networks: A Tutorial”, Computer, IEEE Computer Society, pp. 31-44, March, 1996. [9] Yao, X., “Evolving Artificial Neural Networks”, Proceedings of the IEEE, 87(9):1423-1447, September, 1999. [10] Kuri, A., “Non-standard Norms in Genetically Trained Neural Networks”, First IEEE Symposium on Combinations of Evolutionary Computation and Neural Networks, May 11-12, 2000, San Antonio. [11] Holland, J., “Adaptation in Natural and Artificial Systems”, Ann Arbor, Mich., University of Michigan Press, 1975. [12] Mitchell, M., Forrest, S., and Holland, J., “The Royal Road for Genetic Algorithms: Fitness Landscapes and GA Performance”, in F.J. Varela and P. Bourgine, eds., Toward a practice of autonomous systems: Proceedings of the First European Conference on Artificial Life, MIT Press, 1992. [13] Rudolph, G., “Convergence Analysis of Canonical Genetic Algorithms”, IEEE Transactions on Neural Networks, 5(1):96-101, January, 1997. Angel Fernando Kuri Morales Profesor investigador del Centro de Investigación en Computación (CIC) del Instituto Politécnico Nacional desde 1996. En 1974 se graduó como Ingeniero Mecánico Electricista en la Universidad Anáhuac. En 1976 recibió un grado de maestría en Ciencias de la Computación de la Universidad de Illinois en UnrbanaChampaign, USA. En 1986 recibió el grado doctoral de Kennedy-Western University, con la tesis Genetic Automata and Information System Losslessness. El Dr. Kuri ha incursionado en los campos de inteligencia artificial, diseño de sistemas electrónicos digitales, arquitectura de computadoras, telecomunicaciones, desarrollo de sistemas de información, modelación matemática de sistemas de información, entre otros. En varias ocasiones ha sido incluido en las ediciones de Who is Who in The World. Ha sido profesor titular del programa de Ciencias de la Computación de la UNAM desde 1978. Ha sido socio fundador de las empresas Micromex, Idet Ingeniería, Idet Consultores e Idet Centro de Capacitación. En 1999 publicó el libro A Comprehensive Approach to Genetic Algorithms in Optimization and Learning. Se ha desempeñado como Subdirector de Investigación Aplicada del CIC desde 1996. Teléfono: Fax: e-mail: 5729-6000 ext 56547 5729-6000 ext 56607 akuri@pollux.cic.ipn.mx