optimization - train - Optimización de parámetros usando la técnica de IA
genetic algorithm train neural network (3)
Sé que mi pregunta es general, pero soy nuevo en el área de IA. Tengo un experimento con algunos parámetros (casi 6 parámetros). Cada uno de ellos es independiente, y quiero encontrar la solución óptima para la función de salida máxima o mínima. Sin embargo, si quiero hacerlo en la técnica de programación tradicional, llevará mucho tiempo, ya que usaré seis bucles anidados.
Solo quiero saber qué técnica de IA usar para este problema? ¿Algoritmo genético? Red neuronal? ¿Aprendizaje automático?
Actualizar
En realidad, el problema podría tener más de una función de evaluación. Tendrá una función que debemos minimizar (Costo) y otra función que queremos maximizar (Capacidad) Tal vez se puedan agregar otras funciones. Ejemplo: Construcción de una ventana de vidrio se puede hacer en un millón de formas. Sin embargo, queremos la ventana más sólida con el menor costo. Hay muchos parámetros que afectan la capacidad de presión de la ventana, como la resistencia del vidrio, la altura y el ancho, la pendiente de la ventana. Obviamente, si vamos a casos extremos (vidrio de mayor resistencia, con el ancho y la altura más pequeños, y la pendiente cero), la ventana será extremadamente fuerte. Sin embargo, el costo de eso será muy alto.
Quiero estudiar la interacción entre los parámetros en un rango específico.
En primer lugar, si tienes varios objetivos en competencia, el problema es confuso.
Tienes que encontrar un único valor que quieras maximizar ... por ejemplo:
value = strength - k*cost
o
value = strength / (k1 + k2*cost)
En ambos, para una fuerza fija, el menor costo gana y para un costo fijo, la mayor fuerza gana, pero se tiene una fórmula para poder decidir si una solución determinada es mejor o peor que otra. Si no lo hace, ¿cómo puede decidir si una solución es mejor que otra que es más barata pero más débil?
En algunos casos, un valor correctamente definido requiere una función más compleja ... por ejemplo, para la fuerza el valor podría aumentar hasta cierto punto (es decir, tener un resultado más fuerte que una cantidad prescrita es inútil) o un costo podría tener un límite ( porque una solución más alta que cierta cantidad no es interesante porque colocaría el precio final fuera del mercado).
Una vez que encuentre los criterios si los parámetros son independientes, un enfoque muy simple que en mi experiencia todavía es decente es:
- elija una solución aleatoria eligiendo
n
valores aleatorios, uno para cada parámetro dentro de los límites permitidos - calcular el valor objetivo para este punto de partida
- seleccione un número aleatorio
1 <= k <= n
para cada uno de losk
parámetros elegidos aleatoriamente desde eln
calcule un incremento con signo aleatorio y cambie el parámetro por esa cantidad. - calcular el nuevo valor objetivo a partir de la solución traducida
- si el nuevo valor es mejor, conserve la nueva posición; de lo contrario, vuelva a la original.
- repite desde 3 hasta que te quedes sin tiempo.
Dependiendo de la función objetivo, hay distribuciones aleatorias que funcionan mejor que otras, también puede ser que para diferentes parámetros la elección óptima sea diferente.
Sin saber mucho sobre el problema específico, parece que los Algoritmos Genéticos serían ideales. Se han utilizado mucho para la optimización de parámetros y, a menudo, han dado buenos resultados. Personalmente, los he usado para reducir los rangos de parámetros para las técnicas de detección de bordes con alrededor de 15 variables e hicieron un trabajo decente.
Tener múltiples funciones de evaluación no necesita ser un problema si codifica esto en la función de aptitud del Algoritmo Genético. Buscaría la optimización multiobjetivo con algoritmos genéticos.
Comenzaría aquí: optimización multiobjetivo utilizando algoritmos genéticos: un tutorial
Hace algún tiempo escribí un código C ++ para resolver problemas de optimización usando Algoritmos Genéticos. Aquí está: http://create-technology.blogspot.ro/2015/03/a-genetic-algorithm-for-solving.html
Debería ser muy fácil de seguir.