Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/es-419/agents/tutorials/0_intro_rl.ipynb
25118 views
Kernel: Python 3
#@title Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License.

Introducción

El Aprendizaje por Refuerzo (RL) es un marco general en el que los agentes aprenden a ejecutar acciones en un entorno con el fin de maximizar una recompensa. Los dos componentes principales son el entorno, que representa el problema a resolver, y el agente, que representa el algoritmo de aprendizaje.

El agente y el entorno interactúan constantemente entre sí. En cada paso de tiempo, el agente toma una acción en el entorno con base en su política π(atst)\pi(a_t|s_t), donde sts_t es la observación actual del entorno, y recibe una recompensa rt+1r_{t+1} y la siguiente observación st+1s_{t+1} del entorno. El objetivo es mejorar la política para maximizar la suma de recompensas (rendimiento).

Nota: Es importante distinguir entre el state del entorno y la observation, que es la parte del state del entorno que el agente puede ver, por ejemplo, en un juego de póquer, el estado del entorno está compuesto por las cartas de todos los jugadores y las cartas de la comunidad, pero el agente solo puede observar sus propias cartas y algunas de las cartas de la comunidad. En la mayoría de la literatura, estos términos se utilizan indistintamente y la observación también se denota como ss.

Bucle de interacción agente-entorno

Se trata de un marco muy general y puede modelar una gran variedad de problemas de toma de decisiones secuenciales, como juegos, robótica, etc.

El entorno Cartpole

El entorno Cartpole es uno de los problemas clásicos de aprendizaje por refuerzo más conocidos (el "¡Hola, mundo!" del RL). Hay un poste unido a un carro, que puede moverse a lo largo de una pista sin fricción. El poste comienza en posición vertical y el objetivo es evitar que se caiga controlando el carro.

  • La observación del entorno sts_t es un vector en 4D que representa la posición y la velocidad del carro, y el ángulo y la velocidad angular del poste.

  • El agente puede controlar el sistema al tomar una de 2 medidas ata_t: empujar el carro a la derecha (+1) o a la izquierda (-1).

  • Se proporciona una recompensa rt+1=1r_{t+1} = 1 por cada paso de tiempo que el poste permanezca en posición vertical. El episodio termina cuando se cumple una de las siguientes condiciones:

    • el poste se inclina por encima de algún ángulo límite

    • el carro se mueve fuera de los límites del mundo

    • pasan 200 pasos de tiempo.

El objetivo del agente es aprender una política π(atst)\pi(a_t|s_t) para maximizar la suma de recompensas de un episodio \sum_{t=0}^{T} \gamma^t r_t.Aquıˊ. Aquí \gammaesunfactordedescuentoen es un factor de descuento en [0, 1]$ que descuenta las recompensas futuras en relación con las inmediatas. Este parámetro nos ayuda a centrar la política, de manera que se preocupe más por obtener recompensas rápidamente.

El agente DQN

El algoritmo DQN (Deep Q-Network) fue desarrollado en 2015 por DeepMind. Fue capaz de resolver una amplia gama de juegos Atari (algunos a un nivel de superhombre) gracias a la combinación de aprendizaje por refuerzo y redes neuronales profundas a escala. El algoritmo se desarrolló mejorando un algoritmo clásico de RL llamado Q-Learning con redes neuronales profundas y una técnica conocida como repetición de experiencia.

Q-Learning

Q-Learning se basa en la noción de función Q. La función Q (también conocida como función de valor estado-acción) de una política π\pi, Qπ(s,a)Q^{\pi}(s, a), mide el rendimiento esperado o la suma descontada de las recompensas obtenidas a partir del estado ss al tomar primero la acción aa y seguir después por la política π\pi. Definimos la función Q óptima Q(s,a)Q^*(s, a) como el rendimiento máximo que puede obtenerse a partir de la observación ss, ejecutando la acción aa y siguiendo la política óptima a partir de entonces. La función Q óptima obedece a la siguiente ecuación de optimalidad de Bellman:

$\begin{equation}Q^\ast(s, a) = \mathbb{E}[ r + \gamma \max_{a'} Q^\ast(s', a') ]\end{equation}$

Esto significa que el rendimiento a partir del estado ss y la acción aa corresponde a la suma de recompensas inmediatas rr y el rendimiento (descontado por γ\gamma) que se obtiene al seguir la política óptima desde allí en adelante hasta el final del episodio (es decir, la recompensa máxima del siguiente estado ss'). La expectativa se calcula tanto sobre la distribución de recompensas inmediatas rr como sobre los posibles estados posteriores ss'.

La idea básica de Q-Learning consiste en utilizar la ecuación de optimalidad de Bellman como actualización iterativa Qi+1(s,a)E[r+γmaxaQi(s,a)]Q_{i+1}(s, a) \leftarrow \mathbb{E}\left[ r + \gamma \max_{a'} Q_{i}(s', a')\right], y se puede demostrar que esto converge a la función óptima QQ, es decir, QiQQ_i \rightarrow Q^* como ii \rightarrow \infty (consulte el estudio sobre DQN).

Deep Q-Learning

Para la mayoría de los problemas, no resulta práctico representar la función QQ como una tabla con valores para cada combinación de ss y aa. Por ello, entrenamos un aproximador de funciones, como una red neuronal con parámetros θ\theta, para estimar los valores de Q,esdecir,, es decir, Q(s, a; \theta) \approx Q^*(s, a).Estopuedehacersemediantelaminimizacioˊndelasiguientepeˊrdidaencadapaso. Esto puede hacerse mediante la minimización de la siguiente pérdida en cada paso i$:

ParseError: KaTeX parse error: {equation} can be used only in display mode. donde yi=r+γmax/em0aQ(s,a;θi1)y_i = r + \gamma \max{/em0}{a'} Q(s', a'; \theta_{i-1})

Aquí, yiy_i se denomina objetivo de TD (diferencia temporal), y yiQy_i - Q se denomina error de TD. ρ\rho representa la distribución del comportamiento, la distribución sobre las transiciones s,a,r,s{s, a, r, s'} obtenidas del entorno.

Tenga en cuenta que los parámetros de la iteración anterior θi1\theta_{i-1} son fijos y no se actualizan. En la práctica se utiliza una instantánea de los parámetros de la red de unas pocas iteraciones atrás en lugar de la última iteración. Esta copia se denomina red objetivo.

Q-Learning es un algoritmo off-policy que aprende sobre la política codiciosa a=maxaQ(s,a;θ)a = \max_{a} Q(s, a; \theta) mientras emplea una política de comportamiento diferente para actuar en el entorno o recopilar datos. Esta política de comportamiento generalmente es una política ϵ\epsilon-greedy que selecciona una acción codiciosa con probabilidad 1ϵ1-\epsilon y una acción aleatoria con probabilidad ϵ\epsilon para garantizar una buena cobertura del espacio estado-acción.

Repetición de experiencia

Para evitar la necesidad de calcular la expectativa completa en la pérdida DQN, podemos minimizarla mediante el uso del descenso de gradiente estocástico. Si la pérdida se calcula solo con la última transición s,a,r,s{s, a, r, s'}, esto se reduce al Q-Learning estándar.

El estudio DQN de Atari introdujo una técnica llamada Repetición de Experiencia para que las actualizaciones de red fueran más estables. En cada paso de tiempo de la recopilación de datos, las transiciones se agregan a un búfer circular denominado búfer de repetición. Luego, durante el entrenamiento, en lugar de usar solo la última transición para calcular la pérdida y su gradiente, lo calculamos con ayuda de un minilote de transiciones extraídas del búfer de repetición. Esto tiene dos ventajas: una mayor eficiencia de los datos que se genera al reutilizar cada transición en muchas actualizaciones, y una mayor estabilidad como consecuencia de utilizar transiciones no correlacionadas en un lote.

DQN en Cartpole con TF-Agents

TF-Agents ofrece todos los componentes necesarios para entrenar un agente DQN, como el mismísimo agente, el entorno, las políticas, las redes, los búferes de repetición, los bucles de recopilación de datos y las métricas. Estos componentes se implementan como funciones de Python u operaciones gráficas de TensorFlow, y también disponemos de envoltorios para realizar conversiones entre ellos. Además, TF-Agents es compatible con el modo TensorFlow 2.0, que nos permite utilizar TF en modo imperativo.

A continuación, echemos un vistazo al tutorial de entrenamiento del agente DQN en el entorno Cartpole mediante el uso de TF-Agents.