Pregunta

¿Es un algoritmo genético la forma más eficiente de optimizar el número de nodos ocultos y la cantidad de entrenamiento realizado en una red neuronal artificial?

Estoy codificando redes neuronales usando NNToolbox en Matlab. Estoy abierto a cualquier otra sugerencia de técnicas de optimización, pero estoy más familiarizado con las GA.

¿Fue útil?

Solución

En realidad, hay varias cosas que puede optimizar utilizando GA con respecto a NN. Puede optimizar la estructura (número de nodos, capas, función de activación, etc.). También puede entrenar usando GA, eso significa establecer los pesos.

Los algoritmos genéticos nunca serán los más eficientes, pero generalmente se usan cuando tienes poca idea de qué números usar.

Para la capacitación, puede usar otros algoritmos, incluida la propagación hacia atrás, nelder-mead etc. .

Dijiste que querías optimizar el número de nodos ocultos, para esto, el algoritmo genético puede ser suficiente, aunque lejos de ser "óptimo". El espacio que está buscando es probablemente demasiado pequeño para usar algoritmos genéticos, pero aún pueden funcionar y, afaik, ya están implementados en matlab, así que no es gran cosa.

¿Qué quieres decir con optimizar la cantidad de entrenamiento realizado? Si te refieres a la cantidad de épocas, entonces está bien, solo recuerda que el entrenamiento depende de alguna manera de los pesos iniciales y generalmente son aleatorios, por lo que la función de condición física utilizada para GA no será realmente una función.

Otros consejos

Un buen ejemplo de redes neuronales y programación genética es la arquitectura NEAT (Neuro-Evolution of Augmenting Topologies). Este es un algoritmo genético que encuentra una topología óptima. También se sabe que es bueno para mantener baja la cantidad de nodos ocultos.

También hicieron un juego usando esto llamado Nero. Resultados tangibles bastante únicos y sorprendentes.

Dr. Página de inicio de Stanley:

http://www.cs.ucf.edu/~kstanley/

Aquí encontrarás casi todo lo relacionado con NEAT, ya que él fue quien lo inventó.

Los algoritmos genéticos se pueden aplicar útilmente para optimizar las redes neuronales, pero debe pensar un poco en lo que quiere hacer.

Más " clásico " Los algoritmos de entrenamiento NN, como Back-Propagation, solo optimizan los pesos de las neuronas. Los algoritmos genéticos pueden optimizar los pesos, pero esto generalmente será ineficiente. Sin embargo, como estaba preguntando, pueden optimizar la topología de la red y también los parámetros para su algoritmo de entrenamiento. Tendrá que ser especialmente cauteloso con la creación de redes que estén "sobreentrenadas" aunque.

Otra técnica con algoritmos genéticos modificados puede ser útil para superar un problema con la propagación hacia atrás. La propagación hacia atrás generalmente encuentra mínimos locales, pero los encuentra con precisión y rapidez. La combinación de un algoritmo genético con retropropagación, por ejemplo, en una GA lamarckiana, ofrece las ventajas de ambos. Esta técnica se describe brevemente durante el tutorial de GAUL

A veces es útil usar un algoritmo genético para entrenar una red neuronal cuando su función objetivo no es continua.

No estoy seguro de si debe usar un algoritmo genético para esto.

Supongo que la población de solución inicial para su algoritmo genético consistiría en conjuntos de entrenamiento para su red neuronal (dado un método de entrenamiento específico). Por lo general, la población de soluciones iniciales consiste en soluciones aleatorias a su problema. Sin embargo, los conjuntos de entrenamiento aleatorio realmente no entrenarían su red neuronal.

El algoritmo de evaluación para su algoritmo genético sería un promedio ponderado de la cantidad de entrenamiento necesario, la calidad de la red neuronal para resolver un problema específico y el número de nodos ocultos.

Por lo tanto, si ejecuta esto, obtendría el conjunto de entrenamiento que ofreció el mejor resultado en términos de calidad de la red neuronal (= tiempo de entrenamiento, número de nodos ocultos, capacidades de resolución de problemas de la red).

¿O estás considerando un enfoque completamente diferente?

No estoy del todo seguro con qué tipo de problema estás trabajando, pero GA parece un poco exagerado aquí. Dependiendo del rango de parámetros con los que esté trabajando, una búsqueda exhaustiva (o no inteligente) puede funcionar. Intente trazar el rendimiento de su NN con respecto a la cantidad de nodos ocultos para unos primeros valores, comenzando con pequeños y saltando en incrementos cada vez mayores. En mi experiencia, muchos NN se estancan en rendimiento sorprendentemente temprano; es posible que pueda tener una buena idea de qué rango de números de nodos ocultos tiene más sentido.

Lo mismo es a menudo cierto para las iteraciones de entrenamiento de NNs. Más capacitación ayuda a las redes hasta cierto punto, pero pronto deja de tener mucho efecto.

En la mayoría de los casos, estos parámetros NN no afectan el rendimiento de una manera muy compleja. En general, aumentarlos aumenta el rendimiento por un tiempo, pero luego los rendimientos disminuyen. GA no es realmente necesario para encontrar un buen valor en este tipo de curva simple; Si el número de nodos ocultos (o iteraciones de entrenamiento) realmente hace que el rendimiento fluctúe de una manera complicada, entonces las metaheurísticas como GA pueden ser aptas. Pero pruebe el enfoque de fuerza bruta antes de tomar esa ruta.

Tendería a decir que los algoritmos genéticos son una buena idea, ya que puedes comenzar con una solución mínima y aumentar el número de neuronas. Es muy probable que la " función de calidad " para el que desea encontrar el punto óptimo es suave y tiene solo algunos golpes.

Si tiene que encontrar este NN óptimo con frecuencia, recomendaría usar algoritmos de optimización y, en su caso, cuasi newton como se describe en recetas numéricas, lo cual es óptimo para problemas donde la función es costosa de evaluar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top