8

Como he mencionado 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 que funciona puede desarrollar un conjunto de reglas (manejadas por valores booleanos) para encontrar una buena solución a través de un laberinto.Aumento de mi GA con redes neuronales y/o aprendizaje de refuerzo

Habiendo dicho eso, el GA por sí solo 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 (ninguna 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 (conjunto de genes), tales como

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

¿Cómo podría utilizar una red neuronal (estoy asumiendo MLP?) Para entrenar y mejorar mi genoma?

Además de esto, como no sé nada sobre Redes neuronales, he estado buscando implementar algún tipo de Aprendizaje de refuerzo, usando 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í está implementando una matriz de recompensa R y lo que es una matriz Q es exactamente, y obtener el valor de 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 me puede ayudar explicando lo que tendría que hacer para implementar lo siguiente, preferiblemente en Java, aunque C# sería bueno también, posiblemente con algunos ejemplos de código fuente sería apreciado.

+1

Este es un tema muy complejo. Las mismas cosas de las que está hablando generalmente se abordan en un semestre completo de un curso universitario de AI. No estoy seguro de que realmente puedan abordarse correctamente en una pregunta de Stackoverflow, pero ciertamente me interesaría ver a la gente intentarlo. Nunca me detuve por completo con algunos de estos algoritmos. –

+0

En una nota lateral, si está dispuesto a gastar algo de dinero en efectivo en un libro de texto realmente bueno sobre el tema, entonces le sugiero: http://www.amazon.com/Artificial-Intelligence-Modern- Approach-3rd/dp/0136042597/ref = sr_1_1? Ie = UTF8 & s = books & qid = 1268837913 & sr = 1-1 –

+0

He echado un vistazo a ese libro un par de veces y aunque da un trasfondo teórico decente de la comprensión del sujeto cómo se puede implementar me está matando . Si alguien pudiera simplemente escribir una solución básica que funcionaría dada la información que he proporcionado, incluso si está en un pseudocódigo, estaría encantado de intentar implementarlo y dar una respuesta aceptada. – AlexT

Respuesta

3

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

Antes que nada: ¿qué hace su GA? Veo un conjunto de valores binarios; ¿Qué son? Los veo como sea:

  • mal: una secuencia de 'girar a la derecha' y 'gire a la izquierda' instrucciones. ¿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éjeme darle un ejemplo: en nuestro cerebro hay 10^13ish 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 cada neurona. 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 seleccionando 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 evolución porque contiene la capacidad para darme 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 GA: ¿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 se desempeñaría 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 capacidad 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, para el 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 alimentas un mapa de laberinto a una NN, puede decirte si puedes salir del laberinto o no. ¿Cómo harías tal cosa? Necesitará 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 su problema ahora. Usted ha mencionado que desea utilizar NN así: ¿qué pasa,

  • utilizando una red neuronal para guiar el agente, y
  • usando un algoritmo genético para evolucionar los parámetros de la red neural?

reformulado así:

  • supongamos que usted tiene un robot: su NN es el control de la rueda izquierda y derecha, y como entrada que recibe la distancia de la pared siguiente y lo mucho que ha viajado hasta ahora (es solo un ejemplo)
  • empiezas por generar un genotipo aleatorio
  • hacen que el genotipo sea fenotipo: el primer gen es la sensibilidad de la red; el segundo gen codifica la relación de aprendizaje; el tercer gen .. así sucesivamente y así sucesivamente
  • ahora que tiene una red neuronal, ejecutar la simulación
  • ver cómo se realiza
  • generar un segundo genotipo aleatorio, evolucionar segundo NN
  • ver cómo esta segunda individuo realiza
  • obtener el mejor individuo, entonces o mutan su genotipo o Recombinate con el perdedor
  • repetición

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

Espero haberles aportado 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 muy bueno saber estas cosas, hace que la vida cotidiana un poco más entretenido :)

+0

Una ligera corrección. Hay aproximadamente 10^9 pares de bases en el genoma humano. Hay alrededor de 20,000 a 25,000 genes.¿Cuántos de eso se necesita para construir un cerebro? No podría decir, – Spike

1

Probablemente no hay 'gen laberinto' de encontrar,

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

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

El algoritmo Q parece tener un problema con local maxima esto fue una solución, como recuerdo, al patear (agregando valores aleatorios a la matriz) si los resultados no mejoraron.

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

0
  • intente utilizar el NerounDotNet fuente en C# biblioteca abierta libre para sus redes neuronales en lugar de su aplicación.

  • Para biblioteca de aprendizaje por refuerzo, actualmente estoy buscando uno, especialmente para marco de la red del punto ..

Cuestiones relacionadas