Professional Documents
Culture Documents
Este doc fue originalmente hecho (y/o compilado) por varios alumnos del semestre
2017-1, así que los créditos van a ellos; en especial a: José Cáceres, Pablo Castillo,
Ivan Gonzalez, Rafael inostroza y Natalia Trucco.
Correcciones, materia adicional y edición: Bastian Fuenza.
El doc puede tener errores menores, y no debe ser considerado como parte oficial
del curso, es solo un documento con información que les puede ser de utilidad para
estudiar. SON LIBRES DE EDITARLO (hay back-up).
1- Algoritmos Genéticos
Los principios básicos de los Algoritmos Genéticos fueron establecidos por Holland
(1975), y se encuentran bien descritos en varios textos Goldberg (1989), Davis
(1991), Michalewicz (1992), Reeves (1993).
Introducción
Los Algoritmos Genéticos (AGs) son métodos adaptativos que pueden usarse para
resolver problemas de búsqueda y optimización, que están inspirados en la evolución
biológica. Un candidato a resolver el problema (llamado “individuo”) es codificado en la
forma de un cromosoma, de manera que la información que lo define esté contenida en sus
genes; estos individuos son sometidos a un proceso de reproducción, donde los individuos
más capaces de resolver el problema tienen una ventaja en el proceso de selección que
escoge a los individuos que se reproducirán, se crean “hijos” con una mezcla de los
materiales genéticos de sus “padres”; se define “qué tan bueno” es un individuo mediante
una función de evaluación (o fitness) que evalúa el desempeño de estos; y se agrega la
posibilidad de ocurrencia de mutaciones, que pueden crear material genético (cualidades
nuevas). Cuanto mayor sea la adaptación de un individuo al problema (fitness), mayor será
la probabilidad de que el mismo sea seleccionado para reproducirse; así, a lo largo de las
generaciones las buenas características se propagan a través de la población.
El poder de los Algoritmos Genéticos proviene del hecho de que se trata de una
técnica robusta, y pueden tratar con éxito una gran variedad de problemas provenientes de
diferentes áreas, incluyendo aquellos en los que otros métodos encuentran dificultades. Si
bien no se garantiza que el Algoritmo Genético encuentre la solución óptima del problema (y
en general no la encuentra), existe evidencia empírica de que se encuentran soluciones de
un nivel aceptable, en un tiempo competitivo con el resto de algoritmos de optimización
combinatoria. En el caso de que existan técnicas especializadas para resolver un
determinado problema, lo más probable es que superen al Algoritmo Genético.
Algoritmo genético simple/canónico
Corresponde a la forma más simple o minimalista del algoritmo genético, se compone solo
de las partes esenciales que lo hacen funcionar:
● Inicialización
● Mutación
● Selección
● Cruzamiento
● Funcion de evaluacion
Codificación:
Los individuos se pueden determinar por un conjunto de parámetros (genes), los que
agrupados forman una ristra de valores(hebra, cromosoma), el alfabeto corresponde
a qué valores pueden tomar los parámetros ej: binario{0,1} la cardinalidad
corresponde a la cantidad de valores que posee el alfabeto.
En términos biológicos, el conjunto de parámetros representando un cromosoma
particular se denomina genotipo.
Pseudocódigo:
Función de evaluación:
Debe ser diseñada para cada problema en particular; evalúa el desempeño del individuo y
le asigna un número a éste, en general (depende de cómo se defina), a mayor desempeño
mayor número de “fitness”.
Selección:
Selecciona los individuos de la población para cruzarse y producir descendientes, y lo hace
de una manera que favorece a los individuos con mayor fitness. Tipos de selección
comunes son:
● Ranking: Se pre-define una probabilidad de selección para cada posición (1ro, 2do,
etc) dandoles mas probabilidad de reproducirse a los primeros; luego se ordena a la
población según su fitness, y se le asigna la probabilidad correspondiente a su
posición. Es útil para tener una convergencia rápida, pero tiende a converger a
óptimos locales (convergencia prematura).
Mutación:
Se aplica a cada hijo de manera individual, y consiste en la alteración aleatoria
(normalmente con probabilidad pequeña) de uno o más genes componentes
del cromosoma.
Ejemplo: Selecciona un gen al azar del cromosoma, y lo cambia a cualquiera de las
posibilidades de gen disponibles (se escoge de manera aleatoria).
Este operador asegura que ningún punto de búsqueda tenga probabilidad cero de ser
examinado y es de gran importancia para asegurar la convergencia del algoritmo de
búsqueda.
Criterios de convergencia:
● De Jong(1975): Un gen converge cuando al menos un 95% de la población
comparte el mismo valor para un gen.
● De Jong(1975): La población converge cuando al menos un 95% de la población
comparte exactamente el mismo código genético.
ALPS
Age-Layered Population Structure (ALPS) GA, es un algoritmo genético que entra a
solucionar algunos de los problemas de un GA canónico. Es común para un GA converger
prematuramente a un óptimo local, y quedarse estancado en éste hasta que eventualmente
una mutación crea un individuo cercano a un mejor peak, que permite al GA acercarse al
nuevo óptimo encontrado, esto puede llevar mucho tiempo, y se crean muchas
generaciones sin ninguna mejora (debido a que ya hay convergencia, la diversidad es casi
nula); que es lo que pretende mejorar ALPS.
Como su nombre lo dice, ALPS crea una estructura poblacional con capas de edad, y esto
lo logra haciendo “resets” cada cierto tiempo, en los que se crea una nueva población y se
corre el mismo GA desde 0; pero esto es en paralelo, lo que quiere decir que el GA inicial
sigue evolucionando, pero ahora se crean “nuevas versiones” (resets) del mismo GA que
evolucionan al mismo tiempo en paralelo. Estos resets tienen una edad asignada
dependiente de “en qué momento” fueron creados; y además, los resets son capaces de
tomar individuos de resets más jóvenes, pero no de resets más viejos; esto se denomina
“protección a la innovación”, ya que solo los GA que llevan más tiempo evolucionando
(que ya muestran una tendencia en su convergencia) son capaces de tomar individuos de
GAs nuevos de utilidad, pero las generaciones nuevas no se ven sesgadas por las
tendencias de los más viejos.
*Los números blancos representan cuantas generaciones lleva evolucionando ese GA.
Debido a que pasadas muchas edades, las diferencias entre los GAs de edades altas y
similares son cada vez menores, estas se pueden agrupar en capas de edad, que pasan a
tomar el rol de “edad” (la definición de que uno es mas viejo que otro). Agrupaciones
comunes son:
iii) Cree una función para representar el conjunto [-10,10] con 5 bits.
R:Para crear la función hay que asignar el mínimo valor en nuestro espacio de bits [0 0 0 0
0] al menor valor del conjunto y el máximo valor en nuestro espacio de bits [1 1 1 1 1] al
máximo valor de nuestro conjunto.
por lo que hay que hacer una ecuacion de la recta que pasa de B(conjunto de Bits) al
intervalo original en los reales.
con esto se llega finalmente a que f(B)=(20/31)B -10
P2
Pasos del Algoritmo genético canónico:
1 Generar la población.
Alfabeto
Largo de la hebra
Cardinalidad
Cantidad de individuos
2 Definir función fitness
ii) ¿Cuál es la definición matemática de la función de aptitud para este problema? Considere
que el máximo real representable con 4 bits debe corresponder al máximo del rango dado.
R: Al igual que en la P1 iii se debe hacer una función f(B), de la misma forma que en la P1
se asigna el [0 0 0 0] a -5 y el [1 1 1 1] al 5 de esta manera se tiene
f(B)=(10/15)B-5
con esto ahora nuestra función fitness trabajando con bits, queda de la forma
f(x)=1-x^2=> F(B)=1-((10/15)B-5)^2
Llegado a cierto punto del algoritmo, su población consta de los siguientes individuos
v)Su profesor favorito del DIM le hace las siguientes preguntas: ¿Cuál es el mejor fitness
que puede entregar su algoritmo? ¿Es la solución óptima? ¿Es única?
R. Al ojo (o fuerza bruta), tenemos que:
f([0 1 1 1])=0.88888
f([1 0 0 0])=0.88888
Son los mayores fitness que se pueden encontrar, no son óptimos (el óptimo es 1), son dos.
vi) Dada sus respuestas anteriores, su profesor favorito del DIM argumenta que los
algoritmos genéticos no sirven para nada si no pueden resolver un problema tan “trivial”
como el que le dio. Busque una forma de codificar la conversión binario-real para que se
pueda obtener el máximo global del problema.
R: Básicamente hacer que uno de los números binarios corresponda con x=0, lo que se
puede lograr eliminando uno de los números binarios; ej: la más alta, [1 1 1 1], entonces el
máximo binario es [1 1 1 0], y se pueden representar 15 números, como ahora es impar, el
del medio corresponde con x=0 (si, es re trucho; y hace que haya que modificar cosas para
que el eliminado no aparezca, cosa que es un atado). En su defecto, también puede
explicarle al profe que, en el límite, si n tiende a infinito y se usan n bits, convergerá a x=0; o
irse a la chucha, mandar al profe a la chucha, y cuestionarse por qué está resolviendo
problemas de “intro al cálculo” 1D en los reales, con binarios en un algoritmo genético.
P4 Se tiene un grupo de poblaciones con las siguientes edades: 0,1,2,3,4. Relativo al
método ALPS, determine cuántos grupos etarios existen si se usa una distribución lineal de
edades. ¿Y si se usa una distribución exponencial?.
Distribución lineal => 0 1 2 3 4 5 6 7 8 9 10
{0}, {1}, {2}, {3}, {4} => 5 grupos
Exponencial=> 0 1 2 4 9 16
{0}, {1}, {2}, {3,4} => 4 grupos
2.Redes Neuronales
Ver: https://www.youtube.com/watch?v=aircAruvnKk
Neurona artificial
Emulan ciertas características de neuronas reales, las cuales son:
● Procesamiento paralelo: Todas las neuronas actúan a la vez en el sistema
● Memoria distribuida: Redundancia de almacenamiento para evitar pérdida de
información en caso de daño de neurona.
● Adaptabilidad al entorno: mediante información de las sinapsis. Permite aprender
de la experiencia, generalizando a partir de casos particulares
Los componentes de una neurona artificial son (ver figura):
● Entradas y pesos:Conjunto de entradas con respectivos pesos sinápticos, xi y wi.
● Regla de propagación hi(x,w). Se suele usar una suma ponderada o promedio
ponderado de entradas y pesos: sum(xi*wi) , sum(xi*wi)/sum(wi)
● Umbral: Parámetro adicional que se resta a la regla de propagación.
hi(x,w)=sum(xi*wi)-thetai, representa un criterio de activación para la neurona
● Función de activación: Representa salida y estado de activación de la neurona,
yi=fi(hi)
1. Todo o nada: (threshold activation)
Función escalón, 1 si hi es mayor al umbral, 0 si hi es menor al umbral (es utiliza por
el modelo de neurona del perceptron original). Salida digital.
2. Neurona continua sigmoidea: Respuesta continua (no binaria)
● Función sigmoide (activación logística)
● Tangente hiperbólica
3. Activación lineal:
ReLU.
Tipos de arquitectura:
● Según estructura: Monocapa o multicapa
● Según flujo de datos (ver figur de abajo):
○ Unidireccionales: Información circula en un único sentido
○ Recurrentes o realimentadas: Información puede circular entre distintas
capas en cualquier sentido
Otros?
Neuronas de entrada: Sin sinápsis (conexiones) entrantes
Neuronas de salida: Sin sinápsis (conexiones) salientes
Neuronas ocultas: No son de entrada ni salida v:
Red dinámica síncrona: Neuronas de una misma capa se actualizan a la vez comenzando
en la entrada y llegando hasta a al salida (capa por capa)
Red dinámica asíncrona: Cada neurona actualiza su estado independiente de las demás
Lo más común en redes artificiales son las redes síncronas, no así en sistemas biológicos.
● 3 entradas
● 1 salida
● 1 oculto
● Se definen 7 conexiones con una recurrente (4-5, 5-4)
● El segundo gen está inactivo, por lo que su conexión (2-4) no es expresa en el
fenotipo
● Para permitir complejización, el tamaño del genoma no tiene un tamaño definido
● Cada genoma en NEAT posee una lista de genes conectados, indicando el nodo de
entrada, el nodo de salida, el peso sináptico, si la conexión del gen es expresa o no
(activo o inactivo) y un número de innovación que identifica a los distintos genes al
hacer crossover
Innovación topológica/Mutación NEAT:
Los nuevos nodos quedan guardados como innovaciones en el genoma, guardando una
“historia” de esa especie. Para añadir una conexión basta con incluirla al final. Para un nodo
es necesario desactivar las conexiones que puedan impedir la inclusión del nodo con sus
respectivas conexiones.
Cada vez que surge una nueva mutación, se aumenta el número global de innovación y se
asigna al gen en cuestión, por lo que es fácil identificar genes comunes. Los genes no
comunes son “disjoint” si están dentro del rango de número de innovación de ambos
padres, o bien “excess” en caso que el número de innovación exceda el número máximo de
innovación de alguno de los padres.
Los genes con igual número de innovación se eligen de manera aleatoria para el hijo (por
eso en la figura el número 5 está inactivo, se eligió random entre ambos papis :3)
Genes no coincidentes se heredan del padre con mayor fitness, si tienen igual fitness se
heredan de ambos en forma aleatoria.
Especiación NEAT
NEAT soluciona esto mediante especiación, los individuos compiten con otros individuos
similares, así no se pierden innovaciones que podrían eventualmente producir una buena
solución
Las marcas históricas permiten dividir la población entre especies con topologías similares.
Se define la “distancia” (umbral de compatibilidad) entre 2 códigos genéticos como
Donde E son los excesos, D los disjoints, W la diferencia promedio de pesos de genes
coincidentes.c1, c2 y c3 asignan importancia a cada factor. N es el largo del genoma más
largo (puede ser 1 para cadenas cortas).
El valor de delta puede ser dinámico, de forma que si hay demasiadas especies, aumentarlo
(la “exigencia” para pertenecer a una especie es menor) o si hay muy pocos, disminuir delta
DDDDDD:
El fitness dentro de una especie se “reparte” entre todos, por lo que si una especie crece
demasiado, el fitness de sus individuos disminuirá incluso si posee individuos de buen
fitness por sí solos. Esto es útil porque evita que una especie “domine” y extinga al resto, ya
que esto no aporta a la diversidad topológica.
La ecuación define el fitness ajustado para un individuo i, esta depende del fitness del
individuo por si solo, f_i y su relación con el resto de individuos de la especie (j) mediante la
“sharing function”, la cual es cero si delta es mayor que el threshold o 1 si no. Por lo que la
sumatoria incluirá a los individuos de una especie.
Dentro de una especie, primero se eliminan los individuos de menor fitness, luego, toda la
población es reemplazada por la decendencia de los organismos que quedaron en cada
especie.
Complejización
Debido a que NEAT utiliza la especiación, esto permite que la población inicial sea simple,
de redes sin capas ocultas. Al ir evolucionando, las innovaciones pueden pertenecer a
nuevas especies para ver si tienen características favorables, evitando analizar topologías
excesivamente complejas. La complejidad aumenta gradualmente, a medida que las
innovaciones logran superar a especies más simples.
3. Si una neurona pertenece a la capa externa de la red, a qué corresponden las señales de
entrada que recibe?
Recibe los estímulos externos a la red (parámetros del problema, distancia, velocidad, color,
etcetcetc)
Las funciones de activación continuas sirven para problemas en que las respuestas forman
parte de un espectro, no son “´sí” o “no” exclusivamente. La función escalón es una función
que sí es útil para los casos “sí” o “no”.
Nodo1 Nodo2
In 1 In 1
Out A,B,C Out 2
Encendido Encendido
the pile get soaked with data and starts to get mushy over time, so it’s
technically recurrent.