¿Puede una sola red neuronal de capa oculta aprender a jugar Atari Pong desde píxeles sin formato de un solo cuadro?

Para pasar del píxel sin procesar, una capa oculta no lo haría.

En su implementación, está utilizando la red neuronal para representar la función Q. Si te estás acercando a esto desde píxeles en bruto, incluso para un juego visualmente simple como el pong, una capa oculta no es suficiente para aprender la representación dentro de los píxeles. Le está pidiendo al NN que aprenda qué es una pelota, qué significa cada una de las dos posiciones del tablero, cómo se moverá después del golpe, etc. dentro de una capa oculta, esto no sería lo suficientemente profundo.

Sugiero al menos 2 capas ocultas, preferiblemente capas de convolución.

Otras cosas que también debe considerar que ayudarían a su entrenamiento y convergencia en la red es usar la repetición de la experiencia (almacenar sus pares de acción de estado y muestrear aleatoriamente de esta memoria de experiencia durante la actualización de su red en lugar de entrenar directamente en los píxeles secuenciales que obtiene al jugar). Esto ayuda a evitar la deriva que sucedería si entrenaras en píxeles de juego secuenciales directos, debido a la alta correlación entre estados secuenciales. (Puede pensar en este paso como esencialmente convertirlo en capacitación supervisada, con actualizaciones de muestreo aleatorias)

Otra forma de ayudar es utilizar una red de destino. Esta es esencialmente una copia de su red Q para la cual su actualización de peso está retrasada para algunas instancias de entrenamiento, para proporcionar una señal de error más estable. (piense que si actualiza su red Q después de cada instancia de entrenamiento, su error MSE durante el entrenamiento oscilará enormemente, al mantener constante una copia antigua de los pesos de su red Q y usarla para calcular el error MSE, las actualizaciones de gradiente son menos oscilatorias y más estable).

Como otros han mencionado para probar que toda su implementación es correcta, primero puede entrenar una red superficial en una representación de estado de abstracción de nivel superior. Entonces, en lugar de píxeles sin procesar, usa la ubicación de la pelota y los tableros como estado en la red poco profunda. En este caso, probablemente debería funcionar con una capa oculta. Si esto funciona, puede cambiar su red a un covnet más profundo y usar píxeles sin procesar como entradas de estado

Editar: por último, no estoy seguro de cuál es la frecuencia de video de su emulador, pero recuerdo el DQN de deepmind entrenado en 4 cuadros anteriores en lugar de uno, simplemente porque muchas veces nada cambia mucho de cuadro a cuadro. El uso de más marcos puede ayudar a su entrenamiento de red

Editar: me equivoqué en las funciones que puede resolver, me confundí con el modelo knn. Editado para mayor precisión.

Una red neuronal (perceptrones) sin capa oculta puede resolver cualquier función separable lineal. Con una capa oculta, puede resolver cualquier función continua, matemáticamente hablando.

Es posible que se quede atascado en un mínimo local, de modo que su propagación hacia atrás no llegue a soluciones más óptimas, simplemente comience con nuevos conjuntos de pesos aleatorios e intente nuevamente.

Suponga que no se trata del mínimo local. La pregunta más importante que debe hacer es si la lógica ganadora de pong puede representarse con una sola función.

Además, ¿tiene las entradas correctas, el tiempo correcto en las salidas?

¿Tomó en cuenta el ángulo de la pelota que deja su paleta como entrada? ¿La posición de la paleta del oponente, su posición con respecto al tiempo?

Todo esto afecta tu juego y tus posibilidades de ganar.

También puede intentar crear redes separadas, siendo el tiempo la misma entrada para cada ronda y hacer que cada uno aprenda una “función” diferente.

Intente agregar una entrada cero o una, para fines de autoajuste.

Con mi experiencia, siento que su red puede jugar pong decentemente usando una capa oculta de nodos, no necesitaría más de una capa.

Editar:
Me acabo de dar cuenta de que estás haciendo que la red aprenda el juego a través de píxeles, sí, eso no va a funcionar. No creo que esté representando el problema a la IA correctamente. No estoy seguro de cuáles son sus entradas, pero es posible que desee probar simplemente ingresando:
x posición de la pelota
Posición Y de la pelota
Dirección de la pelota
Velocidad de la pelota
Posición opuesta de la paleta
Posición actual de autopaleta
Ángulo de bola (con respecto a la línea horizontal)
Altura máxima de la pelota
Altura mínima de la pelota
Auto puntuación
Puntaje del oponente
Min x posición de la pelota
Max x posición de la pelota
Cambio de velocidad de la pelota con respecto a la ronda anterior.
Cambio de ángulo de bola wrt prev ronda
Se permite un cambio máximo en la pala en un período de tiempo determinado.
Quizás algunas otras entradas que consideres adecuadas

Salida: cambio en la posición y del tiempo de remo de la pala.

El error es más difícil de resolver. No es simplemente el puntaje, sino la probabilidad general de que anote o al menos desvíe el balón. Tienes que encontrar una función de utilidad para eso, como experto en pong.

En este sentido, no es más simple que el ajedrez o ir. En el ajedrez, no se puede decir “estoy solo con el rey, lo moví un cuadrado a la izquierda y perdí, así que el error es que debería haber movido al rey un cuadrado a la derecha”. Probablemente no deberías haber permitido que tu reina fuera capturada hace 50 movimientos gratis. Una vez que eso suceda, la red turística necesita saber que ocurrió un gran error a pesar de que aún no has perdido el juego.

Si usa píxeles, entonces la IA tiene que aprender qué píxel es el oponente, cuál es la bola, cuál es uno mismo, cómo se relaciona el píxel de la bola con el píxel nulo frente al píxel del borde frente al píxel de paleta ANTES de que pueda comenzar a aprender el juego. Eso no puede ser representado por una sola función.

Esto debería ser bastante sencillo, ya que es solo una prueba de velocidad.

No está claro cómo ha configurado la red, qué controla y si le ha dado una entrada retrasada.

La red necesita la posición y la velocidad de la pelota y luego coincide con la posición vertical.

Si tiene una neurona de entrada para cada posición vertical y una salida para cada posición vertical, vea si puede entrenarla para que funcione.

Si logra que coincida, entonces está a medio camino.