una tipos simple resueltos redes paso neuronales neuronal inteligencia hacer ejercicios ejemplos como artificial algoritmo java computer-science artificial-intelligence theory neural-network

java - tipos - redes neuronales ejemplos



Impulsando mi GA con redes neuronales y/o aprendizaje de refuerzo (3)

Como mencioné en preguntas anteriores, estoy escribiendo una aplicación de resolución de laberintos para ayudarme a aprender sobre temas CS más teóricos, después de algunos problemas tengo un algoritmo genético trabajando que puede desarrollar un conjunto de reglas (manejadas por valores booleanos) en orden para encontrar una buena solución a través de un laberinto.

Una vez dicho esto, solo la AG está bien, pero me gustaría reforzarlo con una red neuronal, a pesar de que no tengo un verdadero conocimiento práctico de las redes neuronales (no hay una educación teórica formal de CS). Después de leer un poco sobre el tema, descubrí que se podría usar una red neuronal para entrenar un genoma a fin de mejorar los resultados. Digamos que tengo un genoma (grupo de genes), como

1 0 0 1 0 1 0 1 0 1 1 1 0 0...

¿Cómo podría usar una red neuronal (supongo que MLP?) Para entrenar y mejorar mi genoma.

Además de esto, como no sé nada sobre Redes neuronales, he estado buscando implementar alguna forma de Aprendizaje de refuerzo, utilizando mi matriz de laberinto (matriz bidimensional), aunque estoy un poco atascado en lo que el siguiente algoritmo quiere de mí:

(de http://people.revoledu.com/kardi/tutorial/ReinforcementLearning/Q-Learning-Algorithm.htm )

1. Set parameter , and environment reward matrix R 2. Initialize matrix Q as zero matrix 3. For each episode: * Select random initial state * Do while not reach goal state o Select one among all possible actions for the current state o Using this possible action, consider to go to the next state o Get maximum Q value of this next state based on all possible actions o Compute o Set the next state as the current state End Do End For

El gran problema para mí es implementar una matriz de recompensas R y lo que exactamente es una matriz Q, y obtener el valor Q. Utilizo una matriz multidimensional para mi laberinto y estados enum para cada movimiento. ¿Cómo se usaría esto en un algoritmo Q-Learning?

Si alguien pudiera ayudarme explicando lo que tendría que hacer para implementar lo siguiente, preferiblemente en Java, aunque C # también sería bueno, posiblemente con algunos ejemplos de código fuente sería apreciado.


Como se señaló en algunos comentarios, su pregunta de hecho involucra un gran conjunto de conocimientos básicos y temas que difícilmente pueden cubrirse de manera elocuente en . Sin embargo, lo que podemos probar aquí es sugerir enfoques para evitar su problema.

Antes que nada: ¿qué hace tu GA? Veo un conjunto de valores binarios; ¿Qué son? Los veo como cualquiera de los dos:

  • malo : una secuencia de instrucciones ''girar a la derecha'' y ''girar a la izquierda''. ¿Por qué es esto malo? Porque básicamente estás haciendo un intento aleatorio de fuerza bruta para resolver tu problema. No estás evolucionando un genotipo: estás refinando conjeturas al azar.
  • mejor : cada gen (ubicación en el genoma) representa una característica que se expresará en el fenotipo. ¡No debería haber una asignación de 1 a 1 entre el genoma y el fenotipo!

Déjame darte un ejemplo: en nuestro cerebro hay 10 ^ 13 neuronas. Pero solo tenemos alrededor de 10 ^ 9 genes (sí, no es un valor exacto, desnudo conmigo por un segundo). ¿Qué nos dice esto? Que nuestro genotipo no codifica todas las neuronas. Nuestro genoma codifica las proteínas que irán y formarán los componentes de nuestro cuerpo.

Por lo tanto, la evolución funciona en el genotipo directamente mediante la selección de características del fenotipo. Si tuviera 6 dedos en cada mano y si eso me hiciera un mejor programador, haciéndome tener más hijos porque tengo más éxito en la vida, bueno, mi genotipo sería seleccionado por la evolución porque contiene la capacidad de dame un cuerpo más en forma (sí, hay un juego de palabras allí, dada la proporción geekiness-to-reproducibily promedio de la mayoría de las personas por aquí).

Ahora, piense en su AG: ¿qué es lo que está tratando de lograr? ¿Estás seguro de que las reglas en evolución ayudarían? En otras palabras, ¿cómo actuarías en un laberinto? ¿Cuál es la cosa más exitosa que puede ayudarte: tener un cuerpo diferente o tener un recuerdo del camino correcto para salir? Quizás desee reconsiderar su genotipo y codificar las capacidades de memorización . Tal vez codifique en el genotipo la cantidad de datos que se pueden almacenar y cuán rápido pueden acceder sus agentes; luego, mida la aptitud en términos de qué tan rápido salen del laberinto. Otro enfoque (más débil) podría ser codificar las reglas que usa su agente para decidir a dónde ir. El mensaje para llevar a casa es codificar características que, una vez expresadas, pueden seleccionarse por estado físico.

Ahora, al problema de la red neuronal. Una cosa para recordar es que los NN son filtros . Ellos reciben una entrada. realizar operaciones en él y devolver una salida. ¿Qué es esta salida? Tal vez solo necesites discriminar una condición verdadera / falsa; por ejemplo, una vez que alimenta un mapa de laberinto a una NN, puede decirle si puede salir del laberinto o no. ¿Cómo harías tal cosa? Deberá codificar los datos correctamente.

Este es el punto clave sobre NN: sus datos de entrada deben estar codificados correctamente. Por lo general, las personas lo normalizan, tal vez lo escalan, quizás pueda aplicarle una función sigma para evitar valores demasiado grandes o demasiado pequeños; esos son detalles que se ocupan de las medidas de error y el rendimiento. Lo que debes entender ahora es qué es una NN y para qué no puedes usarla.

Para tu problema ahora. Usted mencionó que quiere usar NN también: ¿qué tal,

  • usando una red neuronal para guiar al agente, y
  • usando un algoritmo genético para desarrollar los parámetros de la red neuronal?

Reformulado así:

  • supongamos que tiene un robot: su NN está controlando las ruedas izquierda y derecha, y como entrada recibe la distancia de la siguiente pared y cuánto ha viajado hasta el momento (es solo un ejemplo)
  • comienzas por generar un genotipo aleatorio
  • convertir el genotipo en un fenotipo: el primer gen es la sensibilidad de la red; el segundo gen codifica la relación de aprendizaje; el tercer gen ... y así sucesivamente
  • ahora que tienes una red neuronal, ejecuta la simulación
  • ver cómo funciona
  • generar un segundo genotipo aleatorio, evolucionar segundo NN
  • ver cómo este segundo individuo realiza
  • obtener el mejor individuo, luego mutar su genotipo o recombinarlo con el perdedor
  • repetir

hay una lectura excelente sobre el asunto aquí: Inman Harvey Microbial GA .

Espero haberles hecho algunas ideas sobre estos temas. Los NN y GA no son una solución mágica para resolver todos los problemas. En algunos pueden hacer mucho, en otros son simplemente la herramienta incorrecta. Es (¡todavía!) Depende de nosotros obtener la mejor, y para hacerlo debemos entenderlos bien.

Diviértete! Es genial saber cosas así, hace que la vida cotidiana sea un poco más entretenida :)


Probablemente no haya ''gen laberinto'' para encontrar,

los algoritmos genéticos están tratando de configurar un vector de propiedades y un "sistema de filtrado" para decidir por algún tipo de algoritmo de "supervivencia del más apto" para descubrir qué conjunto de propiedades haría el mejor trabajo.

La forma más fácil de encontrar una salida de un laberinto es moverse siempre a la izquierda (o derecha) a lo largo de una pared.

El Algoritmo Q parece tener un problema con los máximos locales, esto fue una solución, como recuerdo, pateando (agregando valores aleatorios a la matriz) si los resultados no mejoraban.

EDITAR: Como se mencionó anteriormente, un algoritmo de retroceso satisface mejor esta tarea que GA o NN. Cómo combinar ambos algoritmos se describe aquí. NeuroGen describe cómo se usa GA para entrenar a un NN.


  • Intente utilizar la biblioteca gratuita de código abierto NerounDotNet C # para sus redes neuronales en lugar de implementarla.

  • Para la biblioteca de refuerzo de aprendizaje, actualmente estoy buscando uno, especialmente para el marco Dot NET ..