He estado leyendo el artículo de DeepMind Atari de Google y estoy intentando para comprender el concepto de «repetición de experiencias». La repetición de experiencias aparece en muchos otros artículos de aprendizaje por refuerzo (en particular, el artículo de AlphaGo), por lo que quiero entender cómo funciona. A continuación se muestran algunos extractos.
Primero, usamos un mecanismo inspirado biológicamente llamado reproducción de experiencias que aleatoriza los datos, eliminando así las correlaciones en la secuencia de observación y suavizando los cambios en la distribución de datos.
El documento luego elabora lo siguiente:
Si bien existen otros métodos estables para entrenar redes neuronales En el entorno de aprendizaje por refuerzo, como la iteración Q neural ajustada, estos métodos implican el entrenamiento repetido de redes de novo cientos de iteraciones. En consecuencia, estos métodos, a diferencia de nuestro algoritmo, son demasiado ineficaz para ser utilizado con éxito con grandes redes neuronales. Parametrizamos una función de valor aproximado $ Q (s, a; \ theta_i) $ usando la red neuronal convolucional profunda que se muestra en la Fig. 1, en la que $ \ theta_i $ son los parámetros (es decir, pesos) de la red Q en la iteración $ i $ . Para realizar la reproducción de experiencias, almacenamos las experiencias del agente $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ en cada paso de tiempo $ t $ en un conjunto de datos $ D_t = \ {e_1, \ dots, e_t \} $ . Durante aprendizaje, aplicamos actualizaciones de Q-learning, en muestras (o mini lotes) de experiencia $ (s, a, r, s «) \ sim U (D) $ , extraídos uniformemente al azar del conjunto de muestras almacenadas. La actualización de Q-learning en la iteración $ i $ usa la siguiente función de pérdida:
$$ L_i (\ theta_i) = \ mathbb {E} _ {(s, a, r, s «) \ sim U (D)} \ left [\ left (r + \ gamma \ max_ {a»} Q (s «, a «; \ theta_i ^ -) – Q (s, a; \ theta_i) \ right) ^ 2 \ right] $$
¿Qué es la repetición de experiencias y cuáles son sus beneficios, en términos sencillos?
Respuesta
La parte clave del El texto entre comillas es:
Para realizar la reproducción de la experiencia, almacenamos las experiencias del agente $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $
Esto significa que en lugar de ejecutar Q-learning en pares de estado / acción a medida que ocurren durante la simulación o la experiencia real, el sistema almacena los datos descubiertos para [estado, acción, recompensa, estado_siguiente]: normalmente en una tabla grande. Tenga en cuenta que esto no almacena valores asociados; estos son los datos sin procesar que se incorporarán a los cálculos de valores de acción más adelante.
La fase de aprendizaje se separa lógicamente de la adquisición de experiencia y se basa en tomar muestras aleatorias de esta tabla. Aún desea intercalar los dos procesos, actuar y aprender, porque la mejora de la política conducirá a comportamientos diferentes que deberían explorar acciones más cercanas a las óptimas, y desea aprender de ellas. Sin embargo, puede dividir esto como desee, p. Ej. dar un paso, aprender de tres pasos anteriores aleatorios, etc. Los objetivos de Q-Learning cuando se usa la reproducción de experiencia usan los mismos objetivos que la versión en línea, por lo que no hay una fórmula nueva para eso. La fórmula de pérdida proporcionada es también la que usaría para DQN sin la repetición de experiencia. La diferencia es solo cuáles s, a, r, s «, a» usted alimenta.
En DQN, el equipo de DeepMind también mantuvo dos redes y cambió cuál era aprendizaje y cuál alimenta las estimaciones de valores de acción actuales como «bootstraps». Esto ayudó con la estabilidad del algoritmo cuando se usaba un aproximador de función no lineal. Eso es lo que representa la barra en $ {\ theta} ^ {\ overline {\ space}} _ i $: denota la versión alternativa congelada de los pesos.
Ventajas de la repetición de la experiencia:
-
Uso más eficiente de la experiencia anterior, al aprender con ella varias veces. Esto es clave cuando obtener una experiencia del mundo real es costoso, puede aprovechar al máximo Las actualizaciones de Q-learning son incrementales y no convergen rápidamente, por lo que múltiples pasadas con los mismos datos son beneficiosas, especialmente cuando hay poca variación en los resultados inmediatos (recompensa, siguiente estado) dado el mismo estado, par de acciones.
-
Mejor comportamiento de convergencia al entrenar un aproximador de función. En parte, esto se debe a que los datos son más parecidos a los datos de iid asumidos en la mayoría de las pruebas de convergencia de aprendizaje supervisado.
Desventaja de la reproducción de experiencias:
- Es más difícil usar algoritmos de aprendizaje de varios pasos, como Q ($ \ lambda $) , que se puede ajustar para ofrecer mejores curvas de aprendizaje mediante el equilibrio entre el sesgo (debido al bootstrapping) y la varianza (debido a retrasos y aleatoriedad en los resultados a largo plazo). DQN de varios pasos con experiencia de repetición DQN es una de las extensiones exploradas en el artículo Rainbow: Combinando mejoras en el aprendizaje por refuerzo profundo .
El enfoque utilizado en DQN es brevemente descrito por David Silver en partes de esta conferencia en video (alrededor de las 01:17: 00, pero vale la pena ver las secciones anteriores). Recomiendo ver la serie completa, que es un curso de posgrado sobre aprendizaje por refuerzo, si tiene tiempo.
Comentarios
- Let ‘ s dicen que durante la capacitación estamos en un estado y tomamos una acción de acuerdo con la política de codicia épsilon y usted termina en otro estado. Entonces obtienes recompensas y el siguiente estado. Aquí, la recompensa puede ser la puntuación del juego y los estados pueden ser los patrones de píxeles en la pantalla. Y luego tomamos el error entre nuestro aproximador de función y el valor que obtuvimos de la política codiciosa nuevamente usando el aproximador de función ya congelado. Pero con la reproducción de la experiencia al optimizar el aproximador, tomamos un conjunto de datos de acción de estado aleatorio. ¿Estoy en lo cierto?
- @ShamaneSiriwardhana: Sí, creo que tienes razón. Son exactamente los mismos datos de la trayectoria real, pero en lugar de aprender solo del paso más reciente, lo guarda en una tabla grande y muestra de esa tabla (generalmente varias muestras, con un almacenamiento de miles de pasos anteriores para elegir) ). Si necesita más aclaraciones, quizás haga una pregunta en el sitio.
- Sí, revisé el documento nuevamente. También dice que este método también puede mejorar el aprendizaje fuera de las políticas. Porque en Q, el aprendizaje con actúa de acuerdo con la política épsilon-codiciosa, pero los valores de actualización funcionan de acuerdo con la política codiciosa. Entonces, cuando cada paso de tiempo, nuestros parámetros de red neuronal se actualizan mediante estadísticas de mini lotes, lo que es más importante, no está relacionado con las estadísticas de pasos de tiempo exactos, pero lo que sucedió antes de esto también ayuda a descorrelacionar los datos.
- @Neil Slater, yo ‘ he revisado el artículo de Rainbow y no ‘ vi ningún comentario especial sobre el uso de un truco especial para combinar la reproducción de experiencias y método paso a paso. También ‘ he oído que el método de varios pasos es originalmente imposible de combinar con la repetición de experiencias, pero ¿por qué no elegir al azar n experiencias consecutivas en lugar de 1 de la repetición de experiencias, sino de la repetición? que entre cada n-experiencias, no se encontraron correlaciones? ¿No es ‘ t esta repetición de la experiencia de varios pasos?
- @NeilSlater ¿Por qué es » más difícil de usar algoritmos de aprendizaje por pasos «? ¿Qué quisiste decir?
Respuesta
El algoritmo (o al menos una versión del mismo, como se implementó en el proyecto final de Coursera RL ) es el siguiente:
-
Cree un «búfer» de reproducción que almacene el último
#buffer_size
SARS (Estado, Acción, Recompensa, Nuevo Estado) experiencias. -
Ejecute su agente y deje que acumule experiencias en el búfer de reproducción hasta que (el búfer) tenga al menos
#batch_size
experiencias .- Puede seleccionar acciones de acuerdo con una política determinada (por ejemplo, soft-max para espacio de acción discreto, Gaussian para continuo, etc.) sobre su $ Estimador de funciones \ hat {Q} (s, a; \ theta) $ .
-
Una vez que llega a
#batch_size
, o más:-
hacer una copia del estimador de funciones ( $ \ hat {Q} (s, a; \ theta) $ ) en el momento actual, es decir, una copia de los pesos $ \ theta $ , que «congela» y no «actualiza», y utilizar para calcular los estados «verdaderos» $ \ hat {Q} (s «, a»; \ theta) $ . Ejecutar para
num_replay
actualizaciones:-
muestra
#batch_size
experiencias del búfer de reproducción. -
Utilice las experiencias de muestra para pr Realice una actualización por lotes de su estimador de funciones (p. ej. en Q-Learning donde $ \ hat {Q} (s, a) = $ Red neuronal: actualice los pesos de la red). Utilice los pesos congelados como la función de valores de acción «verdaderos», pero continúe mejorando la función no congelada.
-
-
haga esto hasta que alcanzar un estado terminal.
-
No olvide agregar constantemente las nuevas experiencias al búfer de reproducción
-
-
Ejecute tantos episodios como necesite.
Lo que quiero decir con «verdadero»: cada experiencia se puede considerar como un dúo de aprendizaje «supervisado», donde tienes una función de valor verdadero $ Q (s, a) $ y un estimador de funciones $ \ hat {Q} (s, a) $ . Su objetivo es reducir el error de valor, p. Ej. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Dado que probablemente no tenga acceso a los valores de acción true , en su lugar utilice una versión mejorada de arranque del último estimador , teniendo en cuenta la nueva experiencia y la recompensa dada. En Q-learning, el valor de acción «verdadero» es $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a «} \ hat {Q} (s», a «; \ theta) $ donde $ R $ es la recompensa y $ \ gamma $ es el factor de descuento.
Aquí hay un extracto del código:
def agent_step(self, reward, state): action = self.policy(state) terminal = 0 self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state) if self.replay_buffer.size() > self.replay_buffer.minibatch_size: current_q = deepcopy(self.network) for _ in range(self.num_replay): experiences = self.replay_buffer.sample() optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau) self.last_state = state self.last_action = action return action