artificial intelligence - una - ¿Se utilizan los algoritmos evolutivos y las redes neuronales en los mismos dominios?
redes neuronales en la inteligencia artificial (7)
En términos de dominios de problemas, comparo redes neuronales artificiales entrenadas por propagación inversa con un algoritmo evolutivo.
Un algoritmo evolutivo implementa una búsqueda de haz aleatoria, lo que significa que sus operadores evolutivos desarrollan candidatos para ser probados y comparados por su aptitud. Dichos operadores generalmente no son deterministas y puede diseñarlos para que puedan encontrar candidatos cercanos y candidatos que estén más alejados en el espacio de parámetros para superar el problema de quedarse atrapados en los óptimos locales.
Sin embargo, el éxito de un enfoque de EA depende en gran medida del modelo que desarrolle, que es una compensación entre el potencial de alta expresión (puede que se adapte) y la generalidad (es posible que el modelo no pueda expresar la función objetivo).
Debido a que las redes neuronales generalmente son de varias capas, el espacio de parámetros no es convexo y contiene óptimos locales, los algoritmos de pendiente de gradiente pueden quedar bloqueados. La pendiente de gradiente es un algoritmo determinista, que busca a través de la proximidad. Es por eso que las redes neuronales generalmente se inicializan aleatoriamente y debe entrenar a más de un modelo.
Además, sabe que cada nodo oculto en una red neuronal define un hiperplano que puede diseñar una red neuronal para que se adapte bien a su problema. Existen algunas técnicas para evitar que las redes neuronales se sobrecalienten.
En general, las redes neuronales pueden ser entrenadas rápidamente y obtener resultados razonables con pocos esfuerzos (solo pruebe algunos parámetros). En teoría, una red neuronal que es lo suficientemente grande es capaz de aproximarse a cada función objetivo, que en el otro lado la hace propensa al sobreajuste. Los algoritmos evolutivos requieren que haga muchas elecciones de diseño para obtener buenos resultados, y lo más difícil probablemente sea qué modelo optimizar. Pero los EA pueden buscar espacios problemáticos muy complejos (de la manera que usted lo define) y obtener buenos resultados rápidamente. Incluso los EA pueden tener éxito cuando el problema (la función objetivo) cambia con el tiempo.
Libro de aprendizaje automático de Tom Mitchell: http://www.cs.cmu.edu/~tom/mlbook.html
Intento percibir la diferencia entre las distintas clases de algoritmos de aprendizaje automático.
Entiendo que las implementaciones de algoritmos evolutivos son bastante diferentes de las implementaciones de redes neuronales.
Sin embargo, ambos parecen estar orientados a determinar una correlación entre las entradas y las salidas de un conjunto potencialmente ruidoso de datos de capacitación / históricos.
Desde una perspectiva cualitativa, ¿hay dominios de problemas que sean mejores objetivos para las redes neuronales en lugar de los algoritmos evolutivos?
He leído algunos artículos que sugieren usarlos de manera complementaria. ¿Hay un ejemplo decente de un caso de uso para eso?
Este es el trato: en problemas de aprendizaje automático, normalmente tiene dos componentes:
a) El modelo (clase de función, etc.)
b) Métodos de ajuste del modelo (algoritmos de optimización).
Las redes neuronales son un modelo: dado un diseño y una configuración de pesos, la red neuronal produce algunos resultados. Existen algunos métodos canónicos de ajuste de redes neuronales, como la propagación hacia atrás, la divergencia contrastiva, etc. Sin embargo, el gran punto de las redes neuronales es que si alguien te da los pesos "correctos", te irá bien en el problema.
Los algoritmos evolutivos abordan la segunda parte, ajustando el modelo. De nuevo, hay algunos modelos canónicos que van con los algoritmos evolutivos: por ejemplo, la programación evolutiva generalmente intenta optimizar todos los programas de un tipo en particular. Sin embargo, las EA son esencialmente una forma de encontrar los valores de parámetros correctos para un modelo en particular. Por lo general, usted escribe los parámetros de su modelo de tal manera que la operación de cruce sea una cosa razonable y gire la manivela EA para obtener un ajuste razonable de los parámetros.
Ahora, podría, por ejemplo, usar algoritmos evolutivos para entrenar una red neuronal y estoy seguro de que se ha hecho. Sin embargo, el bit crítico que necesita EA para trabajar es que la operación de cruce debe ser una cosa razonable para hacer: al tomar parte de los parámetros de una configuración razonable y el resto de otra configuración razonable, a menudo terminará con una incluso mejor configuración de parámetros. La mayoría de las veces que se utiliza EA, este no es el caso y termina siendo algo así como un recocido simulado, solo que es más confuso e ineficiente.
Los algoritmos evolutivos (EA) representan una manera de entrenar un modelo, donde las redes neuronales (NN) SON un modelo. Más comúnmente en toda la literatura, encontrará que las NN se entrenan usando el algoritmo de propagación hacia atrás. Este método es muy atractivo para los matemáticos PERO requiere que usted pueda expresar la tasa de error del modelo usando una fórmula matemática. Este es el caso de situaciones en las que conoce muchos valores de entrada y salida para la función que está intentando aproximar. Este problema se puede modelar matemáticamente, como la minimización de una función de pérdida, que se puede lograr gracias al cálculo (y es por eso que a los matemáticos les encanta).
Pero las redes neuronales también son útiles para modelar sistemas que intentan maximizar o minimizar algunos resultados, cuya fórmula es muy difícil de modelar matemáticamente. Por ejemplo, una red neuronal podría controlar los músculos de un cyborg para lograr correr. En cada marco de tiempo diferente, el modelo tendría que establecer cuánta tensión debería estar presente en cada músculo del cuerpo del cyborg, en función de la entrada de varios sensores. Es imposible proporcionar tales datos de entrenamiento. Las EA permiten la capacitación proporcionando solo una manera de evaluar el modelo. Para nuestro ejemplo, castigaríamos la caída y recompensaríamos la distancia recorrida a través de una superficie (en un período de tiempo fijo). EA solo seleccionaría los modelos que hacen lo mejor en este sentido. Las primeras generaciones apestan pero, sorprendentemente, después de unos cientos de generaciones, tales individuos logran movimientos muy "naturales" y logran correr sin caerse. Tales modelos también pueden ser capaces de lidiar con obstáculos y fuerzas físicas externas.
Los algoritmos evolutivos (EA) son lentos porque dependen de un aprendizaje no supervisado: a los EA se les dice que algunas soluciones son mejores que otras, pero no cómo mejorarlas. Las redes neuronales son generalmente más rápidas, siendo un ejemplo de aprendizaje supervisado: saben cómo mejorar una solución mediante el uso del descenso de degradado dentro de un espacio de funciones sobre ciertos parámetros; Esto les permite alcanzar una solución válida más rápido. Las redes neuronales se utilizan a menudo cuando no hay suficiente conocimiento sobre el problema para que funcionen otros métodos.
Los algoritmos evolutivos, o genéticamente más genéricos, y las redes neuronales pueden usarse para objetivos similares, y otras respuestas describen bien la diferencia.
Sin embargo, hay un caso específico en el que los algoritmos evolutivos están más indicados que las redes neuronales: cuando el espacio de la solución no es continuo / discreto .
De hecho, las redes neuronales utilizan el descenso de gradiente para aprender de la propagación hacia atrás (o algoritmo similar). El cálculo de un gradiente se basa en derivados, que necesitan un espacio continuo, en otras palabras, que puede cambiar de manera gradual y progresiva de una solución a la siguiente.
Si el espacio de su solución es discreto (es decir, puede elegir la solución A, B o C, pero nada en el medio como 0.5% A + 0.5% B), entonces está tratando de ajustar una función no continua, y entonces las redes neuronales no pueden funcionar.
En este caso, los algoritmos evolutivos son perfectos, incluso se podría decir un envío de dios, ya que puede "saltar" de una solución a la siguiente sin ningún problema.
También vale la pena mencionar que los algoritmos evolutivos no están sujetos a la maldición de la dimensionalidad tanto como cualquier otro algoritmo de aprendizaje automático, incluidas las redes neuronales.
Esto hace que los algoritmos evolutivos sean una herramienta muy versátil y genérica para abordar ingenuamente cualquier problema, y una de las muy pocas herramientas para tratar funciones no continuas o conjuntos de datos de dimensiones astronómicas.
Los problemas que requieren "intuición" se adaptan mejor a las ANN, por ejemplo, el reconocimiento de escritura a mano. Entrenas en una red neuronal con una gran cantidad de información y la calificas hasta que hayas terminado (esto lleva mucho tiempo), pero luego tienes un sistema / algoritmo de caja negra que puede " adivinar " la escritura a mano, así que mantienes tu pequeña Cerebralo y utilízalo como módulo durante muchos años o algo así. Debido a que entrenar una ANN de calidad para un problema complejo puede llevar meses. Soy el peor de los casos y suerte.
La mayoría de los otros algoritmos evolutivos " calculan " una solución adhoc en el lugar, en una especie de patrón de ascenso.
También como se señaló en otra respuesta, durante el tiempo de ejecución, una ANN puede " adivinar " más rápido que la mayoría de los otros algoritmos evolutivos pueden " calcular ". Sin embargo, uno debe tener cuidado, ya que la ANN es simplemente " adivinar " y podría estar equivocada.
Mira la evolución neuro. (NEBRASKA)
Los mejores métodos actuales son NEAT y HyperNEAT por Kenneth Stanley.
Algoritmos genéticos solo encuentran un genoma de algún tipo; Es genial crear el genoma de una red neuronal, porque obtienes la naturaleza reactiva de la red neuronal, en lugar de solo un grupo de genes estáticos.
No hay muchos límites a lo que puede aprender. Pero lleva tiempo, por supuesto. La topología neural debe evolucionar a través de la mutación y el cruce habituales, así como las ponderaciones actualizadas. No puede haber propagación hacia atrás.
También puede entrenarlo con una función de aptitud, que por lo tanto es superior a la propagación hacia atrás cuando no sabe cuál debería ser la salida. Perfecto para aprender comportamientos complejos para sistemas para los que no conoce ninguna estrategia óptima. El único problema es que aprenderá un comportamiento que no anticipó. A menudo, ese comportamiento puede ser muy extraño, aunque hace exactamente lo que usted lo recompensó en la función de acondicionamiento físico. Por lo tanto, estará usando tanto tiempo derivando funciones de aptitud física como si hubiera creado conjuntos de salida para la propagación hacia atrás: P